fq_factory.js 12 KB

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