diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java
index d146744..217e929 100644
--- a/src/main/java/cn/van/business/util/JDUtil.java
+++ b/src/main/java/cn/van/business/util/JDUtil.java
@@ -4,6 +4,7 @@ package cn.van.business.util;
import cn.van.business.model.jd.OrderRow;
import cn.van.business.repository.OrderRowRepository;
import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jd.open.api.sdk.DefaultJdClient;
@@ -13,8 +14,12 @@ import com.jd.open.api.sdk.domain.kplunion.GoodsService.request.query.GoodsReq;
import com.jd.open.api.sdk.domain.kplunion.GoodsService.response.query.GoodsQueryResult;
import com.jd.open.api.sdk.domain.kplunion.GoodsService.response.query.UrlInfo;
import com.jd.open.api.sdk.domain.kplunion.promotionbysubunioni.PromotionService.request.get.PromotionCodeReq;
-import com.jd.open.api.sdk.request.kplunion.*;
-import com.jd.open.api.sdk.response.kplunion.*;
+import com.jd.open.api.sdk.request.kplunion.UnionOpenCouponGiftGetRequest;
+import com.jd.open.api.sdk.request.kplunion.UnionOpenGoodsQueryRequest;
+import com.jd.open.api.sdk.request.kplunion.UnionOpenPromotionBysubunionidGetRequest;
+import com.jd.open.api.sdk.response.kplunion.UnionOpenCouponGiftGetResponse;
+import com.jd.open.api.sdk.response.kplunion.UnionOpenGoodsQueryResponse;
+import com.jd.open.api.sdk.response.kplunion.UnionOpenPromotionBysubunionidGetResponse;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
@@ -42,7 +47,8 @@ import java.util.stream.Stream;
import static cn.van.business.util.JDUtil.UserInteractionState.GiftMoneyStep.*;
import static cn.van.business.util.JDUtil.UserInteractionState.ProcessState.INIT;
-import static cn.van.business.util.WXUtil.*;
+import static cn.van.business.util.WXUtil.chatRoom_BY;
+import static cn.van.business.util.WXUtil.getSuperAdmins;
/**
* @author Leo
@@ -90,7 +96,7 @@ public class JDUtil {
*
* 订单号:
*/
- private static final String WENAN_D = "单:\n" + "{单号} \n" + "分销标记(标记用,勿改):\n" + "型号:\n" +"\n" +"链接:\n" +"\n" + "下单付款:\n" + "\n" + "后返金额:\n" + "\n" + "地址:\n" + "\n" + "物流链接:\n" + "\n" + "订单号:\n" + "\n" + "下单人:\n" + "\n" ;
+ private static final String WENAN_D = "单:\n" + "{单号} \n" + "分销标记(标记用,勿改):\n" + "型号:\n" + "\n" + "链接:\n" + "\n" + "下单付款:\n" + "\n" + "后返金额:\n" + "\n" + "地址:\n" + "\n" + "物流链接:\n" + "\n" + "订单号:\n" + "\n" + "下单人:\n" + "\n";
final WXUtil wxUtil;
private final StringRedisTemplate redisTemplate;
@@ -733,7 +739,7 @@ public class JDUtil {
default:
state.setCurrentStep(STEP_AMOUNT);
- wxUtil.sendTextMessage(wxid, "请输入金额(1-50元):", 1, wxid, false);
+ wxUtil.sendTextMessage(wxid, "[Packet] 请输入金额(1-50元):", 1, wxid, false);
}
}
@@ -753,45 +759,70 @@ public class JDUtil {
wxUtil.sendTextMessage(wxid, "数量格式错误,请输入1-100的整数", 1, wxid, false);
return;
}
- String cachedData = cacheMap.get("productData" + wxid);
+
+ // 从缓存获取商品数据
+
+ String productDataJson = cacheMap.get("productData" + wxid);
+
String finalWenAn = cacheMap.get("finalWenAn" + wxid);
- if (cachedData == null) {
+
+ if (productDataJson == null || finalWenAn == null) {
+ logger.error("数据丢失 - productData: {}, finalWenAn: {}",
+ productDataJson != null, finalWenAn != null);
wxUtil.sendTextMessage(wxid, "数据丢失,请重新开始流程", 1, wxid, false);
resetState(wxid, state);
return;
}
try {
- JSONObject jsonObject = JSON.parseObject(cachedData);
- String skuId = jsonObject.getString("materialUrl");
- String owner = jsonObject.getString("owner");
- String skuName = jsonObject.getString("skuName");
+ // 解析商品数据
+ /**
+ * // 取出来的每一个String都是JSONObject
+ * List data = contentResult.get("data");
+ * JSONArray jsonObjectArr = new JSONArray(data);
+ *
+ *
+ * cacheMap.put("productData" + wxid, jsonObjectArr.toJSONString());*/
+ List productList = JSON.parseArray(productDataJson, String.class);
double amount = Double.parseDouble(state.getCollectedFields().get("amount"));
int quantity = Integer.parseInt(message);
- String giftKey = createGiftCoupon(skuId, amount, quantity, owner, skuName);
- if (giftKey == null) {
- wxUtil.sendTextMessage(wxid, "礼金创建失败,请重试", 1, wxid, false);
- return;
+ StringBuilder result = new StringBuilder();
+ String updatedContent = finalWenAn;
+
+ for (String productJSONString : productList) {
+ // 序列化好了的
+ JSONObject product = JSON.parseObject(productJSONString);
+ String skuId = product.getString("materialUrl");
+ String owner = product.getString("owner");
+ String skuName = product.getString("skuName");
+ String originalUrl = product.getString("url");
+
+ String giftKey = createGiftCoupon(skuId, amount, quantity, owner, skuName);
+ if (giftKey == null) {
+ result.append(" ").append(skuName).append(" 礼金创建失败\n");
+ continue;
+ }
+
+ String transferUrl = transfer(skuId, giftKey);
+ if (transferUrl != null) {
+ updatedContent = updatedContent.replace(originalUrl, transferUrl);
+ result.append(" ").append(skuName).append(" 礼金创建成功\n");
+ } else {
+ result.append(" ").append(skuName).append(" 转链失败\n");
+ }
}
- // 记录成功日志
- logger.info("礼金创建成功 - 用户: {}, SKU: {}, 金额: {}, 数量: {}", wxid, skuId, amount, quantity);
- // 生成转链
- String transferUrl = transfer(skuId, giftKey);
- //wxUtil.sendTextMessage(wxid, "附带礼金的链接:\n" + transferUrl, 1, wxid, false);
- //wxUtil.sendTextMessage(wxid, "附带礼金的方案:\n", 1, wxid, false);
-
- wxUtil.sendTextMessage(wxid, finalWenAn.replaceAll(jsonObject.getString("url"), transferUrl), 1, wxid, true);
+ wxUtil.sendTextMessage(wxid, result.toString(), 1, wxid, false);
+ wxUtil.sendTextMessage(wxid, updatedContent, 1, wxid, true);
} catch (Exception e) {
- logger.error("礼金处理异常 - 用户: {}", wxid, e);
- wxUtil.sendTextMessage(wxid, "处理异常,请重试", 1, wxid, false);
+ logger.error("礼金处理异常", e);
+ wxUtil.sendTextMessage(wxid, "处理异常:" + e.getMessage(), 1, wxid, false);
} finally {
resetState(wxid, state);
- cacheMap.remove("text" + wxid);
+ cacheMap.remove("productData" + wxid);
cacheMap.remove("finalWenAn" + wxid);
-
}
}
@@ -828,13 +859,19 @@ public class JDUtil {
// 5. 缓存商品数据
if (!contentResult.get("data").isEmpty()) {
- String productData = contentResult.get("data").get(0);
- cacheMap.put("productData" + wxid, productData);
+ // 取出来的每一个String都是JSONObject
+ List data = contentResult.get("data");
+ JSONArray jsonObjectArr = new JSONArray(data);
+
+
+ cacheMap.put("productData" + wxid, jsonObjectArr.toJSONString());
cacheMap.put("finalWenAn" + wxid, contentResult.get("finalWenAn").get(0));
- // 6. 进入确认礼金步骤
state.setCurrentField("confirm");
- wxUtil.sendTextMessage(wxid, "是否需要开通礼金?\n回复 1 - 是\n回复 2 - 否", 1, wxid, false);
+ wxUtil.sendTextMessage(wxid,
+ "检测到" + jsonObjectArr.size() + "个商品\n" +
+ "是否需要开通礼金?\n回复 1 - 是\n回复 2 - 否",
+ 1, wxid, false);
} else {
wxUtil.sendTextMessage(wxid, "未获取到商品数据,请检查链接格式", 1, wxid, false);
state.reset();
@@ -861,8 +898,7 @@ public class JDUtil {
state.setCurrentStep(UserInteractionState.GiftMoneyStep.STEP_AMOUNT);
state.getCollectedFields().clear();
- wxUtil.sendTextMessage(wxid, "请输入开通金额(1-50元,支持小数点后两位):\n" + "示例:20.50", 1, wxid, false);
-
+ wxUtil.sendTextMessage(wxid, "当前选择" + state.getSelectedSkuIds().size() + "个商品\n" + "请输入开通金额(1-50元,支持小数点后两位):\n" + "示例:20.50", 1, wxid, false);
} else if ("2".equals(message)) {
// 用户选择不开通礼金
String cachedData = cacheMap.get("productData" + wxid);
@@ -1178,22 +1214,9 @@ public class JDUtil {
couponInfo.append("链接类型:优惠券\n");
} else {
couponInfo.append("链接类型:商品\n");
-
- //"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,
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(productInfo.getData()[0]));
jsonObject.put("url", url);
- dataList.add(JSONObject.toJSONString(jsonObject));
- finallMessage.put("data", dataList);
+ dataList.add(jsonObject.toString());
HashMap itemMap = new HashMap<>();
itemMap.put("url", url);
@@ -1238,6 +1261,7 @@ public class JDUtil {
textList.add(String.valueOf(sb2));
}
textList.add(String.valueOf(couponInfo));
+ finallMessage.put("data", dataList);
} catch (Exception e) {
@@ -1459,7 +1483,7 @@ public class JDUtil {
String orderID = today + String.format("%03d", count); // 格式化为 3 位数字,不足补零
// 替换模板中的占位符
- temp = temp.replace("{单号}", orderID );
+ temp = temp.replace("{单号}", orderID);
// 发送订单信息到微信
wxUtil.sendTextMessage(fromWxid, temp, 1, fromWxid, true);
@@ -1475,6 +1499,8 @@ public class JDUtil {
@Getter
@Setter
static class UserInteractionState {
+ private List selectedSkuIds; // 新增字段,存储多个商品SKU ID
+ private List selectedSkuNames; // 新增字段,存储多个商品名称
private GiftMoneyStep currentStep; // 新增当前步骤字段
private String lastInteractionTime;
private ProcessState currentState;
@@ -1487,6 +1513,8 @@ public class JDUtil {
this.currentState = INIT;
this.collectedFields = new HashMap<>();
this.currentField = null;
+ this.selectedSkuIds = new ArrayList<>();
+ this.selectedSkuNames = new ArrayList<>();
}
diff --git a/src/main/java/cn/van/business/util/WXUtil.java b/src/main/java/cn/van/business/util/WXUtil.java
index 1788b23..d68ab4b 100644
--- a/src/main/java/cn/van/business/util/WXUtil.java
+++ b/src/main/java/cn/van/business/util/WXUtil.java
@@ -151,10 +151,10 @@ public class WXUtil {
jdidToWxidMap.put(admin6.getUnionId(), admin6.getWxid());
jdidToRemarkMap.put(admin6.getUnionId(), admin6.getName());
- //SuperAdmin admin7 = new SuperAdmin("wxid_ytpc72mdoskt22", "燕敏", "2033493067", "", "");
- //super_admins.put(admin7.getWxid() + admin7.getUnionId(), admin7);
- //jdidToWxidMap.put(admin7.getUnionId(), admin7.getWxid());
- //jdidToRemarkMap.put(admin7.getUnionId(), admin7.getName());
+ SuperAdmin admin7 = new SuperAdmin("wxid_ytpc72mdoskt22", "燕敏", "2033493067", "66618e24a5e9f44156253c4eb9892388", "15846e2334934482a703417d5058f842");
+ super_admins.put(admin7.getWxid() + admin7.getUnionId(), admin7);
+ jdidToWxidMap.put(admin7.getUnionId(), admin7.getWxid());
+ jdidToRemarkMap.put(admin7.getUnionId(), admin7.getName());