diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index f709894..8df9d32 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -6,6 +6,7 @@ import cn.van.business.model.jd.ProductOrder; import cn.van.business.repository.OrderRowRepository; import cn.van.business.repository.ProductOrderRepository; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.jd.open.api.sdk.DefaultJdClient; import com.jd.open.api.sdk.JdClient; @@ -89,6 +90,8 @@ public class JDUtil { // 添加ObjectMapper来序列化和反序列化UserInteractionState private final ObjectMapper objectMapper = new ObjectMapper(); + private HashMap cacheMap = new HashMap<>(); + // 构造函数中注入StringRedisTemplate @Autowired @@ -667,6 +670,8 @@ public class JDUtil { case PRODUCT_PROMOTION: if ("content".equals(state.getCurrentField())) { + cacheMap.remove("text"+fromWxid); + // 第一次输入文案,直接生成内容 HashMap> messagesAll = generatePromotionContent(message); List messages = messagesAll.get("text") ;// 不需要图片和SKU名称 @@ -678,7 +683,7 @@ public class JDUtil { wxUtil.sendImageMessage(fromWxid, s); } } - + cacheMap.put("text"+fromWxid,messagesAll.get("data").get(0)); // 询问是否需要继续转链 state.setCurrentField("confirm"); wxUtil.sendTextMessage(fromWxid, "是否需要开通礼金?\n回复 1 - 是\n回复 2 - 否", 1, fromWxid); @@ -686,11 +691,15 @@ public class JDUtil { } else if ("confirm".equals(state.getCurrentField())) { logger.info("转链流程 - 用户确认是否需要开通礼金:{}", message); if ("1".equals(message)) { - // 继续转链逻辑 - String transferredContent = transferContentWithLinks(message); - wxUtil.sendTextMessage(fromWxid, "开通礼金完成:\n" + transferredContent, 1, fromWxid); + state.setCurrentState(UserInteractionState.ProcessState.PRODUCT_PROMOTION); + state.setCurrentField("content"); + wxUtil.sendTextMessage(fromWxid, "请输入推广文案(包含商品链接):", 1, fromWxid); + logger.info("进入转链流程 - 文案输入步骤"); } else if ("2".equals(message)) { wxUtil.sendTextMessage(fromWxid, "开通礼金流程已取消", 1, fromWxid); + cacheMap.remove("text"+fromWxid); + + } else { wxUtil.sendTextMessage(fromWxid, "无效的选择,请重新输入:\n回复 1 - 是\n回复 2 - 否", 1, fromWxid); } @@ -744,11 +753,15 @@ public class JDUtil { // 新增礼金流程处理方法 private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractionState state) { + if (cacheMap.get("text"+fromWxid) != null){ + message = cacheMap.get("text"+fromWxid); + } if (state.getCurrentStep() == null) { state.setCurrentStep(STEP_PRODUCT_LINK); wxUtil.sendTextMessage(fromWxid, "流程异常,已重置。请输入商品链接:", 1, fromWxid); return; } + if ("礼金".equals(message)) { state.reset(); logger.debug("用户 {} 重置礼金流程", fromWxid); // 新增 @@ -762,10 +775,32 @@ public class JDUtil { String owner = "pop"; switch (state.getCurrentStep()) { case STEP_PRODUCT_LINK: - skuId = parseSkuFromUrl(message); + if (cacheMap.get("text"+fromWxid) != null) { + String data = cacheMap.get("text" + fromWxid); + JSONObject jsonObject = JSONObject.parseObject(data); + //"materialUrl": "jingfen.jd.com/detail/BsrqLq5CfIziE7BSl3ItPp8q_3DFaNVYJqfkRRLc7HR.html", + //"oriItemId": "BMrqLq5CfIz9X04KC3ItPp8q_3DFaNVYJqfkRRLc7HR", + //"owner": "g", + //"shopInfo": { + // "shopId": 1000001741, + // "shopLabel": "0", + // "shopLevel": 4.9, + // "shopName": "松下洗衣机京东自营旗舰店" + //}, + //"skuName": "松下(Panasonic)白月光4.0Ultra 洗烘套装 10kg滚筒洗衣机+变频热泵烘干机 除毛升级2.0 水氧SPA护理 8532N+8532NR", + //"spuid": 100137629936, + skuId = jsonObject.getString("materialUrl"); + String owner1 = jsonObject.getString("owner"); + if (owner1 != null && owner1.equals("g")){ + owner = "g"; + } + + }else { + skuId = parseSkuFromUrl(message); + } logger.debug("用户 {} 输入商品链接:{}, 解析出SKU: {}", fromWxid, message, skuId); // 新增 if (skuId == null) { - wxUtil.sendTextMessage(fromWxid, "❌ 商品链接格式错误,请重新输入", 1, fromWxid); + wxUtil.sendTextMessage(fromWxid, "商品链接格式错误,请重新输入", 1, fromWxid); return; } //BigfieldQueryResult queryResult = queryProductInfo(skuId); @@ -782,10 +817,10 @@ public class JDUtil { //state.getCollectedFields().put("owner", owner); // //logger.debug("商品信息已收集:SKU={}, Owner={}, WDIS={}", skuId, owner, productInfo.getBaseBigFieldInfo().getWdis()); // 新增 - String productInfo = skuId; + //String productInfo = skuId; state.getCollectedFields().put("skuId", skuId); state.setCurrentStep(STEP_AMOUNT); - String prompt = String.format("商品SKU:\n %s\n 请输入开通金额(元):", productInfo); + String prompt = "请输入开通金额(元):"; wxUtil.sendTextMessage(fromWxid, prompt, 1, fromWxid); break; @@ -793,12 +828,12 @@ public class JDUtil { logger.debug("用户 {} 输入金额:{}", fromWxid, message); // 强制检查空值 if (message == null || message.trim().isEmpty()) { - wxUtil.sendTextMessage(fromWxid, "❌ 金额不能为空,请输入数字(如:100.00)", 1, fromWxid); + wxUtil.sendTextMessage(fromWxid, "金额不能为空,请输入数字(如:100.00)", 1, fromWxid); return; } // 校验格式 if (!isValidAmount(message)) { - wxUtil.sendTextMessage(fromWxid, "❌ 金额格式错误,请输入数字(如:100.00)", 1, fromWxid); + wxUtil.sendTextMessage(fromWxid, "金额格式错误,请输入数字(如:100.00)", 1, fromWxid); return; } // 转换并保留两位小数 @@ -812,13 +847,13 @@ public class JDUtil { case STEP_QUANTITY: logger.debug("用户 {} 输入数量:{}", fromWxid, message); // 新增 if (!isValidQuantity(message)) { - wxUtil.sendTextMessage(fromWxid, "❌ 数量格式错误,请输入整数", 1, fromWxid); + wxUtil.sendTextMessage(fromWxid, "数量格式错误,请输入整数", 1, fromWxid); return; } int quantity = Integer.parseInt(message); if (quantity < 1 || quantity > 1000) { - wxUtil.sendTextMessage(fromWxid, "❌ 数量需在1-1000之间", 1, fromWxid); + wxUtil.sendTextMessage(fromWxid, "数量需在1-1000之间", 1, fromWxid); return; } @@ -856,6 +891,7 @@ public class JDUtil { HashMap> finallMessage = new HashMap<>(); List textList = new ArrayList<>(); List imagesList = new ArrayList<>(); + List dataList = new ArrayList<>() ; // 提取文案中的所有 u.jd.com 链接 List urls = extractUJDUrls(message); @@ -1134,6 +1170,8 @@ public class JDUtil { //}, //"skuName": "松下(Panasonic)白月光4.0Ultra 洗烘套装 10kg滚筒洗衣机+变频热泵烘干机 除毛升级2.0 水氧SPA护理 8532N+8532NR", //"spuid": 100137629936, + dataList.add(JSONObject.toJSONString(productInfo.getData()[0])); + HashMap itemMap = new HashMap<>(); itemMap.put("url", url); @@ -1321,7 +1359,7 @@ public class JDUtil { } // 设置默认值 - owner = (owner != null) ? owner : "自营"; + owner = (owner != null) ? owner : "g"; JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, LPF_APP_KEY_WZ, LPF_SECRET_KEY_WZ);