1
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user