904118851 3 月之前
父節點
當前提交
28e3b5c777

+ 7 - 0
1_FILTER_FACTORY/FILTER_FACTORY.js

@@ -332,6 +332,12 @@ function filter_and_insert(origin_data,tg_config,PlatformConfig){
             return null
         }
         obj.book_id = obj.id
+    }else if(obj.channel==config.platform_zy){ //"掌阅"
+        tg_platform_id = config.platform_zy
+        if(obj.zy_book_id==undefined||obj.zy_book_id==null){
+            return null
+        }
+        obj.book_id = obj.zy_book_id
     }
     // console.log("评论数正确")
     return {video_id:origin_data.video_id,book_id:obj.book_id,channel:obj.channel,source:obj.source.substring(0,obj.source.length>64?64:obj.source.length),key:obj.key,video_link:origin_data.video_link,
@@ -448,6 +454,7 @@ function parsePromotion(promotion,source_list,platform_select,PlatformConfig){
                 item_info['id'] = params['id']
                 item_info['cbid'] = params['cbid']
                 item_info['code'] = params['code']
+                item_info['zy_book_id'] = params['zy_book_id']
                 const str = params['x-signature']
                 const regex = /"name":"([^"]+)"/;
                 const match = str.match(regex);

+ 342 - 0
2_PRODUCT_FACTORY/zy_batch_factory.js

