dz_factory.js 12 KB

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