fq_factory.js 15 KB

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