From 4407487fbf68fbecd0e6803b8ae5196d16ac022f Mon Sep 17 00:00:00 2001 From: van Date: Wed, 11 Mar 2026 21:25:58 +0800 Subject: [PATCH] 1 --- .../jarvis/SocialMediaController.java | 21 ++++++++ .../jarvis/service/ISocialMediaService.java | 9 ++++ .../service/impl/SocialMediaServiceImpl.java | 52 +++++++++++++++++++ 3 files changed, 82 insertions(+) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/SocialMediaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/SocialMediaController.java index 1eafe4d..247e52c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/SocialMediaController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/jarvis/SocialMediaController.java @@ -155,5 +155,26 @@ public class SocialMediaController extends BaseController return AjaxResult.error("删除失败: " + e.getMessage()); } } + + /** + * 闲鱼文案(手动):根据标题+可选型号生成代下单、教你下单文案,不依赖JD接口 + */ + @Log(title = "闲鱼文案(手动)生成", businessType = BusinessType.OTHER) + @PostMapping("/xianyu-wenan/generate") + public AjaxResult generateXianyuWenan(@RequestBody Map request) + { + try { + String title = (String) request.get("title"); + String remark = (String) request.get("remark"); + Map result = socialMediaService.generateXianyuWenan(title, remark); + if (Boolean.TRUE.equals(result.get("success"))) { + return AjaxResult.success(result); + } + return AjaxResult.error((String) result.get("error")); + } catch (Exception e) { + logger.error("闲鱼文案生成失败", e); + return AjaxResult.error("生成失败: " + e.getMessage()); + } + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ISocialMediaService.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ISocialMediaService.java index 23d76cb..d00b3e0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ISocialMediaService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/ISocialMediaService.java @@ -63,5 +63,14 @@ public interface ISocialMediaService * 删除提示词模板(恢复默认) */ com.ruoyi.common.core.domain.AjaxResult deletePromptTemplate(String key); + + /** + * 根据标题(+可选型号备注)生成闲鱼文案(代下单、教你下单),不依赖JD接口 + * + * @param title 商品标题(必填) + * @param remark 型号/备注(可选) + * @return 包含代下单、教你下单两种文案的 Map + */ + Map generateXianyuWenan(String title, String remark); } 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 79114e7..cdbf706 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 @@ -52,6 +52,23 @@ public class SocialMediaServiceImpl implements ISocialMediaService put("content:both", "通用文案生成提示词模板\n占位符:%s - 商品名称,%s - 价格信息,%s - 关键词信息"); }}; + /** 闲鱼文案-代下单(一键代下)固定正文 */ + private static final String WENAN_ZCXS = + "\n\n 购买后,两小时内出库,物流会电话联系您,同时生成京东官方安装单。送装一体,无需担心。\n\n\n" + + " 1:全新正品,原包装未拆封(京东商城代购,就近直发)\n" + + " 2:可提供下单运单号与电子发票(发票在收到货后找我要)。\n" + + " 3:收货时查看是否有质量或运损问题。可拍照让京东免费申请换新。\n" + + " 4:价格有浮动,不支持补差价,谢谢理解。\n" + + " 5:全国联保,全国统一安装标准。支持官方 400,服务号查询,假一赔十。\n "; + /** 闲鱼文案-教你下单固定正文(含“信息更新日期:”占位,生成时替换为当前日期) */ + private static final String WENAN_FANAN_BX = "本人提供免费指导下单服务,一台也是团购价,细心指导\n" + "\n" + + "【质量】官旗下单,包正的\n" + "【物流】您自己账户可跟踪,24小时发货\n" + "【售后】您自己账户直接联系,无忧售后\n" + + "【安装】专业人员安装,全程无需您操心\n" + "【价格】标价就是到手价,骑共享单车去酒吧,该省省该花花\n" + + "【服务】手把手教您下单,有问题随时咨询\n" + "【体验】所有服务都是官旗提供,价格有内部渠道优惠,同品质更优惠!\n" + "\n" + + "信息更新日期:\n" + "\n" + "捡漏价格不定时有变动,优惠不等人,发「省份+型号」免费咨询当日最低价!"; + /** 标题/型号清洗:去掉营销敏感词 */ + private static final String TITLE_CLEAN_REGEX = "以旧|政府|换新|领取|国家|补贴|15%|20%|国补|立减|【|】"; + /** * 提取商品标题关键词 */ @@ -418,5 +435,40 @@ public class SocialMediaServiceImpl implements ISocialMediaService return null; } } + + /** + * 根据标题(+可选型号备注)生成闲鱼文案(代下单、教你下单),不依赖JD接口 + */ + @Override + public Map generateXianyuWenan(String title, String remark) { + Map result = new HashMap<>(); + if (StringUtils.isEmpty(title) || StringUtils.isEmpty(title.trim())) { + result.put("success", false); + result.put("error", "商品标题不能为空"); + return result; + } + String cleanTitle = cleanTitleOrRemark(title.trim()); + String cleanRemark = StringUtils.isNotEmpty(remark) ? cleanTitleOrRemark(remark.trim()) : ""; + String displayTitle = cleanTitle + cleanRemark; + + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒"); + String format = sdf.format(new java.util.Date()); + String wenanJiaonixiadan = WENAN_FANAN_BX.replace("信息更新日期:", "信息更新日期:" + format); + + result.put("success", true); + result.put("daixiadan", "(一键代下) " + displayTitle + "\n" + WENAN_ZCXS); + result.put("jiaonixiadan", "【教你下单】 " + displayTitle + "\n" + wenanJiaonixiadan); + return result; + } + + /** + * 清洗标题/型号中的敏感词 + */ + private static String cleanTitleOrRemark(String text) { + if (text == null) { + return ""; + } + return text.replaceAll(TITLE_CLEAN_REGEX, ""); + } }