904118851 7 місяців тому
батько
коміт
e8581800cf

+ 5 - 2
1_FILTER_FACTORY/FILTER_FACTORY.js

@@ -58,7 +58,6 @@ async function processTask(){
             for (let index = 0; index < origin_data_list.length; index++) {
                 const origin_data_item = origin_data_list[index];
                 videoDataList[origin_data_item.video_id] = origin_data_item
-                console.log("origin_data_item:",origin_data_item)
                 if(helper.checkChannel(origin_data_item.guajian_link,"https://api.amemv.com/insights/lynx_web/anchor/preview?")){
                     wxIds.push(origin_data_item.id)
                 }else{
@@ -287,9 +286,9 @@ function getChannel(start_page,platform_select,promotion,PlatformConfig){
     let isOpenFanQie = false
     let isOpenQiMao = false
     let isOpenDianZhong = false
+    let isOpenFanQieMF = false
     let kv = new Map()
     PlatformConfig = getDyPlatformConfig(PlatformConfig)
-    console.log("PlatformConfig:",PlatformConfig)
     for (let index = 0; index < PlatformConfig.length; index++) {
         const platform_info = PlatformConfig[index];
         kv.set(platform_info.tg_platform_id,false)
@@ -313,6 +312,10 @@ function getChannel(start_page,platform_select,promotion,PlatformConfig){
             isOpenDianZhong = true
             kv.set(element,true)
         }
+        if(element==7){
+            isOpenFanQieMF = true
+            kv.set(element,true)
+        }
     }
 
 

+ 22 - 31
2_PRODUCT_FACTORY/fq_mf_factory.js

@@ -23,11 +23,13 @@ async function processTask(){
         let isInsertTask = false
         let FilterConfig = await redis_help.getKeyValue("FilterConfig")
         FilterConfig = JSON.parse(FilterConfig)
-        result = await filter_data_controllers.getFilterDataByStatus({ status: 0 ,tg_platform_id:config.platform_fanqie});
+        result = await filter_data_controllers.getFilterDataByStatus({ status: 0 ,tg_platform_id:config.platform_fanqiemf});
+        
+        console.log("result:",result)
         if(result.success){
             let tg_platform_id = result.data.tg_platform_id
             //判断是否存在这本书
-            if(tg_platform_id==config.platform_fanqie){ //番茄
+            if(tg_platform_id==config.platform_fanqiemf){ //番茄
                 //获取番茄书库的书
                 let fq_book_result = await get_fq_mf_book_tab_controllers.getData({ book_id: result.data.book_id });
                 if(fq_book_result.success){//如果番茄书库里有这本书
@@ -85,21 +87,23 @@ async function processCreateTask(){
             FilterConfig = JSON.parse(FilterConfig)
             if(!product.success){
                 let tg_platform_id = result.data.tg_platform_id
-                if(tg_platform_id==config.platform_fanqie){
+                if(tg_platform_id==config.platform_fanqiemf){
                     let client =  new HttpClient()
-                    let sid_tt = await tools.getFqSidtt()
-                    let response =  await client.proxyRequest( helper.getFqRequestOpt(result.data.book_id,sid_tt))
+                    let sid_tt = await tools.getFqMfSidtt()
+                    console.log("sid_tt:",sid_tt,result.data.book_id)
+                    let response =  await client.proxyGet( helper.getMfFqRequestOpt(result.data.book_id,sid_tt))
+                    console.log("response:",response)
                     let obj = response['data']
-                    if (Object.keys(obj['novel_data']).length === 0) {
+                    if (Object.keys(obj['book_info']).length === 0) {
                         result.data.words = 0
                         result.data.genre = 999
                         result.data.book_id = result.data.book_id
                         result.data.book_name = "没有找到这本书"
                     }else{
-                        let book_name =  obj['novel_data'].book_name
-                        let book_id = obj['novel_data'].book_id
-                        let genre = CMD.getFqGenre(obj['novel_data'].genre)
-                        let words = obj['novel_data'].word_number
+                        let book_name =  obj['book_info'].book_name
+                        let book_id = obj['book_info'].book_id
+                        let genre = 1
+                        let words = 0
                         let fq_book_data = {book_name:book_name,book_id:book_id,genre:genre,words:words,info:JSON.stringify(obj['novel_data'])}
                         let fq_book = {} 
                         fq_book.key = result.data.book_id
@@ -109,10 +113,8 @@ async function processCreateTask(){
                         if(!product_result.success){ //如果书库也没有
                             fq_book.tg_platform_id = result.data.tg_platform_id
                         
-                            if(CMD.isGenre(FilterConfig,fq_book_data.genre)){
-                                fq_book_data.tg_platform_id = result.data.tg_platform_id
-                                await CMD.insert_product(fq_book_data)
-                            }
+                            fq_book_data.tg_platform_id = result.data.tg_platform_id
+                            await CMD.insert_product(fq_book_data)
                         }
                         result.data.words = words
                         result.data.genre = fq_book_data.genre
@@ -202,9 +204,8 @@ CMD.isGenre = function(FilterConfig,genre){
 }
 
 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{
         await filter_data_controllers.updateFilterData({id:data.id},{status:1,book_id:data.book_id,book_name:data.book_name,genre:data.genre,words:data.words,material_sync_status:0})
         //创建一个小程序    
         let AppConfig = await redis_help.getKeyValue("AppConfig")
@@ -270,10 +271,11 @@ CMD.update_filter_data = async function(FilterConfig,data) {
                 }
             }
         }
-    }else{
+    }catch(e){
         await other_book_controllers.createData({product_id:data.book_id,product_name:data.book_name,tg_platform_id:data.tg_platform_id})
         await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name,genre:data.genre,material_sync_status:2})
     }
+        
 }
 
 
@@ -289,19 +291,8 @@ CMD.insert_product = async function(data){
 CMD.add_fq_book = async function(data,response){
     let book_name =  response.book_name
     let book_id = response.book_id
-    let genre = response.genre
-    let words = response.word_number
-    data.genre = 0
-    if(genre=="0"){
-        data.genre = 1;
-    }
-    if(genre=="8"){
-        data.genre = 3;
-    }
-
-    if(genre=="202"){
-        data.genre = 202;
-    }
+    let words = 0
+    data.genre = 1;
     data.words = words
     data.book_name = book_name
     data.book_id = book_id

+ 60 - 0
5_CREATE_LINK_FACTORY/fqmf_create_link.js

@@ -0,0 +1,60 @@
+//执行一个创建番茄链接任务
+const axios = require('axios');
+const helper = require('../src/helper');
+const config = require('../etc/config.json')
+const CMD = {}
+
+
+CMD.runTask = async function(data,main_info,PlatformInfo,call_back){
+
+    try {
+        let  tg_link_config = JSON.parse(main_info.tg_link_config)
+        let huichuan_id = tg_link_config['huichuan_id']
+        let kadian_id = tg_link_config['kadian_id']
+        let huichuan_list = JSON.parse(PlatformInfo.huichuan)
+        let kadian_list = JSON.parse(PlatformInfo.kadian)
+        let ad_callback_config_id = ""
+        let kadian_value = 5
+    
+    
+        for (let index = 0; index < huichuan_list.length; index++) {
+            const hc_obj = huichuan_list[index];
+            if(hc_obj.id==huichuan_id){
+              ad_callback_config_id = hc_obj.value
+              break
+            }
+        }
+    
+    
+        for (let index = 0; index < kadian_list.length; index++) {
+            const kd_obj = kadian_list[index];
+            if(kd_obj.id==kadian_id){
+                kadian_value = kd_obj.value
+              break
+            }
+        }
+
+        let create_fanqie_book_link = require('../src/api/fq/create_fanqiemf_book_link')
+        let remark  =  data.product_name.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '')
+        console.log("main_info:",main_info)
+        let distributorId = main_info.distributor_id
+        await create_fanqie_book_link.send(distributorId,data.product_id,kadian_value,remark,1,ad_callback_config_id,(start_page,start_param, info)=>{
+            if(start_page==null||start_param==null){
+                data.start_page = start_page
+                data.start_param = start_param
+                call_back(data,info)
+            }else{
+                data.start_page = start_page
+                data.start_param = start_param
+                data.promotion_id = info.promotion_id
+                call_back(data,null)
+            }
+        })
+    } catch (error) {
+        console.error('fq_create_link :Error:', error);
+        // 处理错误
+    }
+
+}
+
+module.exports = CMD;

+ 192 - 0
5_CREATE_LINK_FACTORY/fqmf_create_link_factory.js

@@ -0,0 +1,192 @@
+const CMD = {}
+const time_count = 2000;
+const redis_help = require('../src/use_redis');
+const video_applet_product_controllers = require('../src/data_manager/Controllers/video_applet_product_controllers');
+var fq_mf_create_link_task_list = []
+const config = require('../etc/config.json')
+let finish_call_back = async function(new_data,error_info=null){
+    try{
+        if(new_data.start_page != null && error_info==null){
+            const result = await video_applet_product_controllers.updateData({id:new_data.id},{
+                dy_small_program_start:new_data.start_page,
+                dy_small_program_start_data:new_data.start_param,
+                promotion_id:new_data.promotion_id,
+                wait_status:1,
+                status:0
+            })
+        }else{
+            const result = await video_applet_product_controllers.updateData({id:new_data.id},{
+                status:2,
+                wait_status:2,
+                error_info:JSON.stringify(error_info)
+            })
+        }
+  
+    }catch(e){
+        console.log("finish_call_back error:",e)
+    }
+   
+}
+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.getPlatformInfo = function(PlatformConfig,tg_platform_id){
+    for (let index = 0; index < PlatformConfig.length; index++) {
+        const element = PlatformConfig[index];
+        if(element.tg_platform_id==tg_platform_id){
+            return element
+        }
+    }
+}
+CMD.getSharedPlatform = function(PlatformShared,platform_shared_id){
+    for (let index = 0; index < PlatformShared.length; index++) {
+        const element = PlatformShared[index];
+        if(element.id==platform_shared_id){
+            return JSON.parse(element.info)
+        }
+    }
+}
+
+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 PlatformShared = await redis_help.getKeyValue("PlatformShared")
+
+        PlatformShared = JSON.parse(PlatformShared)
+
+        let platform_fanqie_info = CMD.getPlatformInfo(PlatformConfig,config.platform_fanqiemf)
+
+        let all_platform_list = CMD.getSharedPlatform(PlatformShared,platform_fanqie_info.platform_shared_id)
+
+        let result = null
+        
+        for (let index = 0; index < all_platform_list.length; index++) {
+            const tg_platform_id = all_platform_list[index];
+            let temp_result = await video_applet_product_controllers.getAppletProductDataByStatus({status:0,wait_status:0,book_platform:tg_platform_id})
+            if(temp_result.success){
+                result = temp_result
+                break
+            }
+        }
+
+        if(result==null){
+            return
+        }
+
+        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 main_info = CMD.getMainInfoById(MainConfig,result.data.main_id)
+
+            let PlatformInfo = null
+            
+            PlatformInfo = CMD.getPlatformInfoById(PlatformConfig,main_info.tg_platform_id)
+            if(PlatformInfo==null){
+                await video_applet_product_controllers.updateData({id:result.data.id},{
+                    status:2,
+                    wait_status:2,
+                    error_info:JSON.stringify({msg:"平台配置错误:"})
+                })
+                console.error("平台配置错误:",result)
+                throw "平台配置错误:"
+            }
+  
+
+            if(main_info==null&&result.data.is_close_execution==1){
+                let CloseMainConfig = await redis_help.getKeyValue("CloseMainConfig")
+                CloseMainConfig = JSON.parse(CloseMainConfig)
+                main_info = CMD.getMainInfoById(CloseMainConfig,result.data.main_id)
+            }
+
+            if(main_info==null){
+                await video_applet_product_controllers.updateData({id:result.data.id},{
+                    status:2,
+                    wait_status:2,
+                    error_info:JSON.stringify({msg:"主体配置错误:"})
+                })
+                console.error("主体配置错误:",result)
+                throw "主体配置错误:"
+            }
+
+            fq_mf_create_link_task_list.push({
+                n_data:result.data,
+                main_info:main_info,
+                PlatformInfo:PlatformInfo
+            })
+         
+        }
+
+        if(fq_mf_create_link_task_list.length>0){
+            let fq_create_link_task = fq_mf_create_link_task_list.pop()
+            require('./fqmf_create_link').runTask(fq_create_link_task.n_data
+                ,fq_create_link_task.main_info,
+                fq_create_link_task.PlatformInfo,finish_call_back)
+        }
+
+        await new Promise(resolve => setTimeout(resolve,100));
+
+    }catch(e){
+        console.log("CREATE_LINK_FACTORY error:",e)
+        finish_call_back(null,{"MESSAGE":"CREATE_LINK_FACTORY error:"})
+    } finally{
+        global.setTimeout(processTask,time_count)
+    }
+}
+CMD.init = function(){
+    redis_help.connect((results)=>{
+        if(results){
+        }
+    })
+    processTask()
+}
+
+
+CMD.getPlatformInfoById = function(PlatformConfig,tg_platform_id){
+    for (let index = 0; index < PlatformConfig.length; index++) {
+        const element = PlatformConfig[index];
+        if(element.tg_platform_id==tg_platform_id){
+            return element
+        }
+    }
+    return null
+}
+
+CMD.getMainInfoById = function(MainConfig,main_id){
+    // console.log("MainConfig:",MainConfig)
+    for (let index = 0; index < MainConfig.length; index++) {
+        const element = MainConfig[index];
+        if(element.id==main_id){
+            return element
+        }
+    }
+    return null
+}
+CMD.init()

+ 0 - 4
5_CREATE_LINK_FACTORY/hy_create_link_factory.js

@@ -105,10 +105,6 @@ async function processTask(){
             }
             let main_info = CMD.getMainInfoById(MainConfig,result.data.main_id)
 
-            console.log("main_info:",main_info)
-
-            console.log("result:",result)
-
             let PlatformInfo = null
             
             PlatformInfo = CMD.getPlatformInfoById(PlatformConfig,main_info.tg_platform_id)

+ 19 - 0
MESSAGE_DISPATCH/MESSAGE_DISPATCH.js

@@ -105,6 +105,22 @@ CMD.updatePlatformShared = async function(){
     });
 }
 
+CMD.updateFqMfKeyList =  async function(){
+    const postData = {
+        cmd:"fq_mf_book",
+        fun:"get_all_fq_mf_key",
+        data:{}
+    };
+    let client = tools.getOneNewClinet()
+    client.post('http://127.0.0.1:9100/tg/back/api', postData)
+    .then(response => {
+        redis_help.setKeyValue("all_fq_mf_key",JSON.stringify(response.data.data))
+    })
+    .catch(error => {
+      console.error('all_fq_mf_key error!', error);
+    });
+}
+
 CMD.updateFqKeyList = async function(){
     const postData = {
         cmd:"fq_book",
@@ -230,6 +246,9 @@ async function recvMessage(data){
             case "updateFqKeyList":
                 CMD.updateFqKeyList()
             break;
+            case "updateFqMfKeyList":
+                CMD.updateFqMfKeyList()
+            break;
             case "updateBlackBooks":
                 CMD.updateBlackBooks()
             break;


+ 8 - 1
etc/config.json

@@ -49,6 +49,12 @@
         "callbacklist_hots":"https://new-media-fx.qimao.com/api/postback/rule/list?page=1&page_size=50&env=&t=",
         "recharge_list_host":"https://new-media-fx.qimao.com/api/charge-configure/recharge-panel/list?panel_name=&category=0&page=1&page_size=50&env=&t="
     },
+    "fanqie_mf_config":{
+        "callbacklist_host": "https://www.changdunovel.com/novelsale/openapi/ad_callback_config/config_list/v1/",
+        "create_link_host": "https://www.changdunovel.com/novelsale/openapi/promotion/create/v1",
+        "distributorId": 1819222136130603,
+        "secretKey": "CN6KQ8Bauo8JXg5fFPk86EHdRFIUVnyV"
+    },
     "python_config": {
         "host": "http://127.0.0.1:8080"
     },
@@ -125,5 +131,6 @@
     "platform_heiyan":1,
     "platform_fanqie":2,
     "platform_qimao":3,
-    "platform_dianzhong":4
+    "platform_dianzhong":4,
+    "platform_fanqiemf":7
 }

+ 5 - 54
logs/combined.log

@@ -1,54 +1,5 @@
-<<<<<<< HEAD
-2025-01-09T18:31:11: 
-2025-01-09T18:31:11: > heiyan@1.0.0 start
-2025-01-09T18:31:11: > node tg_factory_main.js
-2025-01-09T18:31:11: 
-2025-01-09T18:31:14: Connected to Redis
-=======
-<<<<<<< HEAD
-2025-01-09T10:50:57: 
-2025-01-09T10:50:57: > heiyan@1.0.0 start
-2025-01-09T10:50:57: > node tg_factory_main.js
-2025-01-09T10:50:57: 
-2025-01-09T10:50:59: Connected to Redis
-=======
-2025-01-02T21:36:04: 
-2025-01-02T21:36:04: > heiyan@1.0.0 start
-2025-01-02T21:36:04: > node tg_factory_main.js
-2025-01-02T21:36:04: 
-2025-01-02T21:38:15: 
-2025-01-02T21:38:15: > heiyan@1.0.0 start
-2025-01-02T21:38:15: > node tg_factory_main.js
-2025-01-02T21:38:15: 
->>>>>>> 58a557cc5df587d3b3b926d70c3e0eccf0d469b4
-<<<<<<< HEAD
-2025-01-09T15:34:18: 
-2025-01-09T15:34:18: > heiyan@1.0.0 start
-2025-01-09T15:34:18: > node tg_factory_main.js
-2025-01-09T15:34:18: 
-2025-01-09T15:34:21: Connected to Redis
-2025-01-09T15:37:27: 
-2025-01-09T15:37:27: > heiyan@1.0.0 start
-2025-01-09T15:37:27: > node tg_factory_main.js
-2025-01-09T15:37:27: 
-2025-01-09T15:37:31: Connected to Redis
-2025-01-09T15:42:50: 
-2025-01-09T15:42:50: > heiyan@1.0.0 start
-2025-01-09T15:42:50: > node tg_factory_main.js
-2025-01-09T15:42:50: 
-2025-01-09T15:42:53: Connected to Redis
-=======
-2025-01-09T14:46:43: 
-2025-01-09T14:46:43: > heiyan@1.0.0 start
-2025-01-09T14:46:43: > node tg_factory_main.js
-2025-01-09T14:46:43: 
->>>>>>> b1c267102f4071b50bc2ee9af107e44f185e43dd
-2025-01-09T15:48:12: 
-2025-01-09T15:48:12: > heiyan@1.0.0 start
-2025-01-09T15:48:12: > node tg_factory_main.js
-2025-01-09T15:48:12: 
->>>>>>> 9e500c9269d0047488b6e68030e4ab259194158d
-2025-01-09T18:38:07: 
-2025-01-09T18:38:07: > heiyan@1.0.0 start
-2025-01-09T18:38:07: > node tg_factory_main.js
-2025-01-09T18:38:07: 
+2025-01-10T12:28:02: 
+2025-01-10T12:28:02: > heiyan@1.0.0 start
+2025-01-10T12:28:02: > node tg_factory_main.js
+2025-01-10T12:28:02: 
+2025-01-10T12:28:04: Connected to Redis

+ 5 - 54
logs/out.log

@@ -1,54 +1,5 @@
-<<<<<<< HEAD
-2025-01-09T18:31:11: 
-2025-01-09T18:31:11: > heiyan@1.0.0 start
-2025-01-09T18:31:11: > node tg_factory_main.js
-2025-01-09T18:31:11: 
-2025-01-09T18:31:14: Connected to Redis
-=======
-<<<<<<< HEAD
-2025-01-09T10:50:57: 
-2025-01-09T10:50:57: > heiyan@1.0.0 start
-2025-01-09T10:50:57: > node tg_factory_main.js
-2025-01-09T10:50:57: 
-2025-01-09T10:50:59: Connected to Redis
-=======
-2025-01-02T21:36:04: 
-2025-01-02T21:36:04: > heiyan@1.0.0 start
-2025-01-02T21:36:04: > node tg_factory_main.js
-2025-01-02T21:36:04: 
-2025-01-02T21:38:15: 
-2025-01-02T21:38:15: > heiyan@1.0.0 start
-2025-01-02T21:38:15: > node tg_factory_main.js
-2025-01-02T21:38:15: 
->>>>>>> 58a557cc5df587d3b3b926d70c3e0eccf0d469b4
-<<<<<<< HEAD
-2025-01-09T15:34:18: 
-2025-01-09T15:34:18: > heiyan@1.0.0 start
-2025-01-09T15:34:18: > node tg_factory_main.js
-2025-01-09T15:34:18: 
-2025-01-09T15:34:21: Connected to Redis
-2025-01-09T15:37:27: 
-2025-01-09T15:37:27: > heiyan@1.0.0 start
-2025-01-09T15:37:27: > node tg_factory_main.js
-2025-01-09T15:37:27: 
-2025-01-09T15:37:31: Connected to Redis
-2025-01-09T15:42:50: 
-2025-01-09T15:42:50: > heiyan@1.0.0 start
-2025-01-09T15:42:50: > node tg_factory_main.js
-2025-01-09T15:42:50: 
-2025-01-09T15:42:53: Connected to Redis
-=======
-2025-01-09T14:46:43: 
-2025-01-09T14:46:43: > heiyan@1.0.0 start
-2025-01-09T14:46:43: > node tg_factory_main.js
-2025-01-09T14:46:43: 
->>>>>>> b1c267102f4071b50bc2ee9af107e44f185e43dd
-2025-01-09T15:48:12: 
-2025-01-09T15:48:12: > heiyan@1.0.0 start
-2025-01-09T15:48:12: > node tg_factory_main.js
-2025-01-09T15:48:12: 
->>>>>>> 9e500c9269d0047488b6e68030e4ab259194158d
-2025-01-09T18:38:07: 
-2025-01-09T18:38:07: > heiyan@1.0.0 start
-2025-01-09T18:38:07: > node tg_factory_main.js
-2025-01-09T18:38:07: 
+2025-01-10T12:28:02: 
+2025-01-10T12:28:02: > heiyan@1.0.0 start
+2025-01-10T12:28:02: > node tg_factory_main.js
+2025-01-10T12:28:02: 
+2025-01-10T12:28:04: Connected to Redis

+ 14 - 0
pm2createlink.json

@@ -55,6 +55,20 @@
             "merge_logs": true,
             "exec_mode": "fork",
             "autorestart": true
+        },
+        {
+            "name": "fqmf_create_link_factory",
+            "script": "./5_CREATE_LINK_FACTORY/fqmf_create_link_factory.js",
+            "node_args": "--max-old-space-size=8192 --expose-gc",
+            "max_memory_restart": "4G",
+            "args": ["--type=data"],
+            "cwd": "/home/tg_factory",
+            "log_date_format": "YYYY-MM-DD HH:mm:ss",
+            "error_file": "./logs/create_link/fqmf_create_link_factory_error.log",
+            "out_file": "./logs/create_link/fqmf_create_link_factory_out.log",
+            "merge_logs": true,
+            "exec_mode": "fork",
+            "autorestart": true
         }
     ]
 }

+ 14 - 0
pm2json.json

@@ -83,6 +83,20 @@
             "exec_mode": "fork",
             "autorestart": true
         },
+        {
+            "name": "FQMF_FACTORY",
+            "script": "./2_PRODUCT_FACTORY/fq_mf_factory.js",
+            "node_args": "--max-old-space-size=8192 --expose-gc",
+            "max_memory_restart": "4G",
+            "args": ["--type=data"],
+            "cwd": "/home/tg_factory",
+            "log_date_format": "YYYY-MM-DD HH:mm:ss",
+            "error_file": "./logs/fq_mf_factory_error.log",
+            "out_file": "./logs/fq_mf_factory_out.log",
+            "merge_logs": true,
+            "exec_mode": "fork",
+            "autorestart": true
+        },
         {
             "name": "HY_FACTORY",
             "script": "./2_PRODUCT_FACTORY/hy_batch_factory.js",

+ 61 - 0
src/api/fq/create_fanqiemf_book_link.js

@@ -0,0 +1,61 @@
+const helper = require('../../helper');
+const config = require('../../../etc/config.json');
+const HttpClient = require('../../HttpClient');
+const CMD = {}
+//book_id=书籍id
+//index=第几章开始生成推广链。
+//promotion_name=推广链接名称
+//media_source=快应用:1 字节、2 腾讯、6 vivo,不填默认字节;H5:不需要填写 短剧:1 字节、3 快手 4 微信
+CMD.send = async function(distributorId,book_id,index=1,promotion_name="",media_source=1,ad_callback_config_id,call_back){
+    // 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),
+        book_id: book_id,
+        index:index,
+        promotion_name:promotion_name,
+        media_source:media_source,
+        ad_callback_config_id:ad_callback_config_id
+    };
+    let ad_callback_config_id_param = ""
+    if(postData.ad_callback_config_id!=""){
+        ad_callback_config_id_param = `&ad_callback_config_id=${postData.ad_callback_config_id}`
+    }
+
+    console.log("postData:",postData)
+    
+    var url = config.fanqie_config.create_link_host
+    var base_params = `/?distributor_id=${postData.distributor_id}&ts=${postData.ts}&sign=${postData.sign}`
+    var other_params = `&book_id=${postData.book_id}&index=${postData.index}&promotion_name=${postData.promotion_name}&media_source=${postData.media_source}${ad_callback_config_id_param}`
+    let clinet = new HttpClient()
+    try{
+        let response = await clinet.request(`${url}${base_params}${other_params}`)
+        // 检查响应是否存在
+        if (!response) {
+            throw new Error('No response received');
+        }
+        if(response.promotion_url==undefined){
+            if(response.code==4000){
+                console.log("response promotion_name:",promotion_name)
+            }else{
+                console.log("response :",response)
+            }
+            call_back(null,null, response)
+        }else{
+            let params = response.promotion_url.split('?')
+            let start_page = params[0]
+            let start_param = params[1]
+            if(call_back!=null){
+                call_back(start_page,start_param, response)
+            }
+        }
+    }catch(e){
+        console.log("create_fanqie_book_link error:",e)
+    }
+
+}
+
+
+module.exports = CMD;

BIN
src/api/hy/qr.gif


BIN
src/api/hy/qr_resized.gif


+ 2 - 1
stopAllcreateLink.sh

@@ -1,4 +1,5 @@
 /home/node/node-v20.17.0-linux-x64/lib/node_modules/pm2/bin/pm2 stop hy_create_link_factory
 /home/node/node-v20.17.0-linux-x64/lib/node_modules/pm2/bin/pm2 stop fq_create_link_factory
 /home/node/node-v20.17.0-linux-x64/lib/node_modules/pm2/bin/pm2 stop dz_create_link_factory
-/home/node/node-v20.17.0-linux-x64/lib/node_modules/pm2/bin/pm2 stop qm_create_link_factory
+/home/node/node-v20.17.0-linux-x64/lib/node_modules/pm2/bin/pm2 stop qm_create_link_factory
+/home/node/node-v20.17.0-linux-x64/lib/node_modules/pm2/bin/pm2 stop fqmf_create_link_factory

+ 21 - 0
tools.js

@@ -137,6 +137,27 @@ class tools {
         return this.getRandomElement(temp)
     }
 
+
+    async getFqMfSidtt() {
+        let sidtt = '01e060d0cc506bf1340dcb004aea1161'
+        let list =  await this.redis_help.getKeyValue("all_fq_mf_key")
+        if(list == null){
+            return sidtt
+        }
+        list = JSON.parse(list)
+        if(list.length<=0){
+            return sidtt
+        }
+        let temp = []
+        for (let index = 0; index < list.length; index++) {
+            const sidtt = list[index];
+            if(sidtt.canUse==1){
+                temp.push(sidtt.sid_tt)
+            }
+        }
+        return this.getRandomElement(temp)
+    }
+
     getOneNewClinet(){
         return axios.create({
             timeout: 30000,