ソースを参照

feishu export

wangyunpeng 3 週間 前
コミット
8383375ff3

+ 14 - 14
core/src/main/java/com/tzld/supply/dao/mapper/supply/spider/SpiderContentMapper.java

@@ -10,7 +10,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     long countByExample(SpiderContentExample example);
 
@@ -18,7 +18,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int deleteByExample(SpiderContentExample example);
 
@@ -26,7 +26,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int deleteByPrimaryKey(Long id);
 
@@ -34,7 +34,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int insert(SpiderContent record);
 
@@ -42,7 +42,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int insertSelective(SpiderContent record);
 
@@ -50,7 +50,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     List<SpiderContent> selectByExampleWithBLOBs(SpiderContentExample example);
 
@@ -58,7 +58,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     List<SpiderContent> selectByExample(SpiderContentExample example);
 
@@ -66,7 +66,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     SpiderContent selectByPrimaryKey(Long id);
 
@@ -74,7 +74,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int updateByExampleSelective(@Param("record") SpiderContent record, @Param("example") SpiderContentExample example);
 
@@ -82,7 +82,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int updateByExampleWithBLOBs(@Param("record") SpiderContent record, @Param("example") SpiderContentExample example);
 
@@ -90,7 +90,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int updateByExample(@Param("record") SpiderContent record, @Param("example") SpiderContentExample example);
 
@@ -98,7 +98,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int updateByPrimaryKeySelective(SpiderContent record);
 
@@ -106,7 +106,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int updateByPrimaryKeyWithBLOBs(SpiderContent record);
 
@@ -114,7 +114,7 @@ public interface SpiderContentMapper {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     int updateByPrimaryKey(SpiderContent record);
 }

+ 211 - 3
core/src/main/java/com/tzld/supply/job/ContentScreenJob.java

@@ -1,6 +1,7 @@
 package com.tzld.supply.job;
 
 import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
 import com.tzld.supply.api.DeepSeekApiService;
 import com.tzld.supply.common.enums.SpiderContentScreenStatusEnum;
 import com.tzld.supply.common.enums.SpiderContentStatusEnum;
@@ -11,9 +12,11 @@ import com.tzld.supply.model.entity.PrecisionScreenEntity;
 import com.tzld.supply.model.entity.RoughScreenEntity;
 import com.tzld.supply.model.po.supply.spider.SpiderContent;
 import com.tzld.supply.model.po.supply.spider.SpiderContentExample;
