This commit is contained in:
雷欧(林平凡)
2025-03-20 17:35:03 +08:00
parent cbd7e7d26c
commit 4109622e42

View File

@@ -671,6 +671,7 @@ private StringBuilder buildStatsContent(String title, OrderStats stats) {
private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractionState state) { private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractionState state) {
if ("礼金".equals(message)) { if ("礼金".equals(message)) {
state.reset(); state.reset();
logger.debug("用户 {} 重置礼金流程", fromWxid); // 新增
wxUtil.sendTextMessage(fromWxid, "流程已重置,请重新开始", 1, fromWxid); wxUtil.sendTextMessage(fromWxid, "流程已重置,请重新开始", 1, fromWxid);
return; return;
} }
@@ -678,31 +679,27 @@ private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractio
try { try {
switch (state.getCurrentStep()) { switch (state.getCurrentStep()) {
case STEP_PRODUCT_LINK: case STEP_PRODUCT_LINK:
// 解析商品链接获取SKU
String skuId = parseSkuFromUrl(message); String skuId = parseSkuFromUrl(message);
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 bigfieldQueryResult = queryProductInfo(skuId); logger.debug("商品ID {} 查询结果:{}", skuId, queryResult); // 新增
if (queryResult == null) {
if (bigfieldQueryResult == null ) {
wxUtil.sendTextMessage(fromWxid, "⚠️ 商品信息查询失败,可能链接无效", 1, fromWxid); wxUtil.sendTextMessage(fromWxid, "⚠️ 商品信息查询失败,可能链接无效", 1, fromWxid);
return; return;
} }
BigFieldGoodsResp[] data = bigfieldQueryResult.getData(); BigFieldGoodsResp productInfo = queryResult.getData()[0];
BigFieldGoodsResp productInfo = data[0];
//g=自营p=pop
String owner = productInfo.getOwner(); String owner = productInfo.getOwner();
state.getCollectedFields().put("skuId", skuId); state.getCollectedFields().put("skuId", skuId);
state.getCollectedFields().put("productInfo", productInfo.getBaseBigFieldInfo().getWdis()); state.getCollectedFields().put("productInfo", productInfo.getBaseBigFieldInfo().getWdis());
state.getCollectedFields().put("owner", owner); state.getCollectedFields().put("owner", owner);
logger.debug("商品信息已收集SKU={}, Owner={}, WDIS={}", skuId, owner, productInfo.getBaseBigFieldInfo().getWdis()); // 新增
state.setCurrentStep(STEP_AMOUNT); state.setCurrentStep(STEP_AMOUNT);
String prompt = String.format("商品信息:\n%s请输入开通金额", String prompt = String.format("商品信息:\n%s请输入开通金额",
productInfo); productInfo);
@@ -710,13 +707,14 @@ private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractio
break; break;
case STEP_AMOUNT: case STEP_AMOUNT:
logger.debug("用户 {} 输入金额:{}", fromWxid, message); // 新增
if (!isValidAmount(message)) { if (!isValidAmount(message)) {
wxUtil.sendTextMessage(fromWxid, "❌ 金额格式错误请输入数字100.00", 1, fromWxid); wxUtil.sendTextMessage(fromWxid, "❌ 金额格式错误请输入数字100.00", 1, fromWxid);
return; return;
} }
// 校验金额是否符合京东接口要求
double amount = Double.parseDouble(message); double amount = Double.parseDouble(message);
logger.debug("校验金额:{} 元商品价格的80%{}", amount, 0.8 * Double.parseDouble(state.getCollectedFields().get("price"))); // 新增
if (amount < 1 || amount > 0.8 * Double.parseDouble(state.getCollectedFields().get("price"))) { if (amount < 1 || amount > 0.8 * Double.parseDouble(state.getCollectedFields().get("price"))) {
wxUtil.sendTextMessage(fromWxid, "❌ 金额需≥1元且≤商品价格的80%", 1, fromWxid); wxUtil.sendTextMessage(fromWxid, "❌ 金额需≥1元且≤商品价格的80%", 1, fromWxid);
return; return;
@@ -724,10 +722,10 @@ private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractio
state.getCollectedFields().put("amount", String.valueOf(amount)); state.getCollectedFields().put("amount", String.valueOf(amount));
state.setCurrentStep(STEP_QUANTITY); state.setCurrentStep(STEP_QUANTITY);
wxUtil.sendTextMessage(fromWxid, "请输入开通数量1-1000", 1, fromWxid);
break; break;
case STEP_QUANTITY: case STEP_QUANTITY:
logger.debug("用户 {} 输入数量:{}", fromWxid, message); // 新增
if (!isValidQuantity(message)) { if (!isValidQuantity(message)) {
wxUtil.sendTextMessage(fromWxid, "❌ 数量格式错误,请输入整数", 1, fromWxid); wxUtil.sendTextMessage(fromWxid, "❌ 数量格式错误,请输入整数", 1, fromWxid);
return; return;
@@ -739,31 +737,28 @@ private void handleGiftMoneyFlow(String fromWxid, String message, UserInteractio
return; return;
} }
state.getCollectedFields().put("quantity", String.valueOf(quantity)); logger.debug("礼金参数准备完成SKU={},金额={}元,数量={}Owner={}",
state.getCollectedFields().get("skuId"),
// 调用礼金创建接口 amount,
skuId = state.getCollectedFields().get("skuId"); quantity,
amount = Double.parseDouble(state.getCollectedFields().get("amount")); state.getCollectedFields().get("owner")); // 新增
quantity = Integer.parseInt(state.getCollectedFields().get("quantity"));
owner = state.getCollectedFields().get("owner");
String giftKey = createGiftCoupon(skuId, amount, quantity, owner); String giftKey = createGiftCoupon(skuId, amount, quantity, owner);
if (giftKey == null) { if (giftKey == null) {
logger.error("用户 {} 礼金创建失败SKU={}, 金额={}, 数量={}, Owner={}",
fromWxid, skuId, amount, quantity, owner); // 新增
wxUtil.sendTextMessage(fromWxid, "❌ 礼金创建失败,请检查商品是否符合要求", 1, fromWxid); wxUtil.sendTextMessage(fromWxid, "❌ 礼金创建失败,请检查商品是否符合要求", 1, fromWxid);
state.reset(); state.reset();
return; return;
} }
// 保存礼金批次ID到用户状态 logger.info("用户 {} 礼金创建成功批次ID={}, 参数SKU={}, 金额={}元,数量={}, Owner={}",
fromWxid, giftKey, skuId, amount, quantity, owner); // 新增关键成功日志
state.getCollectedFields().put("giftKey", giftKey); state.getCollectedFields().put("giftKey", giftKey);
// 返回成功信息
wxUtil.sendTextMessage(fromWxid, "✅ 礼金创建成功!\n批次ID" + giftKey, 1, fromWxid);
state.reset();
break; break;
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("礼金流程异常", e); logger.error("礼金流程异常,用户 {} 当前步骤:{}", fromWxid, state.getCurrentStep(), e); // 新增
wxUtil.sendTextMessage(fromWxid, "❌ 系统异常,请稍后重试", 1, fromWxid); wxUtil.sendTextMessage(fromWxid, "❌ 系统异常,请稍后重试", 1, fromWxid);
state.reset(); state.reset();
} }
@@ -813,6 +808,9 @@ public BigfieldQueryResult queryProductInfo(String skuId) throws Exception {
// 新增礼金创建方法 // 新增礼金创建方法
public String createGiftCoupon(String skuId, double amount, int quantity,String owner) throws Exception { public String createGiftCoupon(String skuId, double amount, int quantity,String owner) throws Exception {
logger.debug("准备创建礼金SKU={}, 金额={}元,数量={}, Owner={}", skuId, amount, quantity, owner); // 新增
JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, LPF_APP_KEY_WZ, LPF_APP_KEY_WZ); JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, LPF_APP_KEY_WZ, LPF_APP_KEY_WZ);
UnionOpenCouponGiftGetRequest request = new UnionOpenCouponGiftGetRequest(); UnionOpenCouponGiftGetRequest request = new UnionOpenCouponGiftGetRequest();
@@ -845,9 +843,17 @@ public String createGiftCoupon(String skuId, double amount, int quantity,String
request.setSignmethod("md5"); request.setSignmethod("md5");
request.setTimestamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); request.setTimestamp(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
logger.debug("请求参数:{}", request); // 新增
UnionOpenCouponGiftGetResponse response = client.execute(request); UnionOpenCouponGiftGetResponse response = client.execute(request);
logger.debug("API响应{}", response); // 新增
if ("200".equals(response.getCode())) { if ("200".equals(response.getCode())) {
return response.getGetResult().getData().getGiftCouponKey(); String giftKey = response.getGetResult().getData().getGiftCouponKey();
logger.debug("礼金创建成功批次ID={}, 返回数据:{}", giftKey, response.getGetResult().getData()); // 新增
return giftKey;
} else {
logger.error("礼金创建失败:错误码={}, 错误信息={}", response.getCode(), response.getMsg()); // 新增
} }
return null; return null;
} }