904118851 8 months ago
parent
commit
2e79d6bc11

+ 1 - 0
.gitignore

@@ -4,3 +4,4 @@ src/api/hy/qr_resized.gif
 # 忽略所有 .log 文件
 *.log
 *.out
+*.gif

+ 49 - 1
0_RECEIVE_FACTORY/README.md

@@ -1,2 +1,50 @@
 接收工厂
-接收第一手消息
+接收第一手消息
+
+-- 检查事件调度器状态
+SHOW VARIABLES LIKE 'event_scheduler';
+
+-- 开启事件调度器
+SET GLOBAL event_scheduler = ON;
+
+
+DROP EVENT IF EXISTS delete_old_records;
+
+
+DELIMITER //
+CREATE EVENT delete_old_records
+ON SCHEDULE EVERY 1 DAY
+STARTS CURRENT_TIMESTAMP
+DO
+BEGIN
+    DELETE FROM tg_callback_log    -- 替换为你的表名
+    WHERE create_time < DATE_SUB(NOW(), INTERVAL 2 DAY);   -- 替换为你的时间字段名
+END //
+DELIMITER ;
+
+
+
+-- 查看所有事件
+SHOW EVENTS;
+
+-- 查看特定事件详情
+SHOW CREATE EVENT delete_old_records;
+
+
+-- 停止事件
+ALTER EVENT delete_old_records DISABLE;
+
+-- 启动事件
+ALTER EVENT delete_old_records ENABLE;
+
+
+-- 首先确保事件调度器是开启的
+SET GLOBAL event_scheduler = ON;
+
+-- 创建一个事件,每天执行一次删除操作
+CREATE EVENT delete_old_data_by_origin_data
+ON SCHEDULE EVERY 1 DAY
+STARTS CURRENT_TIMESTAMP
+DO
+  DELETE FROM origin_data
+  WHERE create_time < DATE_SUB(NOW(), INTERVAL 48 HOUR);

+ 116 - 3
0_RECEIVE_FACTORY/RECEIVE_FACTORY.js

@@ -2,8 +2,12 @@ const CMD = {}
 const time_count = 250;
 const PROT = 9101
 var http = require('http');
+const axios = require('axios')
 const redis_help = require('../src/use_redis');
 const origin_data_controllers = require('../src/data_manager/Controllers/origin_data_controllers');
+const helper = require('../src/helper');
+const HttpClient = require('../src/HttpClient')
+const config = require('../etc/config.json')
 var recv_data_list = []
 
 const 视频id = 0;
@@ -31,7 +35,7 @@ async function processTask(){
             guajian_link = xml[挂件地址]
             const result = await origin_data_controllers.getOriginData({video_id:xml[视频id]})
             if(result.success){
-                await origin_data_controllers.updateOriginData({video_id:xml[视频id]},{kepp_num:xml[收藏数],comment_num:xml[评论数],like_num:xml[点赞数],shared_num:xml[分享数],guajian_link:guajian_link})
+                await origin_data_controllers.updateOriginData({id:result.data.id},{kepp_num:xml[收藏数],comment_num:xml[评论数],like_num:xml[点赞数],shared_num:xml[分享数],guajian_link:guajian_link})
             }else{
                 await origin_data_controllers.createOriginData(
                     {
@@ -87,6 +91,95 @@ CMD.runTask = async function(){
  
 }
 
+CMD.test_fq_book_sid_tt = async function(book_id,sid_tt){
+    try{
+        let client =new HttpClient()
+        let response =  await client.proxyRequest( helper.getFqRequestOpt(book_id,sid_tt))
+        let obj = response['data']
+        return obj['novel_data']
+    }catch(e){
+        // return {"error_book_id":book_id,"error_sid_tt":sid_tt}
+        return null
+    }
+
+}
+
+CMD.get_group_mapping = function(res){
+    let get_hy_group_mapping = require('../src/api/hy/get_hy_group_mapping');
+    get_hy_group_mapping.get_group_mapping((data)=>{
+        res.writeHead(200, {'Content-Type': 'application/json'});
+        if(data.code==200){
+            let list = data.data
+            res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
+        }else{
+            res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
+        }
+        console.log("get_hy_group_mapping:",data)
+    })
+}
+CMD.get_hy_rechargeTemplate = function(res){
+    let get_hy_recharge_template = require('../src/api/hy/get_hy_recharge_template');
+    get_hy_recharge_template.get_recharge_template("1865735741365059585",(data)=>{
+        res.writeHead(200, {'Content-Type': 'application/json'});
+        if(data.code==200){
+            let list = data.data
+            res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
+        }else{
+            res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
+        }
+        console.log("get_hy_rechargeTemplate:",data)
+    })
+}
+
+CMD.get_hy_passBackTemplate = function(res){
+    let get_hy_call_back_template = require('../src/api/hy/get_hy_call_back_template');
+        get_hy_call_back_template.get_callback_template((data)=>{
+        res.writeHead(200, {'Content-Type': 'application/json'});
+        if(data.code==200){
+            let list = data.data
+            res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
+        }else{
+            res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
+        }
+        console.log("get_hy_passBackTemplate:",data)
+    })
+}
+
+CMD.get_fq_rechargeTemplate = function(res){
+    var distributorId = config.fanqie_config.distributorId;
+    var secretKey = config.fanqie_config.secretKey;
+    const postData = {
+        distributor_id: distributorId,
+        ts: helper.getCurrentUnixTimestamp(),
+        sign: helper.getSign(distributorId,secretKey),
+        page_size: 100,
+        page_index:0,
+    };
+    // console.log("get_recharge_template:")
+    var url = config.fanqie_config.recharge_list_host
+    var base_params = `/?distributor_id=${postData.distributor_id}&ts=${postData.ts}&sign=${postData.sign}`
+    var other_params = `&page_size=${postData.page_size}&page_index=${postData.page_index}`
+
+    axios.get(`${url}${base_params}${other_params}`)
+    .then(response => {
+        // console.log('Response data:', response.data );
+        let data  = response.data
+        res.writeHead(200, {'Content-Type': 'application/json'});
+        if(data.code==200){
+            let list = data.data
+            res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
+        }else{
+            res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
+        }
+        console.log("get_fq_rechargeTemplate:",data)
+    })
+    .catch(error => {
+        console.error('Error:', error);
+        res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
+    });
+}
+
+
 
 var server = http.createServer(function(req,res){
 
@@ -117,11 +210,31 @@ var server = http.createServer(function(req,res){
                         }else{
                             res.end(JSON.stringify({ msg: '服务器繁忙!',code:10000,data:{}}));
                         }
-                       
-                    }else{
+                        
+                    }else if(jsonData['fun']=="test_fq_book_sid_tt"&&jsonData['cmd']=="fq_book"){
+                        let book_id = jsonData['data']['book_id']
+                        let sid_tt = jsonData['data']['sid_tt']
+                        let info = await CMD.test_fq_book_sid_tt(book_id,sid_tt) 
+                        res.writeHead(200, {'Content-Type': 'application/json'});
+                        if(info==null){
+                            res.end(JSON.stringify({ message:"失败",code:10001}));
+                        }else{
+                            res.end(JSON.stringify({ message:"成功!",data:info,code:10000}));
+                        }
+                      
+                    }else if(jsonData['fun']=="groupMapping"&&jsonData['cmd']=="hy_link"){
+                         CMD.get_group_mapping(res) 
+                    }else if(jsonData['fun']=="rechargeTemplate"&&jsonData['cmd']=="hy_link"){
+                        CMD.get_hy_rechargeTemplate(res) 
+                    }else if(jsonData['fun']=="passBackTemplate"&&jsonData['cmd']=="hy_link"){
+                        CMD.get_hy_passBackTemplate(res) 
+                    }else if(jsonData['fun']=="rechargeTemplate"&&jsonData['cmd']=="fq_link"){
+                        CMD.get_fq_rechargeTemplate(res) 
+                    } else{
                         res.writeHead(200, {'Content-Type': 'application/json'});
                         res.end(JSON.stringify({ message: 'fun 错误',code:100}));
                     }
+
                 } catch (error) {
                     // 处理解析错误
                     console.error('Error parsing JSON:', error);

+ 1 - 1
1_FILTER_FACTORY/FILTER_FACTORY.js

@@ -45,7 +45,7 @@ async function processTask(){
                     })
                 }
             }
-            await origin_data_controllers.updateOriginData({video_id:result.data.video_id},{
+            await origin_data_controllers.updateOriginData({video_id:result.data.id},{
                 status:1
             })
         }

+ 40 - 18
2_PRODUCT_FACTORY/PRODUCT_FACTORY.js

@@ -8,6 +8,7 @@ const axios = require('axios');
 const config = require('../etc/config.json');
 const HttpClient = require('../src/HttpClient');
 const helper = require('../src/helper');
+const tools = require('../tools');
 const time_count = 2000;
 const task_queue = []
 
@@ -92,7 +93,8 @@ async function processCreateTask(){
                 result.data.book_name = hy_book_data.book_name
             }else if(tg_platform_id==2){
                 let client =  new HttpClient()
-                let response =  await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id))
+                let sid_tt = await tools.getFqSidtt()
+                let response =  await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id,sid_tt))
                 let obj = response['data']
                 let book_name =  obj['novel_data'].book_name
                 let book_id = obj['novel_data'].book_id
@@ -155,7 +157,18 @@ CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
     }
     return null
 }
