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