fq_factory.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  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 = 2000;
  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 ORDER BY create_day DESC 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 client = new HttpClient()
  98. let sid_tt = await tools.getFqSidtt()
  99. let response = await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id,sid_tt))
  100. let obj = response['data']
  101. if (Object.keys(obj['novel_data']).length === 0) {
  102. result.data.words = 0
  103. result.data.genre = 999
  104. result.data.book_id = result.data.book_id
  105. result.data.book_name = "没有找到这本书"
  106. }else{
  107. let book_name = obj['novel_data'].book_name
  108. let book_id = obj['novel_data'].book_id
  109. let genre = CMD.getFqGenre(obj['novel_data'].genre)
  110. let words = obj['novel_data'].word_number
  111. let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
  112. let fq_book = {}
  113. fq_book.key = result.data.book_id
  114. // console.log("response:",obj,sid_tt)
  115. await CMD.add_fq_book(fq_book,fq_book_data)
  116. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_data.book_id });
  117. if(!product_result.success){ //如果书库也没有
  118. fq_book.tg_platform_id = result.data.tg_platform_id
  119. fq_book_data.tg_platform_id = result.data.tg_platform_id
  120. await CMD.insert_product(fq_book_data)
  121. }
  122. result.data.words = words
  123. result.data.genre = fq_book_data.genre
  124. result.data.book_id = fq_book_data.book_id
  125. result.data.book_name = fq_book_data.book_name
  126. }
  127. }
  128. await CMD.update_filter_data(FilterConfig,result.data)
  129. }catch(e){
  130. if(e==0){
  131. console.log("processCreateTask:没有需要处理的任务")
  132. }else{
  133. if(result.data!=null){
  134. console.log("特殊错误::",e,result.data)
  135. await filter_data_controllers.updateFilterData({id:result.data.id},{status:1,material_sync_status:3})
  136. }
  137. }
  138. console.log("error::",e)
  139. } finally{
  140. if(connection!=null){
  141. connection.end()
  142. }
  143. global.setTimeout(processNewCreateTask, time_count);
  144. }
  145. }
  146. // async function processCreateTask(){
  147. // let result = null
  148. // try{
  149. // if(task_queue.length>0){
  150. // let task_queue_item = task_queue.pop()
  151. // result = task_queue_item.result
  152. // let other_book = await other_book_controllers.getData({product_id:task_queue_item.result.data.book_id})
  153. // if(other_book.success){
  154. // 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})
  155. // throw "处理了一条长篇或者筛选不要的书"
  156. // }
  157. // let product = await video_product_controllers.getProductData({ book_id: task_queue_item.result.data.book_id });
  158. // let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  159. // FilterConfig = JSON.parse(FilterConfig)
  160. // if(!product.success){
  161. // let tg_platform_id = result.data.tg_platform_id
  162. // if(tg_platform_id==config.platform_fanqie){
  163. // let client = new HttpClient()
  164. // let sid_tt = await tools.getFqSidtt()
  165. // let response = await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id,sid_tt))
  166. // let obj = response['data']
  167. // if (Object.keys(obj['novel_data']).length === 0) {
  168. // result.data.words = 0
  169. // result.data.genre = 999
  170. // result.data.book_id = result.data.book_id
  171. // result.data.book_name = "没有找到这本书"
  172. // }else{
  173. // let book_name = obj['novel_data'].book_name
  174. // let book_id = obj['novel_data'].book_id
  175. // let genre = CMD.getFqGenre(obj['novel_data'].genre)
  176. // let words = obj['novel_data'].word_number
  177. // let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
  178. // let fq_book = {}
  179. // fq_book.key = result.data.book_id
  180. // // console.log("response:",obj,sid_tt)
  181. // await CMD.add_fq_book(fq_book,fq_book_data)
  182. // let product_result = await video_product_controllers.getProductData({ book_id: fq_book_data.book_id });
  183. // if(!product_result.success){ //如果书库也没有
  184. // fq_book.tg_platform_id = result.data.tg_platform_id
  185. // // if(CMD.isGenre(FilterConfig,fq_book_data.genre)){
  186. // // fq_book_data.tg_platform_id = result.data.tg_platform_id
  187. // // await CMD.insert_product(fq_book_data)
  188. // // }
  189. // fq_book_data.tg_platform_id = result.data.tg_platform_id
  190. // await CMD.insert_product(fq_book_data)
  191. // }
  192. // result.data.words = words
  193. // result.data.genre = fq_book_data.genre
  194. // result.data.book_id = fq_book_data.book_id
  195. // result.data.book_name = fq_book_data.book_name
  196. // }
  197. // }
  198. // }
  199. // await CMD.update_filter_data(FilterConfig,result.data)
  200. // }
  201. // }catch(e){
  202. // console.log("error::",e)
  203. // // if(result!=null){
  204. // // await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  205. // // }
  206. // console.log("processCreateTask:",e)
  207. // } finally{
  208. // global.setTimeout(processCreateTask, time_count);
  209. // }
  210. // }
  211. CMD.init = async function(){
  212. redis_help.connect((results)=>{
  213. if(results){
  214. }
  215. })
  216. processTask();
  217. // processCreateTask();
  218. processNewCreateTask();
  219. }
  220. CMD.getFqGenre = function(genre){
  221. if(genre=="0"){
  222. return 1;
  223. }else{
  224. return 3;
  225. }
  226. // if(genre=="8"){
  227. // return 3;
  228. // }
  229. // if(genre=="202"){
  230. // return 202;
  231. // }
  232. // return 999;
  233. }
  234. CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
  235. let temp = []
  236. for (let index = 0; index < AppConfig.length; index++) {
  237. const element = AppConfig[index];
  238. if(element.tg_platform_id==tg_platform_id){
  239. temp.push(element)
  240. }
  241. }
  242. return temp
  243. }
  244. CMD.isBlackBook = function(all_black_books,book_id){
  245. if(all_black_books==null){
  246. return false
  247. }
  248. for (let index = 0; index < all_black_books.length; index++) {
  249. const black_book = all_black_books[index];
  250. if(black_book.product_id==book_id){
  251. return true
  252. }
  253. }
  254. return false
  255. }
  256. CMD.getMainInfoByAppid = function(MainConfig,app_id){
  257. let list = []
  258. for (let index = 0; index < MainConfig.length; index++) {
  259. const element = MainConfig[index];
  260. if(element.app_id==app_id){
  261. list.push(element)
  262. }
  263. }
  264. return list
  265. }
  266. CMD.isGenre = function(FilterConfig,genre){
  267. let is_need = false
  268. //判断长篇短篇是否是要的数据
  269. for (let index = 0; index < FilterConfig.genre.length; index++) {
  270. const element = FilterConfig.genre[index];
  271. if(genre==element){
  272. is_need = true
  273. break
  274. }
  275. }
  276. return is_need
  277. }
  278. CMD.getPlatformInfo = function(PlatformConfig,tg_platform_id){
  279. for (let index = 0; index < PlatformConfig.length; index++) {
  280. const element = PlatformConfig[index];
  281. if(element.tg_platform_id==tg_platform_id){
  282. return element
  283. }
  284. }
  285. }
  286. CMD.getSharedPlatform = function(PlatformShared,platform_shared_id){
  287. for (let index = 0; index < PlatformShared.length; index++) {
  288. const element = PlatformShared[index];
  289. if(element.id==platform_shared_id){
  290. return JSON.parse(element.info)
  291. }
  292. }
  293. }
  294. CMD.update_filter_data = async function(FilterConfig,data) {
  295. // let isGenre = CMD.isGenre(FilterConfig,data.genre)
  296. let isGenre = true
  297. // console.log("data.genre:",data.genre,data,isGenre)
  298. if(isGenre){
  299. if(data.genre==999){
  300. 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})
  301. }else{
  302. 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})
  303. }
  304. //创建一个小程序
  305. let AppConfig = await redis_help.getKeyValue("AppConfig")
  306. AppConfig = JSON.parse(AppConfig)
  307. let PlatformShared = await redis_help.getKeyValue("PlatformShared")
  308. PlatformShared = JSON.parse(PlatformShared)
  309. let PlatformConfig = await redis_help.getKeyValue("PlatformConfig")
  310. PlatformConfig = JSON.parse(PlatformConfig)
  311. let PlatformInfo = CMD.getPlatformInfo(PlatformConfig,config.platform_fanqie)
  312. console.log("PlatformInfo:",PlatformInfo,data)
  313. let all_platform_list = CMD.getSharedPlatform(PlatformShared,PlatformInfo.platform_shared_id)
  314. for (let i = 0; i < all_platform_list.length; i++) {
  315. const tg_platform_id = all_platform_list[i];
  316. let AppInfoList = CMD.getAppInfoByPlatformId(AppConfig,tg_platform_id)
  317. for (let j = 0; j < AppInfoList.length; j++) {
  318. const AppInfo = AppInfoList[j];
  319. data.app_id = AppInfo.app_id
  320. let PlatformInfo = await redis_help.getKeyValue("PlatformConfig")
  321. PlatformInfo = JSON.parse(PlatformInfo)
  322. if(PlatformInfo==null){
  323. return console.error("平台配置错误:",data)
  324. }
  325. let MainConfig = await redis_help.getKeyValue("MainConfig")
  326. MainConfig = JSON.parse(MainConfig)
  327. let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
  328. if(list.length<0){
  329. return console.error("获取主体错误:",data)
  330. }
  331. let black_books = await redis_help.getKeyValue("all_black_books")
  332. if(black_books!=null){
  333. black_books = JSON.parse(black_books)
  334. }
  335. for (let index = 0; index < list.length; index++) {
  336. const main_info = list[index];
  337. data.main_id = main_info.id
  338. data.main_name = main_info.main_name
  339. let butler_id = main_info.butler_id
  340. if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
  341. console.error("主体配置推广链接错误:",main_info)
  342. }else{
  343. let mian_genre = main_info.genre
  344. let min_book_word = main_info.min_book_word
  345. let max_book_word = main_info.max_book_word
  346. let word = data.words
  347. let book_genre = data.genre
  348. let material_platform_id = main_info.material_platform_id
  349. if(!CMD.isBlackBook(black_books,data.book_id)&&word>=min_book_word&&word<=max_book_word){
  350. //符合标准进行创建表
  351. let butler_video_applet_info = await tools.getAppletProductDataByButlerId(butler_id,data.book_id,data.main_id)
  352. if(butler_video_applet_info==null){
  353. const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id})
  354. if(!result.success){
  355. //没有找到 可以创建
  356. await video_applet_product_controllers.createAppletProductData({
  357. book_platform:config.platform_fanqie,
  358. product_name:data.book_name,
  359. product_id:data.book_id,
  360. dy_small_program_start:"",
  361. dy_small_program_start_data:"",
  362. dy_small_applet_app_id:data.app_id,
  363. status:0,
  364. main_id:data.main_id,
  365. promotion_id:"",
  366. wait_status:0,
  367. material_platform_id:material_platform_id,
  368. butler_id:butler_id
  369. })
  370. }
  371. }
  372. }
  373. }
  374. }
  375. }
  376. }
  377. }else{
  378. await other_book_controllers.createData({product_id:data.book_id,product_name:data.book_name,tg_platform_id:data.tg_platform_id})
  379. 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})
  380. }
  381. }
  382. CMD.insert_product = async function(data){
  383. return await video_product_controllers.createProductData({
  384. book_platform:data.tg_platform_id,
  385. product_name:data.book_name,
  386. genre:data.genre,
  387. product_id:data.book_id,
  388. words:data.words
  389. })
  390. }
  391. CMD.add_fq_book = async function(data,response){
  392. let book_name = response.book_name
  393. let book_id = response.book_id
  394. let genre = response.genre
  395. let words = response.words
  396. data.genre = 0
  397. if(genre=="0"){
  398. data.genre = 1;
  399. }
  400. if(genre=="8"){
  401. data.genre = 3;
  402. }
  403. if(genre=="202"){
  404. data.genre = 202;
  405. }
  406. data.words = words
  407. data.book_name = book_name
  408. data.book_id = book_id
  409. let tab = {
  410. book_key:data.key,
  411. book_id:data.book_id,
  412. info:JSON.stringify(response)
  413. }
  414. if(tab.book_id==undefined){
  415. throw "tab.book_id==undefined"
  416. }
  417. // console.log("tab:",tab,data)
  418. return await get_fq_book_tab_controllers.createData( tab)
  419. }
  420. CMD.init()