@@ -0,0 +1,342 @@
+const CMD = {}
+const video_product_controllers = require('../src/data_manager/Controllers/video_product_controllers');
+const filter_data_controllers = require('../src/data_manager/Controllers/filter_data_controllers');
+const video_applet_product_controllers = require('../src/data_manager/Controllers/video_applet_product_controllers');
+const other_book_controllers = require('../src/data_manager/Controllers/other_book_controllers');
+const redis_help = require('../src/use_redis');
+const config = require('../etc/config.json');
+const tools = require('../tools');
+const time_count = 1000;
+const task_queue = []
+
+function getProductById(product_list,product_id){
+    for (let index = 0; index < product_list.length; index++) {
+        const product_item = product_list[index];
+        if(product_item.product_id==product_id){
+            return product_item
+        }
+    }
+    return null
+}
+
+async function processTask(){
+    let result = null
+    try{
+        let isPauseTask =  await redis_help.getKeyValue("isPauseTask")
+        if(isPauseTask=="true"){
+            return
+        }
+        let FilterConfig = await redis_help.getKeyValue("FilterConfig")
+        FilterConfig = JSON.parse(FilterConfig)
+        result = await filter_data_controllers.getFilterDataByStatusAndLimit({ status: 0 , tg_platform_id: config.platform_zy },500);
+        if(result.success){
+            let ProductIds = []
+            let FilterList = []
+            let Ids = []
+            if(result.data.length<=0){
+                throw '没有数据可处理!'
+            }
+            for (let index = 0; index < result.data.length; index++) {
+                let filter_item = result.data[index];
+                ProductIds.push(filter_item.book_id)
+                FilterList[filter_item.book_id] = filter_item
+            }
+
+            let product_list_result = await video_product_controllers.findNonExistentProductIds(ProductIds);
+            if(product_list_result.success){
+                for (let index = 0; index < result.data.length; index++) {
+                    let filter_item = result.data[index];
+                    if(product_list_result.data.existingProductIds.has(filter_item.book_id)){
+                        let info = filter_item;
+                        let product_item = getProductById(product_list_result.data.existingRecords,filter_item.book_id)
+                        if (!info) {
+                            throw `No filter info found for book_id: ${filter_item.book_id}`
+                        }
+                        if (!product_item) {
+                            throw `product_item is null: ${filter_item.book_id}`
+                        }
+                        info.words = product_item.words
+                        info.genre =  product_item.genre
+                        info.book_id = product_item.product_id
+                        info.book_name = product_item.product_name
+                        await CMD.update_filter_data(FilterConfig,info)
+                        await new Promise(resolve => setTimeout(resolve,100));
+                    } else{
+                        Ids.push(filter_item.id)
+                    }
+                }
+
+                let remove_product_list = []
+
+                for (let index = 0; index < product_list_result.data.nonExistentIds.length; index++) {
+                    const product_id = product_list_result.data.nonExistentIds[index];
+                    if(remove_product_list[product_id]==true){
+          
+                    }else{
+                        remove_product_list[product_id] = true
+                        task_queue.push({result:{data:FilterList[product_id]}})
+                    }
+                }
+                // if(Ids.length>0){
+                //     console.log("Ids:",Ids)
+                //     await filter_data_controllers.updateFilterDataByIds({ids:Ids},{status:1})
+                // }
+              
+            }
+            
+        }
+    }catch(e){
+        console.error("processTask error:",e)
+        // if(result!=null&&result!=undefined){
+        //     await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
+        // }
+    } finally{
+        global.setTimeout(processTask, 100);
+    }
+
+}
+
+async function processCreateTask(){
+    let result = null
+    try{
+        if(task_queue.length>0){
+            let task_queue_item = task_queue.pop()
+            result = task_queue_item.result
+            let other_book = await other_book_controllers.getData({product_id:task_queue_item.result.data.book_id})
+            if(other_book.success){
+                await filter_data_controllers.updateFilterData({id:result.data.id},{status:2,book_id:other_book.data.product_id,book_name:other_book.data.product_name,material_sync_status:2})
+                throw "处理了一条长篇或者筛选不要的书"
+            }
+            let product = await video_product_controllers.getProductData({ book_id: task_queue_item.result.data.book_id });
+            let FilterConfig = await redis_help.getKeyValue("FilterConfig")
+            FilterConfig = JSON.parse(FilterConfig)
+            if(!product.success){
+                let tg_platform_id = result.data.tg_platform_id
+                if(tg_platform_id==config.platform_zy){ //掌阅
+                    let zy_book_data = await require('../src/api/zy/zy_search_book').new_search_id(result.data.book_id)
+                    if(zy_book_data==null){
+                        result.data.genre = 999
+                    }else{
+                        zy_book_data.tg_platform_id = result.data.tg_platform_id
+                        // if(CMD.isGenre(FilterConfig,zh_book_data.genre)){
+                        //     await CMD.insert_product(zh_book_data)
+                        // }
+                        await CMD.insert_product(zy_book_data)
+                        result.data.words = zy_book_data.words
+                        result.data.genre = zy_book_data.genre
+                        result.data.book_id = zy_book_data.book_id
+                        result.data.book_name = zy_book_data.book_name
+                    }
+                }
+            }else{
+                result.data.words = product.words
+                result.data.genre = product.genre
+                result.data.book_id = product.product_id
+                result.data.book_name = product.product_name
+            }
+            await CMD.update_filter_data(FilterConfig,result.data)
+        }
+    }catch(e){
+        console.log("error::",e)
+        // if(result!=null){
+        //     await filter_data_controllers.updateFilterData({id:result.data.id},{status:2})
+        // }
+        console.log("processCreateTask:",e)
+    } finally{
+        global.setTimeout(processCreateTask, time_count);
+    }
+}
+CMD.init = async function(){
+    redis_help.connect((results)=>{
+        if(results){
+        }
+    })
+    processTask();
+    processCreateTask();
+}
+
+CMD.getAppInfoByPlatformId = function(AppConfig,tg_platform_id){
+    let temp = []
+    for (let index = 0; index < AppConfig.length; index++) {
+        const element = AppConfig[index];
+        if(element.tg_platform_id==tg_platform_id){
+            temp.push(element)
+        }
+    }
+    return temp
+}
+CMD.isBlackBook = function(all_black_books,book_id){
+    if(all_black_books==null){
+        return false
+    }
+    for (let index = 0; index < all_black_books.length; index++) {
+        const black_book = all_black_books[index];
+        if(black_book.product_id==book_id){
+            return true
+        }
+    }
+    return false
+}
+CMD.getMainInfoByAppid = function(MainConfig,app_id){
+    let list = []
+    for (let index = 0; index < MainConfig.length; index++) {
+        const element = MainConfig[index];
+        if(element.app_id==app_id){
+            list.push(element)
+        }
+    }
+    return list
+}
+CMD.isGenre = function(FilterConfig,genre){
+    let is_need  = false
+    //判断长篇短篇是否是要的数据
+    for (let index = 0; index < FilterConfig.genre.length; index++) {
+        const element = FilterConfig.genre[index];
+        if(genre==element){
+            is_need = true
+            break
+        }
+    }
+    return is_need
+}
+
+CMD.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)
+        }
+    }
+}
+
+CMD.update_filter_data = async function(FilterConfig,data) {
+    let isGenre = CMD.isGenre(FilterConfig,data.genre)
+    if(isGenre){
+        if(data.genre==999){
+            return await filter_data_controllers.updateFilterData({id:data.id},{status:2,book_id:data.book_id,book_name:data.book_name,genre:data.genre,words:data.words,material_sync_status:0})
+        }else{
+            await filter_data_controllers.updateFilterData({id:data.id},{status:1,book_id:data.book_id,book_name:data.book_name,genre:data.genre,words:data.words})
+        }
+        //创建一个小程序    
+
+        let MainConfig = await redis_help.getKeyValue("MainConfig")
+
+        MainConfig = JSON.parse(MainConfig)
+
+        let AppConfig = await redis_help.getKeyValue("AppConfig")
+
+        AppConfig = JSON.parse(AppConfig)
+
+        let PlatformShared = await redis_help.getKeyValue("PlatformShared")
+
+        PlatformShared = JSON.parse(PlatformShared)
+        
+        let PlatformConfig = await redis_help.getKeyValue("PlatformConfig")
+
+        PlatformConfig = JSON.parse(PlatformConfig)
+
+        let PlatformInfo = CMD.getPlatformInfo(PlatformConfig,config.platform_zy)
+
+
+        let all_platform_list = CMD.getSharedPlatform(PlatformShared,PlatformInfo.platform_shared_id)
+
+
+        for (let i = 0; i < all_platform_list.length; i++) {
+            const tg_platform_id = all_platform_list[i];
+
+            let AppInfoList = CMD.getAppInfoByPlatformId(AppConfig,tg_platform_id)
+
+
+            for (let j = 0; j < AppInfoList.length; j++) {
+                const AppInfo = AppInfoList[j];
+                data.app_id = AppInfo.app_id
+
+                let list = CMD.getMainInfoByAppid(MainConfig,data.app_id)
+
+                if(list.length<0){
+                    return console.error("获取主体错误:",data)
+                }
+
+                let black_books = await redis_help.getKeyValue("all_black_books")
+                
+                if(black_books!=null){
+                    black_books = JSON.parse(black_books)
+                }
+        
+                for (let index = 0; index < list.length; index++) {
+                    const main_info = list[index];
+                    data.main_id = main_info.id
+                    data.main_name = main_info.main_name
+                    let butler_id = main_info.butler_id
+                    if(main_info.tg_link_config==undefined||main_info.tg_link_config==null){
+                        console.error("主体配置推广链接错误:",main_info)
+                    }else{
+                        let mian_genre = main_info.genre
+                        let book_genre = data.genre
+
+                        let min_book_word = main_info.min_book_word
+                        let max_book_word = main_info.max_book_word
+                        let word = data.words
+                        let material_platform_id = main_info.material_platform_id
+                        if(!CMD.isBlackBook(black_books,data.book_id)&&word>=min_book_word&&word<=max_book_word){
+                            //符合标准进行创建表
+                            let butler_video_applet_info = await tools.getAppletProductDataByButlerId(butler_id,data.book_id,data.main_id)
+                            if(butler_video_applet_info==null){
+                                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:config.platform_zy,
+                                        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,
+                                        material_platform_id:material_platform_id,
+                                        butler_id:butler_id
+                                    })
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        
+        
+    }else{
+        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})
+    }
+}
+
+
+CMD.insert_product = async function(data){
+    return await video_product_controllers.createProductData({
+        book_platform:data.tg_platform_id,
+        product_name:data.book_name,
+        genre:data.genre,
+        product_id:data.book_id,
+        words:data.words,
+        totalChapterNum:data.totalChapterNum,
+        publish_time:data.publish_time,
+        default_pay_section:data.default_pay_section,
+        default_price:data.default_price,
+        fee_unit:data.fee_unit
+    })
+}
+
+CMD.init()

+ 5 - 5
5_CREATE_LINK_FACTORY/qm_mf_create_link_factory.js

@@ -146,13 +146,13 @@ async function processTask(){
         console.log("qm_mf_create_link_task_list:",qm_create_link_task_list)
         if(qm_create_link_task_list.length>0){
             let qm_create_link_task = qm_create_link_task_list.pop()
-            await require('./qm_mf_create_link').runTask(qm_create_link_task.n_data
-                ,qm_create_link_task.main_info,
-                qm_create_link_task.PlatformInfo,finish_call_back)
-            // console.log("qm_create_link_task.PlatformInfo:",qm_create_link_task.PlatformInfo)
-            // await require('./qm_mf_new_create_link').runTask(qm_create_link_task.n_data
+            // await require('./qm_mf_create_link').runTask(qm_create_link_task.n_data
             //     ,qm_create_link_task.main_info,
             //     qm_create_link_task.PlatformInfo,finish_call_back)
+            // console.log("qm_create_link_task.PlatformInfo:",qm_create_link_task.PlatformInfo)
+            await require('./qm_mf_new_create_link').runTask(qm_create_link_task.n_data
+                ,qm_create_link_task.main_info,
+                qm_create_link_task.PlatformInfo,finish_call_back)
         }
     }catch(e){
         console.log("qm_mf_create_link_factory error:",e)

+ 2 - 2
5_CREATE_LINK_FACTORY/qm_mf_new_create_link.js

@@ -49,12 +49,12 @@ CMD.runTask = async function (data,main_info,PlatformInfo,call_back) {
     let postData = {
         admin_account_name:config.qimao_mf_config.admin_account_name,
         account_id:target_id,
-        project:PlatformInfo.mini_program_platform_id==config.wx?8:6,     // 6 抖音小程序  8 微信小程序
+        project:PlatformInfo.mini_program_platform_id==config.wx?12:10,     // 10 抖音小程序  12 微信小程序
         appid:main_info.app_id,
         book_id:data.product_id,
         chapter_num:1,
         name:`${data.product_name}_${timestamp}_${main_info.id}`,
-        media_id: '1', //1  巨量 2 广点通 3 百度 4 微博 5 B站
+        media_id: 1, //1  巨量 2 广点通 3 百度 4 微博 5 B站
         is_platform_postback:true,
         postback_rule_id: call_back_template_id, //# 回传规则 value
         // first_panel_id:recharge_template_id, //首充模板id

+ 1 - 1
5_CREATE_LINK_FACTORY/zh_create_link.js

@@ -74,7 +74,7 @@ CMD.makeRequest = async function(t_data,main_info,PlatformInfo) {
             'sec-fetch-mode': 'cors',
             'sec-fetch-site': 'same-origin',
             'x-requested-with': 'XMLHttpRequest',
-            'cookie': '_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1743342798,1743994910,1744797535; z_c0=2|1:0|10:1744797535|4:z_c0|80:MS4xN1lrbldnQUFBQUFtQUFBQVlBSlZUVjdON0dodGZOQUlwdlk2X2hnZ0ZlbnVxTVFEZmxpVG9RPT0=|eb305312b34143217310e91016bf6488bd105f40db41912d878b7c48f4ae368b; ecom_merchant=1857114769787609088; BEC=4589376d83fd47c9203681b16177ae43',
+            'cookie': '_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; BEC=738c6d0432e7aaf738ea36855cdce904; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1744797535,1747044239; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1747044239; HMACCOUNT=8B23C823A8286BDF; captcha_session_v2=2|1:0|10:1747044240|18:captcha_session_v2|88:WU9XenluNjRDQnRqalZvSmxYU2dNZldqRW1oc1l1aUdUTFh0SmNFWFVOS2E4Zm1ieVVqL0JxTWcwUHB5dng2Qg==|e48d0f7dc867c3386e846e6a046467e209447e0f45de2ec58e40cb5ea89b5024; captcha_ticket_v2=2|1:0|10:1747044266|17:captcha_ticket_v2|728:eyJ2YWxpZGF0ZSI6IkNOMzFfODlzRTFBbml6YmRKcUE1YzFXcHRIOXZ1Q0h4dXBPMXVsQzRNYklwREZpMVlhUkpjY2pseWFEVjR5Y3ZzLktzLnB2NUROQ1Z5LjUxbENrUzQzVFBxTkRqYnlKcWFYYnZRcGM4WGVJQWhQR0dvX3ZIaGlzVldRdzVtelVlcE1sdC5BVTJhYi5VSVM1bWswZUNqdkRlRnRqa1NoWFpjNmdQdUlHVzllX3RWbVFQOG5scmZQUWJBX1JXRWxKTTlBZEgweFpJNkY1U0J2TE52UDlvZlNlY1M1VzhiOGxOcTNrdjA1QzZ1SWhSQTRKQUVQQ2ZOX0tvNHE2RTN6Zk14SklaOVZ6QWtvVS42dE1GbHN3ODJ4b2JGTXlTMXdITGtUNTNpNVJCUUdYWUZ2THdIVTZ3LmNtd3dsX1pGcFJ0VzBfZlRqOU40KjBtcEdEY1JlZVBXbEMwTFlhYlA4bzgxUmxsUWkqZHdKelpKRUdxSnRmKnoqTnhJZl93NlR0Y2RkT3ZvWVVfRFRkVWF3cHl2UlhTcExEb0Q5TldDR0d2cDZxOVJoMU9WNlZXNHdRaEQ0X2Z3U3VPSjlFZipLY3JKTVdvc1o2KkpvVDl6Vms0enVJLkVCLlN0T3JXRm5ZVWduZFlzNW9kY0pCbGRjYkk0Nmd1OUIudlZIQjJIbWdMUHgxQVFiLjk1Q003N192X2lfMSJ9|86552ad9b795608fe66c8628d1a00b37678dfd2c0345979a0ade4da1d9075998; z_c0=2|1:0|10:1747044266|4:z_c0|92:Mi4xWjA2M1hBQUFBQUFBTUJKTENYQ1BHU1lBQUFCZ0FsVk5xaFVQYVFEYmZqdjk5aW90YXVCVWRVaUxjdmcxMlpoNF93|7715e73dbd09a2ff037024e7c3c87c621ee1d97648f3c5a9c82ed50a82e93837; ecom_merchant=1876277363932790784',
             'Referer': `https://ecom.zhihu.com/vip-apps/out-distribution/contentLib/detail?&sectionId=${t_data.promotion_id}&workId=${t_data.promotion_id}&appId=${main_info.app_id}&media_channel_type=5`,
             'Referrer-Policy': 'no-referrer-when-downgrade'
             },

+ 34 - 39
5_CREATE_LINK_FACTORY/zy_create_link.js

@@ -2,64 +2,59 @@
 const axios = require('axios');
 const helper = require('../src/helper');
 const config = require('../etc/config.json');
+const video_product_controllers = require('../src/data_manager/Controllers/video_product_controllers');
 const tools = require('../tools');
 const CMD = {}
 
 CMD.runTask = async function(t_data,main_info,PlatformInfo,call_back){
     // 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']
-    let huichuan_id = tg_link_config['huichuan_id']
-    let chongzhi_list = JSON.parse(PlatformInfo.chongzhi)
-    let huichuan_list = JSON.parse(PlatformInfo.huichuan)
-    let recharge_template_id = ""
-    let ad_callback_config_id = ""
-    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
-          recharge_template_id = cz_obj.value
-          break
-        }
-    }
-
-    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
-        }
-      }
+    let  zy_conifg = JSON.parse(main_info.zy_conifg)
     try {
         let token = await require('../src/api/zy/get_zy_token').get_token()
         console.log("token:",token)
         let clinet = tools.getOneNewClinet()
+        let book_info = await video_product_controllers.getProductData({book_id:t_data.product_id})
+        if(book_info.success==false){
+            throw "没有找到这本书:"+t_data.product_id
+        }
+        let pay_type = zy_conifg.pay_type!=0?zy_conifg.pay_type:book_info.data.fee_unit
+        let price = zy_conifg.price!=0?zy_conifg.price:book_info.data.default_price
+        let start_pay_section = zy_conifg.start_pay_section!=0?zy_conifg.start_pay_section:book_info.data.default_pay_section
         let response = await clinet.post(`https://openapi-gaia.zhangyue.com/opendata/reseller/pay/book/link/create`,{
             access_token:token,
             name:`${t_data.product_name}_${main_info.id}`,
             source:"toutiao2",        //媒体 - 抖音小程序 只能使用 "toutiao2" - 微信小程序可选项如下   - bili B站/   - toutiao2 头条2.0   - gdt3 广点通3.0
-            start_pay_section:10, //开始付费章节
-            book_chapter:1, //调起章节
-            book_id:t_data.product_id,
-            first_recharge:'11',  //首充收银台
-            follow_recharge:'11', //复充收银台
-            pay_type:'1', //书籍定价方式- 10 整本 - 20 千字价格
-            price:123, //书籍价格
-            callback_conf_reseller_id:'11', //回传策略ID
-            owner:'12', //创建用户id
-            app_key:'', //应用Key
+            start_pay_section:start_pay_section, //开始付费章节
+            book_chapter:zy_conifg.book_chapter, //调起章节
+            book_id:parseInt(t_data.product_id),
+            first_recharge:zy_conifg.first_recharge,  //首充收银台
+            follow_recharge:zy_conifg.follow_recharge, //复充收银台
+            pay_type:pay_type, //书籍定价方式- 10 整本 - 20 千字价格
+            price:price, //书籍价格
+            callback_conf_reseller_id:zy_conifg.callback_conf_reseller_id, //回传策略ID
+            owner:zy_conifg.owner, //创建用户id
+            app_key:zy_conifg.app_key, //应用Key
         })
-        let list = null
+        let promotion_info = null
         if(response.data.code!=0){
             console.error("get_zy_account_list error:",response)
         }else{
-            list = response.data.body.users
+            promotion_info = response.data.body
         }
-
+        if(promotion_info==null){
+            console.error("promotion_info==null")
+            throw response.data
+        }
+        let start_page = promotion_info.start_page
+        let start_param = promotion_info.start_params
+        t_data.promotion_id = promotion_info.channel_id
+        t_data.start_page = start_page
+        t_data.start_param = start_param
+        console.log('t_data:',t_data)
+        call_back(t_data,null)
     } catch (error) {
-        console.error('zy_create_link :Error:', error);
-        // 处理错误
+        call_back(t_data,error)
+        return null;
     }
 
 }

+ 192 - 0
5_CREATE_LINK_FACTORY/zy_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 zy_create_link_task_list = []
+const config = require('../etc/config.json');
+const tools = require('../tools');
+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:2,
+                    status:1,
+                    check_url:"https://n8-adv-ocean.s6kuwan.com"
+            })
+        }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_zy_info = CMD.getPlatformInfo(PlatformConfig,config.platform_zy)
+
+        let all_platform_list = CMD.getSharedPlatform(PlatformShared,platform_zy_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:"当前书在黑名单"})
+                    ,error_type:1
+                })
+                throw "当前书在黑名单"
+            }
+            let main_info = CMD.getMainInfoById(MainConfig,result.data.main_id)
+
+            
+            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 "主体配置错误:"
+            }
+            
+            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 "平台配置错误:"
+            }
+  
+
+            zy_create_link_task_list.push({
+                n_data:result.data,
+                main_info:main_info,
+                PlatformInfo:PlatformInfo
+            })
+        }
+
+        console.log("zy_create_link_task_list:",zy_create_link_task_list)
+
+        if(zy_create_link_task_list.length>0){
+            let zy_create_link_task = zy_create_link_task_list.pop()
+            require('./zy_create_link').runTask(zy_create_link_task.n_data
+                ,zy_create_link_task.main_info,
+                zy_create_link_task.PlatformInfo,finish_call_back)
+        }
+    }catch(e){
+        console.log("zh_create_link_factory error:",e)
+        finish_call_back(null,{"MESSAGE":"yw_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()

二進制
dump.rdb


+ 3 - 3
etc/config.json

@@ -71,10 +71,10 @@
     },
     "qimao_mf_config":{
         "admin_account_name":"zhuoyue",
-        "access_key":"09ba094d2f70e0e5bc340cca365fabe3",
-        "secret_key":"36bb8183bf00a78dd55422156ee5b2dc",
+        "access_key":"17ea586201c37d0f64b2632917113bf3",
+        "secret_key":"1f6efde5d95a619362c6fa06378489fe",
         "Appid":"tt79e30f5ee6d455b601",
-        "new_create_link_host":"https://new-media-mapi.qimao.com/mapi/v2/promotion-link/create",
+        "new_create_link_host":"https://new-media-iaa-mapi.qimao.com/mapi/v1/promotion-link/create",
         "create_link_host":"https://new-media-mapi.qimao.com/mapi/v1/promotion-link/list", 
         "login_host":"https://new-media-iaa-fx.qimao.com/api/account/login?t=",
         "callbacklist_hots":"https://new-media-fx.qimao.com/api/postback/rule/list?page=1&page_size=50&env=&t=",

+ 216 - 108
logs/combined.log

@@ -1,108 +1,216 @@
-2025-05-09T15:31:32: 
-2025-05-09T15:31:32: > heiyan@1.0.0 start
-2025-05-09T15:31:32: > node tg_factory_main.js
-2025-05-09T15:31:32: 
-2025-05-09T15:31:35: Connected to Redis
-2025-05-09T15:31:36: data: {
-2025-05-09T15:31:36:   author: '木子',
-2025-05-09T15:31:36:   book_id: '7385111704889216051',
-2025-05-09T15:31:36:   book_name: '绿茶保姆想上位,不想狠狠被打脸',
-2025-05-09T15:31:36:   book_pool: 1,
-2025-05-09T15:31:36:   book_type: 1,
-2025-05-09T15:31:36:   category: '754,125,739,597,776',
-2025-05-09T15:31:36:   category_text: '现实情感,家庭,逆袭,爽文,复仇',
-2025-05-09T15:31:36:   chapter_amount: 1,
-2025-05-09T15:31:36:   chapter_price: 0,
-2025-05-09T15:31:36:   copyright_expiration_time: '',
-2025-05-09T15:31:36:   creation_status: 0,
-2025-05-09T15:31:36:   delivery_status: 1,
-2025-05-09T15:31:36:   free_chapter_count: 0,
-2025-05-09T15:31:36:   genre: 8,
-2025-05-09T15:31:36:   is_derivatived: false,
-2025-05-09T15:31:36:   latest_update_time: '2024-06-27 17:25:11',
-2025-05-09T15:31:36:   length_type: 2,
-2025-05-09T15:31:36:   on_shelf_time: '',
-2025-05-09T15:31:36:   permission_status: 4,
-2025-05-09T15:31:36:   price_changed: false,
-2025-05-09T15:31:36:   short_free_chapter_count: 0,
-2025-05-09T15:31:36:   short_thousand_words_price: 0,
-2025-05-09T15:31:36:   source: '星空文学网',
-2025-05-09T15:31:36:   start_percentage: 40,
-2025-05-09T15:31:36:   thousand_words_price: 0,
-2025-05-09T15:31:36:   thumb_uri: 'novel-static/c219a65907b3f8fa6f6fa9431ab75f13',
-2025-05-09T15:31:36:   thumb_url: 'https://p11-novelsale-sign.yueduwuxianpic.com/novel-static/c219a65907b3f8fa6f6fa9431ab75f13~tplv-t1vlgo34s3-distribmini.image?lk3s=4c55cbb1&x-expires=1749367896&x-signature=t9l33LPOmfKVm0gTuNtmK6Xu%2Fyw%3D',
-2025-05-09T15:31:36:   total_price: 1990,
-2025-05-09T15:31:36:   word_count: 8664
-2025-05-09T15:31:36: }
-2025-05-09T15:50:48: 
-2025-05-09T15:50:48: > heiyan@1.0.0 start
-2025-05-09T15:50:48: > node tg_factory_main.js
-2025-05-09T15:50:48: 
-2025-05-09T15:50:51: Connected to Redis
-2025-05-09T15:50:52: data: {
-2025-05-09T15:50:52:   author: '木子',
-2025-05-09T15:50:52:   book_id: '7385111704889216051',
-2025-05-09T15:50:52:   book_name: '绿茶保姆想上位,不想狠狠被打脸',
-2025-05-09T15:50:52:   book_pool: 1,
-2025-05-09T15:50:52:   book_type: 1,
-2025-05-09T15:50:52:   category: '754,125,739,597,776',
-2025-05-09T15:50:52:   category_text: '现实情感,家庭,逆袭,爽文,复仇',
-2025-05-09T15:50:52:   chapter_amount: 1,
-2025-05-09T15:50:52:   chapter_price: 0,
-2025-05-09T15:50:52:   copyright_expiration_time: '',
-2025-05-09T15:50:52:   creation_status: 0,
-2025-05-09T15:50:52:   delivery_status: 1,
-2025-05-09T15:50:52:   free_chapter_count: 0,
-2025-05-09T15:50:52:   genre: 8,
-2025-05-09T15:50:52:   is_derivatived: false,
-2025-05-09T15:50:52:   latest_update_time: '2024-06-27 17:25:11',
-2025-05-09T15:50:52:   length_type: 2,
-2025-05-09T15:50:52:   on_shelf_time: '',
-2025-05-09T15:50:52:   permission_status: 4,
-2025-05-09T15:50:52:   price_changed: false,
-2025-05-09T15:50:52:   short_free_chapter_count: 0,
-2025-05-09T15:50:52:   short_thousand_words_price: 0,
-2025-05-09T15:50:52:   source: '星空文学网',
-2025-05-09T15:50:52:   start_percentage: 40,
-2025-05-09T15:50:52:   thousand_words_price: 0,
-2025-05-09T15:50:52:   thumb_uri: 'novel-static/c219a65907b3f8fa6f6fa9431ab75f13',
-2025-05-09T15:50:52:   thumb_url: 'https://p26-novelsale-sign.yueduwuxianpic.com/novel-static/c219a65907b3f8fa6f6fa9431ab75f13~tplv-t1vlgo34s3-distribmini.image?lk3s=4c55cbb1&x-expires=1749369052&x-signature=bi4PbZm7Egd5aU23zIXdHqovxN0%3D',
-2025-05-09T15:50:52:   total_price: 1990,
-2025-05-09T15:50:52:   word_count: 8664
-2025-05-09T15:50:52: }
-2025-05-09T16:05:46: 
-2025-05-09T16:05:46: > heiyan@1.0.0 start
-2025-05-09T16:05:46: > node tg_factory_main.js
-2025-05-09T16:05:46: 
-2025-05-09T16:05:48: Connected to Redis
-2025-05-09T16:05:49: data: {
-2025-05-09T16:05:49:   author: '木子',
-2025-05-09T16:05:49:   book_id: '7385111704889216051',
-2025-05-09T16:05:49:   book_name: '绿茶保姆想上位,不想狠狠被打脸',
-2025-05-09T16:05:49:   book_pool: 1,
-2025-05-09T16:05:49:   book_type: 1,
-2025-05-09T16:05:49:   category: '754,125,739,597,776',
-2025-05-09T16:05:49:   category_text: '现实情感,家庭,逆袭,爽文,复仇',
-2025-05-09T16:05:49:   chapter_amount: 1,
-2025-05-09T16:05:49:   chapter_price: 0,
-2025-05-09T16:05:49:   copyright_expiration_time: '',
-2025-05-09T16:05:49:   creation_status: 0,
-2025-05-09T16:05:49:   delivery_status: 1,
-2025-05-09T16:05:49:   free_chapter_count: 0,
-2025-05-09T16:05:49:   genre: 8,
-2025-05-09T16:05:49:   is_derivatived: false,
-2025-05-09T16:05:49:   latest_update_time: '2024-06-27 17:25:11',
-2025-05-09T16:05:49:   length_type: 2,
-2025-05-09T16:05:49:   on_shelf_time: '',
-2025-05-09T16:05:49:   permission_status: 4,
-2025-05-09T16:05:49:   price_changed: false,
-2025-05-09T16:05:49:   short_free_chapter_count: 0,
-2025-05-09T16:05:49:   short_thousand_words_price: 0,
-2025-05-09T16:05:49:   source: '星空文学网',
-2025-05-09T16:05:49:   start_percentage: 40,
-2025-05-09T16:05:49:   thousand_words_price: 0,
-2025-05-09T16:05:49:   thumb_uri: 'novel-static/c219a65907b3f8fa6f6fa9431ab75f13',
-2025-05-09T16:05:49:   thumb_url: 'https://p11-novelsale-sign.yueduwuxianpic.com/novel-static/c219a65907b3f8fa6f6fa9431ab75f13~tplv-t1vlgo34s3-distribmini.image?lk3s=4c55cbb1&x-expires=1749369949&x-signature=ECULWrPMMR%2BBpdbw917jBgEZMWc%3D',
-2025-05-09T16:05:49:   total_price: 1990,
-2025-05-09T16:05:49:   word_count: 8664
-2025-05-09T16:05:49: }
+2025-05-12T17:45:40: 
+2025-05-12T17:45:40: > heiyan@1.0.0 start
+2025-05-12T17:45:40: > node tg_factory_main.js
+2025-05-12T17:45:40: 
+2025-05-12T17:45:43: Connected to Redis
+2025-05-12T17:45:43: book_info: {
+2025-05-12T17:45:43:   create_user: 'shiying@zhangyue.com',
+2025-05-12T17:45:43:   update_user: 'shiying@zhangyue.com',
+2025-05-12T17:45:43:   create_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T17:45:43:   update_time: '2025-05-12T13:48:47+08:00',
+2025-05-12T17:45:43:   id: '6821767adf08124c91e3041a',
+2025-05-12T17:45:43:   book_id: 13342871,
+2025-05-12T17:45:43:   book_name: '《满目雪疮月无痕》',
+2025-05-12T17:45:43:   application_key: 'donglingstory_mini',
+2025-05-12T17:45:43:   application_name: '冬凌故事会抖音小程序',
+2025-05-12T17:45:43:   scheme_id: '',
+2025-05-12T17:45:43:   chapter_count: 31,
+2025-05-12T17:45:43:   category: '短篇/女频/古代言情',
+2025-05-12T17:45:43:   book_cover: 'https://book.img.zhangyue01.com/group62/mg/5V/2bdcfa6ffc9ce184dc38905bd3dbade6.jpg?v=-dMlNyh-&t=fwAAAWghWRg.',
+2025-05-12T17:45:43:   fee_unit: 20,
+2025-05-12T17:45:43:   can_config: true,
+2025-05-12T17:45:43:   default_pay_section: 9,
+2025-05-12T17:45:43:   default_price: 0.9,
+2025-05-12T17:45:43:   default_first_recharge: {
+2025-05-12T17:45:43:     id: '30ab17a4',
+2025-05-12T17:45:43:     name: '冬凌兜底收银台',
+2025-05-12T17:45:43:     gears: [ [Object], [Object] ],
+2025-05-12T17:45:43:     retention: {
+2025-05-12T17:45:43:       id: '',
+2025-05-12T17:45:43:       name: '',
+2025-05-12T17:45:43:       show_limit: 0,
+2025-05-12T17:45:43:       scene: '',
+2025-05-12T17:45:43:       gear: [Object],
+2025-05-12T17:45:43:       superscript_info: '',
+2025-05-12T17:45:43:       prompt_info: '',
+2025-05-12T17:45:43:       create_time: '',
+2025-05-12T17:45:43:       update_time: '',
+2025-05-12T17:45:43:       publish_time: '',
+2025-05-12T17:45:43:       create_user: '',
+2025-05-12T17:45:43:       update_user: '',
+2025-05-12T17:45:43:       publish_user: '',
+2025-05-12T17:45:43:       status: 0
+2025-05-12T17:45:43:     },
+2025-05-12T17:45:43:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_user_email: '',
+2025-05-12T17:45:43:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_time: '2024-12-26 18:02:14',
+2025-05-12T17:45:43:     update_time: '2025-03-13 17:45:37',
+2025-05-12T17:45:43:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T17:45:43:   },
+2025-05-12T17:45:43:   default_follow_recharge: {
+2025-05-12T17:45:43:     id: '30ab17a4',
+2025-05-12T17:45:43:     name: '冬凌兜底收银台',
+2025-05-12T17:45:43:     gears: [ [Object], [Object] ],
+2025-05-12T17:45:43:     retention: {
+2025-05-12T17:45:43:       id: '',
+2025-05-12T17:45:43:       name: '',
+2025-05-12T17:45:43:       show_limit: 0,
+2025-05-12T17:45:43:       scene: '',
+2025-05-12T17:45:43:       gear: [Object],
+2025-05-12T17:45:43:       superscript_info: '',
+2025-05-12T17:45:43:       prompt_info: '',
+2025-05-12T17:45:43:       create_time: '',
+2025-05-12T17:45:43:       update_time: '',
+2025-05-12T17:45:43:       publish_time: '',
+2025-05-12T17:45:43:       create_user: '',
+2025-05-12T17:45:43:       update_user: '',
+2025-05-12T17:45:43:       publish_user: '',
+2025-05-12T17:45:43:       status: 0
+2025-05-12T17:45:43:     },
+2025-05-12T17:45:43:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_user_email: '',
+2025-05-12T17:45:43:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_time: '2024-12-26 18:02:14',
+2025-05-12T17:45:43:     update_time: '2025-03-13 17:45:37',
+2025-05-12T17:45:43:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T17:45:43:   },
+2025-05-12T17:45:43:   default_first_recharge_name: '冬凌兜底收银台',
+2025-05-12T17:45:43:   default_follow_recharge_name: '冬凌兜底收银台',
+2025-05-12T17:45:43:   third_book_id: 'r7503407951575615783',
+2025-05-12T17:45:43:   book_content_type: 'short',
+2025-05-12T17:45:43:   book_content_type_name: '短篇',
+2025-05-12T17:45:43:   author: '讲故事',
+2025-05-12T17:45:43:   copyright_type: 'self',
+2025-05-12T17:45:43:   copyright_type_name: '自签书',
+2025-05-12T17:45:43:   category_sex: 'female',
+2025-05-12T17:45:43:   category_sex_name: '女频',
+2025-05-12T17:45:43:   is_complete: 'Y',
+2025-05-12T17:45:43:   is_complete_name: '完结',
+2025-05-12T17:45:43:   word_count: 36094,
+2025-05-12T17:45:43:   preview_link: 'https://api-book-res.ixvy.cn/zycontent/api/content/book/preview/text?book_id=13342871',
+2025-05-12T17:45:43:   undertake_price: 0,
+2025-05-12T17:45:43:   undertake_fee_unit: 0,
+2025-05-12T17:45:43:   undertake_price_id: 0
+2025-05-12T17:45:43: }
+2025-05-12T17:45:43: data: {
+2025-05-12T17:45:43:   words: 36094,
+2025-05-12T17:45:43:   book_name: '《满目雪疮月无痕》',
+2025-05-12T17:45:43:   book_id: 13342871,
+2025-05-12T17:45:43:   publish_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T17:45:43:   totalChapterNum: 31,
+2025-05-12T17:45:43:   default_pay_section: 9,
+2025-05-12T17:45:43:   default_price: 0.9,
+2025-05-12T17:45:43:   fee_unit: 20,
+2025-05-12T17:45:43:   genre: 3
+2025-05-12T17:45:43: }
+2025-05-12T18:12:11: 
+2025-05-12T18:12:11: > heiyan@1.0.0 start
+2025-05-12T18:12:11: > node tg_factory_main.js
+2025-05-12T18:12:11: 
+2025-05-12T18:12:14: Connected to Redis
+2025-05-12T18:12:15: book_info: {
+2025-05-12T18:12:15:   create_user: 'shiying@zhangyue.com',
+2025-05-12T18:12:15:   update_user: 'shiying@zhangyue.com',
+2025-05-12T18:12:15:   create_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T18:12:15:   update_time: '2025-05-12T13:48:47+08:00',
+2025-05-12T18:12:15:   id: '6821767adf08124c91e3041a',
+2025-05-12T18:12:15:   book_id: 13342871,
+2025-05-12T18:12:15:   book_name: '《满目雪疮月无痕》',
+2025-05-12T18:12:15:   application_key: 'donglingstory_mini',
+2025-05-12T18:12:15:   application_name: '冬凌故事会抖音小程序',
+2025-05-12T18:12:15:   scheme_id: '',
+2025-05-12T18:12:15:   chapter_count: 31,
+2025-05-12T18:12:15:   category: '短篇/女频/古代言情',
+2025-05-12T18:12:15:   book_cover: 'https://book.img.zhangyue01.com/group62/mg/5V/2bdcfa6ffc9ce184dc38905bd3dbade6.jpg?v=-dMlNyh-&t=fwAAAWghWRg.',
+2025-05-12T18:12:15:   fee_unit: 20,
+2025-05-12T18:12:15:   can_config: true,
+2025-05-12T18:12:15:   default_pay_section: 9,
+2025-05-12T18:12:15:   default_price: 0.9,
+2025-05-12T18:12:15:   default_first_recharge: {
+2025-05-12T18:12:15:     id: '30ab17a4',
+2025-05-12T18:12:15:     name: '冬凌兜底收银台',
+2025-05-12T18:12:15:     gears: [ [Object], [Object] ],
+2025-05-12T18:12:15:     retention: {
+2025-05-12T18:12:15:       id: '',
+2025-05-12T18:12:15:       name: '',
+2025-05-12T18:12:15:       show_limit: 0,
+2025-05-12T18:12:15:       scene: '',
+2025-05-12T18:12:15:       gear: [Object],
+2025-05-12T18:12:15:       superscript_info: '',
+2025-05-12T18:12:15:       prompt_info: '',
+2025-05-12T18:12:15:       create_time: '',
+2025-05-12T18:12:15:       update_time: '',
+2025-05-12T18:12:15:       publish_time: '',
+2025-05-12T18:12:15:       create_user: '',
+2025-05-12T18:12:15:       update_user: '',
+2025-05-12T18:12:15:       publish_user: '',
+2025-05-12T18:12:15:       status: 0
+2025-05-12T18:12:15:     },
+2025-05-12T18:12:15:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_user_email: '',
+2025-05-12T18:12:15:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_time: '2024-12-26 18:02:14',
+2025-05-12T18:12:15:     update_time: '2025-03-13 17:45:37',
+2025-05-12T18:12:15:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T18:12:15:   },
+2025-05-12T18:12:15:   default_follow_recharge: {
+2025-05-12T18:12:15:     id: '30ab17a4',
+2025-05-12T18:12:15:     name: '冬凌兜底收银台',
+2025-05-12T18:12:15:     gears: [ [Object], [Object] ],
+2025-05-12T18:12:15:     retention: {
+2025-05-12T18:12:15:       id: '',
+2025-05-12T18:12:15:       name: '',
+2025-05-12T18:12:15:       show_limit: 0,
+2025-05-12T18:12:15:       scene: '',
+2025-05-12T18:12:15:       gear: [Object],
+2025-05-12T18:12:15:       superscript_info: '',
+2025-05-12T18:12:15:       prompt_info: '',
+2025-05-12T18:12:15:       create_time: '',
+2025-05-12T18:12:15:       update_time: '',
+2025-05-12T18:12:15:       publish_time: '',
+2025-05-12T18:12:15:       create_user: '',
+2025-05-12T18:12:15:       update_user: '',
+2025-05-12T18:12:15:       publish_user: '',
+2025-05-12T18:12:15:       status: 0
+2025-05-12T18:12:15:     },
+2025-05-12T18:12:15:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_user_email: '',
+2025-05-12T18:12:15:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_time: '2024-12-26 18:02:14',
+2025-05-12T18:12:15:     update_time: '2025-03-13 17:45:37',
+2025-05-12T18:12:15:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T18:12:15:   },
+2025-05-12T18:12:15:   default_first_recharge_name: '冬凌兜底收银台',
+2025-05-12T18:12:15:   default_follow_recharge_name: '冬凌兜底收银台',
+2025-05-12T18:12:15:   third_book_id: 'r7503407951575615783',
+2025-05-12T18:12:15:   book_content_type: 'short',
+2025-05-12T18:12:15:   book_content_type_name: '短篇',
+2025-05-12T18:12:15:   author: '讲故事',
+2025-05-12T18:12:15:   copyright_type: 'self',
+2025-05-12T18:12:15:   copyright_type_name: '自签书',
+2025-05-12T18:12:15:   category_sex: 'female',
+2025-05-12T18:12:15:   category_sex_name: '女频',
+2025-05-12T18:12:15:   is_complete: 'Y',
+2025-05-12T18:12:15:   is_complete_name: '完结',
+2025-05-12T18:12:15:   word_count: 36094,
+2025-05-12T18:12:15:   preview_link: 'https://api-book-res.ixvy.cn/zycontent/api/content/book/preview/text?book_id=13342871',
+2025-05-12T18:12:15:   undertake_price: 0,
+2025-05-12T18:12:15:   undertake_fee_unit: 0,
+2025-05-12T18:12:15:   undertake_price_id: 0
+2025-05-12T18:12:15: }
+2025-05-12T18:12:15: data: {
+2025-05-12T18:12:15:   words: 36094,
+2025-05-12T18:12:15:   book_name: '《满目雪疮月无痕》',
+2025-05-12T18:12:15:   book_id: 13342871,
+2025-05-12T18:12:15:   publish_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T18:12:15:   totalChapterNum: 31,
+2025-05-12T18:12:15:   default_pay_section: 9,
+2025-05-12T18:12:15:   default_price: 0.9,
+2025-05-12T18:12:15:   fee_unit: 20,
+2025-05-12T18:12:15:   genre: 3
+2025-05-12T18:12:15: }

+ 216 - 108
logs/out.log

@@ -1,108 +1,216 @@
-2025-05-09T15:31:32: 
-2025-05-09T15:31:32: > heiyan@1.0.0 start
-2025-05-09T15:31:32: > node tg_factory_main.js
-2025-05-09T15:31:32: 
-2025-05-09T15:31:35: Connected to Redis
-2025-05-09T15:31:36: data: {
-2025-05-09T15:31:36:   author: '木子',
-2025-05-09T15:31:36:   book_id: '7385111704889216051',
-2025-05-09T15:31:36:   book_name: '绿茶保姆想上位,不想狠狠被打脸',
-2025-05-09T15:31:36:   book_pool: 1,
-2025-05-09T15:31:36:   book_type: 1,
-2025-05-09T15:31:36:   category: '754,125,739,597,776',
-2025-05-09T15:31:36:   category_text: '现实情感,家庭,逆袭,爽文,复仇',
-2025-05-09T15:31:36:   chapter_amount: 1,
-2025-05-09T15:31:36:   chapter_price: 0,
-2025-05-09T15:31:36:   copyright_expiration_time: '',
-2025-05-09T15:31:36:   creation_status: 0,
-2025-05-09T15:31:36:   delivery_status: 1,
-2025-05-09T15:31:36:   free_chapter_count: 0,
-2025-05-09T15:31:36:   genre: 8,
-2025-05-09T15:31:36:   is_derivatived: false,
-2025-05-09T15:31:36:   latest_update_time: '2024-06-27 17:25:11',
-2025-05-09T15:31:36:   length_type: 2,
-2025-05-09T15:31:36:   on_shelf_time: '',
-2025-05-09T15:31:36:   permission_status: 4,
-2025-05-09T15:31:36:   price_changed: false,
-2025-05-09T15:31:36:   short_free_chapter_count: 0,
-2025-05-09T15:31:36:   short_thousand_words_price: 0,
-2025-05-09T15:31:36:   source: '星空文学网',
-2025-05-09T15:31:36:   start_percentage: 40,
-2025-05-09T15:31:36:   thousand_words_price: 0,
-2025-05-09T15:31:36:   thumb_uri: 'novel-static/c219a65907b3f8fa6f6fa9431ab75f13',
-2025-05-09T15:31:36:   thumb_url: 'https://p11-novelsale-sign.yueduwuxianpic.com/novel-static/c219a65907b3f8fa6f6fa9431ab75f13~tplv-t1vlgo34s3-distribmini.image?lk3s=4c55cbb1&x-expires=1749367896&x-signature=t9l33LPOmfKVm0gTuNtmK6Xu%2Fyw%3D',
-2025-05-09T15:31:36:   total_price: 1990,
-2025-05-09T15:31:36:   word_count: 8664
-2025-05-09T15:31:36: }
-2025-05-09T15:50:48: 
-2025-05-09T15:50:48: > heiyan@1.0.0 start
-2025-05-09T15:50:48: > node tg_factory_main.js
-2025-05-09T15:50:48: 
-2025-05-09T15:50:51: Connected to Redis
-2025-05-09T15:50:52: data: {
-2025-05-09T15:50:52:   author: '木子',
-2025-05-09T15:50:52:   book_id: '7385111704889216051',
-2025-05-09T15:50:52:   book_name: '绿茶保姆想上位,不想狠狠被打脸',
-2025-05-09T15:50:52:   book_pool: 1,
-2025-05-09T15:50:52:   book_type: 1,
-2025-05-09T15:50:52:   category: '754,125,739,597,776',
-2025-05-09T15:50:52:   category_text: '现实情感,家庭,逆袭,爽文,复仇',
-2025-05-09T15:50:52:   chapter_amount: 1,
-2025-05-09T15:50:52:   chapter_price: 0,
-2025-05-09T15:50:52:   copyright_expiration_time: '',
-2025-05-09T15:50:52:   creation_status: 0,
-2025-05-09T15:50:52:   delivery_status: 1,
-2025-05-09T15:50:52:   free_chapter_count: 0,
-2025-05-09T15:50:52:   genre: 8,
-2025-05-09T15:50:52:   is_derivatived: false,
-2025-05-09T15:50:52:   latest_update_time: '2024-06-27 17:25:11',
-2025-05-09T15:50:52:   length_type: 2,
-2025-05-09T15:50:52:   on_shelf_time: '',
-2025-05-09T15:50:52:   permission_status: 4,
-2025-05-09T15:50:52:   price_changed: false,
-2025-05-09T15:50:52:   short_free_chapter_count: 0,
-2025-05-09T15:50:52:   short_thousand_words_price: 0,
-2025-05-09T15:50:52:   source: '星空文学网',
-2025-05-09T15:50:52:   start_percentage: 40,
-2025-05-09T15:50:52:   thousand_words_price: 0,
-2025-05-09T15:50:52:   thumb_uri: 'novel-static/c219a65907b3f8fa6f6fa9431ab75f13',
-2025-05-09T15:50:52:   thumb_url: 'https://p26-novelsale-sign.yueduwuxianpic.com/novel-static/c219a65907b3f8fa6f6fa9431ab75f13~tplv-t1vlgo34s3-distribmini.image?lk3s=4c55cbb1&x-expires=1749369052&x-signature=bi4PbZm7Egd5aU23zIXdHqovxN0%3D',
-2025-05-09T15:50:52:   total_price: 1990,
-2025-05-09T15:50:52:   word_count: 8664
-2025-05-09T15:50:52: }
-2025-05-09T16:05:46: 
-2025-05-09T16:05:46: > heiyan@1.0.0 start
-2025-05-09T16:05:46: > node tg_factory_main.js
-2025-05-09T16:05:46: 
-2025-05-09T16:05:48: Connected to Redis
-2025-05-09T16:05:49: data: {
-2025-05-09T16:05:49:   author: '木子',
-2025-05-09T16:05:49:   book_id: '7385111704889216051',
-2025-05-09T16:05:49:   book_name: '绿茶保姆想上位,不想狠狠被打脸',
-2025-05-09T16:05:49:   book_pool: 1,
-2025-05-09T16:05:49:   book_type: 1,
-2025-05-09T16:05:49:   category: '754,125,739,597,776',
-2025-05-09T16:05:49:   category_text: '现实情感,家庭,逆袭,爽文,复仇',
-2025-05-09T16:05:49:   chapter_amount: 1,
-2025-05-09T16:05:49:   chapter_price: 0,
-2025-05-09T16:05:49:   copyright_expiration_time: '',
-2025-05-09T16:05:49:   creation_status: 0,
-2025-05-09T16:05:49:   delivery_status: 1,
-2025-05-09T16:05:49:   free_chapter_count: 0,
-2025-05-09T16:05:49:   genre: 8,
-2025-05-09T16:05:49:   is_derivatived: false,
-2025-05-09T16:05:49:   latest_update_time: '2024-06-27 17:25:11',
-2025-05-09T16:05:49:   length_type: 2,
-2025-05-09T16:05:49:   on_shelf_time: '',
-2025-05-09T16:05:49:   permission_status: 4,
-2025-05-09T16:05:49:   price_changed: false,
-2025-05-09T16:05:49:   short_free_chapter_count: 0,
-2025-05-09T16:05:49:   short_thousand_words_price: 0,
-2025-05-09T16:05:49:   source: '星空文学网',
-2025-05-09T16:05:49:   start_percentage: 40,
-2025-05-09T16:05:49:   thousand_words_price: 0,
-2025-05-09T16:05:49:   thumb_uri: 'novel-static/c219a65907b3f8fa6f6fa9431ab75f13',
-2025-05-09T16:05:49:   thumb_url: 'https://p11-novelsale-sign.yueduwuxianpic.com/novel-static/c219a65907b3f8fa6f6fa9431ab75f13~tplv-t1vlgo34s3-distribmini.image?lk3s=4c55cbb1&x-expires=1749369949&x-signature=ECULWrPMMR%2BBpdbw917jBgEZMWc%3D',
-2025-05-09T16:05:49:   total_price: 1990,
-2025-05-09T16:05:49:   word_count: 8664
-2025-05-09T16:05:49: }
+2025-05-12T17:45:40: 
+2025-05-12T17:45:40: > heiyan@1.0.0 start
+2025-05-12T17:45:40: > node tg_factory_main.js
+2025-05-12T17:45:40: 
+2025-05-12T17:45:43: Connected to Redis
+2025-05-12T17:45:43: book_info: {
+2025-05-12T17:45:43:   create_user: 'shiying@zhangyue.com',
+2025-05-12T17:45:43:   update_user: 'shiying@zhangyue.com',
+2025-05-12T17:45:43:   create_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T17:45:43:   update_time: '2025-05-12T13:48:47+08:00',
+2025-05-12T17:45:43:   id: '6821767adf08124c91e3041a',
+2025-05-12T17:45:43:   book_id: 13342871,
+2025-05-12T17:45:43:   book_name: '《满目雪疮月无痕》',
+2025-05-12T17:45:43:   application_key: 'donglingstory_mini',
+2025-05-12T17:45:43:   application_name: '冬凌故事会抖音小程序',
+2025-05-12T17:45:43:   scheme_id: '',
+2025-05-12T17:45:43:   chapter_count: 31,
+2025-05-12T17:45:43:   category: '短篇/女频/古代言情',
+2025-05-12T17:45:43:   book_cover: 'https://book.img.zhangyue01.com/group62/mg/5V/2bdcfa6ffc9ce184dc38905bd3dbade6.jpg?v=-dMlNyh-&t=fwAAAWghWRg.',
+2025-05-12T17:45:43:   fee_unit: 20,
+2025-05-12T17:45:43:   can_config: true,
+2025-05-12T17:45:43:   default_pay_section: 9,
+2025-05-12T17:45:43:   default_price: 0.9,
+2025-05-12T17:45:43:   default_first_recharge: {
+2025-05-12T17:45:43:     id: '30ab17a4',
+2025-05-12T17:45:43:     name: '冬凌兜底收银台',
+2025-05-12T17:45:43:     gears: [ [Object], [Object] ],
+2025-05-12T17:45:43:     retention: {
+2025-05-12T17:45:43:       id: '',
+2025-05-12T17:45:43:       name: '',
+2025-05-12T17:45:43:       show_limit: 0,
+2025-05-12T17:45:43:       scene: '',
+2025-05-12T17:45:43:       gear: [Object],
+2025-05-12T17:45:43:       superscript_info: '',
+2025-05-12T17:45:43:       prompt_info: '',
+2025-05-12T17:45:43:       create_time: '',
+2025-05-12T17:45:43:       update_time: '',
+2025-05-12T17:45:43:       publish_time: '',
+2025-05-12T17:45:43:       create_user: '',
+2025-05-12T17:45:43:       update_user: '',
+2025-05-12T17:45:43:       publish_user: '',
+2025-05-12T17:45:43:       status: 0
+2025-05-12T17:45:43:     },
+2025-05-12T17:45:43:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_user_email: '',
+2025-05-12T17:45:43:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_time: '2024-12-26 18:02:14',
+2025-05-12T17:45:43:     update_time: '2025-03-13 17:45:37',
+2025-05-12T17:45:43:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T17:45:43:   },
+2025-05-12T17:45:43:   default_follow_recharge: {
+2025-05-12T17:45:43:     id: '30ab17a4',
+2025-05-12T17:45:43:     name: '冬凌兜底收银台',
+2025-05-12T17:45:43:     gears: [ [Object], [Object] ],
+2025-05-12T17:45:43:     retention: {
+2025-05-12T17:45:43:       id: '',
+2025-05-12T17:45:43:       name: '',
+2025-05-12T17:45:43:       show_limit: 0,
+2025-05-12T17:45:43:       scene: '',
+2025-05-12T17:45:43:       gear: [Object],
+2025-05-12T17:45:43:       superscript_info: '',
+2025-05-12T17:45:43:       prompt_info: '',
+2025-05-12T17:45:43:       create_time: '',
+2025-05-12T17:45:43:       update_time: '',
+2025-05-12T17:45:43:       publish_time: '',
+2025-05-12T17:45:43:       create_user: '',
+2025-05-12T17:45:43:       update_user: '',
+2025-05-12T17:45:43:       publish_user: '',
+2025-05-12T17:45:43:       status: 0
+2025-05-12T17:45:43:     },
+2025-05-12T17:45:43:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_user_email: '',
+2025-05-12T17:45:43:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T17:45:43:     create_time: '2024-12-26 18:02:14',
+2025-05-12T17:45:43:     update_time: '2025-03-13 17:45:37',
+2025-05-12T17:45:43:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T17:45:43:   },
+2025-05-12T17:45:43:   default_first_recharge_name: '冬凌兜底收银台',
+2025-05-12T17:45:43:   default_follow_recharge_name: '冬凌兜底收银台',
+2025-05-12T17:45:43:   third_book_id: 'r7503407951575615783',
+2025-05-12T17:45:43:   book_content_type: 'short',
+2025-05-12T17:45:43:   book_content_type_name: '短篇',
+2025-05-12T17:45:43:   author: '讲故事',
+2025-05-12T17:45:43:   copyright_type: 'self',
+2025-05-12T17:45:43:   copyright_type_name: '自签书',
+2025-05-12T17:45:43:   category_sex: 'female',
+2025-05-12T17:45:43:   category_sex_name: '女频',
+2025-05-12T17:45:43:   is_complete: 'Y',
+2025-05-12T17:45:43:   is_complete_name: '完结',
+2025-05-12T17:45:43:   word_count: 36094,
+2025-05-12T17:45:43:   preview_link: 'https://api-book-res.ixvy.cn/zycontent/api/content/book/preview/text?book_id=13342871',
+2025-05-12T17:45:43:   undertake_price: 0,
+2025-05-12T17:45:43:   undertake_fee_unit: 0,
+2025-05-12T17:45:43:   undertake_price_id: 0
+2025-05-12T17:45:43: }
+2025-05-12T17:45:43: data: {
+2025-05-12T17:45:43:   words: 36094,
+2025-05-12T17:45:43:   book_name: '《满目雪疮月无痕》',
+2025-05-12T17:45:43:   book_id: 13342871,
+2025-05-12T17:45:43:   publish_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T17:45:43:   totalChapterNum: 31,
+2025-05-12T17:45:43:   default_pay_section: 9,
+2025-05-12T17:45:43:   default_price: 0.9,
+2025-05-12T17:45:43:   fee_unit: 20,
+2025-05-12T17:45:43:   genre: 3
+2025-05-12T17:45:43: }
+2025-05-12T18:12:11: 
+2025-05-12T18:12:11: > heiyan@1.0.0 start
+2025-05-12T18:12:11: > node tg_factory_main.js
+2025-05-12T18:12:11: 
+2025-05-12T18:12:14: Connected to Redis
+2025-05-12T18:12:15: book_info: {
+2025-05-12T18:12:15:   create_user: 'shiying@zhangyue.com',
+2025-05-12T18:12:15:   update_user: 'shiying@zhangyue.com',
+2025-05-12T18:12:15:   create_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T18:12:15:   update_time: '2025-05-12T13:48:47+08:00',
+2025-05-12T18:12:15:   id: '6821767adf08124c91e3041a',
+2025-05-12T18:12:15:   book_id: 13342871,
+2025-05-12T18:12:15:   book_name: '《满目雪疮月无痕》',
+2025-05-12T18:12:15:   application_key: 'donglingstory_mini',
+2025-05-12T18:12:15:   application_name: '冬凌故事会抖音小程序',
+2025-05-12T18:12:15:   scheme_id: '',
+2025-05-12T18:12:15:   chapter_count: 31,
+2025-05-12T18:12:15:   category: '短篇/女频/古代言情',
+2025-05-12T18:12:15:   book_cover: 'https://book.img.zhangyue01.com/group62/mg/5V/2bdcfa6ffc9ce184dc38905bd3dbade6.jpg?v=-dMlNyh-&t=fwAAAWghWRg.',
+2025-05-12T18:12:15:   fee_unit: 20,
+2025-05-12T18:12:15:   can_config: true,
+2025-05-12T18:12:15:   default_pay_section: 9,
+2025-05-12T18:12:15:   default_price: 0.9,
+2025-05-12T18:12:15:   default_first_recharge: {
+2025-05-12T18:12:15:     id: '30ab17a4',
+2025-05-12T18:12:15:     name: '冬凌兜底收银台',
+2025-05-12T18:12:15:     gears: [ [Object], [Object] ],
+2025-05-12T18:12:15:     retention: {
+2025-05-12T18:12:15:       id: '',
+2025-05-12T18:12:15:       name: '',
+2025-05-12T18:12:15:       show_limit: 0,
+2025-05-12T18:12:15:       scene: '',
+2025-05-12T18:12:15:       gear: [Object],
+2025-05-12T18:12:15:       superscript_info: '',
+2025-05-12T18:12:15:       prompt_info: '',
+2025-05-12T18:12:15:       create_time: '',
+2025-05-12T18:12:15:       update_time: '',
+2025-05-12T18:12:15:       publish_time: '',
+2025-05-12T18:12:15:       create_user: '',
+2025-05-12T18:12:15:       update_user: '',
+2025-05-12T18:12:15:       publish_user: '',
+2025-05-12T18:12:15:       status: 0
+2025-05-12T18:12:15:     },
+2025-05-12T18:12:15:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_user_email: '',
+2025-05-12T18:12:15:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_time: '2024-12-26 18:02:14',
+2025-05-12T18:12:15:     update_time: '2025-03-13 17:45:37',
+2025-05-12T18:12:15:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T18:12:15:   },
+2025-05-12T18:12:15:   default_follow_recharge: {
+2025-05-12T18:12:15:     id: '30ab17a4',
+2025-05-12T18:12:15:     name: '冬凌兜底收银台',
+2025-05-12T18:12:15:     gears: [ [Object], [Object] ],
+2025-05-12T18:12:15:     retention: {
+2025-05-12T18:12:15:       id: '',
+2025-05-12T18:12:15:       name: '',
+2025-05-12T18:12:15:       show_limit: 0,
+2025-05-12T18:12:15:       scene: '',
+2025-05-12T18:12:15:       gear: [Object],
+2025-05-12T18:12:15:       superscript_info: '',
+2025-05-12T18:12:15:       prompt_info: '',
+2025-05-12T18:12:15:       create_time: '',
+2025-05-12T18:12:15:       update_time: '',
+2025-05-12T18:12:15:       publish_time: '',
+2025-05-12T18:12:15:       create_user: '',
+2025-05-12T18:12:15:       update_user: '',
+2025-05-12T18:12:15:       publish_user: '',
+2025-05-12T18:12:15:       status: 0
+2025-05-12T18:12:15:     },
+2025-05-12T18:12:15:     create_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_user_email: '',
+2025-05-12T18:12:15:     update_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     publish_user: 'yuanna@zhangyue.com',
+2025-05-12T18:12:15:     create_time: '2024-12-26 18:02:14',
+2025-05-12T18:12:15:     update_time: '2025-03-13 17:45:37',
+2025-05-12T18:12:15:     publish_time: '2025-03-13 17:45:37'
+2025-05-12T18:12:15:   },
+2025-05-12T18:12:15:   default_first_recharge_name: '冬凌兜底收银台',
+2025-05-12T18:12:15:   default_follow_recharge_name: '冬凌兜底收银台',
+2025-05-12T18:12:15:   third_book_id: 'r7503407951575615783',
+2025-05-12T18:12:15:   book_content_type: 'short',
+2025-05-12T18:12:15:   book_content_type_name: '短篇',
+2025-05-12T18:12:15:   author: '讲故事',
+2025-05-12T18:12:15:   copyright_type: 'self',
+2025-05-12T18:12:15:   copyright_type_name: '自签书',
+2025-05-12T18:12:15:   category_sex: 'female',
+2025-05-12T18:12:15:   category_sex_name: '女频',
+2025-05-12T18:12:15:   is_complete: 'Y',
+2025-05-12T18:12:15:   is_complete_name: '完结',
+2025-05-12T18:12:15:   word_count: 36094,
+2025-05-12T18:12:15:   preview_link: 'https://api-book-res.ixvy.cn/zycontent/api/content/book/preview/text?book_id=13342871',
+2025-05-12T18:12:15:   undertake_price: 0,
+2025-05-12T18:12:15:   undertake_fee_unit: 0,
+2025-05-12T18:12:15:   undertake_price_id: 0
+2025-05-12T18:12:15: }
+2025-05-12T18:12:15: data: {
+2025-05-12T18:12:15:   words: 36094,
+2025-05-12T18:12:15:   book_name: '《满目雪疮月无痕》',
+2025-05-12T18:12:15:   book_id: 13342871,
+2025-05-12T18:12:15:   publish_time: '2025-05-12T12:18:02+08:00',
+2025-05-12T18:12:15:   totalChapterNum: 31,
+2025-05-12T18:12:15:   default_pay_section: 9,
+2025-05-12T18:12:15:   default_price: 0.9,
+2025-05-12T18:12:15:   fee_unit: 20,
+2025-05-12T18:12:15:   genre: 3
+2025-05-12T18:12:15: }

+ 14 - 0
pm2createlink.json

@@ -125,6 +125,20 @@
             "merge_logs": true,
             "exec_mode": "fork",
             "autorestart": true
+        },
+        {
+            "name": "zy_create_link_factory",
+            "script": "./5_CREATE_LINK_FACTORY/zy_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/zy_create_link_factory_error.log",
+            "out_file": "./logs/create_link/zy_create_link_factory_out.log",
+            "merge_logs": true,
+            "exec_mode": "fork",
+            "autorestart": true
         }
     ]
 }

