PRODUCT_FACTORY.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  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 });
  25. if(result.success){
  26. let tg_platform_id = result.data.tg_platform_id
  27. //判断是否存在这本书
  28. if(tg_platform_id==1){
  29. let hy_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id });
  30. if(hy_book_result.success){
  31. result.data.words = hy_book_result.data.words
  32. result.data.genre = hy_book_result.data.genre
  33. result.data.book_id = hy_book_result.data.product_id
  34. result.data.book_name = hy_book_result.data.product_name
  35. }else{
  36. isInsertTask = true
  37. }
  38. }else if(tg_platform_id==2){ //番茄
  39. //获取番茄书库的书
  40. let fq_book_result = await get_fq_book_tab_controllers.getData({ book_id: result.data.book_id });
  41. if(fq_book_result.success){//如果番茄书库里有这本书
  42. result.data.genre = fq_book_result.data.genre
  43. result.data.book_id = fq_book_result.data.book_id
  44. result.data.book_name = fq_book_result.data.info.book_name
  45. result.data.words = fq_book_result.data.info.word_number
  46. //获取商品库的商品
  47. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_result.data.book_id });
  48. //如果商品库没有这个商品
  49. if(!product_result.success){ //如果只是 get_fq_book 有, 书库里没有
  50. fq_book_result.data.tg_platform_id = result.data.tg_platform_id
  51. //如果是长篇短篇符合
  52. if(CMD.isGenre(FilterConfig,result.data.genre)){
  53. await CMD.insert_product(result.data)
  54. }
  55. }
  56. }else{
  57. isInsertTask = true
  58. }
  59. }else if(tg_platform_id==3){ //七猫
  60. let qm_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id });
  61. if(qm_book_result.success){
  62. result.data.words = qm_book_result.data.words
  63. result.data.genre = qm_book_result.data.genre
  64. result.data.book_id = qm_book_result.data.product_id
  65. result.data.book_name = qm_book_result.data.product_name
  66. }else{
  67. isInsertTask = true
  68. }
  69. }else if(tg_platform_id==4){ //点众
  70. let dz_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id });
  71. if(dz_book_result.success){
  72. result.data.words = dz_book_result.data.words
  73. result.data.genre = dz_book_result.data.genre
  74. result.data.book_id = dz_book_result.data.product_id
  75. result.data.book_name = dz_book_result.data.product_name
  76. }else{
  77. isInsertTask = true
  78. }
  79. }
  80. if(!isInsertTask){
  81. await CMD.update_filter_data(FilterConfig,result.data)
  82. }else{
  83. await filter_data_controllers.updateFilterData({id:result.data.id},{status:1})
  84. task_queue.push({result:result})
  85. }
  86. }
  87. }catch(e){
  88. console.error("processTask error:",e)
  89. if(result!=null&&result!=undefined){
  90. await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  91. }
  92. } finally{
  93. global.setTimeout(processTask, 500);
  94. }
  95. }
  96. async function processCreateTask(){
  97. let result = null
  98. try{
  99. if(task_queue.length>0){
  100. let task_queue_item = task_queue.pop()
  101. let product = await video_product_controllers.getProductData({ book_id: task_queue_item.result.data.book_id });
  102. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  103. FilterConfig = JSON.parse(FilterConfig)
  104. if(!product.success){
  105. result = task_queue_item.result
  106. let tg_platform_id = result.data.tg_platform_id
  107. if(tg_platform_id==1){
  108. let hy_book_data = await require('./collect_hy_book').runTask(result.data)
  109. if(CMD.isGenre(FilterConfig,hy_book_data.genre)){
  110. await CMD.insert_product(hy_book_data)
  111. }
  112. result.data.words = hy_book_data.words
  113. result.data.genre = hy_book_data.genre
  114. result.data.book_id = hy_book_data.book_id
  115. result.data.book_name = hy_book_data.book_name
  116. }else if(tg_platform_id==2){
  117. let client = new HttpClient()
  118. let sid_tt = await tools.getFqSidtt()
  119. let response = await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id,sid_tt))
  120. let obj = response['data']
  121. let book_name = obj['novel_data'].book_name
  122. let book_id = obj['novel_data'].book_id
  123. let genre = CMD.getFqGenre(obj['novel_data'].genre)
  124. let words = obj['novel_data'].word_number
  125. let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
  126. let fq_book = {}
  127. fq_book.key = result.data.book_id
  128. // console.log("response:",obj,sid_tt)
  129. await CMD.add_fq_book(fq_book,fq_book_data)
  130. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_data.book_id });
  131. if(!product_result.success){ //如果书库也没有
  132. fq_book.tg_platform_id = result.data.tg_platform_id
  133. if(CMD.isGenre(FilterConfig,fq_book_data.genre)){
  134. fq_book_data.tg_platform_id = result.data.tg_platform_id
  135. await CMD.insert_product(fq_book_data)
  136. }
  137. }
  138. result.data.words = words
  139. result.data.genre = fq_book_data.genre
  140. result.data.book_id = fq_book_data.book_id
  141. result.data.book_name = fq_book_data.book_name
  142. }else if(tg_platform_id==config.platform_qimao){ //七猫
  143. let qm_book_data = await require('../src/api/qm/qm_search_book').search_id(result.data.book_id)
  144. if(qm_book_data==null){
  145. result.data.genre = 999
  146. }else{
  147. qm_book_data.tg_platform_id = result.data.tg_platform_id
  148. if(CMD.isGenre(FilterConfig,qm_book_data.genre)){
  149. await CMD.insert_product(qm_book_data)
  150. }
  151. result.data.words = qm_book_data.words
  152. result.data.genre = qm_book_data.genre
  153. result.data.book_id = qm_book_data.book_id
  154. result.data.book_name = qm_book_data.book_name
  155. }
  156. }else if(tg_platform_id==4){ //点众
  157. let dz_book_data = await require('../src/api/dz/dz_search_book').search_id(result.data.book_id)
  158. if(dz_book_data==null){
  159. result.data.genre = 999
  160. }else{
  161. dz_book_data.tg_platform_id = result.data.tg_platform_id
  162. if(CMD.isGenre(FilterConfig,dz_book_data.genre)){
  163. await CMD.insert_product(dz_book_data)
  164. }
  165. result.data.words = dz_book_data.words
  166. result.data.genre = dz_book_data.genre
  167. result.data.book_id = dz_book_data.book_id
  168. result.data.book_name = dz_book_data.book_name
  169. }
  170. }
  171. }
  172. await CMD.update_filter_data(FilterConfig,result.data)
  173. }
  174. }catch(e){
  175. console.log("error::",e)
  176. if(result!=null){
  177. await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  178. }
  179. console.log("processCreateTask:",e)
  180. } finally{
  181. global.setTimeout(processCreateTask, time_count);
  182. }
  183. }
  184. CMD.init = async function(){
  185. redis_help.connect((results)=>{
  186. if(results){
  187. }
  188. })
  189. processTask();
  190. processCreateTask();
  191. }
  192. CMD.getFqGenre = function(genre){
  193. if(genre=="0"){
  194. return 1;
  195. }
  196. if(genre=="8"){
  197. return 3;
  198. }
  199. if(genre=="202"){
  200. return 202;
  201. }
  202. return 999;
  203. }
  204. CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
  205. let temp = []
  206. for (let index = 0; index < AppConfig.length; index++) {
  207. const element = AppConfig[index];
  208. if(element.tg_platform_id==tg_platform_id){
  209. temp.push(element)
  210. }
  211. }
  212. return temp
  213. }
  214. CMD.isBlackBook = function(all_black_books,book_id){
  215. if(all_black_books==null){
  216. return false
  217. }
  218. for (let index = 0; index < all_black_books.length; index++) {
  219. const black_book = all_black_books[index];
  220. if(black_book.product_id==book_id){
  221. return true
  222. }
  223. }
  224. return false
  225. }
  226. CMD.getMainInfoByAppid = function(MainConfig,app_id){
  227. let list = []
  228. for (let index = 0; index < MainConfig.length; index++) {
  229. const element = MainConfig[index];
  230. if(element.app_id==app_id){
  231. list.push(element)
  232. }
  233. }
  234. return list
  235. }
  236. CMD.isGenre = function(FilterConfig,genre){
  237. let is_need = false
  238. //判断长篇短篇是否是要的数据
  239. for (let index = 0; index < FilterConfig.genre.length; index++) {
  240. const element = FilterConfig.genre[index];
  241. if(genre==element){
  242. is_need = true
  243. break
  244. }
  245. }
  246. return is_need
  247. }
  248. function deepCopy3(obj) {
  249. return JSON.parse(JSON.stringify(obj));
  250. }
  251. CMD.update_filter_data = async function(FilterConfig,data) {
  252. let isGenre = CMD.isGenre(FilterConfig,data.genre)
  253. // console.log("data.genre:",data.genre,data,isGenre)
  254. if(isGenre){
  255. 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})
  256. //创建一个小程序
  257. let AppConfig = await redis_help.getKeyValue("AppConfig")
  258. AppConfig = JSON.parse(AppConfig)
  259. let AppInfoList = CMD.getAppInfoByPlatformId(AppConfig,data.tg_platform_id)
  260. for (let j = 0; j < AppInfoList.length; j++) {
  261. const AppInfo = AppInfoList[j];
  262. data.app_id = AppInfo.app_id
  263. let PlatformInfo = await redis_help.getKeyValue("PlatformConfig")
  264. PlatformInfo = JSON.parse(PlatformInfo)
  265. if(PlatformInfo==null){
  266. return console.error("平台配置错误:",data)
  267. }
  268. let MainConfig = await redis_help.getKeyValue("MainConfig")
  269. MainConfig = JSON.parse(MainConfig)
  270. let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
  271. if(list.length<0){
  272. return console.error("获取主体错误:",data)
  273. }
  274. let black_books = await redis_help.getKeyValue("all_black_books")
  275. if(black_books!=null){
  276. black_books = JSON.parse(black_books)
  277. }
  278. for (let index = 0; index < list.length; index++) {
  279. const main_info = list[index];
  280. data.main_id = main_info.id
  281. data.main_name = main_info.main_name
  282. if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
  283. console.error("主体配置推广链接错误:",main_info)
  284. }else{
  285. if(!CMD.isBlackBook(black_books,data.book_id)){
  286. //符合标准进行创建表
  287. const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id})
  288. if(!result.success){
  289. //没有找到 可以创建
  290. await video_applet_product_controllers.createAppletProductData({
  291. book_platform:data.tg_platform_id,
  292. product_name:data.book_name,
  293. product_id:data.book_id,
  294. dy_small_program_start:"",
  295. dy_small_program_start_data:"",
  296. dy_small_applet_app_id:data.app_id,
  297. status:0,
  298. main_id:data.main_id,
  299. promotion_id:"",
  300. wait_status:0,
  301. })
  302. }
  303. }
  304. }
  305. }
  306. }
  307. }else{
  308. await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name,genre:data.genre})
  309. }
  310. }
  311. CMD.video_product_material = async function(data){
  312. let url = config.isDebug?config.debug_supdate_config.host:config.release_supdate_config.host
  313. url = url+'/sapi/video_product_material/supdate';
  314. const formData = new FormData();
  315. formData.append('data',JSON.stringify({
  316. dy_id:data.video_id,
  317. dy_url:data.video_link,
  318. product_id:data.book_id,
  319. product_name:data.book_name,
  320. d_z_number:data.like_num,
  321. collect_number:data.kepp_num,
  322. comment_number: data.comment_num,
  323. forward_number: data.shared_num,
  324. book_platform: data.tg_platform_id,
  325. title: data.title,
  326. yun_fabu_time:data.publish_time
  327. }))
  328. return await axios.post(url, formData, {
  329. headers: {
  330. 'Content-Type': 'multipart/form-data'
  331. }
  332. })
  333. .then(response => {
  334. if(response.data.code===10000){
  335. console.log("插入任务表成功:", response.data);
  336. }else{
  337. console.log("插入任务表失败:", formData);
  338. }
  339. })
  340. .catch(error => {
  341. console.error("插入任务表失败:", error,formData);
  342. });
  343. }
  344. CMD.insert_product = async function(data){
  345. return await video_product_controllers.createProductData({
  346. book_platform:data.tg_platform_id,
  347. product_name:data.book_name,
  348. genre:data.genre,
  349. product_id:data.book_id,
  350. words:data.words
  351. })
  352. }
  353. CMD.add_fq_book = async function(data,response){
  354. let book_name = response.book_name
  355. let book_id = response.book_id
  356. let genre = response.genre
  357. let words = response.word_number
  358. data.genre = 0
  359. if(genre=="0"){
  360. data.genre = 1;
  361. }
  362. if(genre=="8"){
  363. data.genre = 3;
  364. }
  365. if(genre=="202"){
  366. data.genre = 202;
  367. }
  368. data.words = words
  369. data.book_name = book_name
  370. data.book_id = book_id
  371. let tab = {
  372. book_key:data.key,
  373. book_id:data.book_id,
  374. info:JSON.stringify(response)
  375. }
  376. if(tab.book_id==undefined){
  377. throw "tab.book_id==undefined"
  378. }
  379. // console.log("tab:",tab,data)
  380. return await get_fq_book_tab_controllers.createData( tab)
  381. }
  382. // CMD.init()