+import com.tzld.supply.util.DateUtils;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -196,7 +199,7 @@ public class ContentScreenJob {
             "    反面例子:标题“限时优惠购买保健品”\n" +
             "3.判断内容主题、地域、关键词:\n" +
             "  主题:从健康、生活、历史、天气、节假日、军事、社会、其他中选择。\n" +
-            "  地域:提取与城市、省份或国家相关的地域信息。\n" +
+            "  地域:提取与城市、省份或国家相关的地域信息。按全国、具体省份或具体城市分类\n" +
             "  关键词:提取3~5个能代表内容核心的热词。\n" +
             "4.判断标题是否可以在不误导、不造假的前提下适度夸大或优化:\n" +
             "  评定标准:若标题平淡但内容有亮点,可通过增加情感词汇或轻度修饰(如“意想不到”、“太实用了”、“医生都建议”、“家家都能用上”等)提升吸引力;允许使用“中国世界第一”等基于真实事实的表述,但不能改变事实或造成误导。\n" +
@@ -214,14 +217,14 @@ public class ContentScreenJob {
             "  在300至500字之间,用口语化、温和、易理解的语言生成一段适合新闻类短视频播报的口播内容。\n" +
             "  要求:用第三人称叙述方式讲述新闻核心信息;表达自然、生动,符合老年人理解习惯;语气积极、温暖,避免复杂句式;可加入轻微引导或总结语,如“这条消息提醒我们”、“大家平时也要注意”等。\n" +
             "\n" +
-            "在输出JSON时,reason字段必须基于以上评定标准给出明确的判断理由,具体说明标题和内容符合或不符合哪些标准,并引用相关例子作为参考。" +
-            "例如,如果标题涉及负面内容,reason应为“标题涉及负面类内容,如疾病死亡,不符合老年群体标准”;如果标题具有实用性,reason应为“标题具有实用性和正能量,适合推荐”。\n" +
+            "在输出JSON时,reason字段必须基于以上评定标准给出明确的判断理由,具体说明标题和内容符合或不符合哪些标准,并引用相关例子作为参考。例如,如果标题涉及负面内容,reason应为“标题涉及负面类内容,如疾病死亡,不符合老年群体标准”;如果标题具有实用性,reason应为“标题具有实用性和正能量,适合推荐”。\n" +
             "\n" +
             "请严格按以下 JSON 格式输出,不要输出任何解释说明:\n" +
             "{\n" +
             "    \"is_suitable\": true/false,\n" +
             "    \"summary\": \"一句话总结新闻核心内容\",\n" +
             "    \"improved_title\": \"若可改写,请给出更吸引人的标题;否则为空字符串\",\n" +
+            "    \"region\": \"按全国、具体省份或具体城市分类\",\n" +
             "    \"propagation_score\": 0.0~1.0,\n" +
             "    \"suitability_score\": 0.0~1.0,\n" +
             "    \"reason\": \"综合说明判断依据\",\n" +
@@ -231,4 +234,209 @@ public class ContentScreenJob {
             "标题:{{title}}\n" +
             "正文:{{content}}";
 
+
+    @XxlJob("contentTitleProduceJob")
+    public ReturnT<String> contentTitleProduceJob(String param) {
+        Long startTime = DateUtils.getTodayStart();
+        if (StringUtils.isNotBlank(param)) {
+            startTime = DateUtils.getStartOfDay(param, "yyyyMMdd");
+        }
+        Long endTime = startTime + 86400 * 1000;
+        List<SpiderContent> contentList = spiderMapperExt.getExportContentList(
+                Lists.newArrayList(SpiderContentStatusEnum.PASSED.getCode(), SpiderContentStatusEnum.ABANDONED.getCode()),
+                SpiderContentScreenStatusEnum.PASSED.getCode(), startTime, endTime);
+        if (contentList.isEmpty()) {
+            return ReturnT.SUCCESS;
+        }
+        for (SpiderContent content : contentList) {
+            if (StringUtils.isNotBlank(content.getPqImproveTitle())) {
+                continue;
+            }
+            String prompt = pqImproveTitlePrompt.replace("{{title}}", content.getTitle())
+                    .replace("{{content}}", content.getContent());
+            DeepSeekResult result = deepSeekApiService.requestOfficialApi(prompt, null, null, false);
+
+            String pqImproveTitle = null;
+            if (result.isSuccess()) {
+                try {
+                    pqImproveTitle = result.getResponse().getChoices().get(0).getMessage().getContent();
+                } catch (Exception e) {
+                    log.error(result.getResponse().getChoices().get(0).getMessage().getContent());
+                }
+            }
+            if (StringUtils.isNotBlank(pqImproveTitle)) {
+                content.setPqImproveTitle(pqImproveTitle);
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private String pqImproveTitlePrompt = "你是一名专业的公众号标题写手,你的任务是基于用户提供的“标题与正文”内容,判断用户可能想要转发或点击阅读的核心原因,并参考不同原因的高点击率标题风格,输出1个高吸引力标题。\n" +
+            " 目标:让用户看到标题后,愿意“点击一下”,提升标题的点击率。\n" +
+            "输入内容:\n" +
+            " 标题:{{title}}\n" +
+            " 正文:{{content}}\n" +
+            "请严格遵循以下工作流程,同时满足输出规范地输出标题。仅需要输出最终的标题结果即可,不需要输出工作流程。\n" +
+            "第一步:定位用户想要看这篇内容的核心原因\n" +
+            " (请注意,并不是每个原因都必须满足,可以接受内容不具备强烈情绪或冲突)\n" +
+            "标题与正文是否能唤起强烈的情绪?如:愤怒/批判、担忧/恐惧、认同/共鸣、自豪/荣誉感、感动/敬佩。\n" +
+            "是否具有强烈的冲突与戏剧性?如“真相曝光竟然是这样?”、“这事背后另有隐情?”这类突破常识或颠覆认知的内容。\n" +
+            "是否有明确身份标签的目标群体?如:特定职业(医生、教师、农民)、地域(四川人、东北人)、年龄群体(四零后、70岁以后)等。\n" +
+            "是否包含能让人形成画面感或代入感的叙述?\n" +
+            "第二步:根据核心原因,参考下列优质标题风格示例,使用好奇心缺口理论,输出1个可能获得高点击率的标题。\n" +
+            "【强烈情绪】\n" +
+            " \uD83D\uDD34这故事太真实,看到最后眼睛湿了\n" +
+            " \uD83D\uDD34这话说到心坎里,太有共鸣了!\n" +
+            " \uD83D\uDD34看完真的破防了,忍不住想转发\n" +
+            " \uD83D\uDD34这才叫清醒的人生,句句在理\n" +
+            "【戏剧性与冲突性+强烈情绪】\n" +
+            " \uD83D\uDD34真相曝光,背后原因让人意外!\n" +
+            " \uD83D\uDD34这件事,没想到会是这样!\n" +
+            " \uD83D\uDD34听完他的话,瞬间明白了一切\n" +
+            " \uD83D\uDD34原来大家都被误导了这么久\n" +
+            "【目标群体+情绪共鸣】\n" +
+            " \uD83D\uDD34四零后都懂,这段话太扎心了!\n" +
+            " \uD83D\uDD3470岁以后这样活,才最舒服\n" +
+            " \uD83D\uDD34农民兄弟的心声,说得太实在了\n" +
+            " \uD83D\uDD34四川人看完直呼:太巴适了!\n" +
+            "【画面感+情绪感染】\n" +
+            " \uD83D\uDD34那一幕太震撼,看完久久不能平静\n" +
+            " \uD83D\uDD34岁月的痕迹,刻在这一瞬间\n" +
+            " \uD83D\uDD34珍贵画面,让人泪目的一刻\n" +
+            "输出规范:\n" +
+            "标题字数不得超过15字。\n" +
+            "仅输出1个标题,不带任何说明文字或字段。\n" +
+            "标题前必须包含“\uD83D\uDD34”。\n" +
+            "标题中禁止出现以下词汇或内容:\n" +
+            "具体人名\n" +
+            "国家名称(“我国”“我们”“老美”“老外”“外国”除外)\n" +
+            "过度夸张词汇,如“紧急”“速看”“一定要”“千万不要”“震惊”“出大事”等。";
+
+    
+    @XxlJob("contentNarrationScriptProduceJob")
+    public ReturnT<String> contentNarrationScriptProduceJob(String param) {
+        Long startTime = DateUtils.getTodayStart();
+        if (StringUtils.isNotBlank(param)) {
+            startTime = DateUtils.getStartOfDay(param, "yyyyMMdd");
+        }
+        Long endTime = startTime + 86400 * 1000;
+        List<SpiderContent> contentList = spiderMapperExt.getExportContentList(
+                Lists.newArrayList(SpiderContentStatusEnum.PASSED.getCode(), SpiderContentStatusEnum.ABANDONED.getCode()),
+                SpiderContentScreenStatusEnum.PASSED.getCode(), startTime, endTime);
+        if (contentList.isEmpty()) {
+            return ReturnT.SUCCESS;
+        }
+        for (SpiderContent content : contentList) {
+            if (StringUtils.isNotBlank(content.getPqImproveNarrationScript())) {
+                continue;
+            }
+            String prompt = pqNarrationScriptPrompt.replace("{{title}}", content.getTitle())
+                    .replace("{{content}}", content.getContent());
+            DeepSeekResult result = deepSeekApiService.requestOfficialApi(prompt, null, null, false);
+
+            String narrationScript = null;
+            if (result.isSuccess()) {
+                try {
+                    narrationScript = result.getResponse().getChoices().get(0).getMessage().getContent();
+                } catch (Exception e) {
+                    log.error(result.getResponse().getChoices().get(0).getMessage().getContent());
+                }
+            }
+            if (StringUtils.isNotBlank(narrationScript)) {
+                content.setPqImproveNarrationScript(narrationScript);
+                content.setUpdateTime(System.currentTimeMillis());
+                spiderContentMapper.updateByPrimaryKeySelective(content);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private String pqNarrationScriptPrompt = "你是一名专业的短视频引导语写手,你的任务是基于用户提供的“标题与正文”内容,判断用户可能转发的核心原因,并写出一句用于视频结尾的**分享引导语**。\n" +
+            "目标:让用户产生“我应该转发一下”的冲动。\n" +
+            "\n" +
+            "输入内容:\n" +
+            " 标题:{{title}}\n" +
+            " 正文:{{content}}\n" +
+            " \n" +
+            "---\n" +
+            "请严格遵循以下工作流程:\n" +
+            "第一步:判断分享动机\n" +
+            "从下列8种“分享视频的核心原因”中,选择最适合该视频的分享动机,仅选1项。\n" +
+            "【分享动机类型】\n" +
+            "1)让我看起来更有见识:常见于小众知识、尖端科技发现等内容\n" +
+            "2)让我看起来更有趣/有品位/独特:常见于高水平的艺术表演、幽默段子、 探索罕为人知的美景等内容\n" +
+            "3)表达我的立场/价值观:常见于围绕特定观点/价值观展开的内容\n" +
+            "4)积极情绪:常见于催人泪下的感人故事、难以想象规模/复杂度的建筑/奇观、能激发民族自豪感重大成就等内容\n" +
+            "5)消极情绪:常见于反应全社会/某群体遭受的不公、对某些事的普遍担忧、国家侵略/坏人坏事等内容\n" +
+            "6)普遍经历/困境/痛点:常见于特定身份(如农民)、特定年代(如:40/50/60后)普遍经历/困境等内容\n" +
+            "7)社群/圈层专属内容:常见于特定年龄、身份(如农民)、关系(如老同学、老乡)相关的怀念、感慨等内容\n" +
+            "8)实用性:常见于政策信息、生活小妙招、危险提示等利他信息内容\n" +
+            "---\n" +
+            "第二步:选择模板\n" +
+            "从对应动机的模板中,挑选一个最适合该视频内容的模板结构。注意:结构、语气必须保留,但内容允许根据视频内容进行情绪和细节的替换。\n" +
+            "分享动因:让我看起来更有见识\n" +
+            "模板1:这个关于端午节习俗的视频太及时了,得赶紧告诉朋友们。他们肯定还有人不知道端午节不能说快乐,可能会闹出笑话。为了不让身边的朋友说错,请大家一定要把这个视频转发到至少三个群里,让更多人了解这些传统习俗,提前做好准备,您的分享就是对他人的关爱。让我们互帮互助,共同进步,转发分享,福气多多。\n" +
+            "模板2:这是一篇难得的好文,写给家人、老师、同学、同事、战友好朋友,好兄弟好姐妹,以及爱我的和我爱的人。这篇好文可别独享,手指一点转发出去,转给身边同样退休或者即将退休的朋友,别让这个视频在你手里中止了。\n" +
+            "模板3:没想到这世上还有喊一声就能出水的神奇泉眼,真是长见识了。这样的新鲜事可不能咱们自己偷偷乐呵,赶紧转发分享到群里,让大家一起开开眼界。赠人玫瑰手有余香,您的每一次分享都能给别人带去一份快乐和惊喜,快快转发起来吧,让我们一起把这份快乐传递给更多的人,让更多的朋友们看到祖国的大好河山\n" +
+            "模板3:说的简直太好了,要不是看见这个视频,还真不知道我们平时吃饭用的筷子还有这么多的讲究,真是长见识了看完请一定将这个视频转发分享到你所在的每一个微信群当中,给更多的家人群友都看看尤其是发给子孙后代们好好看看,提醒他们时时刻刻别忘本,这是中国人的做人知识,值得被延续继承下去,多多转发,感恩感德。\n" +
+            "\n" +
+            "分享动因:让我看起来更有趣/有品位/独特\n" +
+            "模板1:朋友们,这个关于人死后全过程的故事,蕴含着深刻的人生哲理,不知是否也看醒了你。如此触动人心,且充满智慧的内容,值得分享给身边每一个人。多多转发传递,让更多人从故事中汲取力量,珍惜当下,豁达生活。别让这份难得的感悟在你这里终止,现在就行动起来转发吧,让更多人能在这个故事里找到生活的方向。\n" +
+            "\n" +
+            "分享动因:表达我的立场/价值观\n" +
+            "模板1:你要是觉得这内容实在,现在赶紧动手分享出去,让咱们的亲戚朋友都清醒清醒,特别是家里有小辈的,一定要让他们知道咱们祖宗的规矩,你发一个群,发一个好友,就是给咱们中国文化添一块砖,现在不传,以后子孙连自己跟在哪都不知道了,你想想要是家家户户都过洋节,咱们自己的皇帝来祖谁来拜,老祖宗的智慧谁来传,咱们一起把这视频顶上去,让全国人都看到,这是咱们的责任啊。\n" +
+            "模板2:同样是中华儿女,为什么待遇却是天壤之别,有人看病不花钱,有人有病看不起,现在我只希望能够让农村老人的养老金上涨那么一点点,最起码让我们年迈的父母,有个头痛脑热的吃得起药吧,这样的要求真的很高吗?如果你也认同我的观点,不妨转发分享到群里,为咱农民喊一声,不求手头宽裕,只求药钱够花三餐不愁,农民种粮养天下,晚年不该苦哈哈,多一人转发,多一份力量,让社会听见田间的的声音。\n" +
+            "模板3:今天如果你有缘看到这个视频,恳请您务必将它转发分享到每个群,让更多的人,尤其是青年后辈们,让世界看到5000年中国人的文化自信,有多少群就转发发多少群,共同见证祖国的万里山河,用实际行动传承熠熠生辉的文明之光。\n" +
+            "\n" +
+            "分享动因:积极情绪\n" +
+            "模板1:看完这个视频,我真的为伟大的祖国骄傲,中华民族必将迎来伟大复兴。也请看完视频的你,一定要把视频转发分享出去,让全世界,还有那些还没看明白的人睁大眼瞧瞧,这可不是吹牛皮,是实打实的底气!恳请你为这个视频转发一次,让所有人都看到,动动手指弘扬中国自信,感恩有你。\n" +
+            "模板2:朋友们,美国修条路,百万点赞转发,而我们的英雄事迹却无人关注。您看完千万别直接划走,只要点一下,就能把英雄的故事传给更多人,尤其是青年后辈们,一定要让他们看看。这条视频不需要您花一分钱,但需要您花一点心意,动动手指,就能让这个故事传个角落。您看那些英雄,他们用命换来了咱们今天的安稳日子,咱们为他们做这点小事,难道不应该吗?\n" +
+            "\n" +
+            "分享动因:消极情绪\n" +
+            "模板1:今天如果你看到这个视频,说明大家都在转发支持,让我们接力转发,让整个社会听到老百姓的心声,只有得到有关单位足够的重视,老百姓才能吃的安心吃的放心。每个群都在传播,每个群都在发声,咱们老百姓的饭碗安全才有保障,你转发的不是视频,是千万家庭的健康心愿,你转发的不是内容,是子孙后代的生命防线。今天你不转发,我不转发,问题何时能解决?食品安全不能等,身体健康不能赌,咱们中老年人更要为家人、为自己争这口气。\n" +
+            "模板2:听完这个视频,我心里特别不安。像我们这些普通的老百姓,本来生活就不容易,假如再被骗子骗了,那这后半生还怎么过?这些号码,如果你担心看一遍记不住,可以先保存下来,也可以把它转发给自己的父母、朋友或是家人,让更多的人知道这些危险的号码,别等到受害了才后悔。\n" +
+            "模板3:这个视频说的太对了,日寇犯下滔天罪孽,华夏儿女永不原谅,在此呼吁恳请每一个看到视频的同胞,都能转发分享出去,有多少群转发多少群,千万不能让这份属于14亿中华儿女的国耻被渐渐的遗忘,那我们就真的败了,那实在太悲哀了,赶紧行动起来吧,一人转发十人知道,百人知耻,千人同心,万人铭记,我是中国人,我没有忘记这份国耻,我转发了,你呢?\n" +
+            "\n" +
+            "分享动因:普遍经历/困境/痛点\n" +
+            "模板1:这个视频真是让人惊叹,大实话说的句句在理,听完让人倍感振奋,大家在群里都说,视频里的每一句话都能引发共鸣,太值得分享了!如果你也觉得他说的好,快把这个视频转发到你所有的微信群,让更多的人听到他的声音,让我们一起把这份智慧和快乐传递下去,感恩有你期待更多的分享。\n" +
+            "模板2:这个视频真是说到了咱们老百姓的心坎里去了。现在好多专家就知道纸上谈兵,根本就不懂老百姓的疾苦,还是要多听听老百姓的声音,多为老百姓办实事办好事。我准备把它分享到几个群里,让更多的人都看看,大家也一起分享一下,让更多的人都来学习学习,好不好,特别是当干部的,好好看看,学习学习,怎么为人民服务,这才是关键!\n" +
+            "模板3:家人们,你们觉得老农民应不应该发放养老金呢?我希望我们共同呼吁起来,让更多的人关注到农民养老金的问题,才能推进这个问题的解决。在当今社会,养老金对于每一个人来说,都是不可或缺的保障。尤其是咱们辛勤耕耘了大半生的农民朋友们。为了让更多人了解这个问题,赶紧把它转发到你所有的群里,让我们一起为农民争取应有的权益。分享就是力量,感谢你们的支持。\n" +
+            "\n" +
+            "分享动因:社群/圈层专属内容\n" +
+            "模板1:要是你喜欢这个视频,由衷希望你能动动手指,将这个视频分享出去,分享到同学群里,让更多的老同学看到,咱们把这份情谊传递下去。让大家都回忆起那段美好的校园时光,想起那些无忧无虑的日子。老同学,你在远方还好吗?工作顺利吗?生活幸福吗?分享给你这个视频,希望能给你带去一丝温暖,一丝回忆。\n" +
+            "模板2:各位, 我们这一代, 出生在困难时期, 学习在动乱时期,工作在改革时期,养老在追梦时期。如果你看到了此视频, 说明咱们这代人都在转发支持,如果你也觉得不错,请把它转发到每个微信群, 让所有人都看到,即使时间带走了咱们的容颜, 也带不走我们对生活的热爱。转发传递,送给所有吃过苦头,但也不怕吃苦的老朋友!\n" +
+            "模板3:看完才知道现在的一万块在1978年竟然值那么多钱。想起咱们那个年代,物价低,生活简单,真是让人怀念。今天大家都在群里转发这个视频,看了都感叹时代变迁真是快,如果你也觉得这个视频有趣又有意义,赶紧把它转发到你所有的群里吧,让更多的人看看,了解一下过去的生活,多多转发,感恩有你。\n" +
+            "\n" +
+            "分享动因:实用性\n" +
+            "模板1:原来这样交电费能省这么多钱,这种实实在在的福利,咱们得让更多群友知道。现在知道的人还不多,转发出去,您就是传递好消息的贵人。听我说句掏心窝的话,这个视频你要是划过去不分享,后面的人就看不到了,有多少人想知道这种消息却还不知道呢,千万别让视频在您手里断了。咱们最讲究积德行善,您每转发一次就是攒一份功德,系统都给您记着呢。拜托各位了,这个视频能不能继续传播,全看您愿不愿意伸伸手,咱们一起让更多人看见真相。\n" +
+            "模板2:家人们,看完我才知道高铁站打伞这么危险!这不是小事,特别是家里有孩子的,你要是不提醒他们,就是没尽到责任。您多转一个群,多发给一个人,说不定就救了谁一命。你要是不转发,亲戚朋友没看到,真出了事您心里过得去吗?咱们这个年纪啊,就图个全家平安,您动动手指头的事,就能让更多人躲过危险,这功德多大。要是已经转过的群,您隔半天再转一次,总有人没看见的。说白了,咱们就是尽自己最大努力,让自己最在乎的人都平平安安的。\n" +
+            "模板3:这个视频真是太实用了,给我们这些做父母的提供了很多实用的建议。虽然我们都希望孩子能有一个美好的未来,但有时候却不知道该如何引导他们。这个视频就像是一盏明灯,指引我们在教育的路上不再迷茫。群里的朋友们都在转发,说对他们帮助很大。如果你也想给孩子一个更好的教育,赶紧把这个视频分享到你的群里吧,让更多的父母受益,一起为孩子的未来努力。\n" +
+            "\n" +
+            "分享动因:通用送祝福(用于无法分辨用户分享动因的内容)\n" +
+            "模板1:这个视频看完,记得现在立刻动动手指分享到群,每个群里都有需要这些道理的亲戚朋友。分享到三个群以上,还能收到平台送的福气勋章。你转发的每个群都会有人默默记着你的好,多一次转发就多一份福气,转出去的智慧早晚会回到你身上。让更多人受益,就是功德无量。千万别让好内容在你手里中断,转发越多福气越多,千万别私藏好内容,要大家一起看,分享完了回来,评论区告诉我,你转了几个群,让我也替你高兴高兴。\n" +
+            "模板2:老友们快转发给朋友吧,给朋友们都看看,这么好的视频,千万不能在咱们手里终止了。愿每一个收到这个视频的朋友都能收获长命百岁,赠人玫瑰,手有余香,转发传递,让快乐继续,多多转发,也将收获福气,不许不发,因为我要你幸福。\n" +
+            "模板3:老友们,这个故事您要是觉得感动,就点一下转发。让所有群里的老伙计们都看看这人间真情,特别是家里的小辈们,让他们知道多行善事必有后福,您多转发一次,说不定就多一个人相信善有善报。老天爷在看着呢,您每转一次群,就相当于给自己存了一份功德,您每转一个好友,就相当于给子孙后代种了一颗善果,您要是已经转完了,我替所有人谢谢您,您要是还没转,现在就点一下转发,福气自然来。转完的老友在评论区敲个善字,让咱们一起把这份感动传递下去。\n" +
+            "---\n" +
+            "第三步:生成引导语(表达增强要求)\n" +
+            "请结合以下**表达技巧**进行加工:\n" +
+            "加入画面感:鼓励添加用户“身边人”“微信群”“同学”“家里老人”等细节,让用户能联想到具体转发对象  \n" +
+            "代入感和共情力:用“你这一发,就帮到了谁谁谁”“他们看到可能会...”这类话术,激发用户行动  \n" +
+            "生活化语言:多用通俗易懂、接地气、有感情、有呼吁力的表达,避免官话、空话、劝学式语言  \n" +
+            "利他但不生硬:强调“信息重要性 + 传播的意义”,但不要机械重复“转发很重要”,而是给出“为什么分享能帮到别人”的理由\n" +
+            "不要只是陈述,要带情绪感染:“太实用了”“我真的震撼了”“群里都在传”“你看看是不是这个理”等带感叹语气的话术可加入\n" +
+            "---\n" +
+            "输出规范\n" +
+            "最终仅输出引导语本体内容,不输出中间过程、选项、模板内容等\n" +
+            "输出的引导语应包含1个明确的转发理由 + 明确的转发动员行为(如“快转发到群里”、“发给身边老人”、“发到同学群”)\n" +
+            "输出长度建议在300字左右,表达完整、有节奏、饱含情绪感染力\n" +
+            "---\n" +
+            "【示例】\n" +
+            "❌ Bad Case(不要这样写):  \n" +
+            "这个视频内容很有意义,讲了很多知识,建议大家转发给朋友们一起学习。\n" +
+            "✅ Good Case(目标风格):  \n" +
+            "这个视频太有用了,原来除了养老金,还有这么多隐藏补贴可以领,今天在群里大家都在讨论这个视频,你快转发到你所有的群里,说不定你的一发就让谁领到了钱,尤其是咱们老年朋友,很多人根本不知道这些政策,你这一发就等于给别人送去了实打实的福利,这才是真正的帮忙,这才是我们这代人该做的大事!\n" +
+            "---\n" +
+            "请开始任务,最终输出“引导语”文本。";
 }

+ 3 - 0
core/src/main/java/com/tzld/supply/job/SpiderContentFeishuJob.java

@@ -57,12 +57,15 @@ public class SpiderContentFeishuJob {
             spiderContentEntity.setDate(DateUtils.getDateString(spiderContent.getCreateTime(), "yyyy-MM-dd"));
             spiderContentEntity.setSource(spiderContent.getSource() + "-" + spiderContent.getSourceType());
             spiderContentEntity.setTitle(spiderContent.getTitle());
+            spiderContentEntity.setPqImprovedTitle(spiderContent.getPqImproveTitle());
             spiderContentEntity.setStatus(SpiderContentStatusEnum.getByCode(spiderContent.getStatus()).getMsg());
             if (StringUtils.isNotBlank(spiderContent.getAiPrecisionResult())) {
                 PrecisionScreenEntity entity = JSONObject.parseObject(spiderContent.getAiPrecisionResult(), PrecisionScreenEntity.class);
                 spiderContentEntity.setImprovedTitle(entity.getImprovedTitle());
                 spiderContentEntity.setFilterReason(entity.getReason());
+                spiderContentEntity.setRegion(entity.getRegion());
                 spiderContentEntity.setNarrationScript(entity.getNarrationScript());
+                spiderContentEntity.setPqNarrationScript(spiderContent.getPqImproveNarrationScript());
             }
             spiderContentEntity.setContent(spiderContent.getContent());
             exportList.add(spiderContentEntity);

+ 1 - 0
core/src/main/java/com/tzld/supply/model/entity/PrecisionScreenEntity.java

@@ -8,6 +8,7 @@ public class PrecisionScreenEntity {
     private Boolean isSuitable;
     private String summary;
     private String improvedTitle;
+    private String region;
     private Double propagationScore;
     private Double suitabilityScore;
     private String reason;

+ 3 - 0
core/src/main/java/com/tzld/supply/model/entity/feishu/SpiderContentEntity.java

@@ -9,7 +9,10 @@ public class SpiderContentEntity {
     private String title;
     private String status;
     private String improvedTitle;
+    private String pqImprovedTitle;
     private String filterReason;
     private String content;
+    private String region;
     private String narrationScript;
+    private String pqNarrationScript;
 }

+ 115 - 43
core/src/main/java/com/tzld/supply/model/po/supply/spider/SpiderContent.java

@@ -13,7 +13,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.id
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private Long id;
 
@@ -24,7 +24,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.task_id
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private Long taskId;
 
@@ -35,7 +35,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.source
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private String source;
 
@@ -46,7 +46,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.source_type
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private String sourceType;
 
@@ -57,7 +57,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.url
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private String url;
 
@@ -68,7 +68,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.title
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private String title;
 
@@ -79,7 +79,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private Integer status;
 
@@ -90,7 +90,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.ai_rough_status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private Integer aiRoughStatus;
 
@@ -101,7 +101,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.ai_rough_result
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private String aiRoughResult;
 
@@ -112,16 +112,27 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.ai_precision_status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private Integer aiPrecisionStatus;
 
+    /**
+     * Database Column Remarks:
+     *   票圈改写标题
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column spider_content.pq_improve_title
+     *
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
+     */
+    private String pqImproveTitle;
+
     /**
      *
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.create_time
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private Long createTime;
 
@@ -130,7 +141,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.update_time
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private Long updateTime;
 
@@ -141,7 +152,7 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private String content;
 
@@ -152,17 +163,28 @@ public class SpiderContent {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database column spider_content.ai_precision_result
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     private String aiPrecisionResult;
 
+    /**
+     * Database Column Remarks:
+     *   票圈改写口播
+     *
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database column spider_content.pq_improve_narration_script
+     *
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
+     */
+    private String pqImproveNarrationScript;
+
     /**
      * This method was generated by MyBatis Generator.
      * This method returns the value of the database column spider_content.id
      *
      * @return the value of spider_content.id
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Long getId() {
         return id;
@@ -174,7 +196,7 @@ public class SpiderContent {
      *
      * @param id the value for spider_content.id
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setId(Long id) {
         this.id = id;
@@ -186,7 +208,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.task_id
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Long getTaskId() {
         return taskId;
@@ -198,7 +220,7 @@ public class SpiderContent {
      *
      * @param taskId the value for spider_content.task_id
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setTaskId(Long taskId) {
         this.taskId = taskId;
@@ -210,7 +232,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.source
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getSource() {
         return source;
@@ -222,7 +244,7 @@ public class SpiderContent {
      *
      * @param source the value for spider_content.source
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setSource(String source) {
         this.source = source;
@@ -234,7 +256,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.source_type
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getSourceType() {
         return sourceType;
@@ -246,7 +268,7 @@ public class SpiderContent {
      *
      * @param sourceType the value for spider_content.source_type
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setSourceType(String sourceType) {
         this.sourceType = sourceType;
@@ -258,7 +280,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.url
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getUrl() {
         return url;
@@ -270,7 +292,7 @@ public class SpiderContent {
      *
      * @param url the value for spider_content.url
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setUrl(String url) {
         this.url = url;
@@ -282,7 +304,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.title
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getTitle() {
         return title;
@@ -294,7 +316,7 @@ public class SpiderContent {
      *
      * @param title the value for spider_content.title
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setTitle(String title) {
         this.title = title;
@@ -306,7 +328,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Integer getStatus() {
         return status;
@@ -318,7 +340,7 @@ public class SpiderContent {
      *
      * @param status the value for spider_content.status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setStatus(Integer status) {
         this.status = status;
@@ -330,7 +352,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.ai_rough_status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Integer getAiRoughStatus() {
         return aiRoughStatus;
@@ -342,7 +364,7 @@ public class SpiderContent {
      *
      * @param aiRoughStatus the value for spider_content.ai_rough_status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setAiRoughStatus(Integer aiRoughStatus) {
         this.aiRoughStatus = aiRoughStatus;
@@ -354,7 +376,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.ai_rough_result
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getAiRoughResult() {
         return aiRoughResult;
@@ -366,7 +388,7 @@ public class SpiderContent {
      *
      * @param aiRoughResult the value for spider_content.ai_rough_result
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setAiRoughResult(String aiRoughResult) {
         this.aiRoughResult = aiRoughResult;
@@ -378,7 +400,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.ai_precision_status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Integer getAiPrecisionStatus() {
         return aiPrecisionStatus;
@@ -390,19 +412,43 @@ public class SpiderContent {
      *
      * @param aiPrecisionStatus the value for spider_content.ai_precision_status
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setAiPrecisionStatus(Integer aiPrecisionStatus) {
         this.aiPrecisionStatus = aiPrecisionStatus;
     }
 
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column spider_content.pq_improve_title
+     *
+     * @return the value of spider_content.pq_improve_title
+     *
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
+     */
+    public String getPqImproveTitle() {
+        return pqImproveTitle;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column spider_content.pq_improve_title
+     *
+     * @param pqImproveTitle the value for spider_content.pq_improve_title
+     *
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
+     */
+    public void setPqImproveTitle(String pqImproveTitle) {
+        this.pqImproveTitle = pqImproveTitle;
+    }
+
     /**
      * This method was generated by MyBatis Generator.
      * This method returns the value of the database column spider_content.create_time
      *
      * @return the value of spider_content.create_time
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Long getCreateTime() {
         return createTime;
@@ -414,7 +460,7 @@ public class SpiderContent {
      *
      * @param createTime the value for spider_content.create_time
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setCreateTime(Long createTime) {
         this.createTime = createTime;
@@ -426,7 +472,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.update_time
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Long getUpdateTime() {
         return updateTime;
@@ -438,7 +484,7 @@ public class SpiderContent {
      *
      * @param updateTime the value for spider_content.update_time
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setUpdateTime(Long updateTime) {
         this.updateTime = updateTime;
@@ -450,7 +496,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getContent() {
         return content;
@@ -462,7 +508,7 @@ public class SpiderContent {
      *
      * @param content the value for spider_content.content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setContent(String content) {
         this.content = content;
@@ -474,7 +520,7 @@ public class SpiderContent {
      *
      * @return the value of spider_content.ai_precision_result
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getAiPrecisionResult() {
         return aiPrecisionResult;
@@ -486,17 +532,41 @@ public class SpiderContent {
      *
      * @param aiPrecisionResult the value for spider_content.ai_precision_result
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setAiPrecisionResult(String aiPrecisionResult) {
         this.aiPrecisionResult = aiPrecisionResult;
     }
 
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method returns the value of the database column spider_content.pq_improve_narration_script
+     *
+     * @return the value of spider_content.pq_improve_narration_script
+     *
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
+     */
+    public String getPqImproveNarrationScript() {
+        return pqImproveNarrationScript;
+    }
+
+    /**
+     * This method was generated by MyBatis Generator.
+     * This method sets the value of the database column spider_content.pq_improve_narration_script
+     *
+     * @param pqImproveNarrationScript the value for spider_content.pq_improve_narration_script
+     *
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
+     */
+    public void setPqImproveNarrationScript(String pqImproveNarrationScript) {
+        this.pqImproveNarrationScript = pqImproveNarrationScript;
+    }
+
     /**
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     @Override
     public String toString() {
@@ -514,10 +584,12 @@ public class SpiderContent {
         sb.append(", aiRoughStatus=").append(aiRoughStatus);
         sb.append(", aiRoughResult=").append(aiRoughResult);
         sb.append(", aiPrecisionStatus=").append(aiPrecisionStatus);
+        sb.append(", pqImproveTitle=").append(pqImproveTitle);
         sb.append(", createTime=").append(createTime);
         sb.append(", updateTime=").append(updateTime);
         sb.append(", content=").append(content);
         sb.append(", aiPrecisionResult=").append(aiPrecisionResult);
+        sb.append(", pqImproveNarrationScript=").append(pqImproveNarrationScript);
         sb.append("]");
         return sb.toString();
     }

+ 87 - 17
core/src/main/java/com/tzld/supply/model/po/supply/spider/SpiderContentExample.java

@@ -8,7 +8,7 @@ public class SpiderContentExample {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     protected String orderByClause;
 
@@ -16,7 +16,7 @@ public class SpiderContentExample {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     protected boolean distinct;
 
@@ -24,7 +24,7 @@ public class SpiderContentExample {
      * This field was generated by MyBatis Generator.
      * This field corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     protected List<Criteria> oredCriteria;
 
@@ -32,7 +32,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public SpiderContentExample() {
         oredCriteria = new ArrayList<Criteria>();
@@ -42,7 +42,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setOrderByClause(String orderByClause) {
         this.orderByClause = orderByClause;
@@ -52,7 +52,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public String getOrderByClause() {
         return orderByClause;
@@ -62,7 +62,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void setDistinct(boolean distinct) {
         this.distinct = distinct;
@@ -72,7 +72,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public boolean isDistinct() {
         return distinct;
@@ -82,7 +82,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public List<Criteria> getOredCriteria() {
         return oredCriteria;
@@ -92,7 +92,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void or(Criteria criteria) {
         oredCriteria.add(criteria);
@@ -102,7 +102,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Criteria or() {
         Criteria criteria = createCriteriaInternal();
@@ -114,7 +114,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public Criteria createCriteria() {
         Criteria criteria = createCriteriaInternal();
@@ -128,7 +128,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     protected Criteria createCriteriaInternal() {
         Criteria criteria = new Criteria();
@@ -139,7 +139,7 @@ public class SpiderContentExample {
      * This method was generated by MyBatis Generator.
      * This method corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public void clear() {
         oredCriteria.clear();
@@ -151,7 +151,7 @@ public class SpiderContentExample {
      * This class was generated by MyBatis Generator.
      * This class corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     protected abstract static class GeneratedCriteria {
         protected List<Criterion> criteria;
@@ -844,6 +844,76 @@ public class SpiderContentExample {
             return (Criteria) this;
         }
 
+        public Criteria andPqImproveTitleIsNull() {
+            addCriterion("pq_improve_title is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleIsNotNull() {
+            addCriterion("pq_improve_title is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleEqualTo(String value) {
+            addCriterion("pq_improve_title =", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleNotEqualTo(String value) {
+            addCriterion("pq_improve_title <>", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleGreaterThan(String value) {
+            addCriterion("pq_improve_title >", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleGreaterThanOrEqualTo(String value) {
+            addCriterion("pq_improve_title >=", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleLessThan(String value) {
+            addCriterion("pq_improve_title <", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleLessThanOrEqualTo(String value) {
+            addCriterion("pq_improve_title <=", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleLike(String value) {
+            addCriterion("pq_improve_title like", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleNotLike(String value) {
+            addCriterion("pq_improve_title not like", value, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleIn(List<String> values) {
+            addCriterion("pq_improve_title in", values, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleNotIn(List<String> values) {
+            addCriterion("pq_improve_title not in", values, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleBetween(String value1, String value2) {
+            addCriterion("pq_improve_title between", value1, value2, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
+        public Criteria andPqImproveTitleNotBetween(String value1, String value2) {
+            addCriterion("pq_improve_title not between", value1, value2, "pqImproveTitle");
+            return (Criteria) this;
+        }
+
         public Criteria andCreateTimeIsNull() {
             addCriterion("create_time is null");
             return (Criteria) this;
@@ -969,7 +1039,7 @@ public class SpiderContentExample {
      * This class was generated by MyBatis Generator.
      * This class corresponds to the database table spider_content
      *
-     * @mbg.generated do_not_delete_during_merge Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated do_not_delete_during_merge Tue Oct 21 17:07:41 CST 2025
      */
     public static class Criteria extends GeneratedCriteria {
 
@@ -982,7 +1052,7 @@ public class SpiderContentExample {
      * This class was generated by MyBatis Generator.
      * This class corresponds to the database table spider_content
      *
-     * @mbg.generated Thu Oct 16 20:21:22 CST 2025
+     * @mbg.generated Tue Oct 21 17:07:41 CST 2025
      */
     public static class Criterion {
         private String condition;

+ 62 - 28
core/src/main/resources/mapper/supply/spider/SpiderContentMapper.xml

@@ -5,7 +5,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     <id column="id" jdbcType="BIGINT" property="id" />
     <result column="task_id" jdbcType="BIGINT" property="taskId" />
@@ -17,6 +17,7 @@
     <result column="ai_rough_status" jdbcType="INTEGER" property="aiRoughStatus" />
     <result column="ai_rough_result" jdbcType="VARCHAR" property="aiRoughResult" />
     <result column="ai_precision_status" jdbcType="INTEGER" property="aiPrecisionStatus" />
+    <result column="pq_improve_title" jdbcType="VARCHAR" property="pqImproveTitle" />
     <result column="create_time" jdbcType="BIGINT" property="createTime" />
     <result column="update_time" jdbcType="BIGINT" property="updateTime" />
   </resultMap>
@@ -24,16 +25,17 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     <result column="content" jdbcType="LONGVARCHAR" property="content" />
     <result column="ai_precision_result" jdbcType="LONGVARCHAR" property="aiPrecisionResult" />
+    <result column="pq_improve_narration_script" jdbcType="LONGVARCHAR" property="pqImproveNarrationScript" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     <where>
       <foreach collection="oredCriteria" item="criteria" separator="or">
@@ -67,7 +69,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     <where>
       <foreach collection="example.oredCriteria" item="criteria" separator="or">
@@ -101,24 +103,24 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     id, task_id, `source`, source_type, url, title, `status`, ai_rough_status, ai_rough_result, 
-    ai_precision_status, create_time, update_time
+    ai_precision_status, pq_improve_title, create_time, update_time
   </sql>
   <sql id="Blob_Column_List">
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
-    content, ai_precision_result
+    content, ai_precision_result, pq_improve_narration_script
   </sql>
   <select id="selectByExampleWithBLOBs" parameterType="com.tzld.supply.model.po.supply.spider.SpiderContentExample" resultMap="ResultMapWithBLOBs">
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     select
     <if test="distinct">
@@ -139,7 +141,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     select
     <if test="distinct">
@@ -158,7 +160,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     select 
     <include refid="Base_Column_List" />
@@ -171,7 +173,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     delete from spider_content
     where id = #{id,jdbcType=BIGINT}
@@ -180,7 +182,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     delete from spider_content
     <if test="_parameter != null">
@@ -191,24 +193,26 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     insert into spider_content (id, task_id, `source`, 
       source_type, url, title, 
       `status`, ai_rough_status, ai_rough_result, 
-      ai_precision_status, create_time, update_time, 
-      content, ai_precision_result)
+      ai_precision_status, pq_improve_title, create_time, 
+      update_time, content, ai_precision_result, 
+      pq_improve_narration_script)
     values (#{id,jdbcType=BIGINT}, #{taskId,jdbcType=BIGINT}, #{source,jdbcType=VARCHAR}, 
       #{sourceType,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, #{title,jdbcType=VARCHAR}, 
       #{status,jdbcType=INTEGER}, #{aiRoughStatus,jdbcType=INTEGER}, #{aiRoughResult,jdbcType=VARCHAR}, 
-      #{aiPrecisionStatus,jdbcType=INTEGER}, #{createTime,jdbcType=BIGINT}, #{updateTime,jdbcType=BIGINT}, 
-      #{content,jdbcType=LONGVARCHAR}, #{aiPrecisionResult,jdbcType=LONGVARCHAR})
+      #{aiPrecisionStatus,jdbcType=INTEGER}, #{pqImproveTitle,jdbcType=VARCHAR}, #{createTime,jdbcType=BIGINT}, 
+      #{updateTime,jdbcType=BIGINT}, #{content,jdbcType=LONGVARCHAR}, #{aiPrecisionResult,jdbcType=LONGVARCHAR}, 
+      #{pqImproveNarrationScript,jdbcType=LONGVARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.tzld.supply.model.po.supply.spider.SpiderContent">
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     insert into spider_content
     <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -242,6 +246,9 @@
       <if test="aiPrecisionStatus != null">
         ai_precision_status,
       </if>
+      <if test="pqImproveTitle != null">
+        pq_improve_title,
+      </if>
       <if test="createTime != null">
         create_time,
       </if>
@@ -254,6 +261,9 @@
       <if test="aiPrecisionResult != null">
         ai_precision_result,
       </if>
+      <if test="pqImproveNarrationScript != null">
+        pq_improve_narration_script,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="id != null">
@@ -286,6 +296,9 @@
       <if test="aiPrecisionStatus != null">
         #{aiPrecisionStatus,jdbcType=INTEGER},
       </if>
+      <if test="pqImproveTitle != null">
+        #{pqImproveTitle,jdbcType=VARCHAR},
+      </if>
       <if test="createTime != null">
         #{createTime,jdbcType=BIGINT},
       </if>
@@ -298,13 +311,16 @@
       <if test="aiPrecisionResult != null">
         #{aiPrecisionResult,jdbcType=LONGVARCHAR},
       </if>
+      <if test="pqImproveNarrationScript != null">
+        #{pqImproveNarrationScript,jdbcType=LONGVARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.tzld.supply.model.po.supply.spider.SpiderContentExample" resultType="java.lang.Long">
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     select count(*) from spider_content
     <if test="_parameter != null">
@@ -315,7 +331,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     update spider_content
     <set>
@@ -349,6 +365,9 @@
       <if test="record.aiPrecisionStatus != null">
         ai_precision_status = #{record.aiPrecisionStatus,jdbcType=INTEGER},
       </if>
+      <if test="record.pqImproveTitle != null">
+        pq_improve_title = #{record.pqImproveTitle,jdbcType=VARCHAR},
+      </if>
       <if test="record.createTime != null">
         create_time = #{record.createTime,jdbcType=BIGINT},
       </if>
@@ -361,6 +380,9 @@
       <if test="record.aiPrecisionResult != null">
         ai_precision_result = #{record.aiPrecisionResult,jdbcType=LONGVARCHAR},
       </if>
+      <if test="record.pqImproveNarrationScript != null">
+        pq_improve_narration_script = #{record.pqImproveNarrationScript,jdbcType=LONGVARCHAR},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -370,7 +392,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     update spider_content
     set id = #{record.id,jdbcType=BIGINT},
@@ -383,10 +405,12 @@
       ai_rough_status = #{record.aiRoughStatus,jdbcType=INTEGER},
       ai_rough_result = #{record.aiRoughResult,jdbcType=VARCHAR},
       ai_precision_status = #{record.aiPrecisionStatus,jdbcType=INTEGER},
+      pq_improve_title = #{record.pqImproveTitle,jdbcType=VARCHAR},
       create_time = #{record.createTime,jdbcType=BIGINT},
       update_time = #{record.updateTime,jdbcType=BIGINT},
       content = #{record.content,jdbcType=LONGVARCHAR},
-      ai_precision_result = #{record.aiPrecisionResult,jdbcType=LONGVARCHAR}
+      ai_precision_result = #{record.aiPrecisionResult,jdbcType=LONGVARCHAR},
+      pq_improve_narration_script = #{record.pqImproveNarrationScript,jdbcType=LONGVARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -395,7 +419,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     update spider_content
     set id = #{record.id,jdbcType=BIGINT},
@@ -408,6 +432,7 @@
       ai_rough_status = #{record.aiRoughStatus,jdbcType=INTEGER},
       ai_rough_result = #{record.aiRoughResult,jdbcType=VARCHAR},
       ai_precision_status = #{record.aiPrecisionStatus,jdbcType=INTEGER},
+      pq_improve_title = #{record.pqImproveTitle,jdbcType=VARCHAR},
       create_time = #{record.createTime,jdbcType=BIGINT},
       update_time = #{record.updateTime,jdbcType=BIGINT}
     <if test="_parameter != null">
@@ -418,7 +443,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     update spider_content
     <set>
@@ -449,6 +474,9 @@
       <if test="aiPrecisionStatus != null">
         ai_precision_status = #{aiPrecisionStatus,jdbcType=INTEGER},
       </if>
+      <if test="pqImproveTitle != null">
+        pq_improve_title = #{pqImproveTitle,jdbcType=VARCHAR},
+      </if>
       <if test="createTime != null">
         create_time = #{createTime,jdbcType=BIGINT},
       </if>
@@ -461,6 +489,9 @@
       <if test="aiPrecisionResult != null">
         ai_precision_result = #{aiPrecisionResult,jdbcType=LONGVARCHAR},
       </if>
+      <if test="pqImproveNarrationScript != null">
+        pq_improve_narration_script = #{pqImproveNarrationScript,jdbcType=LONGVARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -468,7 +499,7 @@
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     update spider_content
     set task_id = #{taskId,jdbcType=BIGINT},
@@ -480,17 +511,19 @@
       ai_rough_status = #{aiRoughStatus,jdbcType=INTEGER},
       ai_rough_result = #{aiRoughResult,jdbcType=VARCHAR},
       ai_precision_status = #{aiPrecisionStatus,jdbcType=INTEGER},
+      pq_improve_title = #{pqImproveTitle,jdbcType=VARCHAR},
       create_time = #{createTime,jdbcType=BIGINT},
       update_time = #{updateTime,jdbcType=BIGINT},
       content = #{content,jdbcType=LONGVARCHAR},
-      ai_precision_result = #{aiPrecisionResult,jdbcType=LONGVARCHAR}
+      ai_precision_result = #{aiPrecisionResult,jdbcType=LONGVARCHAR},
+      pq_improve_narration_script = #{pqImproveNarrationScript,jdbcType=LONGVARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
   <update id="updateByPrimaryKey" parameterType="com.tzld.supply.model.po.supply.spider.SpiderContent">
     <!--
       WARNING - @mbg.generated
       This element is automatically generated by MyBatis Generator, do not modify.
-      This element was generated on Thu Oct 16 20:21:22 CST 2025.
+      This element was generated on Tue Oct 21 17:07:41 CST 2025.
     -->
     update spider_content
     set task_id = #{taskId,jdbcType=BIGINT},
@@ -502,6 +535,7 @@
       ai_rough_status = #{aiRoughStatus,jdbcType=INTEGER},
       ai_rough_result = #{aiRoughResult,jdbcType=VARCHAR},
       ai_precision_status = #{aiPrecisionStatus,jdbcType=INTEGER},
+      pq_improve_title = #{pqImproveTitle,jdbcType=VARCHAR},
       create_time = #{createTime,jdbcType=BIGINT},
       update_time = #{updateTime,jdbcType=BIGINT}
     where id = #{id,jdbcType=BIGINT}

+ 12 - 0
server/src/main/java/com/tzld/supply/controller/XxlJobController.java

@@ -44,6 +44,18 @@ public class XxlJobController {
         return CommonResponse.success();
     }
 
+    @GetMapping("/contentTitleProduceJob")
+    public CommonResponse<Void> contentTitleProduceJob() {
+        contentScreenJob.contentTitleProduceJob(null);
+        return CommonResponse.success();
+    }
+
+    @GetMapping("/contentNarrationScriptProduceJob")
+    public CommonResponse<Void> contentNarrationScriptProduceJob() {
+        contentScreenJob.contentNarrationScriptProduceJob(null);
+        return CommonResponse.success();
+    }
+
     @GetMapping("/spiderContentFeishuJob")
     public CommonResponse<Void> spiderContentFeishuJob(String dateStr) {
         contentFeishuJob.spiderContentFeishuJob(dateStr);