+ 14 - 0
pm2json.json

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

二進制
src/api/hy/qr.gif


二進制
src/api/hy/qr_resized.gif


+ 1 - 1
src/api/zh/get_zh_call_back_template.js

@@ -21,7 +21,7 @@ CMD.get_zh_call_back_template = async function() {
                 "sec-fetch-mode": "cors",
                 "sec-fetch-site": "same-origin",
                 "x-requested-with": "XMLHttpRequest",
-                "cookie": "_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1743342798,1743994910,1744797535; z_c0=2|1:0|10:1744797535|4:z_c0|80:MS4xN1lrbldnQUFBQUFtQUFBQVlBSlZUVjdON0dodGZOQUlwdlk2X2hnZ0ZlbnVxTVFEZmxpVG9RPT0=|eb305312b34143217310e91016bf6488bd105f40db41912d878b7c48f4ae368b; BEC=8b4a1b0a664dd5d88434ef53342ae417; ecom_merchant=1857114769787609088",
+                "cookie": "_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; BEC=738c6d0432e7aaf738ea36855cdce904; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1744797535,1747044239; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1747044239; HMACCOUNT=8B23C823A8286BDF; captcha_session_v2=2|1:0|10:1747044240|18:captcha_session_v2|88:WU9XenluNjRDQnRqalZvSmxYU2dNZldqRW1oc1l1aUdUTFh0SmNFWFVOS2E4Zm1ieVVqL0JxTWcwUHB5dng2Qg==|e48d0f7dc867c3386e846e6a046467e209447e0f45de2ec58e40cb5ea89b5024; captcha_ticket_v2=2|1:0|10:1747044266|17:captcha_ticket_v2|728:eyJ2YWxpZGF0ZSI6IkNOMzFfODlzRTFBbml6YmRKcUE1YzFXcHRIOXZ1Q0h4dXBPMXVsQzRNYklwREZpMVlhUkpjY2pseWFEVjR5Y3ZzLktzLnB2NUROQ1Z5LjUxbENrUzQzVFBxTkRqYnlKcWFYYnZRcGM4WGVJQWhQR0dvX3ZIaGlzVldRdzVtelVlcE1sdC5BVTJhYi5VSVM1bWswZUNqdkRlRnRqa1NoWFpjNmdQdUlHVzllX3RWbVFQOG5scmZQUWJBX1JXRWxKTTlBZEgweFpJNkY1U0J2TE52UDlvZlNlY1M1VzhiOGxOcTNrdjA1QzZ1SWhSQTRKQUVQQ2ZOX0tvNHE2RTN6Zk14SklaOVZ6QWtvVS42dE1GbHN3ODJ4b2JGTXlTMXdITGtUNTNpNVJCUUdYWUZ2THdIVTZ3LmNtd3dsX1pGcFJ0VzBfZlRqOU40KjBtcEdEY1JlZVBXbEMwTFlhYlA4bzgxUmxsUWkqZHdKelpKRUdxSnRmKnoqTnhJZl93NlR0Y2RkT3ZvWVVfRFRkVWF3cHl2UlhTcExEb0Q5TldDR0d2cDZxOVJoMU9WNlZXNHdRaEQ0X2Z3U3VPSjlFZipLY3JKTVdvc1o2KkpvVDl6Vms0enVJLkVCLlN0T3JXRm5ZVWduZFlzNW9kY0pCbGRjYkk0Nmd1OUIudlZIQjJIbWdMUHgxQVFiLjk1Q003N192X2lfMSJ9|86552ad9b795608fe66c8628d1a00b37678dfd2c0345979a0ade4da1d9075998; z_c0=2|1:0|10:1747044266|4:z_c0|92:Mi4xWjA2M1hBQUFBQUFBTUJKTENYQ1BHU1lBQUFCZ0FsVk5xaFVQYVFEYmZqdjk5aW90YXVCVWRVaUxjdmcxMlpoNF93|7715e73dbd09a2ff037024e7c3c87c621ee1d97648f3c5a9c82ed50a82e93837; ecom_merchant=1876277363932790784",
                 "Referer": "https://ecom.zhihu.com/vip-apps/out-distribution/contentLib/list",
                 "Referrer-Policy": "no-referrer-when-downgrade"
             },