-
+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++) {
@@ -217,6 +230,13 @@ CMD.update_filter_data = async function(FilterConfig,data) {
         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
@@ -224,22 +244,24 @@ CMD.update_filter_data = async function(FilterConfig,data) {
             if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
                 console.error("主体配置推广链接错误:",main_info)
             }else{
-                //符合标准进行创建表
-                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,
-                    })
+                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,
+                        })
+                    }
                 }
             }
         }

+ 31 - 0
5_CREATE_LINK_FACTORY/CREATE_LINK_FACTORY.js

@@ -27,14 +27,45 @@ let finish_call_back = async function(new_data,error_info=null){
     }
    
 }
+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
+}
 async function processTask(){
     try{
         let MainConfig = await redis_help.getKeyValue("MainConfig")
         MainConfig = JSON.parse(MainConfig)
         let PlatformConfig = await redis_help.getKeyValue("PlatformConfig")
         PlatformConfig = JSON.parse(PlatformConfig)
+
+
+        let black_books = await redis_help.getKeyValue("all_black_books")
+        
+        if(black_books!=null){
+            black_books = JSON.parse(black_books)
+        }
+       
         let result = await video_applet_product_controllers.getAppletProductDataByStatus({status:0,wait_status:0})
+
         if(result.success){
+
+            if(CMD.isBlackBook(black_books,result.data.product_id)){
+                await video_applet_product_controllers.updateData({id:result.data.id},{
+                    status:2,
+                    wait_status:2,
+                    error_info:JSON.stringify({msg:"当前书在黑名单"})
+                })
+                throw "当前书在黑名单"
+            }
+
             let PlatformInfo = null
             PlatformInfo = CMD.getPlatformInfoById(PlatformConfig,result.data.book_platform)
             if(PlatformInfo==null){

+ 14 - 12
5_CREATE_LINK_FACTORY/fq_create_link.js

@@ -1,13 +1,14 @@
 //执行一个创建番茄链接任务
 const axios = require('axios');
 const helper = require('../src/helper');
+const config = require('../etc/config.json')
 const CMD = {}
 
 
 //充值
 async function get_recharge_template(){
-    var distributorId = 1814786227164169;
-    var secretKey = 'CN6KQ8Bauo8JXg5fFPk86EHdRFIUVnyV';
+    var distributorId = config.fanqie_config.distributorId;
+    var secretKey = config.fanqie_config.secretKey;
     const postData = {
         distributor_id: distributorId,
         ts: helper.getCurrentUnixTimestamp(),
@@ -16,7 +17,7 @@ async function get_recharge_template(){
         page_index:0,
     };
     // console.log("get_recharge_template:")
-    var url = 'https://www.changdunovel.com/novelsale/openapi/recharge_template/list/v1/'
+    var url = config.fanqie_config.recharge_list_host
     var base_params = `/?distributor_id=${postData.distributor_id}&ts=${postData.ts}&sign=${postData.sign}`
     var other_params = `&page_size=${postData.page_size}&page_index=${postData.page_index}`
 
@@ -31,7 +32,7 @@ async function get_recharge_template(){
 
 }
 CMD.runTask = async function(data,main_info,PlatformInfo,call_back){
-    let recharge =  await get_recharge_template()
+    // let recharge =  await get_recharge_template()
     // console.log("recharge:",recharge)
     let  tg_link_config = JSON.parse(main_info.tg_link_config)
     let chongzhi_id = tg_link_config['chongzhi_id']
@@ -42,17 +43,18 @@ CMD.runTask = async function(data,main_info,PlatformInfo,call_back){
         const cz_obj = chongzhi_list[index];
         if(cz_obj.id==chongzhi_id){
           chongzhi_name = cz_obj.name
+          recharge_template_id = cz_obj.value
           break
         }
     }
-    if(recharge.code==200&&chongzhi_name!=null){
-        for (let index = 0; index < recharge.data.length; index++) {
-            const recharge_item = recharge.data[index];
-            if(recharge_item.recharge_template_name==chongzhi_name){
-                recharge_template_id = recharge_item.recharge_template_id
-            }
-        }
-    }
+    // if(recharge.code==200&&chongzhi_name!=null){
+    //     for (let index = 0; index < recharge.data.length; index++) {
+    //         const recharge_item = recharge.data[index];
+    //         if(recharge_item.recharge_template_name==chongzhi_name){
+    //             recharge_template_id = recharge_item.recharge_template_id
+    //         }
+    //     }
+    // }
     // console.log("recharge_template_id:",recharge_template_id)
     try {
         let create_fanqie_book_link = require('../src/api/fq/create_fanqie_book_link')

+ 32 - 55
5_CREATE_LINK_FACTORY/hy_create_link.js

@@ -44,29 +44,30 @@ function get_call_back(huichuan_name,call_back){
 }
 
 function get_recharge_template(book_id,chongzhi_name,call_back){
-    get_hy_recharge_template.get_recharge_template(book_id,(data)=>{
-        if(data.code==200){
-          let is_find = false
-          for (let index = 0; index < data.data.length; index++) {
-            const obj = data.data[index];
-            if(obj.value==chongzhi_name){
-              is_find = true
-              call_back(obj.key)
-              break
-            }
-          }
-          if(!is_find){
-            call_back('0')
+  get_hy_recharge_template.get_recharge_template(book_id,(data)=>{
+      if(data.code==200){
+        let is_find = false
+        for (let index = 0; index < data.data.length; index++) {
+          const obj = data.data[index];
+          if(obj.value==chongzhi_name){
+            is_find = true
+            call_back(obj.key)
+            break
           }
-        }else{
+        }
+        if(!is_find){
           call_back('0')
         }
-    })
+      }else{
+        call_back('0')
+      }
+  })
 }
 CMD.runTask = function(data,main_info,PlatformInfo,call_back){
-  // console.log("data:",data)
-  // console.log("PlatformInfo:",PlatformInfo)
-  // console.log("main_info:",main_info.tg_link_config)
+  let group_id = main_info.group_id
+  if(group_id==null){
+    group_id = "35"
+  }
   let  tg_link_config = JSON.parse(main_info.tg_link_config)
   let kadian_id = tg_link_config['kadian_id']
   let chongzhi_id = tg_link_config['chongzhi_id']
@@ -77,10 +78,16 @@ CMD.runTask = function(data,main_info,PlatformInfo,call_back){
   let chongzhi_name = null
   let huichuan_name = null
   let kadian_name = null
+  let tg_config = {
+    chongzhi_key:'',
+    huichuan_key:'',
+    kadian_key:''
+  }
   for (let index = 0; index < chongzhi_list.length; index++) {
     const cz_obj = chongzhi_list[index];
     if(cz_obj.id==chongzhi_id){
       chongzhi_name = cz_obj.name
+      tg_config.chongzhi_key = cz_obj.value
       break
     }
   }
@@ -90,6 +97,7 @@ CMD.runTask = function(data,main_info,PlatformInfo,call_back){
     const hc_obj = huichuan_list[index];
     if(hc_obj.id==huichuan_id){
       huichuan_name = hc_obj.name
+      tg_config.huichuan_key = hc_obj.value
       break
     }
   }
@@ -102,17 +110,6 @@ CMD.runTask = function(data,main_info,PlatformInfo,call_back){
     }
   }
 
-  // console.log("chongzhi_name:",chongzhi_name)
-  // console.log("huichuan_name:",huichuan_name)
-  // console.log("kadian_name:",kadian_name)
-  let num = 0;
-  let tg_config = {
-    chongzhi_key:'',
-    huichuan_key:'',
-    kadian_key:''
-  }
-  // start_page: 'pages/readPage/chapter',
-  // start_param: 'pid=1809545659599544322&bookId=1849369533770342401&linkId=1860983668277948418&channels=4&hyChannel=1'
   let create_hy_link = async () =>{
       let topUpTemplateId = tg_config.chongzhi_key;  //充值模板
       let passBackTemplateId = tg_config.huichuan_key; //回传模板
@@ -129,20 +126,18 @@ CMD.runTask = function(data,main_info,PlatformInfo,call_back){
           paidPoint:paidPoint,
           token:await tools.getHyToken()
         };
-        let data = {
+        let t_data = {
           "name": postData.name,
           "bookId": postData.bookId,
           "passBackTemplateId":  postData.passBackTemplateId,
           "adPassbackTemplateId": "",
           "topUpTemplateId": postData.topUpTemplateId,
           "mediaChannel": "1",
-          "group": "35", 
+          "group": group_id, 
           "paidPoint": postData.paidPoint,
           "site": "5" 
         }
-        let res =  await clinet.otherPost( helper.getHyCreateLinkOpt(postData.token) ,data)
-        console.log("res:",res)
-    
+        let res =  await clinet.otherPost( helper.getHyCreateLinkOpt(postData.token) ,t_data)
         let response = {
             "message": "create_link successfully",
             "received_data":{"originalId":res["data"]["originalId"],
@@ -151,41 +146,23 @@ CMD.runTask = function(data,main_info,PlatformInfo,call_back){
                             "fullPath":res["data"]["fullPath"],
                             "wxMountLink":res["data"]["wxMountLink"]}
         }
-    
-        let params = response.data.received_data.fullPath.split('?')
-        // let appId = response.data.data.appId
+        let params = response.received_data.fullPath.split('?')
         let start_page = params[0]
         let start_param = params[1]
         const linkId = start_param.match(/linkId=([^&]*)/)[1];
         data.promotion_id = linkId
         data.start_page = start_page
         data.start_param = start_param
-        // console.log("response.data.received_data:",response.data.received_data)
         call_back(data) 
       }catch(e){
         call_back(null)
-        console.error('There was an error!', error);
-      }
-  }
-  let count_num = ()=>{
-      num++;
-      if(num==3){
-          create_hy_link()
+        console.error('There was an error!', e);
       }
   }
-  get_recharge_template(data.book_id,chongzhi_name,(chongzhi_key)=>{
-    tg_config.chongzhi_key = chongzhi_key
-    count_num()
-  })
-
-  get_call_back(huichuan_name,(huichuan_key)=>{
-    tg_config.huichuan_key = huichuan_key
-    count_num()
-  })
 
   get_paid_point(data.book_id,kadian_name,(kadian_key)=>{
     tg_config.kadian_key = kadian_key
-    count_num()
+    create_hy_link()
   })
 }
 

+ 36 - 0
MESSAGE_DISPATCH/MESSAGE_DISPATCH.js

@@ -66,6 +66,36 @@ CMD.updatePlatformConfig = async function(){
       console.error('updateFilterConfig error!', error);
     });
 }
+
+CMD.updateFqKeyList = async function(){
+    const postData = {
+        cmd:"fq_book",
+        fun:"get_all_fq_key",
+        data:{}
+    };
+    axios.post('http://127.0.0.1:9100/tg/back/api', postData)
+    .then(response => {
+        redis_help.setKeyValue("all_fq_key",JSON.stringify(response.data.data))
+    })
+    .catch(error => {
+      console.error('all_fq_key error!', error);
+    });
+}
+
+CMD.updateBlackBooks = async function(){
+    const postData = {
+        cmd:"book_black_list",
+        fun:"get_all_black_books",
+        data:{}
+    };
+    axios.post('http://127.0.0.1:9100/tg/back/api', postData)
+    .then(response => {
+        redis_help.setKeyValue("all_black_books",JSON.stringify(response.data.data))
+    })
+    .catch(error => {
+      console.error('all_black_books error!', error);
+    });
+}
 var ws_isOpen = false
 CMD.myListener = {
     onOpen: function (webSocket, response) {
@@ -128,6 +158,12 @@ async function recvMessage(data){
             case "updatePlatformConfig":
                 CMD.updatePlatformConfig()
             break;     
+            case "updateFqKeyList":
+                CMD.updateFqKeyList()
+            break;
+            case "updateBlackBooks":
+                CMD.updateBlackBooks()
+            break;
             default:
                 const postData = {
                     cmd:"filter_task",

+ 164 - 0
PULL_DATA_FACTORY/PULL_DATA.js

@@ -0,0 +1,164 @@
+const CMD = {}
+const time_count = 5000;
+const redis_help = require('../src/use_redis');
+const origin_data_controllers = require('../src/data_manager/Controllers/origin_data_controllers');
+const pull_log_controllers = require('../src/data_manager/Controllers/pull_log_controllers');
+const helper = require('../src/helper');
+const axios = require('axios')
+const HttpClient = require('../src/HttpClient')
+const config = require('../etc/config.json')
+var session = null
+var cur_page = 0
+var task_list = []
+async function processTask(){
+    try{
+        if(cur_page>6){
+            throw "没有数据了"
+        }
+        let FilterConfig = await redis_help.getKeyValue("FilterConfig")
+        FilterConfig = JSON.parse(FilterConfig)
+        let response = await CMD.get_novel_material_list(cur_page,5000)
+        // console.log("get_novel_material_list:",response)
+        let materialId_list = []
+        let materialId_data_list = []
+        for (let index = 0; index < response.result.list.length; index++) {
+            const origin_element = response.result.list[index];
+            const result = await origin_data_controllers.getOriginData({
+                materialId:origin_element.materialId})
+            if(result.success){
+                await origin_data_controllers.updateOriginData({id:result.data.id},
+                    {
+                        kepp_num:origin_element.favoriteCount.count,
+                        comment_num:origin_element.commentCount.count,
+                        like_num:origin_element.likeCount.count,
+                        shared_num:origin_element.shareCount.count
+                    })
+            }else{
+                if(CMD.isRight(FilterConfig,origin_element)){
+                    materialId_list.push(origin_element.materialId)
+                    materialId_data_list[origin_element.materialId] =  {
+                        kepp_num:origin_element.favoriteCount.count,
+                        comment_num:origin_element.commentCount.count,
+                        like_num:origin_element.likeCount.count,
+                        shared_num:origin_element.shareCount.count
+                    }
+                }
+            }
+        }
+
+
+        response = await CMD.get_detail(materialId_list)
+        for (let index = 0; index < response.result.list.length; index++) {
+            const element = response.result.list[index];
+            const info = materialId_data_list[element.materialId]
+            if(element.hasAnchorInfo){
+                await origin_data_controllers.createOriginData(
+                    {
+                        video_id:element.awemeId,
+                        materialId:element.materialId,
+                        video_link:element.awemeUrl,
+                        title:element.title,
+                        publish_time:new Date(element.publishTime),
+                        kepp_num:info.kepp_num,
+                        comment_num:info.comment_num,
+                        like_num:info.like_num,
+                        shared_num:info.shared_num,
+                        is_guajian:1,
+                        guajian_link:element.landingUrl,
+                        status:0
+                    }
+                )
+            }
+        
+        }
+        // console.log("get_detail:",response)
+        // await pull_log_controllers.createData()
+    }catch(e){
+        console.log("PULL_DATA: error:",e)
+    }finally{
+        cur_page++;
+        setTimeout(processTask,time_count)
+    }
+
+}
+CMD.isRight = function(FilterConfig,origin_element){
+    if(origin_element.likeCount.count < FilterConfig.like_num){// console.log("点赞数正确")
+        return false
+    }
+   
+    if(origin_element.favoriteCount.count < FilterConfig.kepp_num){   // console.log("收藏数正确")
+        return false
+    }
+
+    if(origin_element.shareCount.count < FilterConfig.shared_num){      // console.log("分享数正确")
+        return false
+    }
+
+    if(origin_element.commentCount.count < FilterConfig.comment_num){          // console.log("评论")      
+        return false
+    }
+    return true
+}
+
+CMD.getToken = async function(){
+    const response = await session.post(config.pull_data_config.get_token,{
+        userName:config.pull_data_config.userName,
+        verCode:"1234",
+        password:config.pull_data_config.password,
+        loginType:"OPENAPI"
+    });
+    return response.data
+}
+
+CMD.get_novel_material_list = async function(page,size) {
+    const now = new Date(); // 当前时间
+    // const fiveMinutesAgo = new Date(now - 5 * 60 * 1000); // 5分钟前的时间
+    const fiveMinutesAgo = new Date(now - 200 * 60 * 1000); // 50分钟前的时间
+    let data = {
+        startTime:fiveMinutesAgo.getTime(),
+        endTime:now.getTime()
+    }
+    let params = `page=${page}&size=${size}&sort=update_time,desc`
+    let url = config.pull_data_config.get_novel_material_list+params
+    console.log(url,data)
+    const response = await session.post(url,data, {
+        headers: {
+            'token':await redis_help.getKeyValue("pull_data_token")
+        }
+    });
+    return response.data
+}
+
+CMD.get_detail = async function(materialId_list) {
+    let data = {
+        list:materialId_list
+    }
+    const response = await session.post(config.pull_data_config.get_detail,data, {
+        headers: {
+            'token':await redis_help.getKeyValue("pull_data_token")
+        }
+    });
+    return response.data
+}
+
+
+
+CMD.init = async function(){
+    session = axios.create({
+        baseURL: config.isDebug?config.pull_data_config.debug_host:config.pull_data_config.release_host,
+        headers: {
+          'Accept': 'application/json, text/plain, */*',
+        }
+    });
+
+
+    redis_help.connect(async ()=>{
+        let response = await CMD.getToken()
+        console.log("getToken:",response.result.token)
+        await redis_help.setKeyValue("pull_data_token",response.result.token)
+        processTask()
+    })
+
+}
+
+CMD.init()

+ 11 - 1
etc/config.json

@@ -1,5 +1,5 @@
 {
-    "isDebug":false,
+    "isDebug":true,
     "redis_config": {
         "host": "127.0.0.1",
         "port": 6379
@@ -23,6 +23,7 @@
         "back_host": "https://ms.zhangwenpindu.cn"
     },
     "fanqie_config": {
+        "recharge_list_host": "https://www.changdunovel.com/novelsale/openapi/recharge_template/list/v1/",
         "create_link_host": "https://www.changdunovel.com/novelsale/openapi/promotion/create/v1",
         "distributorId": 1814786227164169,
         "secretKey": "CN6KQ8Bauo8JXg5fFPk86EHdRFIUVnyV"
@@ -71,5 +72,14 @@
         "username": "admin",
         "password": "123",
         "vhost": "/"
+    },
+    "pull_data_config":{
+        "debug_host":"https://t-playletweb.tarsocial.com/",
+        "release_host":"https://dongxiaoju.com/",
+        "get_token":"/api/login/account",
+        "get_detail":"/api/v4/data/novel/detail",
+        "get_novel_material_list":"/api/v4/data/novel/material?",
+        "userName":"15975037061",
+        "password":"123456"
     }
 }

+ 204 - 0
logs/combined.log

@@ -0,0 +1,204 @@
+2024-12-09T17:47:32: 
+2024-12-09T17:47:32: > heiyan@1.0.0 start
+2024-12-09T17:47:32: > node tg_factory_main.js
+2024-12-09T17:47:32: 
+2024-12-09T17:47:38: Connected to Redis
+2024-12-09T17:47:38: results: false
+2024-12-09T18:15:43: 
+2024-12-09T18:15:43: > heiyan@1.0.0 start
+2024-12-09T18:15:43: > node tg_factory_main.js
+2024-12-09T18:15:43: 
+2024-12-09T18:15:49: Connected to Redis
+2024-12-09T18:15:49: results: false
+2024-12-09T18:18:49: 
+2024-12-09T18:18:49: > heiyan@1.0.0 start
+2024-12-09T18:18:49: > node tg_factory_main.js
+2024-12-09T18:18:49: 
+2024-12-09T18:18:54: Connected to Redis
+2024-12-09T18:18:54: results: false
+2024-12-09T18:24:27: 
+2024-12-09T18:24:27: > heiyan@1.0.0 start
+2024-12-09T18:24:27: > node tg_factory_main.js
+2024-12-09T18:24:27: 
+2024-12-09T18:24:33: Connected to Redis
+2024-12-09T18:24:33: results: false
+2024-12-09T18:27:30: 
+2024-12-09T18:27:30: > heiyan@1.0.0 start
+2024-12-09T18:27:30: > node tg_factory_main.js
+2024-12-09T18:27:30: 
+2024-12-09T18:27:36: Connected to Redis
+2024-12-09T18:27:36: results: false
+2024-12-09T19:03:05: 
+2024-12-09T19:03:05: > heiyan@1.0.0 start
+2024-12-09T19:03:05: > node tg_factory_main.js
+2024-12-09T19:03:05: 
+2024-12-09T19:03:12: Connected to Redis
+2024-12-09T19:03:12: results: false
+2024-12-09T19:03:49: 
+2024-12-09T19:03:49: > heiyan@1.0.0 start
+2024-12-09T19:03:49: > node tg_factory_main.js
+2024-12-09T19:03:49: 
+2024-12-09T19:03:54: Connected to Redis
+2024-12-09T19:03:54: results: false
+2024-12-09T19:07:27: 
+2024-12-09T19:07:27: > heiyan@1.0.0 start
+2024-12-09T19:07:27: > node tg_factory_main.js
+2024-12-09T19:07:27: 
+2024-12-09T19:07:31: Connected to Redis
+2024-12-09T19:07:32: results: false
+2024-12-09T19:08:34: 
+2024-12-09T19:08:34: > heiyan@1.0.0 start
+2024-12-09T19:08:34: > node tg_factory_main.js
+2024-12-09T19:08:34: 
+2024-12-09T19:08:40: Connected to Redis
+2024-12-09T19:08:40: results: false
+2024-12-09T19:09:59: 
+2024-12-09T19:09:59: > heiyan@1.0.0 start
+2024-12-09T19:09:59: > node tg_factory_main.js
+2024-12-09T19:09:59: 
+2024-12-09T19:10:06: Connected to Redis
+2024-12-09T19:10:06: results: false
+2024-12-09T19:15:50: 
+2024-12-09T19:15:50: > heiyan@1.0.0 start
+2024-12-09T19:15:50: > node tg_factory_main.js
+2024-12-09T19:15:50: 
+2024-12-09T19:15:55: Connected to Redis
+2024-12-09T19:15:55: results: false
+2024-12-09T19:17:55: 
+2024-12-09T19:17:55: > heiyan@1.0.0 start
+2024-12-09T19:17:55: > node tg_factory_main.js
+2024-12-09T19:17:55: 
+2024-12-09T19:18:00: Connected to Redis
+2024-12-09T19:18:00: results: false
+2024-12-09T19:20:05: 
+2024-12-09T19:20:05: > heiyan@1.0.0 start
+2024-12-09T19:20:05: > node tg_factory_main.js
+2024-12-09T19:20:05: 
+2024-12-09T19:20:10: Connected to Redis
+2024-12-09T19:20:10: results: false
+2024-12-09T19:21:12: 
+2024-12-09T19:21:12: > heiyan@1.0.0 start
+2024-12-09T19:21:12: > node tg_factory_main.js
+2024-12-09T19:21:12: 
+2024-12-09T19:21:17: Connected to Redis
+2024-12-09T19:21:17: results: false
+2024-12-09T19:24:03: 
+2024-12-09T19:24:03: > heiyan@1.0.0 start
+2024-12-09T19:24:03: > node tg_factory_main.js
+2024-12-09T19:24:03: 
+2024-12-09T19:24:08: Connected to Redis
+2024-12-09T19:24:08: results: false
+2024-12-09T19:26:26: 
+2024-12-09T19:26:26: > heiyan@1.0.0 start
+2024-12-09T19:26:26: > node tg_factory_main.js
+2024-12-09T19:26:26: 
+2024-12-09T19:26:31: Connected to Redis
+2024-12-09T19:26:31: results: false
+2024-12-09T19:28:55: 
+2024-12-09T19:28:55: > heiyan@1.0.0 start
+2024-12-09T19:28:55: > node tg_factory_main.js
+2024-12-09T19:28:55: 
+2024-12-09T19:29:01: Connected to Redis
+2024-12-09T19:29:01: results: false
+2024-12-09T19:29:44: 
+2024-12-09T19:29:44: > heiyan@1.0.0 start
+2024-12-09T19:29:44: > node tg_factory_main.js
+2024-12-09T19:29:44: 
+2024-12-09T19:29:50: Connected to Redis
+2024-12-09T19:29:50: results: false
+2024-12-09T19:35:33: 
+2024-12-09T19:35:33: > heiyan@1.0.0 start
+2024-12-09T19:35:33: > node tg_factory_main.js
+2024-12-09T19:35:33: 
+2024-12-09T19:35:39: Connected to Redis
+2024-12-09T19:35:39: results: false
+2024-12-09T19:37:10: 
+2024-12-09T19:37:10: > heiyan@1.0.0 start
+2024-12-09T19:37:10: > node tg_factory_main.js
+2024-12-09T19:37:10: 
+2024-12-09T19:37:15: Connected to Redis
+2024-12-09T19:37:15: results: false
+2024-12-09T19:44:54: 
+2024-12-09T19:44:54: > heiyan@1.0.0 start
+2024-12-09T19:44:54: > node tg_factory_main.js
+2024-12-09T19:44:54: 
+2024-12-09T19:45:00: Connected to Redis
+2024-12-09T19:45:00: results: false
+2024-12-09T19:46:46: 
+2024-12-09T19:46:46: > heiyan@1.0.0 start
+2024-12-09T19:46:46: > node tg_factory_main.js
+2024-12-09T19:46:46: 
+2024-12-09T19:46:51: Connected to Redis
+2024-12-09T19:46:51: results: false
+2024-12-09T19:48:08: 
+2024-12-09T19:48:08: > heiyan@1.0.0 start
+2024-12-09T19:48:08: > node tg_factory_main.js
+2024-12-09T19:48:08: 
+2024-12-09T19:48:14: Connected to Redis
+2024-12-09T19:48:14: results: false
+2024-12-09T19:49:03: 
+2024-12-09T19:49:03: > heiyan@1.0.0 start
+2024-12-09T19:49:03: > node tg_factory_main.js
+2024-12-09T19:49:03: 
+2024-12-09T19:49:08: Connected to Redis
+2024-12-09T19:49:08: results: false
+2024-12-09T20:35:37: 
+2024-12-09T20:35:37: > heiyan@1.0.0 start
+2024-12-09T20:35:37: > node tg_factory_main.js
+2024-12-09T20:35:37: 
+2024-12-09T20:35:43: Connected to Redis
+2024-12-09T20:35:44: results: false
+2024-12-09T20:36:30: 
+2024-12-09T20:36:30: > heiyan@1.0.0 start
+2024-12-09T20:36:30: > node tg_factory_main.js
+2024-12-09T20:36:30: 
+2024-12-09T20:36:36: Connected to Redis
+2024-12-09T20:36:36: results: false
+2024-12-09T20:39:45: 
+2024-12-09T20:39:45: > heiyan@1.0.0 start
+2024-12-09T20:39:45: > node tg_factory_main.js
+2024-12-09T20:39:45: 
+2024-12-09T20:39:52: Connected to Redis
+2024-12-09T20:39:52: results: false
+2024-12-09T20:41:07: 
+2024-12-09T20:41:07: > heiyan@1.0.0 start
+2024-12-09T20:41:07: > node tg_factory_main.js
+2024-12-09T20:41:07: 
+2024-12-09T20:41:13: Connected to Redis
+2024-12-09T20:41:13: results: false
+2024-12-09T20:43:29: 
+2024-12-09T20:43:29: > heiyan@1.0.0 start
+2024-12-09T20:43:29: > node tg_factory_main.js
+2024-12-09T20:43:29: 
+2024-12-09T20:43:35: Connected to Redis
+2024-12-09T20:43:35: results: false
+2024-12-09T20:44:50: 
+2024-12-09T20:44:50: > heiyan@1.0.0 start
+2024-12-09T20:44:50: > node tg_factory_main.js
+2024-12-09T20:44:50: 
+2024-12-09T20:44:56: Connected to Redis
+2024-12-09T20:44:56: results: false
+2024-12-09T20:45:53: 
+2024-12-09T20:45:53: > heiyan@1.0.0 start
+2024-12-09T20:45:53: > node tg_factory_main.js
+2024-12-09T20:45:53: 
+2024-12-09T20:45:59: Connected to Redis
+2024-12-09T20:45:59: results: false
+2024-12-09T20:46:59: 
+2024-12-09T20:46:59: > heiyan@1.0.0 start
+2024-12-09T20:46:59: > node tg_factory_main.js
+2024-12-09T20:46:59: 
+2024-12-09T20:47:05: Connected to Redis
+2024-12-09T20:47:05: results: false
+2024-12-09T20:51:33: 
+2024-12-09T20:51:33: > heiyan@1.0.0 start
+2024-12-09T20:51:33: > node tg_factory_main.js
+2024-12-09T20:51:33: 
+2024-12-09T20:51:38: Connected to Redis
+2024-12-09T20:51:38: results: false
+2024-12-09T20:55:48: 
+2024-12-09T20:55:48: > heiyan@1.0.0 start
+2024-12-09T20:55:48: > node tg_factory_main.js
+2024-12-09T20:55:48: 
+2024-12-09T20:55:54: Connected to Redis
+2024-12-09T20:55:54: results: false

+ 342 - 0
logs/out.log

@@ -0,0 +1,342 @@
+2024-12-06T18:10:02: 
+2024-12-06T18:10:02: > heiyan@1.0.0 start
+2024-12-06T18:10:02: > node tg_factory_main.js
+2024-12-06T18:10:02: 
+2024-12-06T18:10:31: Connected to Redis
+2024-12-06T18:10:31: results: false
+2024-12-06T18:14:37: 
+2024-12-06T18:14:37: > heiyan@1.0.0 start
+2024-12-06T18:14:37: > node tg_factory_main.js
+2024-12-06T18:14:37: 
+2024-12-06T18:14:47: Connected to Redis
+2024-12-06T18:14:47: results: false
+2024-12-06T18:20:21: 
+2024-12-06T18:20:21: > heiyan@1.0.0 start
+2024-12-06T18:20:21: > node tg_factory_main.js
+2024-12-06T18:20:21: 
+2024-12-06T18:20:24: Connected to Redis
+2024-12-06T18:20:24: results: false
+2024-12-06T18:25:41: 
+2024-12-06T18:25:41: > heiyan@1.0.0 start
+2024-12-06T18:25:41: > node tg_factory_main.js
+2024-12-06T18:25:41: 
+2024-12-06T18:25:55: Connected to Redis
+2024-12-06T18:25:55: results: false
+2024-12-06T20:01:08: 
+2024-12-06T20:01:08: > heiyan@1.0.0 start
+2024-12-06T20:01:08: > node tg_factory_main.js
+2024-12-06T20:01:08: 
+2024-12-06T20:01:12: Connected to Redis
+2024-12-06T20:01:12: results: false
+2024-12-06T20:02:39: 
+2024-12-06T20:02:39: > heiyan@1.0.0 start
+2024-12-06T20:02:39: > node tg_factory_main.js
+2024-12-06T20:02:39: 
+2024-12-06T20:02:43: Connected to Redis
+2024-12-06T20:02:43: results: false
+2024-12-07T13:00:00: 
+2024-12-07T13:00:00: > heiyan@1.0.0 start
+2024-12-07T13:00:00: > node tg_factory_main.js
+2024-12-07T13:00:00: 
+2024-12-07T13:00:03: Connected to Redis
+2024-12-07T13:00:03: results: false
+2024-12-07T13:00:08: black_books: null
+2024-12-07T13:01:57: 
+2024-12-07T13:01:57: > heiyan@1.0.0 start
+2024-12-07T13:01:57: > node tg_factory_main.js
+2024-12-07T13:01:57: 
+2024-12-07T13:02:00: Connected to Redis
+2024-12-07T13:02:00: results: false
+2024-12-07T13:02:05: black_books: [{"product_id":"7125646462725131277","id":5,"create_time":"2024-12-06 19:31:44","product_name":"官路权图:我在翻身路上"},{"product_id":"7114235297000328205","id":6,"create_time":"2024-12-06 19:31:59","product_name":"惊世凰谋"}]
+2024-12-09T11:20:45: 
+2024-12-09T11:20:45: > heiyan@1.0.0 start
+2024-12-09T11:20:45: > node tg_factory_main.js
+2024-12-09T11:20:45: 
+2024-12-09T11:20:50: Connected to Redis
+2024-12-09T11:20:50: results: false
+2024-12-09T11:20:50: get_hy_group_mapping: {
+2024-12-09T11:20:50:   msg: '操作成功',
+2024-12-09T11:20:50:   code: 200,
+2024-12-09T11:20:50:   data: [
+2024-12-09T11:20:50:     { logo: '', text: '立秋故事会【短中长篇】- ', value: 35 },
+2024-12-09T11:20:50:     { logo: '', text: '甜蜜故事会【短中长篇】- 抖音小程序', value: 53 }
+2024-12-09T11:20:50:   ]
+2024-12-09T11:20:50: }
+2024-12-09T14:56:05: 
+2024-12-09T14:56:05: > heiyan@1.0.0 start
+2024-12-09T14:56:05: > node tg_factory_main.js
+2024-12-09T14:56:05: 
+2024-12-09T14:56:09: Connected to Redis
+2024-12-09T14:56:09: results: false
+2024-12-09T14:59:14: 
+2024-12-09T14:59:14: > heiyan@1.0.0 start
+2024-12-09T14:59:14: > node tg_factory_main.js
+2024-12-09T14:59:14: 
+2024-12-09T14:59:19: Connected to Redis
+2024-12-09T14:59:19: results: false
+2024-12-09T15:06:01: 
+2024-12-09T15:06:01: > heiyan@1.0.0 start
+2024-12-09T15:06:01: > node tg_factory_main.js
+2024-12-09T15:06:01: 
+2024-12-09T15:06:05: Connected to Redis
+2024-12-09T15:06:05: results: false
+2024-12-09T16:06:37: 
+2024-12-09T16:06:37: > heiyan@1.0.0 start
+2024-12-09T16:06:37: > node tg_factory_main.js
+2024-12-09T16:06:37: 
+2024-12-09T16:06:41: Connected to Redis
+2024-12-09T16:06:41: results: false
+2024-12-09T16:23:52: 
+2024-12-09T16:23:52: > heiyan@1.0.0 start
+2024-12-09T16:23:52: > node tg_factory_main.js
+2024-12-09T16:23:52: 
+2024-12-09T16:23:57: Connected to Redis
+2024-12-09T16:23:57: results: false
+2024-12-09T16:32:21: 
+2024-12-09T16:32:21: > heiyan@1.0.0 start
+2024-12-09T16:32:21: > node tg_factory_main.js
+2024-12-09T16:32:21: 
+2024-12-09T16:32:26: Connected to Redis
+2024-12-09T16:32:26: results: false
+2024-12-09T16:36:34: 
+2024-12-09T16:36:34: > heiyan@1.0.0 start
+2024-12-09T16:36:34: > node tg_factory_main.js
+2024-12-09T16:36:34: 
+2024-12-09T16:36:38: Connected to Redis
+2024-12-09T16:36:38: results: false
+2024-12-09T16:52:51: 
+2024-12-09T16:52:51: > heiyan@1.0.0 start
+2024-12-09T16:52:51: > node tg_factory_main.js
+2024-12-09T16:52:51: 
+2024-12-09T16:52:56: Connected to Redis
+2024-12-09T16:52:56: results: false
+2024-12-09T16:52:57: res: {
+2024-12-09T16:52:57:   msg: '操作成功',
+2024-12-09T16:52:57:   code: 200,
+2024-12-09T16:52:57:   data: {
+2024-12-09T16:52:57:     fullPath: 'pages/readPage/chapter?pid=1809545659599544322&bookId=1848991033902665730&linkId=1866043344032976898&channels=4&hyChannel=1',
+2024-12-09T16:52:57:     wxLaunchPath: null,
+2024-12-09T16:52:57:     wxFullPath: null,
+2024-12-09T16:52:57:     launchPath: 'pages/readPage/chapter',
+2024-12-09T16:52:57:     appId: 'tt2fff5942b0cca07701',
+2024-12-09T16:52:57:     launchParam: 'pid=1809545659599544322&bookId=1848991033902665730&linkId=1866043344032976898&channels=4&hyChannel=1',
+2024-12-09T16:52:57:     name: '台风夜老婆去救男秘书',
+2024-12-09T16:52:57:     wxMountLink: '',
+2024-12-09T16:52:57:     originalId: '',
+2024-12-09T16:52:57:     wxLaunchParam: null
+2024-12-09T16:52:57:   }
+2024-12-09T16:52:57: }
+2024-12-09T16:52:57: response: {
+2024-12-09T16:52:57:   message: 'create_link successfully',
+2024-12-09T16:52:57:   received_data: {
+2024-12-09T16:52:57:     originalId: '',
+2024-12-09T16:52:57:     appId: 'tt2fff5942b0cca07701',
+2024-12-09T16:52:57:     launchPath: 'pages/readPage/chapter',
+2024-12-09T16:52:57:     fullPath: 'pages/readPage/chapter?pid=1809545659599544322&bookId=1848991033902665730&linkId=1866043344032976898&channels=4&hyChannel=1',
+2024-12-09T16:52:57:     wxMountLink: ''
+2024-12-09T16:52:57:   }
+2024-12-09T16:52:57: }
+2024-12-09T17:47:32: 
+2024-12-09T17:47:32: > heiyan@1.0.0 start
+2024-12-09T17:47:32: > node tg_factory_main.js
+2024-12-09T17:47:32: 
+2024-12-09T17:47:38: Connected to Redis
+2024-12-09T17:47:38: results: false
+2024-12-09T18:15:43: 
+2024-12-09T18:15:43: > heiyan@1.0.0 start
+2024-12-09T18:15:43: > node tg_factory_main.js
+2024-12-09T18:15:43: 
+2024-12-09T18:15:49: Connected to Redis
+2024-12-09T18:15:49: results: false
+2024-12-09T18:18:49: 
+2024-12-09T18:18:49: > heiyan@1.0.0 start
+2024-12-09T18:18:49: > node tg_factory_main.js
+2024-12-09T18:18:49: 
+2024-12-09T18:18:54: Connected to Redis
+2024-12-09T18:18:54: results: false
+2024-12-09T18:24:27: 
+2024-12-09T18:24:27: > heiyan@1.0.0 start
+2024-12-09T18:24:27: > node tg_factory_main.js
+2024-12-09T18:24:27: 
+2024-12-09T18:24:33: Connected to Redis
+2024-12-09T18:24:33: results: false
+2024-12-09T18:27:30: 
+2024-12-09T18:27:30: > heiyan@1.0.0 start
+2024-12-09T18:27:30: > node tg_factory_main.js
+2024-12-09T18:27:30: 
+2024-12-09T18:27:36: Connected to Redis
+2024-12-09T18:27:36: results: false
+2024-12-09T19:03:05: 
+2024-12-09T19:03:05: > heiyan@1.0.0 start
+2024-12-09T19:03:05: > node tg_factory_main.js
+2024-12-09T19:03:05: 
+2024-12-09T19:03:12: Connected to Redis
+2024-12-09T19:03:12: results: false
+2024-12-09T19:03:49: 
+2024-12-09T19:03:49: > heiyan@1.0.0 start
+2024-12-09T19:03:49: > node tg_factory_main.js
+2024-12-09T19:03:49: 
+2024-12-09T19:03:54: Connected to Redis
+2024-12-09T19:03:54: results: false
+2024-12-09T19:07:27: 
+2024-12-09T19:07:27: > heiyan@1.0.0 start
+2024-12-09T19:07:27: > node tg_factory_main.js
+2024-12-09T19:07:27: 
+2024-12-09T19:07:31: Connected to Redis
+2024-12-09T19:07:32: results: false
+2024-12-09T19:08:34: 
+2024-12-09T19:08:34: > heiyan@1.0.0 start
+2024-12-09T19:08:34: > node tg_factory_main.js
+2024-12-09T19:08:34: 
+2024-12-09T19:08:40: Connected to Redis
+2024-12-09T19:08:40: results: false
+2024-12-09T19:09:59: 
+2024-12-09T19:09:59: > heiyan@1.0.0 start
+2024-12-09T19:09:59: > node tg_factory_main.js
+2024-12-09T19:09:59: 
+2024-12-09T19:10:06: Connected to Redis
+2024-12-09T19:10:06: results: false
+2024-12-09T19:15:50: 
+2024-12-09T19:15:50: > heiyan@1.0.0 start
+2024-12-09T19:15:50: > node tg_factory_main.js
+2024-12-09T19:15:50: 
+2024-12-09T19:15:55: Connected to Redis
+2024-12-09T19:15:55: results: false
+2024-12-09T19:17:55: 
+2024-12-09T19:17:55: > heiyan@1.0.0 start
+2024-12-09T19:17:55: > node tg_factory_main.js
+2024-12-09T19:17:55: 
+2024-12-09T19:18:00: Connected to Redis
+2024-12-09T19:18:00: results: false
+2024-12-09T19:20:05: 
+2024-12-09T19:20:05: > heiyan@1.0.0 start
+2024-12-09T19:20:05: > node tg_factory_main.js
+2024-12-09T19:20:05: 
+2024-12-09T19:20:10: Connected to Redis
+2024-12-09T19:20:10: results: false
+2024-12-09T19:21:12: 
+2024-12-09T19:21:12: > heiyan@1.0.0 start
+2024-12-09T19:21:12: > node tg_factory_main.js
+2024-12-09T19:21:12: 
+2024-12-09T19:21:17: Connected to Redis
+2024-12-09T19:21:17: results: false
+2024-12-09T19:24:03: 
+2024-12-09T19:24:03: > heiyan@1.0.0 start
+2024-12-09T19:24:03: > node tg_factory_main.js
+2024-12-09T19:24:03: 
+2024-12-09T19:24:08: Connected to Redis
+2024-12-09T19:24:08: results: false
+2024-12-09T19:26:26: 
+2024-12-09T19:26:26: > heiyan@1.0.0 start
+2024-12-09T19:26:26: > node tg_factory_main.js
+2024-12-09T19:26:26: 
+2024-12-09T19:26:31: Connected to Redis
+2024-12-09T19:26:31: results: false
+2024-12-09T19:28:55: 
+2024-12-09T19:28:55: > heiyan@1.0.0 start
+2024-12-09T19:28:55: > node tg_factory_main.js
+2024-12-09T19:28:55: 
+2024-12-09T19:29:01: Connected to Redis
+2024-12-09T19:29:01: results: false
+2024-12-09T19:29:44: 
+2024-12-09T19:29:44: > heiyan@1.0.0 start
+2024-12-09T19:29:44: > node tg_factory_main.js
+2024-12-09T19:29:44: 
+2024-12-09T19:29:50: Connected to Redis
+2024-12-09T19:29:50: results: false
+2024-12-09T19:35:33: 
+2024-12-09T19:35:33: > heiyan@1.0.0 start
+2024-12-09T19:35:33: > node tg_factory_main.js
+2024-12-09T19:35:33: 
+2024-12-09T19:35:39: Connected to Redis
+2024-12-09T19:35:39: results: false
+2024-12-09T19:37:10: 
+2024-12-09T19:37:10: > heiyan@1.0.0 start
+2024-12-09T19:37:10: > node tg_factory_main.js
+2024-12-09T19:37:10: 
+2024-12-09T19:37:15: Connected to Redis
+2024-12-09T19:37:15: results: false
+2024-12-09T19:44:54: 
+2024-12-09T19:44:54: > heiyan@1.0.0 start
+2024-12-09T19:44:54: > node tg_factory_main.js
+2024-12-09T19:44:54: 
+2024-12-09T19:45:00: Connected to Redis
+2024-12-09T19:45:00: results: false
+2024-12-09T19:46:46: 
+2024-12-09T19:46:46: > heiyan@1.0.0 start
+2024-12-09T19:46:46: > node tg_factory_main.js
+2024-12-09T19:46:46: 
+2024-12-09T19:46:51: Connected to Redis
+2024-12-09T19:46:51: results: false
+2024-12-09T19:48:08: 
+2024-12-09T19:48:08: > heiyan@1.0.0 start
+2024-12-09T19:48:08: > node tg_factory_main.js
+2024-12-09T19:48:08: 
+2024-12-09T19:48:14: Connected to Redis
+2024-12-09T19:48:14: results: false
+2024-12-09T19:49:03: 
+2024-12-09T19:49:03: > heiyan@1.0.0 start
+2024-12-09T19:49:03: > node tg_factory_main.js
+2024-12-09T19:49:03: 
+2024-12-09T19:49:08: Connected to Redis
+2024-12-09T19:49:08: results: false
+2024-12-09T20:35:37: 
+2024-12-09T20:35:37: > heiyan@1.0.0 start
+2024-12-09T20:35:37: > node tg_factory_main.js
+2024-12-09T20:35:37: 
+2024-12-09T20:35:43: Connected to Redis
+2024-12-09T20:35:44: results: false
+2024-12-09T20:36:30: 
+2024-12-09T20:36:30: > heiyan@1.0.0 start
+2024-12-09T20:36:30: > node tg_factory_main.js
+2024-12-09T20:36:30: 
+2024-12-09T20:36:36: Connected to Redis
+2024-12-09T20:36:36: results: false
+2024-12-09T20:39:45: 
+2024-12-09T20:39:45: > heiyan@1.0.0 start
+2024-12-09T20:39:45: > node tg_factory_main.js
+2024-12-09T20:39:45: 
+2024-12-09T20:39:52: Connected to Redis
+2024-12-09T20:39:52: results: false
+2024-12-09T20:41:07: 
+2024-12-09T20:41:07: > heiyan@1.0.0 start
+2024-12-09T20:41:07: > node tg_factory_main.js
+2024-12-09T20:41:07: 
+2024-12-09T20:41:13: Connected to Redis
+2024-12-09T20:41:13: results: false
+2024-12-09T20:43:29: 
+2024-12-09T20:43:29: > heiyan@1.0.0 start
+2024-12-09T20:43:29: > node tg_factory_main.js
+2024-12-09T20:43:29: 
+2024-12-09T20:43:35: Connected to Redis
+2024-12-09T20:43:35: results: false
+2024-12-09T20:44:50: 
+2024-12-09T20:44:50: > heiyan@1.0.0 start
+2024-12-09T20:44:50: > node tg_factory_main.js
+2024-12-09T20:44:50: 
+2024-12-09T20:44:56: Connected to Redis
+2024-12-09T20:44:56: results: false
+2024-12-09T20:45:53: 
+2024-12-09T20:45:53: > heiyan@1.0.0 start
+2024-12-09T20:45:53: > node tg_factory_main.js
+2024-12-09T20:45:53: 
+2024-12-09T20:45:59: Connected to Redis
+2024-12-09T20:45:59: results: false
+2024-12-09T20:46:59: 
+2024-12-09T20:46:59: > heiyan@1.0.0 start
+2024-12-09T20:46:59: > node tg_factory_main.js
+2024-12-09T20:46:59: 
+2024-12-09T20:47:05: Connected to Redis
+2024-12-09T20:47:05: results: false
+2024-12-09T20:51:33: 
+2024-12-09T20:51:33: > heiyan@1.0.0 start
+2024-12-09T20:51:33: > node tg_factory_main.js
+2024-12-09T20:51:33: 
+2024-12-09T20:51:38: Connected to Redis
+2024-12-09T20:51:38: results: false
+2024-12-09T20:55:48: 
+2024-12-09T20:55:48: > heiyan@1.0.0 start
+2024-12-09T20:55:48: > node tg_factory_main.js
+2024-12-09T20:55:48: 
+2024-12-09T20:55:54: Connected to Redis
+2024-12-09T20:55:54: results: false

+ 19 - 7
pm2json.json

@@ -23,7 +23,7 @@
             "out_file": "./logs/0_RECEIVE_FACTORY_out.log",
             "merge_logs": true,
             "exec_mode": "fork",
-            "autorestart": false
+            "autorestart": true
         },
         {
             "name": "1_FILTER_FACTORY",
@@ -35,7 +35,7 @@
             "out_file": "./logs/1_FILTER_FACTORY_out.log",
             "merge_logs": true,
             "exec_mode": "fork",
-            "autorestart": false
+            "autorestart": true
         },
         {
             "name": "2_PRODUCT_FACTORY",
@@ -47,7 +47,7 @@
             "out_file": "./logs/2_PRODUCT_FACTORY_out.log",
             "merge_logs": true,
             "exec_mode": "fork",
-            "autorestart": false
+            "autorestart": true
         },
         {
             "name": "5_CREATE_LINK_FACTORY",
@@ -59,7 +59,7 @@
             "out_file": "./logs/5_CREATE_LINK_FACTORY_out.log",
             "merge_logs": true,
             "exec_mode": "fork",
-            "autorestart": false
+            "autorestart": true
         },
         {
             "name": "7_CHECK_AND_CREATE_URL_FACTORY",
@@ -71,7 +71,7 @@
             "out_file": "./logs/7_CHECK_AND_CREATE_URL_FACTORY_out.log",
             "merge_logs": true,
             "exec_mode": "fork",
-            "autorestart": false
+            "autorestart": true
         },
         {
             "name": "MESSAGE_DISPATCH_FACTORY",
@@ -83,7 +83,7 @@
             "out_file": "./logs/MESSAGE_DISPATCH_out.log",
             "merge_logs": true,
             "exec_mode": "fork",
-            "autorestart": false
+            "autorestart": true
         },
         {
             "name": "MAIN_SERVE_FACTORY_FACTORY",
@@ -95,7 +95,19 @@
             "out_file": "./logs/MAIN_SERVE_FACTORY_out.log",
             "merge_logs": true,
             "exec_mode": "fork",
-            "autorestart": false
+            "autorestart": true
+        },
+        {
+            "name": "PULL_DATA_FACTORY",
+            "script": "./PULL_DATA_FACTORY/PULL_DATA.js",
+            "args": ["--type=data"],
+            "cwd": "/home/tg_factory",
+            "log_date_format": "YYYY-MM-DD HH:mm:ss",
+            "error_file": "./logs/PULL_DATA_FACTORY_error.log",
+            "out_file": "./logs/PULL_DATA_FACTORY_out.log",
+            "merge_logs": true,
+            "exec_mode": "fork",
+            "autorestart": true
         }
     ]
 }

+ 25 - 17
src/HttpClient.js

@@ -1,6 +1,7 @@
 const axios = require('axios');
 const axiosRetry = require('axios-retry').default;
 const {HttpsProxyAgent} = require("https-proxy-agent");
+const ProxyService = require('./ProxyService');
 class HttpClient {
     constructor(options = {}) {
         this.client = axios.create({
@@ -87,26 +88,33 @@ class HttpClient {
 
     async proxyRequest(options){
         try{
-            let tunnelHost = 'd528.kdltps.com'
-            let tunnelPort = '15818'
-            
-            // 配置用户名和密码
-            let username = 't13322192973984'
-            let password = '7ntreedr'
-            
-            return await axios({
+            const proxyService = new ProxyService();
+            const result = await  proxyService.proxyRequestWithRetry({
                 url: options.url,
                 method: "post",
-                headers: options.headers,
-                httpAgent: new HttpsProxyAgent(`http://${username}:${password}@${tunnelHost}:${tunnelPort}`),
-                httpsAgent: new HttpsProxyAgent(`http://${username}:${password}@${tunnelHost}:${tunnelPort}`),
-            }).then(
-                res => {
-                    return res.data
-                }
-            ).catch(err => {
-                console.log(err);
+                headers: options.headers
             })
+            return result
+            // let tunnelHost = 'd528.kdltps.com'
+            // let tunnelPort = '15818'
+            
+            // // 配置用户名和密码
+            // let username = 't13322192973984'
+            // let password = '7ntreedr'
+            
+            // return await axios({
+            //     url: options.url,
+            //     method: "post",
+            //     headers: options.headers,
+            //     httpAgent: new HttpsProxyAgent(`http://${username}:${password}@${tunnelHost}:${tunnelPort}`),
+            //     httpsAgent: new HttpsProxyAgent(`http://${username}:${password}@${tunnelHost}:${tunnelPort}`),
+            // }).then(
+            //     res => {
+            //         return res.data
+            //     }
+            // ).catch(err => {
+            //     console.log(err);
+            // })
                    
         }catch(error){
             this.handleError(error);

+ 131 - 0
src/ProxyService.js

@@ -0,0 +1,131 @@
+const axios = require('axios');
+const { HttpsProxyAgent } = require('https-proxy-agent');
+
+class ProxyService {
+    constructor() {
+        this.proxyConfig = {
+            host: 'd528.kdltps.com',
+            port: '15818',
+            username: 't13322192973984',
+            password: '7ntreedr'
+        };
+        
+        // 创建代理实例
+        this.proxyAgent = new HttpsProxyAgent(`http://${this.proxyConfig.username}:${this.proxyConfig.password}@${this.proxyConfig.host}:${this.proxyConfig.port}`);
+        
+        // 创建axios实例
+        this.client = axios.create({
+            timeout: 30000,
+            httpAgent: this.proxyAgent,
+            httpsAgent: this.proxyAgent
+        });
+    }
+
+    async proxyRequest(options) {
+        try {
+            const response = await this.client({
+                url: options.url,
+                method: options.method || 'post',
+                headers: options.headers,
+                validateStatus: function(status) {
+                    return status >= 200 && status < 300;
+                }
+            });
+            
+            return response.data;
+        } catch (error) {
+            return this.handleError(error);
+        }
+    }
+
+    handleError(error) {
+        if (error.response) {
+            // 服务器响应错误
+            console.error('Response error:', {
+                status: error.response.status,
+                data: error.response.data
+            });
+        } else if (error.request) {
+            // 请求发送失败
+            console.error('Request error:', error.message);
+        } else {
+            // 其他错误
+            console.error('Error:', error.message);
+        }
+
+        if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT') {
+            console.error('Connection error:', error.code);
+        }
+
+        throw error;
+    }
+
+    // 添加重试机制
+    async proxyRequestWithRetry(options, maxRetries = 3, delay = 1000) {
+        for (let i = 0; i < maxRetries; i++) {
+            try {
+                return await this.proxyRequest(options);
+            } catch (error) {
+                if (i === maxRetries - 1) throw error;
+                
+                console.log(`Retry attempt ${i + 1} of ${maxRetries}`);
+                await new Promise(resolve => setTimeout(resolve, delay * (i + 1)));
+            }
+        }
+    }
+}
+
+// 使用示例
+// async function example() {
+//     const proxyService = new ProxyService();
+    
+//     try {
+//         const result = await proxyService.proxyRequestWithRetry({
+//             url: 'https://api.example.com/data',
+//             method: 'post',
+//             headers: {
+//                 'Content-Type': 'application/json'
+//             },
+//             data: {
+//                 key: 'value'
+//             }
+//         });
+        
+//         console.log('Success:', result);
+//     } catch (error) {
+//         console.error('Final error:', error);
+//     }
+// }
+
+// // 批量请求处理
+// class BatchProxyRequests {
+//     constructor(proxyService) {
+//         this.proxyService = proxyService;
+//         this.queue = [];
+//         this.concurrency = 3; // 并发数
+//     }
+
+//     addRequest(options) {
+//         this.queue.push(options);
+//     }
+
+//     async processBatch() {
+//         const results = [];
+        
+//         while (this.queue.length > 0) {
+//             const batch = this.queue.splice(0, this.concurrency);
+//             const promises = batch.map(options => 
+//                 this.proxyService.proxyRequestWithRetry(options)
+//                     .catch(error => ({ error }))
+//             );
+            
+//             const batchResults = await Promise.all(promises);
+//             results.push(...batchResults);
+//         }
+        
+//         return results;
+//     }
+// }
+
+
+module.exports = ProxyService;

+ 37 - 16
src/api/hy/create_heiyan_book_link.js

@@ -173,6 +173,22 @@ const DzSpider = class {
     }
   }
 
+
+  async groupMapping(call_back) {
+    try {
+      const response = await this.session.get('/manage/distribution/groupMapping?site=5&type=1', {
+        headers: {
+          'Authorization': `Bearer ${await tools.getHyToken()}`
+        }
+      });
+      call_back(response.data)
+      // console.log('回调模板:', response.data);
+    } catch (error) {
+      call_back({code:-1})
+      console.error('Error groupMapping mapping:', error);
+    }
+  }
+
   async createLink() {
     try {
       await this.reqPythonCreateLink((response)=>{
@@ -191,22 +207,22 @@ const DzSpider = class {
   }
 
 async reqPythonCreateLink(call_back){
-    const postData = {
-      cmd:"create_link",
-      name:this.name,
-      bookId:this.bookId,
-      topUpTemplateId:this.topUpTemplateId,
-      token:this.data.token
-    };
+    // const postData = {
+    //   cmd:"create_link",
+    //   name:this.name,
+    //   bookId:this.bookId,
+    //   topUpTemplateId:this.topUpTemplateId,
+    //   token:this.data.token
+    // };
   
-    axios.post(config.python_config.host, postData)
-      .then(response => {
-          call_back(response)
-      })
-      .catch(error => {
-        call_back(null)
-        console.error('There was an error!', error);
-    });
+    // axios.post(config.python_config.host, postData)
+    //   .then(response => {
+    //       call_back(response)
+    //   })
+    //   .catch(error => {
+    //     call_back(null)
+    //     console.error('There was an error!', error);
+    // });
   }
 };
 
@@ -237,5 +253,10 @@ function get_paid_point(bookId,call_back){
   const spider = new DzSpider();
   spider.getChapterList(bookId,call_back)
 }
-module.exports = {send,login,get_recharge_template,get_paid_point,get_passBack_template}
+
+function get_groupMapping(call_back){
+  const spider = new DzSpider();
+  spider.groupMapping(call_back)
+}
+module.exports = {send,login,get_recharge_template,get_paid_point,get_passBack_template,get_groupMapping}
 

+ 7 - 0
src/api/hy/get_hy_group_mapping.js

@@ -0,0 +1,7 @@
+const CMD = {}
+// 获取小程序组
+CMD.get_group_mapping = function(call_back){
+    let create_heiyan_book_link = require('./create_heiyan_book_link')
+    create_heiyan_book_link.get_groupMapping(call_back)
+}
+module.exports = CMD;

BIN
src/api/hy/qr.gif


BIN
src/api/hy/qr_resized.gif


+ 6 - 6
src/data_manager/Controllers/origin_data_controllers.js

@@ -6,12 +6,12 @@ class origin_data_controllers {
     async getOriginData(params) {
         try {
             // 参数验证
-            if (!params?.video_id) {
+            if (!params?.materialId) {
                 throw  'origin_data_controllers:Video ID is required';
             }
 
-            const video_id = params.video_id;
-            const filterData = await origin_data_model.findOne({ video_id: video_id });
+            const materialId = params.materialId;
+            const filterData = await origin_data_model.findOne({ materialId: materialId });
 
             if (!filterData) {
                 return {
@@ -97,7 +97,7 @@ class origin_data_controllers {
     async updateOriginData(params, tableData) {
         try {
             // 参数验证
-            if (!params?.video_id) {
+            if (!params?.id) {
                 throw 'ID is required';
             }
 
@@ -105,7 +105,7 @@ class origin_data_controllers {
                 throw 'No data to update';
             }
 
-            const video_id = params.video_id;
+            const id = params.id;
 
             // 检查数据是否存在
             // const existingData = await origin_data_model.findOne({ video_id:video_id });
@@ -120,7 +120,7 @@ class origin_data_controllers {
 
             // 使用乐观锁更新
             const affectedRows = await origin_data_model.updateOriginData(
-                video_id,
+                id,
                 tableData // 假设使用版本控制
             );
 

+ 19 - 0
src/data_manager/Controllers/pull_log_controllers.js

@@ -0,0 +1,19 @@
+
+const pull_log_model = require("../Model/pull_log_model")
+
+class pull_log_controllers {
+    async createData(tableData) {
+        try {
+            const id = await pull_log_model.create(tableData);
+            return {
+                success: true,
+                data: { id }
+            };
+        } catch (error) {
+            throw error;
+        }
+    }
+   
+}
+
+module.exports = new pull_log_controllers();

+ 2 - 2
src/data_manager/Model/origin_data_model.js

@@ -17,8 +17,8 @@ class origin_data_model extends BaseModel {
         });
     }
 
-    async updateOriginData(video_id, profileData) {
-        return await this.update({ video_id: video_id }, profileData);
+    async updateOriginData(id, profileData) {
+        return await this.update({ id: id }, profileData);
     }
 }
 

+ 16 - 0
src/data_manager/Model/pull_log_model.js

@@ -0,0 +1,16 @@
+const BaseModel = require('../BaseModel')
+
+class pull_log_model extends BaseModel {
+    constructor() {
+        super('pull_log'); //表名
+    }
+
+    async createData(tableData) {
+        return await this.transaction(async (connection) => {
+            const id = await this.create(tableData);
+            return id;
+        });
+    }
+}
+
+module.exports = new pull_log_model();

+ 5 - 5
src/helper.js

@@ -16,18 +16,18 @@ helper.getCurrentUnixTimestamp = function() {
     return Math.floor(Date.now() / 1000)
 }
 
-helper.getFqRequestOpt = function(key){
+helper.getFqRequestOpt = function(key,sid_tt='b0390e26648a71801795b3b13c9d7d20'){
     const options = {
         url: `https://api.whbfxb.cn/api/novelsale/reader/get/content/v1/?aid=40013183&device_brand=realme&device_platform=android&device_type=RMX2020&mp_sdk_version=3.21.0&novelsale_app_scene=023001&version_code=230&key=${key}&item_source=1&module_name=ad_link&click_id=__CLICKID__&clickid=__CLICKID__&creativetype=__CTYPE__&demand_id=0&item_id=&media_source=1&mid1=__MID1__&mid2=__MID2__&mid3=__MID3__&mid4=__MID4__&mid5=__MID5__&projectid=__PROJECT_ID__&promotionid=__PROMOTION_ID__&request_id=__REQUESTID__&book_id=&host_novelsale_app_id=40013183`,
         headers: {
-            'cookie': 'sid_tt=b0390e26648a71801795b3b13c9d7d20; ' +
+            'cookie': `sid_tt=${sid_tt}; ` +
                      'ssid_ucp_v1=1.0.0-KDU0Nzc2NjZmZjRhNTZkYWM5YTMwN2ZmNzAyODMwNjFjZmQyMzA4OTYKFQjkktCcvMz_ARDGw7W6Bhjv6CA4CBoCbHEiIDhjOTg2NjgwY2Q4NzE2YmEzMmJhMjBjM2MwMmEwOTJk; ' +
                      'is_staff_user=false; ' +
                      'sid_ucp_v1=1.0.0-KDU0Nzc2NjZmZjRhNTZkYWM5YTMwN2ZmNzAyODMwNjFjZmQyMzA4OTYKFQjkktCcvMz_ARDGw7W6Bhjv6CA4CBoCbHEiIDhjOTg2NjgwY2Q4NzE2YmEzMmJhMjBjM2MwMmEwOTJk; ' +
-                     'sessionid=b0390e26648a71801795b3b13c9d7d20; ' +
+                     `sessionid=${sid_tt}; ` +
                      'ttwid=1%7CdTM3VEQ9KwlMsV2FV6Gaxv5CBXmd5i44fjDoZV_a8g8%7C1733124580%7Cc0952b31723a2f5d5e4b9f84a1c29cb7cbde5592906de58798b92a695d3fb292; ' +
-                     'sessionid_ss=b0390e26648a71801795b3b13c9d7d20; ' +
-                     'sid_guard=b0390e26648a71801795b3b13c9d7d20%7C1733124550%7C5184000%7CFri%2C+31-Jan-2025+07%3A29%3A10+GMT; ' +
+                     `sessionid_ss=${sid_tt}; ` +
+                     `sid_guard=${sid_tt}%7C1733124550%7C5184000%7CFri%2C+31-Jan-2025+07%3A29%3A10+GMT; ` +
                      'uid_tt=3361cf574bbdd82820371b4667fc9b91; ' +
                      'passport_csrf_token=f7e1da8668d26b8509725bcf7fa95628; ' +
                      'uid_tt_ss=3361cf574bbdd82820371b4667fc9b91; ' +

+ 14 - 1
tg_factory_main.js

@@ -12,6 +12,19 @@ redis_help.connect( async (results)=>{
         console.log("results:",await redis_help.getKeyValue("isPauseTask"))
     }
 })
+
+// let get_hy_group_mapping = require('./src/api/hy/get_hy_group_mapping');
+// get_hy_group_mapping.get_group_mapping((data)=>{
+//     if(data.code==200){
+//         let list = data.data
+//     }
+//     console.log("get_hy_group_mapping:",data)
+// })
+
+// setTimeout( async ()=>{
+//     let black_books = await redis_help.getKeyValue("all_black_books")
+//     console.log("black_books:",black_books)
+// },5000)
 // let main = async function(){
 //     let test = new HttpClient()
 //     const postData = {
@@ -20,7 +33,7 @@ redis_help.connect( async (results)=>{
 //         bookId:"1848991033902665730",
 //         topUpTemplateId:"1854833762266247169",
 //         passBackTemplateId:"6",
-//         paidPoint:0,
+//         paidPoint:"9999999",
 //         token:await tools.getHyToken()
 //     };
 

+ 14 - 0
tools.js

@@ -100,6 +100,20 @@ class tools {
     getTaskDataBaseConfig(){
         return config.isDebug?config.debug_task_mysql:config.release_task_mysql
     }
+
+    async getFqSidtt() {
+        let sidtt = 'b0390e26648a71801795b3b13c9d7d20'
+        let list =  await this.redis_help.getKeyValue("all_fq_key")
+        if(list == null){
+            return sidtt
+        }
+        list = JSON.parse(list)
+        if(list.length<=0){
+            return sidtt
+        }
+        sidtt = list[0]
+        return sidtt
+    }
 }
 
 module.exports = new tools(require('./src/use_redis'));