dz_factory.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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. function getProductById(product_list,product_id){
  11. for (let index = 0; index < product_list.length; index++) {
  12. const product_item = product_list[index];
  13. if(product_item.product_id==product_id){
  14. return product_item
  15. }
  16. }
  17. return null
  18. }
  19. async function processTask(){
  20. let result = null
  21. try{
  22. let isPauseTask = await redis_help.getKeyValue("isPauseTask")
  23. if(isPauseTask=="true"){
  24. return
  25. }
  26. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  27. FilterConfig = JSON.parse(FilterConfig)
  28. // result = await filter_data_controllers.getFilterDataByStatusAndLimit({ status: 0 , tg_platform_id: config.platform_dianzhong },500);
  29. // if(result.success){
  30. // let ProductIds = []
  31. // let FilterList = []
  32. // for (let index = 0; index < result.data.length; index++) {
  33. // let filter_item = result.data[index];
  34. // ProductIds.push(filter_item.book_id)
  35. // FilterList[filter_item.book_id] = filter_item
  36. // }
  37. // console.log("ProductIds:",ProductIds)
  38. // let product_list_result = await video_product_controllers.findNonExistentProductIds(ProductIds);
  39. // if(product_list_result.success){
  40. // for (let index = 0; index < result.data.length; index++) {
  41. // let filter_item = result.data[index];
  42. // if(product_list_result.data.existingProductIds.has(filter_item.book_id)){
  43. // let info = FilterList[filter_item.book_id];
  44. // let product_item = getProductById(product_list_result.data.existingRecords,filter_item.book_id)
  45. // if (!info) {
  46. // throw `No filter info found for book_id: ${filter_item.book_id}`
  47. // }
  48. // if (!product_item) {
  49. // throw `product_item is null: ${filter_item.book_id}`
  50. // }
  51. // info.words = product_item.words
  52. // info.genre = product_item.genre
  53. // info.book_id = product_item.product_id
  54. // info.book_name = product_item.product_name
  55. // await CMD.update_filter_data(FilterConfig,info)
  56. // await new Promise(resolve => setTimeout(resolve,100));
  57. // }
  58. // }
  59. // let Ids = []
  60. // for (let index = 0; index < product_list_result.data.nonExistentIds.length; index++) {
  61. // const product_id = product_list_result.data.nonExistentIds[index];
  62. // Ids.push(FilterList[product_id].id)
  63. // task_queue.push({result:{data:FilterList[product_id]}})
  64. // }
  65. // console.log("Ids:",Ids)
  66. // if(Ids.length>0){
  67. // await filter_data_controllers.updateFilterDataByIds({ids:Ids},{status:1})
  68. // }
  69. // }
  70. // }
  71. // }catch(e){
  72. // console.error("processTask:",e)
  73. // } finally{
  74. // global.setTimeout(processTask, 100);
  75. // }
  76. let isInsertTask = false
  77. result = await filter_data_controllers.getFilterDataByStatus({ status: 0 , tg_platform_id: config.platform_dianzhong });
  78. if(result.success){
  79. let tg_platform_id = result.data.tg_platform_id
  80. //判断是否存在这本书
  81. if(tg_platform_id==config.platform_dianzhong){ //点众
  82. let dz_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id });
  83. if(dz_book_result.success){
  84. result.data.words = dz_book_result.data.words
  85. result.data.genre = dz_book_result.data.genre
  86. result.data.book_id = dz_book_result.data.product_id
  87. result.data.book_name = dz_book_result.data.product_name
  88. }else{
  89. isInsertTask = true
  90. }
  91. }
  92. if(!isInsertTask){
  93. await CMD.update_filter_data(FilterConfig,result.data)
  94. }else{
  95. await filter_data_controllers.updateFilterData({id:result.data.id},{status:1})
  96. task_queue.push({result:result})
  97. }
  98. }
  99. }catch(e){
  100. console.error("processTask error:",e)
  101. // if(result!=null&&result!=undefined){
  102. // await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  103. // }
  104. } finally{
  105. global.setTimeout(processTask, 100);
  106. }
  107. }
  108. async function processCreateTask(){
  109. let result = null
  110. try{
  111. if(task_queue.length>0){
  112. let task_queue_item = task_queue.pop()
  113. let product = await video_product_controllers.getProductData({ book_id: task_queue_item.result.data.book_id });
  114. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  115. FilterConfig = JSON.parse(FilterConfig)
  116. if(!product.success){
  117. result = task_queue_item.result
  118. let tg_platform_id = result.data.tg_platform_id
  119. if(tg_platform_id==config.platform_dianzhong){ //点众
  120. let dz_book_data = await require('../src/api/dz/dz_search_book').search_id(result.data.book_id)
  121. if(dz_book_data==null){
  122. result.data.genre = 999
  123. }else{
  124. dz_book_data.tg_platform_id = result.data.tg_platform_id
  125. if(CMD.isGenre(FilterConfig,dz_book_data.genre)){
  126. await CMD.insert_product(dz_book_data)
  127. }
  128. result.data.words = dz_book_data.words
  129. result.data.genre = dz_book_data.genre
  130. result.data.book_id = dz_book_data.book_id
  131. result.data.book_name = dz_book_data.book_name
  132. }
  133. }
  134. }
  135. await CMD.update_filter_data(FilterConfig,result.data)
  136. }
  137. }catch(e){
  138. console.log("error::",e)
  139. if(result!=null){
  140. await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  141. }
  142. console.log("processCreateTask:",e)
  143. } finally{
  144. global.setTimeout(processCreateTask, time_count);
  145. }
  146. }
  147. CMD.init = async function(){
  148. redis_help.connect((results)=>{
  149. if(results){
  150. }
  151. })
  152. processTask();
  153. processCreateTask();
  154. }
  155. CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
  156. let temp = []
  157. for (let index = 0; index < AppConfig.length; index++) {
  158. const element = AppConfig[index];
  159. if(element.tg_platform_id==tg_platform_id){
  160. temp.push(element)
  161. }
  162. }
  163. return temp
  164. }
  165. CMD.isBlackBook = function(all_black_books,book_id){
  166. if(all_black_books==null){
  167. return false
  168. }
  169. for (let index = 0; index < all_black_books.length; index++) {
  170. const black_book = all_black_books[index];
  171. if(black_book.product_id==book_id){
  172. return true
  173. }
  174. }
  175. return false
  176. }
  177. CMD.getMainInfoByAppid = function(MainConfig,app_id){
  178. let list = []
  179. for (let index = 0; index < MainConfig.length; index++) {
  180. const element = MainConfig[index];
  181. if(element.app_id==app_id){
  182. list.push(element)
  183. }
  184. }
  185. return list
  186. }
  187. CMD.isGenre = function(FilterConfig,genre){
  188. let is_need = false
  189. //判断长篇短篇是否是要的数据
  190. for (let index = 0; index < FilterConfig.genre.length; index++) {
  191. const element = FilterConfig.genre[index];
  192. if(genre==element){
  193. is_need = true
  194. break
  195. }
  196. }
  197. return is_need
  198. }
  199. CMD.update_filter_data = async function(FilterConfig,data) {
  200. let isGenre = CMD.isGenre(FilterConfig,data.genre)
  201. // console.log("data.genre:",data.genre,data,isGenre)
  202. if(isGenre){
  203. 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})
  204. //创建一个小程序
  205. let AppConfig = await redis_help.getKeyValue("AppConfig")
  206. AppConfig = JSON.parse(AppConfig)
  207. let AppInfoList = CMD.getAppInfoByPlatformId(AppConfig,data.tg_platform_id)
  208. for (let j = 0; j < AppInfoList.length; j++) {
  209. const AppInfo = AppInfoList[j];
  210. data.app_id = AppInfo.app_id
  211. let PlatformInfo = await redis_help.getKeyValue("PlatformConfig")
  212. PlatformInfo = JSON.parse(PlatformInfo)
  213. if(PlatformInfo==null){
  214. return console.error("平台配置错误:",data)
  215. }
  216. let MainConfig = await redis_help.getKeyValue("MainConfig")
  217. MainConfig = JSON.parse(MainConfig)
  218. let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
  219. if(list.length<0){
  220. return console.error("获取主体错误:",data)
  221. }
  222. let black_books = await redis_help.getKeyValue("all_black_books")
  223. if(black_books!=null){
  224. black_books = JSON.parse(black_books)
  225. }
  226. for (let index = 0; index < list.length; index++) {
  227. const main_info = list[index];
  228. data.main_id = main_info.id
  229. data.main_name = main_info.main_name
  230. if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
  231. console.error("主体配置推广链接错误:",main_info)
  232. }else{
  233. if(!CMD.isBlackBook(black_books,data.book_id)){
  234. //符合标准进行创建表
  235. const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id})
  236. if(!result.success){
  237. //没有找到 可以创建
  238. await video_applet_product_controllers.createAppletProductData({
  239. book_platform:data.tg_platform_id,
  240. product_name:data.book_name,
  241. product_id:data.book_id,
  242. dy_small_program_start:"",
  243. dy_small_program_start_data:"",
  244. dy_small_applet_app_id:data.app_id,
  245. status:0,
  246. main_id:data.main_id,
  247. promotion_id:"",
  248. wait_status:0,
  249. })
  250. }
  251. }
  252. }
  253. }
  254. }
  255. }else{
  256. 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})
  257. }
  258. }
  259. CMD.insert_product = async function(data){
  260. return await video_product_controllers.createProductData({
  261. book_platform:data.tg_platform_id,
  262. product_name:data.book_name,
  263. genre:data.genre,
  264. product_id:data.book_id,
  265. words:data.words
  266. })
  267. }
  268. CMD.init()