菜单优化

This commit is contained in:
雷欧(林平凡)
2025-03-13 17:14:08 +08:00
parent f936baea47
commit d2393d7fe2
6 changed files with 177 additions and 228 deletions

View File

@@ -43,6 +43,7 @@ import java.util.stream.Stream;
import static cn.van.business.util.JDUtil.UserInteractionState.GiftMoneyStep.*;
import static cn.van.business.util.JDUtil.UserInteractionState.ProcessState.*;
import static cn.van.business.util.JDUtil.UserInteractionState.ProductOrderStep.*;
import static cn.van.business.util.WXUtil.super_admins;
/**
@@ -1241,6 +1242,117 @@ public class JDUtil {
// 实现实际的开通接口调用
return true;
}
public void handleProductOrderRegistration(String fromWxid, String message, UserInteractionState state) {
switch (state.getCurrentProductOrderStep()) {
case STEP_ORDER_ID:
if (!message.matches("^\\d{10,20}$")) {
wxUtil.sendTextMessage(fromWxid, "⚠️ 订单号格式错误需10-20位数字", 1, fromWxid);
return;
}
state.getCollectedFields().put("orderId", message);
state.setCurrentProductOrderStep(STEP_PRODUCT_INFO);
wxUtil.sendTextMessage(fromWxid,
"请输入商品信息(格式:商品名称-类型编号)\n类型对照1-家电 2-数码 3-服饰\n示例格力空调-1", 1, fromWxid);
break;
case STEP_PRODUCT_INFO:
String[] productInfo = message.split("-");
if (productInfo.length != 2 || !productInfo[1].matches("[1-3]")) {
wxUtil.sendTextMessage(fromWxid, "❌ 格式错误或类型编号无效", 1, fromWxid);
return;
}
state.getCollectedFields().put("skuName", productInfo[0]);
state.getCollectedFields().put("skuType", productInfo[1]);
state.setCurrentProductOrderStep(UserInteractionState.ProductOrderStep.STEP_RECIPIENT_INFO);
wxUtil.sendTextMessage(fromWxid,
"请输入收件信息(格式:姓名-电话-地址)\n示例张三-13812345678-北京市朝阳区", 1, fromWxid);
break;
case STEP_RECIPIENT_INFO:
String[] recipientInfo = message.split("-");
if (recipientInfo.length < 3) {
wxUtil.sendTextMessage(fromWxid, "❌ 格式错误,请按示例格式输入", 1, fromWxid);
return;
}
state.getCollectedFields().put("recipientName", recipientInfo[0]);
state.getCollectedFields().put("recipientPhone", recipientInfo[1]);
state.getCollectedFields().put("recipientAddress", String.join("-", Arrays.copyOfRange(recipientInfo, 2, recipientInfo.length)));
// 生成确认信息
String confirmMsg = buildConfirmMessage(state);
wxUtil.sendTextMessage(fromWxid, confirmMsg, 1, fromWxid);
state.setCurrentProductOrderStep(STEP_REVIEW_CONFIRM);
break;
case STEP_REVIEW_CONFIRM:
if ("确认".equals(message)) {
boolean success = saveFullProductOrder(state, fromWxid);
wxUtil.sendTextMessage(fromWxid,
success ? "✅ 订单登记成功!" : "❌ 保存失败,请联系管理员", 1, fromWxid);
state.reset();
} else {
state.setCurrentProductOrderStep(STEP_ORDER_ID);
wxUtil.sendTextMessage(fromWxid, "请重新输入订单号:", 1, fromWxid);
}
break;
}
}
// 构建确认信息模板
private String buildConfirmMessage(UserInteractionState state) {
return "📋 请确认登记信息:\n" +
"────────────────\n" +
"▪ 订单号:" + state.getCollectedFields().get("orderId") + "\n" +
"▪ 商品名称:" + state.getCollectedFields().get("skuName") + "\n" +
"▪ 商品类型:" + getTypeDesc(state.getCollectedFields().get("skuType")) + "\n" +
"▪ 收件人:" + state.getCollectedFields().get("recipientName") + "\n" +
"▪ 联系方式:" + state.getCollectedFields().get("recipientPhone") + "\n" +
"▪ 收货地址:" + state.getCollectedFields().get("recipientAddress") + "\n" +
"────────────────\n" +
"回复【确认】提交,其他内容重新开始";
}
// 保存完整订单
private boolean saveFullProductOrder(UserInteractionState state, String fromWxid) {
try {
ProductOrder order = new ProductOrder();
order.setOrderId(state.getCollectedFields().get("orderId"));
order.setSkuName(state.getCollectedFields().get("skuName"));
order.setSkuType(Integer.valueOf(state.getCollectedFields().get("skuType")));
order.setRecipientName(state.getCollectedFields().get("recipientName"));
order.setRecipientPhone(state.getCollectedFields().get("recipientPhone"));
order.setRecipientAddress(state.getCollectedFields().get("recipientAddress"));
order.setOrderTime(new Date()); // 设置下单时间为当前时间
order.setWhoOrder(state.getCollectedFields().get("recipientName")); // 关联管理员信息
order.setIsReviewed(false); // 默认是否晒图登记
order.setIsCashbackReceived(false); // 默认是否返现到账
order.setFromWxid(fromWxid); // 设置当前交互的wxid
productOrderRepository.save(order);
logger.info("订单登记成功:{}", order);
return true;
} catch (Exception e) {
logger.error("订单保存异常:{}", e.getMessage());
return false;
}
}
// 获取商品类型描述
private String getTypeDesc(String skuType) {
switch (skuType) {
case "1":
return "家电";
case "2":
return "数码";
case "3":
return "服饰";
default:
return "未知类型";
}
}
// 定义一个内部类来存储用户交互状态
@Getter
@@ -1248,19 +1360,27 @@ public class JDUtil {
static class UserInteractionState {
// 推荐使用枚举管理状态
public enum ProcessState {
INIT, GIFT_MONEY_FLOW, DISINFECTANT_CABINET
INIT, GIFT_MONEY_FLOW, DISINFECTANT_CABINET,PRODUCT_ORDER_REGISTRATION
}
public enum GiftMoneyStep {
STEP_PRODUCT_LINK, STEP_AMOUNT, STEP_QUANTITY
}
// 在UserInteractionState类中新增步骤枚举
public enum ProductOrderStep {
STEP_ORDER_ID,
STEP_PRODUCT_INFO,
STEP_RECIPIENT_INFO,
STEP_REVIEW_CONFIRM,
STEP_CASHBACK_TRACK
}
private GiftMoneyStep currentStep; // 新增当前步骤字段
private String lastInteractionTime;
private ProcessState currentState;
private Map<String, String> collectedFields; // 用于存储收集到的字段值
private String currentField; // 当前正在询问的字段
private ProductOrderStep currentProductOrderStep;
public UserInteractionState() {
this.lastInteractionTime = LocalDateTime.now().format(DATE_TIME_FORMATTER);