+ 1 - 1
src/api/zh/get_zh_recharge_template.js

@@ -22,7 +22,7 @@ CMD.get_zh_recharge_template = async function(app_type) {
                 "sec-fetch-mode": "cors",
                 "sec-fetch-site": "same-origin",
                 "x-requested-with": "XMLHttpRequest",
-                "cookie": "_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1743342798,1743994910,1744797535; z_c0=2|1:0|10:1744797535|4:z_c0|80:MS4xN1lrbldnQUFBQUFtQUFBQVlBSlZUVjdON0dodGZOQUlwdlk2X2hnZ0ZlbnVxTVFEZmxpVG9RPT0=|eb305312b34143217310e91016bf6488bd105f40db41912d878b7c48f4ae368b; BEC=8b4a1b0a664dd5d88434ef53342ae417; ecom_merchant=1857114769787609088",
+                "cookie": "_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; BEC=738c6d0432e7aaf738ea36855cdce904; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1744797535,1747044239; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1747044239; HMACCOUNT=8B23C823A8286BDF; captcha_session_v2=2|1:0|10:1747044240|18:captcha_session_v2|88:WU9XenluNjRDQnRqalZvSmxYU2dNZldqRW1oc1l1aUdUTFh0SmNFWFVOS2E4Zm1ieVVqL0JxTWcwUHB5dng2Qg==|e48d0f7dc867c3386e846e6a046467e209447e0f45de2ec58e40cb5ea89b5024; captcha_ticket_v2=2|1:0|10:1747044266|17:captcha_ticket_v2|728:eyJ2YWxpZGF0ZSI6IkNOMzFfODlzRTFBbml6YmRKcUE1YzFXcHRIOXZ1Q0h4dXBPMXVsQzRNYklwREZpMVlhUkpjY2pseWFEVjR5Y3ZzLktzLnB2NUROQ1Z5LjUxbENrUzQzVFBxTkRqYnlKcWFYYnZRcGM4WGVJQWhQR0dvX3ZIaGlzVldRdzVtelVlcE1sdC5BVTJhYi5VSVM1bWswZUNqdkRlRnRqa1NoWFpjNmdQdUlHVzllX3RWbVFQOG5scmZQUWJBX1JXRWxKTTlBZEgweFpJNkY1U0J2TE52UDlvZlNlY1M1VzhiOGxOcTNrdjA1QzZ1SWhSQTRKQUVQQ2ZOX0tvNHE2RTN6Zk14SklaOVZ6QWtvVS42dE1GbHN3ODJ4b2JGTXlTMXdITGtUNTNpNVJCUUdYWUZ2THdIVTZ3LmNtd3dsX1pGcFJ0VzBfZlRqOU40KjBtcEdEY1JlZVBXbEMwTFlhYlA4bzgxUmxsUWkqZHdKelpKRUdxSnRmKnoqTnhJZl93NlR0Y2RkT3ZvWVVfRFRkVWF3cHl2UlhTcExEb0Q5TldDR0d2cDZxOVJoMU9WNlZXNHdRaEQ0X2Z3U3VPSjlFZipLY3JKTVdvc1o2KkpvVDl6Vms0enVJLkVCLlN0T3JXRm5ZVWduZFlzNW9kY0pCbGRjYkk0Nmd1OUIudlZIQjJIbWdMUHgxQVFiLjk1Q003N192X2lfMSJ9|86552ad9b795608fe66c8628d1a00b37678dfd2c0345979a0ade4da1d9075998; z_c0=2|1:0|10:1747044266|4:z_c0|92:Mi4xWjA2M1hBQUFBQUFBTUJKTENYQ1BHU1lBQUFCZ0FsVk5xaFVQYVFEYmZqdjk5aW90YXVCVWRVaUxjdmcxMlpoNF93|7715e73dbd09a2ff037024e7c3c87c621ee1d97648f3c5a9c82ed50a82e93837; ecom_merchant=1876277363932790784",
                 "Referer": "https://ecom.zhihu.com/vip-apps/out-distribution/contentLib/list",
                 "Referrer-Policy": "no-referrer-when-downgrade"
             },

