qm_factory.js 8.9 KB

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