const CMD = {} const video_product_controllers = require('../src/data_manager/Controllers/video_product_controllers'); const filter_data_controllers = require('../src/data_manager/Controllers/filter_data_controllers'); const video_applet_product_controllers = require('../src/data_manager/Controllers/video_applet_product_controllers'); const redis_help = require('../src/use_redis'); const axios = require('axios'); const config = require('../etc/config.json'); const time_count = 1000; const task_queue = [] async function processTask(){ let result = null try{ let isPauseTask = await redis_help.getKeyValue("isPauseTask") if(isPauseTask=="true"){ return } let isInsertTask = false let FilterConfig = await redis_help.getKeyValue("FilterConfig") FilterConfig = JSON.parse(FilterConfig) result = await filter_data_controllers.getFilterDataByStatusAndLimit({ status: 0 , tg_platform_id: config.platform_dianzhong },500); if(result.success){ let ProductIds = [] let FilterList = [] for (let index = 0; index < result.data.length; index++) { const filter_item = result.data[index]; ProductIds.push(filter_item.book_id) FilterList[filter_item.book_id] = filter_item } let product_list_result = await video_product_controllers.findNonExistentProductIds(ProductIds); if(product_list_result.success){ console.log("product_list_result:",product_list_result.data) for (let index = 0; index < product_list_result.data.existingRecords.length; index++) { const product_item = product_list_result.data.existingRecords[index]; let info = FilterList[product_item.product_id] info.words = product_item.words info.genre = product_item.genre info.book_id = product_item.product_id info.book_name = product_item.product_name await CMD.update_filter_data(FilterConfig,info) } let Ids = [] for (let index = 0; index < product_list_result.data.nonExistentIds.length; index++) { const product_id = product_list_result.data.nonExistentIds[index]; Ids.push(FilterList[product_id].id) task_queue.push({result:{data:FilterList[product_id]}}) } console.log("Ids:",Ids) if(Ids.length>0){ await filter_data_controllers.updateFilterDataByIds({ids:Ids},{status:1}) } } } // result = await filter_data_controllers.getFilterDataByStatus({ status: 0 , tg_platform_id: config.platform_dianzhong }); // if(result.success){ // let tg_platform_id = result.data.tg_platform_id // //判断是否存在这本书 // if(tg_platform_id==config.platform_dianzhong){ //点众 // let dz_book_result = await video_product_controllers.getProductData({ book_id: result.data.book_id }); // if(dz_book_result.success){ // result.data.words = dz_book_result.data.words // result.data.genre = dz_book_result.data.genre // result.data.book_id = dz_book_result.data.product_id // result.data.book_name = dz_book_result.data.product_name // }else{ // isInsertTask = true // } // } // if(!isInsertTask){ // await CMD.update_filter_data(FilterConfig,result.data) // }else{ // await filter_data_controllers.updateFilterData({id:result.data.id},{status:1}) // task_queue.push({result:result}) // } // } }catch(e){ console.error("processTask error:",e) // if(result!=null&&result!=undefined){ // await filter_data_controllers.updateFilterData({id:result.data.id},{status:2}) // } } finally{ global.setTimeout(processTask, 500); } } async function processCreateTask(){ let result = null try{ if(task_queue.length>0){ let task_queue_item = task_queue.pop() let product = await video_product_controllers.getProductData({ book_id: task_queue_item.result.data.book_id }); let FilterConfig = await redis_help.getKeyValue("FilterConfig") FilterConfig = JSON.parse(FilterConfig) if(!product.success){ result = task_queue_item.result let tg_platform_id = result.data.tg_platform_id if(tg_platform_id==config.platform_dianzhong){ //点众 let dz_book_data = await require('../src/api/dz/dz_search_book').search_id(result.data.book_id) if(dz_book_data==null){ result.data.genre = 999 }else{ dz_book_data.tg_platform_id = result.data.tg_platform_id if(CMD.isGenre(FilterConfig,dz_book_data.genre)){ await CMD.insert_product(dz_book_data) } result.data.words = dz_book_data.words result.data.genre = dz_book_data.genre result.data.book_id = dz_book_data.book_id result.data.book_name = dz_book_data.book_name } } } await CMD.update_filter_data(FilterConfig,result.data) } }catch(e){ console.log("error::",e) if(result!=null){ await filter_data_controllers.updateFilterData({id:result.data.id},{status:2}) } console.log("processCreateTask:",e) } finally{ global.setTimeout(processCreateTask, time_count); } } CMD.init = async function(){ redis_help.connect((results)=>{ if(results){ } }) processTask(); processCreateTask(); } CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){ let temp = [] for (let index = 0; index < AppConfig.length; index++) { const element = AppConfig[index]; if(element.tg_platform_id==tg_platform_id){ temp.push(element) } } return temp } CMD.isBlackBook = function(all_black_books,book_id){ if(all_black_books==null){ return false } for (let index = 0; index < all_black_books.length; index++) { const black_book = all_black_books[index]; if(black_book.product_id==book_id){ return true } } return false } CMD.getMainInfoByAppid = function(MainConfig,app_id){ let list = [] for (let index = 0; index < MainConfig.length; index++) { const element = MainConfig[index]; if(element.app_id==app_id){ list.push(element) } } return list } CMD.isGenre = function(FilterConfig,genre){ let is_need = false //判断长篇短篇是否是要的数据 for (let index = 0; index < FilterConfig.genre.length; index++) { const element = FilterConfig.genre[index]; if(genre==element){ is_need = true break } } return is_need } CMD.update_filter_data = async function(FilterConfig,data) { let isGenre = CMD.isGenre(FilterConfig,data.genre) // console.log("data.genre:",data.genre,data,isGenre) if(isGenre){ try{ CMD.video_product_material(data) }catch(e){ console.log("video_product_material error:",e) } 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}) //创建一个小程序 let AppConfig = await redis_help.getKeyValue("AppConfig") AppConfig = JSON.parse(AppConfig) let AppInfoList = CMD.getAppInfoByPlatformId(AppConfig,data.tg_platform_id) for (let j = 0; j < AppInfoList.length; j++) { const AppInfo = AppInfoList[j]; data.app_id = AppInfo.app_id let PlatformInfo = await redis_help.getKeyValue("PlatformConfig") PlatformInfo = JSON.parse(PlatformInfo) if(PlatformInfo==null){ return console.error("平台配置错误:",data) } let MainConfig = await redis_help.getKeyValue("MainConfig") MainConfig = JSON.parse(MainConfig) let list = CMD.getMainInfoByAppid(MainConfig,data.app_id) if(list.length<0){ return console.error("获取主体错误:",data) } let black_books = await redis_help.getKeyValue("all_black_books") if(black_books!=null){ black_books = JSON.parse(black_books) } for (let index = 0; index < list.length; index++) { const main_info = list[index]; data.main_id = main_info.id data.main_name = main_info.main_name if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){ console.error("主体配置推广链接错误:",main_info) }else{ if(!CMD.isBlackBook(black_books,data.book_id)){ //符合标准进行创建表 const result = await video_applet_product_controllers.getAppletProductData({book_id:data.book_id,main_id:data.main_id}) if(!result.success){ //没有找到 可以创建 await video_applet_product_controllers.createAppletProductData({ book_platform:data.tg_platform_id, product_name:data.book_name, product_id:data.book_id, dy_small_program_start:"", dy_small_program_start_data:"", dy_small_applet_app_id:data.app_id, status:0, main_id:data.main_id, promotion_id:"", wait_status:0, }) } } } } } }else{ await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name,genre:data.genre}) } } CMD.video_product_material = async function(data){ let url = config.isDebug?config.debug_supdate_config.host:config.release_supdate_config.host url = url+'/sapi/video_product_material/supdate'; const formData = new FormData(); formData.append('data',JSON.stringify({ dy_id:data.video_id, dy_url:data.video_link, product_id:data.book_id, product_name:data.book_name, d_z_number:data.like_num, collect_number:data.kepp_num, comment_number: data.comment_num, forward_number: data.shared_num, book_platform: data.tg_platform_id, title: data.title, yun_fabu_time:data.publish_time })) return await axios.post(url, formData, { headers: { 'Content-Type': 'multipart/form-data' } }) .then(response => { if(response.data.code===10000){ console.log("点众插入任务表成功:", response.data); }else{ console.log("插入任务表失败:", formData); } }) .catch(error => { console.error("插入任务表失败:", error,formData); }); } CMD.insert_product = async function(data){ return await video_product_controllers.createProductData({ book_platform:data.tg_platform_id, product_name:data.book_name, genre:data.genre, product_id:data.book_id, words:data.words }) } CMD.init()