+ 1 - 1
src/api/zh/zh_search_book.js

@@ -20,7 +20,7 @@ CMD.search_id = async function(bookId) {
                 "sec-fetch-mode": "cors",
                 "sec-fetch-site": "same-origin",
                 "x-requested-with": "XMLHttpRequest",
-                "cookie": "_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1743342798,1743994910,1744797535; z_c0=2|1:0|10:1744797535|4:z_c0|80:MS4xN1lrbldnQUFBQUFtQUFBQVlBSlZUVjdON0dodGZOQUlwdlk2X2hnZ0ZlbnVxTVFEZmxpVG9RPT0=|eb305312b34143217310e91016bf6488bd105f40db41912d878b7c48f4ae368b; BEC=8b4a1b0a664dd5d88434ef53342ae417; ecom_merchant=1857114769787609088",
+                "cookie": "_xsrf=7bCsoKjmfrIE0D36ajUc9s6CM9OxdPHQ; _zap=aa0b20fb-9951-4f27-9f66-dafff809f1a9; d_c0=ADASSwlwjxmPTrW0768vZ0BKygxzh_LFDDI=|1731902666; __zse_ck=004_Yfd5z9=wVYdipziWJIurZOunLG37mTG2H9iYSlwWRDLk8=MX0olTiRGFlFAjfxcEHEKs3rAZEP/YK23mOi0JdimzivR8x6V8xrTX/SfG2rxez3yjRYZe5TLBDSnO/5x5-qJOwYJOI+PpcVzmlrlnRdtJiOBmlpDaX+iwb4g5wrE5nNLFf5lpJfeqFnUf1/zvSv87a+WPkgCwI5omwr8gRzjTiqCSHq+aDiXaB6KX9RDdi72KjThWCjiJa356jV2Ha; BEC=738c6d0432e7aaf738ea36855cdce904; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1744797535,1747044239; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1747044239; HMACCOUNT=8B23C823A8286BDF; captcha_session_v2=2|1:0|10:1747044240|18:captcha_session_v2|88:WU9XenluNjRDQnRqalZvSmxYU2dNZldqRW1oc1l1aUdUTFh0SmNFWFVOS2E4Zm1ieVVqL0JxTWcwUHB5dng2Qg==|e48d0f7dc867c3386e846e6a046467e209447e0f45de2ec58e40cb5ea89b5024; captcha_ticket_v2=2|1:0|10:1747044266|17:captcha_ticket_v2|728:eyJ2YWxpZGF0ZSI6IkNOMzFfODlzRTFBbml6YmRKcUE1YzFXcHRIOXZ1Q0h4dXBPMXVsQzRNYklwREZpMVlhUkpjY2pseWFEVjR5Y3ZzLktzLnB2NUROQ1Z5LjUxbENrUzQzVFBxTkRqYnlKcWFYYnZRcGM4WGVJQWhQR0dvX3ZIaGlzVldRdzVtelVlcE1sdC5BVTJhYi5VSVM1bWswZUNqdkRlRnRqa1NoWFpjNmdQdUlHVzllX3RWbVFQOG5scmZQUWJBX1JXRWxKTTlBZEgweFpJNkY1U0J2TE52UDlvZlNlY1M1VzhiOGxOcTNrdjA1QzZ1SWhSQTRKQUVQQ2ZOX0tvNHE2RTN6Zk14SklaOVZ6QWtvVS42dE1GbHN3ODJ4b2JGTXlTMXdITGtUNTNpNVJCUUdYWUZ2THdIVTZ3LmNtd3dsX1pGcFJ0VzBfZlRqOU40KjBtcEdEY1JlZVBXbEMwTFlhYlA4bzgxUmxsUWkqZHdKelpKRUdxSnRmKnoqTnhJZl93NlR0Y2RkT3ZvWVVfRFRkVWF3cHl2UlhTcExEb0Q5TldDR0d2cDZxOVJoMU9WNlZXNHdRaEQ0X2Z3U3VPSjlFZipLY3JKTVdvc1o2KkpvVDl6Vms0enVJLkVCLlN0T3JXRm5ZVWduZFlzNW9kY0pCbGRjYkk0Nmd1OUIudlZIQjJIbWdMUHgxQVFiLjk1Q003N192X2lfMSJ9|86552ad9b795608fe66c8628d1a00b37678dfd2c0345979a0ade4da1d9075998; z_c0=2|1:0|10:1747044266|4:z_c0|92:Mi4xWjA2M1hBQUFBQUFBTUJKTENYQ1BHU1lBQUFCZ0FsVk5xaFVQYVFEYmZqdjk5aW90YXVCVWRVaUxjdmcxMlpoNF93|7715e73dbd09a2ff037024e7c3c87c621ee1d97648f3c5a9c82ed50a82e93837; ecom_merchant=1876277363932790784",
                 "Referer": "https://ecom.zhihu.com/vip-apps/out-distribution/contentLib/list",
                 "Referrer-Policy": "no-referrer-when-downgrade"
             },

