fq_factory3.js 15 KB

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