hy_factory.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. const CMD = {}
  2. const video_product_controllers = require('../src/data_manager/Controllers/video_product_controllers');
  3. const filter_data_controllers = require('../src/data_manager/Controllers/filter_data_controllers');
  4. const video_applet_product_controllers = require('../src/data_manager/Controllers/video_applet_product_controllers');
  5. const redis_help = require('../src/use_redis');
  6. const axios = require('axios');
  7. const config = require('../etc/config.json');
  8. const time_count = 1000;
  9. const task_queue = []
  10. async function processTask(){
  11. let result = null
  12. try{
  13. let isPauseTask = await redis_help.getKeyValue("isPauseTask")
  14. if(isPauseTask=="true"){
  15. return
  16. }
  17. let isInsertTask = false
  18. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  19. FilterConfig = JSON.parse(FilterConfig)
  20. result = await filter_data_controllers.getFilterDataByStatus({ status: 0 ,tg_platform_id: config.platform_heiyan });
  21. if(result.success){
  22. let tg_platform_id = result.data.tg_platform_id
  23. //判断是否存在这本书
  24. if(tg_platform_id==config.platform_heiyan){
  25. let hy_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id });
  26. if(hy_book_result.success){
  27. result.data.words = hy_book_result.data.words
  28. result.data.genre = hy_book_result.data.genre
  29. result.data.book_id = hy_book_result.data.product_id
  30. result.data.book_name = hy_book_result.data.product_name
  31. }else{
  32. isInsertTask = true
  33. }
  34. }
  35. if(!isInsertTask){
  36. await CMD.update_filter_data(FilterConfig,result.data)
  37. }else{
  38. await filter_data_controllers.updateFilterData({id:result.data.id},{status:1})
  39. task_queue.push({result:result})
  40. }
  41. }
  42. }catch(e){
  43. console.error("processTask error:",e)
  44. if(result!=null&&result!=undefined){
  45. await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  46. }
  47. } finally{
  48. global.setTimeout(processTask, 100);
  49. }
  50. }
  51. async function processCreateTask(){
  52. let result = null
  53. try{
  54. if(task_queue.length>0){
  55. let task_queue_item = task_queue.pop()
  56. let product = await video_product_controllers.getProductData({ book_id: task_queue_item.result.data.book_id });
  57. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  58. FilterConfig = JSON.parse(FilterConfig)
  59. if(!product.success){
  60. result = task_queue_item.result
  61. let tg_platform_id = result.data.tg_platform_id
  62. if(tg_platform_id==1){
  63. let hy_book_data = await require('./collect_hy_book').runTask(result.data)
  64. if(hy_book_data.is_c500){
  65. hy_book_data.tg_platform_id = config.platform_heiyanmf
  66. }
  67. if(hy_book_data.genre==1){ //长篇给黑岩免费长篇添加进去
  68. await CMD.insert_product({
  69. book_platform:config.platform_heiyanmf,
  70. product_name:hy_book_data.book_name,
  71. genre:hy_book_data.genre,
  72. product_id:hy_book_data.book_id,
  73. words:hy_book_data.words
  74. })
  75. }
  76. // if(CMD.isGenre(FilterConfig,hy_book_data.genre)){
  77. // await CMD.insert_product(hy_book_data)
  78. // }
  79. await CMD.insert_product(hy_book_data)
  80. result.data.words = hy_book_data.words
  81. result.data.genre = hy_book_data.genre
  82. result.data.book_id = hy_book_data.book_id
  83. result.data.book_name = hy_book_data.book_name
  84. }
  85. }
  86. await CMD.update_filter_data(FilterConfig,result.data)
  87. }
  88. }catch(e){
  89. console.log("error::",e)
  90. if(result!=null){
  91. await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  92. }
  93. console.log("processCreateTask:",e)
  94. } finally{
  95. global.setTimeout(processCreateTask, time_count);
  96. }
  97. }
  98. CMD.init = async function(){
  99. redis_help.connect((results)=>{
  100. if(results){
  101. }
  102. })
  103. processTask();
  104. processCreateTask();
  105. }
  106. CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
  107. let temp = []
  108. for (let index = 0; index < AppConfig.length; index++) {
  109. const element = AppConfig[index];
  110. if(element.tg_platform_id==tg_platform_id){
  111. temp.push(element)
  112. }
  113. }
  114. return temp
  115. }
  116. CMD.isBlackBook = function(all_black_books,book_id){
  117. if(all_black_books==null){
  118. return false
  119. }
  120. for (let index = 0; index < all_black_books.length; index++) {
  121. const black_book = all_black_books[index];
  122. if(black_book.product_id==book_id){
  123. return true
  124. }
  125. }
  126. return false
  127. }
  128. CMD.getMainInfoByAppid = function(MainConfig,app_id){
  129. let list = []
  130. for (let index = 0; index < MainConfig.length; index++) {
  131. const element = MainConfig[index];
  132. if(element.app_id==app_id){
  133. list.push(element)
  134. }
  135. }
  136. return list
  137. }
  138. CMD.isGenre = function(FilterConfig,genre){
  139. let is_need = false
  140. //判断长篇短篇是否是要的数据
  141. for (let index = 0; index < FilterConfig.genre.length; index++) {
  142. const element = FilterConfig.genre[index];
  143. if(genre==element){
  144. is_need = true
  145. break
  146. }
  147. }
  148. return is_need
  149. }
  150. CMD.update_filter_data = async function(FilterConfig,data) {
  151. let isGenre = CMD.isGenre(FilterConfig,data.genre)
  152. // console.log("data.genre:",data.genre,data,isGenre)
  153. if(isGenre){
  154. await filter_data_controllers.updateFilterData({id:data.id},{status:1,book_id:data.book_id,book_name:data.book_name,genre:data.genre,words:data.words})
  155. //创建一个小程序
  156. let AppConfig = await redis_help.getKeyValue("AppConfig")
  157. AppConfig = JSON.parse(AppConfig)
  158. let AppInfoList = CMD.getAppInfoByPlatformId(AppConfig,data.tg_platform_id)
  159. for (let j = 0; j < AppInfoList.length; j++) {
  160. const AppInfo = AppInfoList[j];
  161. data.app_id = AppInfo.app_id
  162. let PlatformInfo = await redis_help.getKeyValue("PlatformConfig")
  163. PlatformInfo = JSON.parse(PlatformInfo)
  164. if(PlatformInfo==null){
  165. return console.error("平台配置错误:",data)
  166. }
  167. let MainConfig = await redis_help.getKeyValue("MainConfig")
  168. MainConfig = JSON.parse(MainConfig)
  169. let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
  170. if(list.length<0){
  171. return console.error("获取主体错误:",data)
  172. }
  173. let black_books = await redis_help.getKeyValue("all_black_books")
  174. if(black_books!=null){
  175. black_books = JSON.parse(black_books)
  176. }
  177. for (let index = 0; index < list.length; index++) {
  178. const main_info = list[index];
  179. data.main_id = main_info.id
  180. data.main_name = main_info.main_name
  181. if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
  182. console.error("主体配置推广链接错误:",main_info)
  183. }else{
  184. if(!CMD.isBlackBook(black_books,data.book_id)){
  185. //符合标准进行创建表
  186. const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id})
  187. if(!result.success){
  188. //没有找到 可以创建
  189. await video_applet_product_controllers.createAppletProductData({
  190. book_platform:data.tg_platform_id,
  191. product_name:data.book_name,
  192. product_id:data.book_id,
  193. dy_small_program_start:"",
  194. dy_small_program_start_data:"",
  195. dy_small_applet_app_id:data.app_id,
  196. status:0,
  197. main_id:data.main_id,
  198. promotion_id:"",
  199. wait_status:0,
  200. })
  201. }
  202. }
  203. }
  204. }
  205. }
  206. }else{
  207. await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name,genre:data.genre,material_sync_status:2})
  208. }
  209. }
  210. CMD.insert_product = async function(data){
  211. return await video_product_controllers.createProductData({
  212. book_platform:data.tg_platform_id,
  213. product_name:data.book_name,
  214. genre:data.genre,
  215. product_id:data.book_id,
  216. words:data.words
  217. })
  218. }
  219. CMD.init()