PRODUCT_FACTORY.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. const process = require('process');
  2. const CMD = {}
  3. const video_product_controllers = require('../src/data_manager/Controllers/video_product_controllers');
  4. const filter_data_controllers = require('../src/data_manager/Controllers/filter_data_controllers');
  5. const get_fq_book_tab_controllers = require('../src/data_manager/Controllers/get_fq_book_tab_controllers');
  6. const video_applet_product_controllers = require('../src/data_manager/Controllers/video_applet_product_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 time_count = 2000;
  13. const task_queue = []
  14. async function processTask(){
  15. try{
  16. let isPauseTask = await redis_help.getKeyValue("isPauseTask")
  17. if(isPauseTask=="true"){
  18. return
  19. }
  20. let isInsertTask = false
  21. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  22. FilterConfig = JSON.parse(FilterConfig)
  23. let result = await filter_data_controllers.getFilterDataByStatus({ status: 0 });
  24. if(result.success){
  25. let tg_platform_id = result.data.tg_platform_id
  26. //判断是否存在这本书
  27. if(tg_platform_id==1){
  28. let hy_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id });
  29. if(hy_book_result.success){
  30. result.data.words = hy_book_result.data.words
  31. result.data.genre = hy_book_result.data.genre
  32. result.data.book_id = hy_book_result.data.product_id
  33. result.data.book_name = hy_book_result.data.product_name
  34. }else{
  35. isInsertTask = true
  36. }
  37. }else if(tg_platform_id==2){ //番茄
  38. //获取番茄书库的书
  39. let fq_book_result = await get_fq_book_tab_controllers.getData({ book_id: result.data.book_id });
  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.word_number
  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. }
  55. }else{
  56. isInsertTask = true
  57. }
  58. }
  59. if(!isInsertTask){
  60. await CMD.update_filter_data(FilterConfig,result.data)
  61. }else{
  62. await filter_data_controllers.updateFilterData({id:result.data.id},{status:1})
  63. task_queue.push({result:result})
  64. }
  65. }
  66. }catch(e){
  67. await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
  68. } finally{
  69. setTimeout(processTask, 500);
  70. }
  71. }
  72. async function processCreateTask(){
  73. try{
  74. if(task_queue.length>0){
  75. let task_queue_item = task_queue.pop()
  76. let FilterConfig = await redis_help.getKeyValue("FilterConfig")
  77. FilterConfig = JSON.parse(FilterConfig)
  78. let result = task_queue_item.result
  79. let tg_platform_id = result.data.tg_platform_id
  80. if(tg_platform_id==1){
  81. let hy_book_data = await require('./collect_hy_book').runTask(result.data)
  82. if(CMD.isGenre(FilterConfig,hy_book_data.genre)){
  83. await CMD.insert_product(hy_book_data)
  84. }
  85. result.data.words = hy_book_data.words
  86. result.data.genre = hy_book_data.genre
  87. result.data.book_id = hy_book_data.book_id
  88. result.data.book_name = hy_book_data.book_name
  89. }else if(tg_platform_id==2){
  90. let client = new HttpClient()
  91. let response = await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id))
  92. let obj = response['data']
  93. let book_name = obj['novel_data'].book_name
  94. let book_id = obj['novel_data'].book_id
  95. let genre = CMD.getFqGenre(obj['novel_data'].genre)
  96. let words = obj['novel_data'].word_number
  97. let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
  98. let fq_book = {}
  99. fq_book.key = result.data.book_id
  100. await CMD.add_fq_book(fq_book,fq_book_data)
  101. let product_result = await video_product_controllers.getProductData({ book_id: fq_book_data.book_id });
  102. if(!product_result.success){ //如果书库也没有
  103. fq_book.tg_platform_id = result.data.tg_platform_id
  104. if(CMD.isGenre(FilterConfig,fq_book_data.genre)){
  105. fq_book_data.tg_platform_id = result.data.tg_platform_id
  106. await CMD.insert_product(fq_book_data)
  107. }
  108. }
  109. result.data.words = words
  110. result.data.genre = fq_book_data.genre
  111. result.data.book_id = fq_book_data.book_id
  112. result.data.book_name = fq_book_data.book_name
  113. }
  114. await CMD.update_filter_data(FilterConfig,result.data)
  115. }
  116. }catch(e){
  117. } finally{
  118. setTimeout(processCreateTask, time_count);
  119. }
  120. }
  121. CMD.init = async function(){
  122. redis_help.connect((results)=>{
  123. if(results){
  124. }
  125. })
  126. processTask();
  127. processCreateTask();
  128. }
  129. CMD.getFqGenre = function(genre){
  130. if(genre=="0"){
  131. return 1;
  132. }
  133. if(genre=="8"){
  134. return 3;
  135. }
  136. if(genre=="202"){
  137. return 202;
  138. }
  139. return 999;
  140. }
  141. CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
  142. for (let index = 0; index < AppConfig.length; index++) {
  143. const element = AppConfig[index];
  144. if(element.tg_platform_id==tg_platform_id){
  145. return element
  146. }
  147. }
  148. return null
  149. }
  150. CMD.getMainInfoByAppid = function(MainConfig,app_id){
  151. let list = []
  152. for (let index = 0; index < MainConfig.length; index++) {
  153. const element = MainConfig[index];
  154. if(element.app_id==app_id){
  155. list.push(element)
  156. }
  157. }
  158. return list
  159. }
  160. CMD.isGenre = function(FilterConfig,genre){
  161. let is_need = false
  162. //判断长篇短篇是否是要的数据
  163. for (let index = 0; index < FilterConfig.genre.length; index++) {
  164. const element = FilterConfig.genre[index];
  165. if(genre==element){
  166. is_need = true
  167. break
  168. }
  169. }
  170. return is_need
  171. }
  172. function deepCopy3(obj) {
  173. return JSON.parse(JSON.stringify(obj));
  174. }
  175. CMD.update_filter_data = async function(FilterConfig,data) {
  176. if(CMD.isGenre(FilterConfig,data.genre)){
  177. try{
  178. await CMD.video_product_material(data)
  179. }catch(e){
  180. console.log("video_product_material error:",e)
  181. }
  182. 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})
  183. //创建一个小程序
  184. let AppConfig = await redis_help.getKeyValue("AppConfig")
  185. AppConfig = JSON.parse(AppConfig)
  186. let AppInfo = CMD.getAppInfoByPlatformId(AppConfig,data.tg_platform_id)
  187. data.app_id = AppInfo.app_id
  188. let PlatformInfo = await redis_help.getKeyValue("PlatformConfig")
  189. PlatformInfo = JSON.parse(PlatformInfo)
  190. if(PlatformInfo==null){
  191. return console.error("平台配置错误:",data)
  192. }
  193. let MainConfig = await redis_help.getKeyValue("MainConfig")
  194. MainConfig = JSON.parse(MainConfig)
  195. let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
  196. if(list.length<0){
  197. return console.error("获取主体错误:",data)
  198. }
  199. for (let index = 0; index < list.length; index++) {
  200. const main_info = list[index];
  201. data.main_id = main_info.id
  202. data.main_name = main_info.main_name
  203. if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
  204. console.error("主体配置推广链接错误:",main_info)
  205. }else{
  206. //符合标准进行创建表
  207. const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id})
  208. if(!result.success){
  209. //没有找到 可以创建
  210. await video_applet_product_controllers.createAppletProductData({
  211. book_platform:data.tg_platform_id,
  212. product_name:data.book_name,
  213. product_id:data.book_id,
  214. dy_small_program_start:"",
  215. dy_small_program_start_data:"",
  216. dy_small_applet_app_id:data.app_id,
  217. status:0,
  218. main_id:data.main_id,
  219. promotion_id:"",
  220. wait_status:0,
  221. })
  222. }
  223. }
  224. }
  225. }else{
  226. await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name,genre:data.genre})
  227. }
  228. }
  229. CMD.video_product_material = async function(data){
  230. let url = config.isDebug?config.debug_supdate_config.host:config.release_supdate_config.host
  231. url = url+'/sapi/video_product_material/supdate';
  232. const formData = new FormData();
  233. formData.append('data',JSON.stringify({
  234. dy_id:data.video_id,
  235. dy_url:data.video_link,
  236. product_id:data.book_id,
  237. product_name:data.book_name,
  238. d_z_number:data.like_num,
  239. collect_number:data.kepp_num,
  240. comment_number: data.comment_num,
  241. forward_number: data.shared_num,
  242. book_platform: data.tg_platform_id,
  243. title: data.title,
  244. yun_fabu_time:data.publish_time
  245. }))
  246. return await axios.post(url, formData, {
  247. headers: {
  248. 'Content-Type': 'multipart/form-data'
  249. }
  250. })
  251. .then(response => {
  252. if(response.data.code===10000){
  253. console.log("插入任务表成功:", response.data);
  254. }else{
  255. console.log("插入任务表失败:", formData);
  256. }
  257. })
  258. .catch(error => {
  259. console.error("插入任务表失败:", error,formData);
  260. });
  261. }
  262. CMD.insert_product = async function(data){
  263. return await video_product_controllers.createProductData({
  264. book_platform:data.tg_platform_id,
  265. product_name:data.book_name,
  266. genre:data.genre,
  267. product_id:data.book_id,
  268. words:data.words
  269. })
  270. }
  271. CMD.add_fq_book = async function(data,response){
  272. let book_name = response.book_name
  273. let book_id = response.book_id
  274. let genre = response.genre
  275. let words = response.word_number
  276. data.genre = 0
  277. if(genre=="0"){
  278. data.genre = 1;
  279. }
  280. if(genre=="8"){
  281. data.genre = 3;
  282. }
  283. if(genre=="202"){
  284. data.genre = 202;
  285. }
  286. data.words = words
  287. data.book_name = book_name
  288. data.book_id = book_id
  289. return await get_fq_book_tab_controllers.createData( {
  290. book_key:data.key,
  291. book_id:data.book_id,
  292. info:JSON.stringify(response)
  293. })
  294. }
  295. CMD.build_check_url = function(data){
  296. let url = 'https://clipvideoup.s6kuwan.com/sapi/check/get_check_url';
  297. const formData = new FormData();
  298. formData.append('platform_id', data.book_platform);
  299. formData.append('cp_spread_id', data.promotion_id);
  300. // console.log("formData:", formData);
  301. axios.post(url, formData, {
  302. headers: {
  303. 'Content-Type': 'multipart/form-data'
  304. }
  305. })
  306. .then(response => {
  307. if(response.data.code==10000){
  308. CMD.update_video_applet_product({promotion_id:data.promotion_id,
  309. product_id:data.product_id,check_url:response.data.content.check_url
  310. })
  311. }
  312. })
  313. .catch(error => {
  314. console.error('create_link was an error!', error);
  315. });
  316. }
  317. CMD.update_video_applet_product = function(data){
  318. sql_task_help.update('UPDATE video_applet_product SET status = ?, wait_status = ? , check_url = ? WHERE promotion_id = ? and product_id = ?',
  319. [1,1,data.check_url,data.promotion_id,data.product_id],
  320. ()=>{
  321. console.log("update_video_applet_product:更新成功!")
  322. })
  323. }
  324. // process.on('message', ()=>{
  325. // });
  326. CMD.init()