From 43e44c8f7fb4ae1e977d7ed68ca13b12e4101bee Mon Sep 17 00:00:00 2001 From: van Date: Sat, 4 Apr 2026 17:20:33 +0800 Subject: [PATCH] 1 --- .../service/impl/SocialMediaServiceImpl.java | 66 +++++++++++++++++-- 1 file changed, 60 insertions(+), 6 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/SocialMediaServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/SocialMediaServiceImpl.java index 0081e75..39af679 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/SocialMediaServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/SocialMediaServiceImpl.java @@ -83,6 +83,58 @@ public class SocialMediaServiceImpl implements ISocialMediaService /** 标题/型号清洗:去掉营销敏感词 */ private static final String DEFAULT_XIANYU_TITLE_CLEAN_REGEX = "以旧|政府|换新|领取|国家|补贴|15%|20%|国补|立减|【|】"; + /** + * Redis 无记录时与 Jarvis_java SocialMediaService 使用的默认模板一致,供接口回显到前端参考。 + */ + private static final Map DEFAULT_PROMPT_TEMPLATES = new HashMap() {{ + put("keywords", + "请从以下商品标题中提取3-5个最核心的关键词,这些关键词要能突出商品的核心卖点和特色。\n" + + "要求:\n" + + "1. 每个关键词2-4个字\n" + + "2. 关键词要能吸引小红书/抖音用户\n" + + "3. 用逗号分隔,只返回关键词,不要其他内容\n" + + "商品标题:%s"); + put("content:xhs", + "请为小红书平台生成一篇商品推广文案,要求:\n" + + "1. 风格:真实、种草、有温度\n" + + "2. 开头:用emoji或感叹句吸引注意\n" + + "3. 内容:突出商品亮点、使用场景、性价比\n" + + "4. 结尾:引导行动(如:快冲、闭眼入等)\n" + + "5. 长度:150-300字\n" + + "6. 适当使用emoji和换行\n" + + "\n商品信息:\n" + + "商品名称:%s\n" + + "%s" + + "%s" + + "\n请直接生成文案内容,不要添加其他说明:"); + put("content:douyin", + "请为抖音平台生成一篇商品推广文案,要求:\n" + + "1. 风格:直接、有冲击力、吸引眼球\n" + + "2. 开头:用疑问句或对比句抓住注意力\n" + + "3. 内容:强调价格优势、限时优惠、稀缺性\n" + + "4. 结尾:制造紧迫感,引导立即行动\n" + + "5. 长度:100-200字\n" + + "6. 使用短句,节奏感强\n" + + "\n商品信息:\n" + + "商品名称:%s\n" + + "%s" + + "%s" + + "\n请直接生成文案内容,不要添加其他说明:"); + put("content:both", + "请生成一篇适合小红书和抖音平台的商品推广文案,要求:\n" + + "1. 风格:真实、有吸引力\n" + + "2. 突出商品亮点和价格优势\n" + + "3. 长度:150-250字\n" + + "\n商品信息:\n" + + "商品名称:%s\n" + + "%s" + + "%s" + + "\n请直接生成文案内容,不要添加其他说明:"); + put("xianyu:wenan_base", DEFAULT_XIANYU_WENAN_BASE); + put("xianyu:jiaonixiadan_extra", DEFAULT_XIANYU_JIAONIXIADAN_EXTRA); + put("xianyu:title_clean_regex", DEFAULT_XIANYU_TITLE_CLEAN_REGEX); + }}; + /** * 提取商品标题关键词 */ @@ -296,9 +348,10 @@ public class SocialMediaServiceImpl implements ISocialMediaService templateInfo.put("key", key); templateInfo.put("description", TEMPLATE_DESCRIPTIONS.get(key)); - String template = getTemplateFromRedis(key); - templateInfo.put("template", template); - templateInfo.put("isDefault", template == null); + String stored = getTemplateFromRedis(key); + boolean isDefault = StringUtils.isEmpty(stored); + templateInfo.put("template", isDefault ? DEFAULT_PROMPT_TEMPLATES.getOrDefault(key, "") : stored); + templateInfo.put("isDefault", isDefault); templates.put(key, templateInfo); } @@ -320,12 +373,13 @@ public class SocialMediaServiceImpl implements ISocialMediaService return AjaxResult.error("无效的模板键名"); } - String template = getTemplateFromRedis(key); + String stored = getTemplateFromRedis(key); + boolean isDefault = StringUtils.isEmpty(stored); Map data = new HashMap<>(); data.put("key", key); data.put("description", TEMPLATE_DESCRIPTIONS.get(key)); - data.put("template", template); - data.put("isDefault", template == null); + data.put("template", isDefault ? DEFAULT_PROMPT_TEMPLATES.getOrDefault(key, "") : stored); + data.put("isDefault", isDefault); return AjaxResult.success(data); } catch (Exception e) {