This commit is contained in:
Leo
2025-04-04 17:03:32 +08:00
parent c64cd986f1
commit 3ef1b9b220

View File

@@ -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<String, String> 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<String, List<String>> messagesAll = generatePromotionContent(message);
List<String> 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<String, List<String>> finallMessage = new HashMap<>();
List<String> textList = new ArrayList<>();
List<String> imagesList = new ArrayList<>();
List<String> dataList = new ArrayList<>() ;
// 提取文案中的所有 u.jd.com 链接
List<String> 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<String, String> 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);