+ 91 - 0
src/api/zy/zy_search_book.js

@@ -0,0 +1,91 @@
+const fetch = require('node-fetch'); // Node.js 18以下版本需要安装 node-fetch
+const tools = require('../../../tools');
+const config  = require('../../../etc/config.json');
+const redis_help = require('../../use_redis');
+const helper = require('../../helper');
+const CMD = {}
+CMD.search_id = async function(bookId) {
+    try{
+        let timestamp = helper.getCurrentUnixTimestamp()
+        let token = await require('./get_zy_token').get_token()
+        let app_key = "donglingstory_mini"
+        let user_id = 6312
+        let clinet = tools.getOneNewClinet()
+        let param = `access_token=${token}&app_key=${app_key}&user_id=${user_id}&book_id=${bookId}&page=1&size=10`
+        let response = await clinet.get(`https://openapi-gaia.zhangyue.com/opendata/reseller/pay/book/list?${param}`)
+        let list = null
+        if(response.data.code!=0){
+            console.error("search_id error:",response)
+            throw response.data
+        }else{
+            list = response.data.body.list
+        }
+
+
+        if(list.length<=0){
+            throw list
+        }
+        console.log('知乎书籍::响应状态:', response.status);
+        let book_info = list[0]
+        let info = {}
+        info.words =  book_info.word_count
+        info.book_name =  book_info.book_name
+        info.book_id =  book_info.book_id
+        info.publish_time = book_info.create_time
+        info.genre = 3;
+        return info;
+    }catch(error){
+        console.error('掌阅书籍::请求错误:', error);
+        return null;
+    }
+
+}
+
+CMD.new_search_id = async function(bookId) {
+    try{
+
+        let clinet = tools.getOneNewClinet({
+            "cookie":"acw_tc=1a0c65d917470199025963429e007f7ad6210d374a3caa58d1e3ec3240d8ff",
+            "authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZGRlc2tFbWFpbCI6IiIsImV4cCI6MTc0OTYxMTkxNCwiaWF0IjoxNzQ3MDE5OTE0LCJpZCI6IjYzMTIifQ.DoBEMtrzqO_IYyWAPJIwDdCBef1M22xUqykx32T1U5U",
+        })
+
+        let list = null
+
+        let response =  await clinet.get(`https://gaia.zhangyue.com/gaia/v1/open_api/pay/book/getBookInfoList?reseller_id=9390&application_key=donglingstory_mini&book_ids=${bookId}&book_content_type=&author=&copyright_type=&category_sex=&is_complete=&total=0&page=1&size=10&sort=&order=&psize=10&scheme_id=39`)
+
+        if(response.data.code!=0){
+            console.error("new_search_id error:",response)
+            throw response.data
+        }else{
+            list = response.data.body.list
+        }
+
+
+        if(list.length<0){
+            throw response.data
+        }
+
+        let book_info = list[0]
+        let info = {}
+
+        info.words =  book_info.word_count
+        info.book_name =  book_info.book_name
+        info.book_id =  book_info.book_id
+        info.publish_time = book_info.create_time
+        info.totalChapterNum = book_info.chapter_count
+        info.default_pay_section = book_info.default_pay_section //默认付费章节
+        info.default_price = book_info.default_price // 加个
+        info.fee_unit = book_info.fee_unit //10 = 整本, 20 = 千字
+        console.log("book_info:",book_info)
+        if(book_info.word_count<100000){
+            info.genre = 3;
+        }else{
+            info.genre = 1;
+        }
+        return info;
+
+    }catch(e){
+
+    }
+}
+module.exports = CMD;

