fq_factory.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  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 other_book_controllers = require('../src/data_manager/Controllers/other_book_controllers');
  7. const redis_help = require('../src/use_redis');
  8. const axios = require('axios');
  9. const config = require('../etc/config.json');
  10. const HttpClient = require('../src/HttpClient');
  11. const helper = require('../src/helper');
  12. const tools = require('../tools');
  13. const mysql = require('mysql2/promise');
  14. const dbConfig = config.isDebug?config.debug_mysql:config.release_mysql
  15. const taskdbConfig = config.isDebug?config.debug_task_mysql:config.release_task_mysql
  16. const time_count = 3000;
  17. const task_queue = []
  18. async function processTask(){
  19. let result = null
  20. try{
  21. let isPauseTask = await redis_help.getKeyValue("isPauseTask")
  22. if(isPauseTask=="true"){
  23. return
  24. }
  25. let isInsertTask = false
  26. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  27. FilterConfig = JSON.parse(FilterConfig)
  28. result = await filter_data_controllers.getFilterDataByStatus({ status: 0 ,tg_platform_id:config.platform_fanqie});
  29. if(result.success){
  30. let tg_platform_id = result.data.tg_platform_id
  31. //判断是否存在这本书
  32. if(tg_platform_id==config.platform_fanqie){ //番茄
  33. //获取番茄书库的书
  34. let fq_book_result = null
  35. if(result.data.book_id.length>18){
  36. fq_book_result = await get_fq_book_tab_controllers.getDataByBookId({ book_id: result.data.book_id });
  37. }else{
  38. fq_book_result = await get_fq_book_tab_controllers.getData({ book_id: result.data.book_id });
  39. }
  40. if(fq_book_result.success){//如果番茄书库里有这本书
  41. result.data.genre = fq_book_result.data.info.genre
  42. result.data.book_id = fq_book_result.data.book_id
  43. result.data.book_name = fq_book_result.data.info.book_name
  44. result.data.words = fq_book_result.data.info.words
  45. //获取商品库的商品
  46. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_result.data.book_id });
  47. //如果商品库没有这个商品
  48. if(!product_result.success){ //如果只是 get_fq_book 有, 书库里没有
  49. fq_book_result.data.tg_platform_id = result.data.tg_platform_id
  50. //如果是长篇短篇符合
  51. // if(CMD.isGenre(FilterConfig,result.data.genre)){
  52. // await CMD.insert_product(result.data)
  53. // }
  54. await CMD.insert_product(result.data)
  55. }
  56. }else{
  57. isInsertTask = true
  58. }
  59. }
  60. if(!isInsertTask){
  61. await CMD.update_filter_data(FilterConfig,result.data)
  62. }else{
  63. await filter_data_controllers.updateFilterData({id:result.data.id},{status:1,material_sync_status:2})
  64. // task_queue.push({result:result})
  65. }
  66. }
  67. }catch(e){
  68. console.error("processTask error:",e)
  69. if(result!=null&&result!=undefined){
  70. await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  71. }
  72. } finally{
  73. global.setTimeout(processTask, 100);
  74. }
  75. }
  76. async function processNewCreateTask(){
  77. let result = {
  78. data:null
  79. }
  80. let connection = null
  81. try{
  82. connection = await mysql.createConnection({
  83. ...dbConfig,
  84. multipleStatements: true
  85. });
  86. let create_day = helper.getLocalDate()
  87. let sql = `SELECT * FROM filter_data WHERE tg_platform_id = ${config.platform_fanqie} AND status = 1 AND material_sync_status = 2 AND create_day = '${create_day}' AND like_num >0 LIMIT 1`
  88. const [row] = await connection.execute(sql)
  89. if(row.length<=0){
  90. throw 0
  91. }
  92. result.data = row[0]
  93. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  94. FilterConfig = JSON.parse(FilterConfig)
  95. let tg_platform_id = result.data.tg_platform_id
  96. if(tg_platform_id==config.platform_fanqie){
  97. let fq_book_result = null
  98. if(result.data.book_id.length>18){
  99. fq_book_result = await get_fq_book_tab_controllers.getDataByBookId({ book_id: result.data.book_id });
  100. }else{
  101. fq_book_result = await get_fq_book_tab_controllers.getData({ book_id: result.data.book_id });
  102. }
  103. if(fq_book_result.success){//如果番茄书库里有这本书
  104. result.data.genre = fq_book_result.data.info.genre
  105. result.data.book_id = fq_book_result.data.book_id
  106. result.data.book_name = fq_book_result.data.info.book_name
  107. result.data.words = fq_book_result.data.info.words
  108. //获取商品库的商品
  109. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_result.data.book_id });
  110. //如果商品库没有这个商品
  111. if(!product_result.success){ //如果只是 get_fq_book 有, 书库里没有
  112. fq_book_result.data.tg_platform_id = result.data.tg_platform_id
  113. await CMD.insert_product(result.data)
  114. }
  115. }else{
  116. let client = new HttpClient()
  117. let sid_tt = await tools.getFqSidtt()
  118. let response = await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id,sid_tt))
  119. let obj = response['data']
  120. if (Object.keys(obj['novel_data']).length === 0) {
  121. result.data.words = 0
  122. result.data.genre = 999
  123. result.data.book_id = result.data.book_id
  124. result.data.book_name = "没有找到这本书"
  125. }else{
  126. let book_name = obj['novel_data'].book_name
  127. let book_id = obj['novel_data'].book_id
  128. let genre = CMD.getFqGenre(obj['novel_data'].genre)
  129. let words = obj['novel_data'].word_number
  130. let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
  131. let fq_book = {}
  132. fq_book.key = result.data.book_id
  133. // console.log("response:",obj,sid_tt)
  134. await CMD.add_fq_book(fq_book,fq_book_data)
  135. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_data.book_id });
  136. if(!product_result.success){ //如果书库也没有
  137. fq_book.tg_platform_id = result.data.tg_platform_id
  138. fq_book_data.tg_platform_id = result.data.tg_platform_id
  139. await CMD.insert_product(fq_book_data)
  140. }
  141. result.data.words = words
  142. result.data.genre = fq_book_data.genre
  143. result.data.book_id = fq_book_data.book_id
  144. result.data.book_name = fq_book_data.book_name
  145. }
  146. }
  147. }
  148. await CMD.update_filter_data(FilterConfig,result.data)
  149. }catch(e){
  150. if(e==0){
  151. console.log("processCreateTask:没有需要处理的任务")
  152. }else{
  153. if(result.data!=null){
  154. console.log("特殊错误::",e,result.data)
  155. await filter_data_controllers.updateFilterData({id:result.data.id},{status:1,material_sync_status:3})
  156. }
  157. }
  158. console.log("error::",e)
  159. } finally{
  160. if(connection!=null){
  161. connection.end()
  162. }
  163. global.setTimeout(processNewCreateTask, time_count);
  164. }
  165. }
  166. // async function processCreateTask(){
  167. // let result = null
  168. // try{
  169. // if(task_queue.length>0){
  170. // let task_queue_item = task_queue.pop()
  171. // result = task_queue_item.result
  172. // let other_book = await other_book_controllers.getData({product_id:task_queue_item.result.data.book_id})
  173. // if(other_book.success){
  174. // await filter_data_controllers.updateFilterData({id:result.data.id},{status:2,book_id:other_book.data.product_id,book_name:other_book.data.product_name,material_sync_status:2})
  175. // throw "处理了一条长篇或者筛选不要的书"
  176. // }
  177. // let product = await video_product_controllers.getProductData({ book_id: task_queue_item.result.data.book_id });
  178. // let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  179. // FilterConfig = JSON.parse(FilterConfig)
  180. // if(!product.success){
  181. // let tg_platform_id = result.data.tg_platform_id
  182. // if(tg_platform_id==config.platform_fanqie){
  183. // let client = new HttpClient()
  184. // let sid_tt = await tools.getFqSidtt()
  185. // let response = await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id,sid_tt))
  186. // let obj = response['data']
  187. // if (Object.keys(obj['novel_data']).length === 0) {
  188. // result.data.words = 0
  189. // result.data.genre = 999
  190. // result.data.book_id = result.data.book_id
  191. // result.data.book_name = "没有找到这本书"
  192. // }else{
  193. // let book_name = obj['novel_data'].book_name
  194. // let book_id = obj['novel_data'].book_id
  195. // let genre = CMD.getFqGenre(obj['novel_data'].genre)
  196. // let words = obj['novel_data'].word_number
  197. // let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
  198. // let fq_book = {}
  199. // fq_book.key = result.data.book_id
  200. // // console.log("response:",obj,sid_tt)
  201. // await CMD.add_fq_book(fq_book,fq_book_data)
  202. // let product_result = await video_product_controllers.getProductData({ book_id: fq_book_data.book_id });
  203. // if(!product_result.success){ //如果书库也没有
  204. // fq_book.tg_platform_id = result.data.tg_platform_id
  205. // // if(CMD.isGenre(FilterConfig,fq_book_data.genre)){
  206. // // fq_book_data.tg_platform_id = result.data.tg_platform_id
  207. // // await CMD.insert_product(fq_book_data)
  208. // // }
  209. // fq_book_data.tg_platform_id = result.data.tg_platform_id
  210. // await CMD.insert_product(fq_book_data)
  211. // }
  212. // result.data.words = words
  213. // result.data.genre = fq_book_data.genre
  214. // result.data.book_id = fq_book_data.book_id
  215. // result.data.book_name = fq_book_data.book_name
  216. // }
  217. // }
  218. // }
  219. // await CMD.update_filter_data(FilterConfig,result.data)
  220. // }
  221. // }catch(e){
  222. // console.log("error::",e)
  223. // // if(result!=null){
  224. // // await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  225. // // }
  226. // console.log("processCreateTask:",e)
  227. // } finally{
  228. // global.setTimeout(processCreateTask, time_count);
  229. // }
  230. // }
  231. CMD.init = async function(){
  232. redis_help.connect((results)=>{
  233. if(results){
  234. }
  235. })
  236. processTask();
  237. // processCreateTask();
  238. processNewCreateTask();
  239. }
  240. CMD.getFqGenre = function(genre){
  241. if(genre=="0"){
  242. return 1;
  243. }else{
  244. return 3;
  245. }
  246. // if(genre=="8"){
  247. // return 3;
  248. // }
  249. // if(genre=="202"){
  250. // return 202;
  251. // }
  252. // return 999;
  253. }
  254. CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
  255. let temp = []
  256. for (let index = 0; index < AppConfig.length; index++) {
  257. const element = AppConfig[index];
  258. if(element.tg_platform_id==tg_platform_id){
  259. temp.push(element)
  260. }
  261. }
  262. return temp
  263. }
  264. CMD.isBlackBook = function(all_black_books,book_id){
  265. if(all_black_books==null){
  266. return false
  267. }
  268. for (let index = 0; index < all_black_books.length; index++) {
  269. const black_book = all_black_books[index];
  270. if(black_book.product_id==book_id){
  271. return true
  272. }
  273. }
  274. return false
  275. }
  276. CMD.getMainInfoByAppid = function(MainConfig,app_id){
  277. let list = []
  278. for (let index = 0; index < MainConfig.length; index++) {
  279. const element = MainConfig[index];
  280. if(element.app_id==app_id){
  281. list.push(element)
  282. }
  283. }
  284. return list
  285. }
  286. CMD.isGenre = function(FilterConfig,genre){
  287. let is_need = false
  288. //判断长篇短篇是否是要的数据
  289. for (let index = 0; index < FilterConfig.genre.length; index++) {
  290. const element = FilterConfig.genre[index];
  291. if(genre==element){
  292. is_need = true
  293. break
  294. }
  295. }
  296. return is_need
  297. }
  298. CMD.getPlatformInfo = function(PlatformConfig,tg_platform_id){
  299. for (let index = 0; index < PlatformConfig.length; index++) {
  300. const element = PlatformConfig[index];
  301. if(element.tg_platform_id==tg_platform_id){
  302. return element
  303. }
  304. }
  305. }
  306. CMD.getSharedPlatform = function(PlatformShared,platform_shared_id){
  307. for (let index = 0; index < PlatformShared.length; index++) {
  308. const element = PlatformShared[index];
  309. if(element.id==platform_shared_id){
  310. return JSON.parse(element.info)
  311. }
  312. }
  313. }
  314. CMD.update_filter_data = async function(FilterConfig,data) {
  315. // let isGenre = CMD.isGenre(FilterConfig,data.genre)
  316. let isGenre = true
  317. // console.log("data.genre:",data.genre,data,isGenre)
  318. if(isGenre){
  319. if(data.genre==999){
  320. return await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name,genre:data.genre,words:data.words,material_sync_status:0})
  321. }else{
  322. 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,material_sync_status:0})
  323. }
  324. //创建一个小程序
  325. let AppConfig = await redis_help.getKeyValue("AppConfig")
  326. AppConfig = JSON.parse(AppConfig)
  327. let PlatformShared = await redis_help.getKeyValue("PlatformShared")
  328. PlatformShared = JSON.parse(PlatformShared)
  329. let PlatformConfig = await redis_help.getKeyValue("PlatformConfig")
  330. PlatformConfig = JSON.parse(PlatformConfig)
  331. let PlatformInfo = CMD.getPlatformInfo(PlatformConfig,config.platform_fanqie)
  332. console.log("PlatformInfo:",PlatformInfo,data)
  333. let all_platform_list = CMD.getSharedPlatform(PlatformShared,PlatformInfo.platform_shared_id)
  334. for (let i = 0; i < all_platform_list.length; i++) {
  335. const tg_platform_id = all_platform_list[i];
  336. let AppInfoList = CMD.getAppInfoByPlatformId(AppConfig,tg_platform_id)
  337. for (let j = 0; j < AppInfoList.length; j++) {
  338. const AppInfo = AppInfoList[j];
  339. data.app_id = AppInfo.app_id
  340. let PlatformInfo = await redis_help.getKeyValue("PlatformConfig")
  341. PlatformInfo = JSON.parse(PlatformInfo)
  342. if(PlatformInfo==null){
  343. return console.error("平台配置错误:",data)
  344. }
  345. let MainConfig = await redis_help.getKeyValue("MainConfig")
  346. MainConfig = JSON.parse(MainConfig)
  347. let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
  348. if(list.length<0){
  349. return console.error("获取主体错误:",data)
  350. }
  351. let black_books = await redis_help.getKeyValue("all_black_books")
  352. if(black_books!=null){
  353. black_books = JSON.parse(black_books)
  354. }
  355. for (let index = 0; index < list.length; index++) {
  356. const main_info = list[index];
  357. data.main_id = main_info.id
  358. data.main_name = main_info.main_name
  359. let butler_id = main_info.butler_id
  360. if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
  361. console.error("主体配置推广链接错误:",main_info)
  362. }else{
  363. let mian_genre = main_info.genre
  364. let min_book_word = main_info.min_book_word
  365. let max_book_word = main_info.max_book_word
  366. let word = data.words
  367. let book_genre = data.genre
  368. let material_platform_id = main_info.material_platform_id
  369. if(!CMD.isBlackBook(black_books,data.book_id)&&word>=min_book_word&&word<=max_book_word){
  370. //符合标准进行创建表
  371. let butler_video_applet_info = await tools.getAppletProductDataByButlerId(butler_id,data.book_id,data.main_id)
  372. if(butler_video_applet_info==null){
  373. const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id})
  374. if(!result.success){
  375. //没有找到 可以创建
  376. await video_applet_product_controllers.createAppletProductData({
  377. book_platform:config.platform_fanqie,
  378. product_name:data.book_name,
  379. product_id:data.book_id,
  380. dy_small_program_start:"",
  381. dy_small_program_start_data:"",
  382. dy_small_applet_app_id:data.app_id,
  383. status:0,
  384. main_id:data.main_id,
  385. promotion_id:"",
  386. wait_status:0,
  387. material_platform_id:material_platform_id,
  388. butler_id:butler_id
  389. })
  390. }
  391. }
  392. }
  393. }
  394. }
  395. }
  396. }
  397. }else{
  398. await other_book_controllers.createData({product_id:data.book_id,product_name:data.book_name,tg_platform_id:data.tg_platform_id})
  399. 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})
  400. }
  401. }
  402. CMD.insert_product = async function(data){
  403. return await video_product_controllers.createProductData({
  404. book_platform:data.tg_platform_id,
  405. product_name:data.book_name,
  406. genre:data.genre,
  407. product_id:data.book_id,
  408. words:data.words
  409. })
  410. }
  411. CMD.add_fq_book = async function(data,response){
  412. let book_name = response.book_name
  413. let book_id = response.book_id
  414. let genre = response.genre
  415. let words = response.words
  416. data.genre = 0
  417. if(genre=="0"){
  418. data.genre = 1;
  419. }
  420. if(genre=="8"){
  421. data.genre = 3;
  422. }
  423. if(genre=="202"){
  424. data.genre = 202;
  425. }
  426. data.words = words
  427. data.book_name = book_name
  428. data.book_id = book_id
  429. let tab = {
  430. book_key:data.key,
  431. book_id:data.book_id,
  432. info:JSON.stringify(response)
  433. }
  434. if(tab.book_id==undefined){
  435. throw "tab.book_id==undefined"
  436. }
  437. // console.log("tab:",tab,data)
  438. return await get_fq_book_tab_controllers.createData( tab)
  439. }
  440. CMD.init()