+ 4 - 1
task_script/sync_publish_time_hy.js

@@ -49,7 +49,10 @@ async function processTask(){
 
             
             if(data!=null){
-                let publish_time = data.rows[0].createTime
+                let publish_time = data.rows[0].openTime
+                if(publish_time==undefined){
+                    publish_time = data.rows[0].createTime
+                }
                 await connection.execute(
                     `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
                 );

+ 4 - 1
task_script/sync_publish_time_hy_mf.js

@@ -45,7 +45,10 @@ async function processTask(){
 
                 let hy_book_data = await CMD.add_parent_book(video_product_info.product_parent_id)
                 if(hy_book_data!=null){
-                    let publish_time = hy_book_data.createTime
+                    let publish_time = hy_book_data.openTime
+                    if(publish_time==undefined){
+                        publish_time = hy_book_data.createTime
+                    }
                     let words = hy_book_data.words
                     let book_name = hy_book_data.name;
                     let genre = 1

+ 6 - 3
tg_factory_main.js

@@ -32,6 +32,9 @@ let isInit = false
 if(config.isDebug){
     redis_help.connect( async (results)=>{
         if(results){
+
+            let data = await require('./src/api/zy/zy_search_book').new_search_id("13342871")
+            console.log("data:",data)
             // let publish_time = helper.getDate7DaysBefore("2025-04-27",null,'YYYY-MM-DD')
             // console.log("publish_time:",publish_time)
             // let client = tools.getOneNewClinet()
@@ -54,8 +57,8 @@ if(config.isDebug){
             //       }
             // ))
             // console.log("response:",response)
-            let data =  await require('./src/api/fq/fq_search_book').search_new_id('7385111704889216051')
-            console.log("data:",data)
+            // let data =  await require('./src/api/fq/fq_search_book').search_new_id('7385111704889216051')
+            // console.log("data:",data)
             // let data = await require('./src/api/fq/fq_search_book').search_mf_new_id('7375572126402612286')
             // console.log("data:",data)
             // require('./src/api/dz/dz_login').login()
@@ -65,7 +68,7 @@ if(config.isDebug){
 
             //     },1000)
 
-            // let data = await hy_search_book.search_id("1868479666362478594")
+            // let data = await hy_search_book.search_id("1918290576375422978")
             // console.log("data:",data)