diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index 8363e9f..312a218 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -81,43 +81,25 @@ public class JDUtil { private static final Logger logger = LoggerFactory.getLogger(JDUtil.class); private static final String INTERACTION_STATE_PREFIX = "interaction_state:"; private static final long TIMEOUT_MINUTES = 1; - private static final String WENAN_FANAN = "提供方法自己下单\n" + - "全程都是自己的账号下单\n" + - "标价就是下单的到手价\n" + - "(不包含教程费)\n" + - "本人有耐心,会一步一步提供教程\n" + - "以后有什么质量问题都是用自己的账号走京东售后\n" + - "\n" + - "更新\n" + - "\n" + - "用你自己的账号下单\n" + - "官方店铺 提供方法自己下单\n" + - "不含教程费,价格不对不收费\n" + - "教程费用私聊我问价\n" + - "——————————————————————————————————————————\n" + - "同行可长久合作,可提供神级家电线报\n" + - "\n" + - "配合家电线报可以自己下单,不用找代购和代下,订单和利润都掌握在自己手中。\n" + - "\n" + - "一次入会永久使用,包含家电帮,雷神价,韭菜帮,河南&湖南帮,各种暗号帮后返等内部独家家电线报\n" + - "\n" + - "JD采销采购不定时发放独家优惠券\n" + - "\n" + - "基本上你能看到的京东家电低价都是从这些渠道里面出来。\n" + - "\n" + - "2025年家电项目新方向,配合家电线报下单,秒省1K+。"; - private static final String WENAN_ZCXS = "\n" + - "购买后,两小时内出库,物流会电话联系您,同时生成京东官方安装单。送装一体,无需担心。\n" + - "\n" + - "\n" + - "1:全新正品,原包装未拆封(京东商城代购,就近直发)\n" + - "2:可提供下单运单号与电子发票(发票在收到货后找我要)。\n" + - "3:收货时查看是否有质量或运损问题。可拍照让京东免费申请换新。\n" + - "4:下单后非质量问题不支持退款退货,强制退扣100元。\n" + - "5:价格有浮动,不支持补差价,谢谢理解。\n" + - "6:全国联保,全国统一安装标准。支持官方 400,服务号查询,假一赔十。\n"; - private static final String FANAN_COMMON = "\n复制到薇,依次领券,到J东APP结算\n" + - "换新选生活电器-除螨仪,可免回收\n"; + private static final String WENAN_FANAN = "提供方法自己下单\n" + "全程都是自己的账号下单\n" + "标价就是下单的到手价\n" + "(不包含教程费)\n" + "本人有耐心,会一步一步提供教程\n" + "以后有什么质量问题都是用自己的账号走京东售后\n" + "\n" + "更新\n" + "\n" + "用你自己的账号下单\n" + "官方店铺 提供方法自己下单\n" + "不含教程费,价格不对不收费\n" + "教程费用私聊我问价\n" + "——————————————————————————————————————————\n" + "同行可长久合作,可提供神级家电线报\n" + "\n" + "配合家电线报可以自己下单,不用找代购和代下,订单和利润都掌握在自己手中。\n" + "\n" + "一次入会永久使用,包含家电帮,雷神价,韭菜帮,河南&湖南帮,各种暗号帮后返等内部独家家电线报\n" + "\n" + "JD采销采购不定时发放独家优惠券\n" + "\n" + "基本上你能看到的京东家电低价都是从这些渠道里面出来。\n" + "\n" + "2025年家电项目新方向,配合家电线报下单,秒省1K+。"; + private static final String WENAN_ZCXS = "\n" + "购买后,两小时内出库,物流会电话联系您,同时生成京东官方安装单。送装一体,无需担心。\n" + "\n" + "\n" + "1:全新正品,原包装未拆封(京东商城代购,就近直发)\n" + "2:可提供下单运单号与电子发票(发票在收到货后找我要)。\n" + "3:收货时查看是否有质量或运损问题。可拍照让京东免费申请换新。\n" + "4:下单后非质量问题不支持退款退货,强制退扣100元。\n" + "5:价格有浮动,不支持补差价,谢谢理解。\n" + "6:全国联保,全国统一安装标准。支持官方 400,服务号查询,假一赔十。\n"; + private static final String FANAN_COMMON = "\n复制到薇,依次领券,到J东APP结算\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"; final WXUtil wxUtil; private final StringRedisTemplate redisTemplate; @@ -170,11 +152,7 @@ public class JDUtil { String address = matcher.group(4).trim(); // 构造新地址格式 - return String.format("%s 13068923963 %s联系客户%s转%s", - name, - address, - phone, - code); + return String.format("%s 13068923963 %s联系客户%s转%s", name, address, phone, code); } } catch (Exception ignored) { return "地址格式不匹配"; @@ -848,8 +826,7 @@ public class JDUtil { return; } // 记录成功日志 - logger.info("礼金创建成功 - 用户: {}, SKU: {}, 金额: {}, 数量: {}", - wxid, skuId, amount, quantity); + logger.info("礼金创建成功 - 用户: {}, SKU: {}, 金额: {}, 数量: {}", wxid, skuId, amount, quantity); // 生成转链 String transferUrl = transfer(skuId, giftKey); wxUtil.sendTextMessage(wxid, "附带礼金的链接:\n" + transferUrl, 1, wxid, false); @@ -908,9 +885,7 @@ public class JDUtil { // 6. 进入确认礼金步骤 state.setCurrentField("confirm"); - wxUtil.sendTextMessage(wxid, - "是否需要开通礼金?\n回复 1 - 是\n回复 2 - 否", - 1, wxid, false); + wxUtil.sendTextMessage(wxid, "是否需要开通礼金?\n回复 1 - 是\n回复 2 - 否", 1, wxid, false); } else { wxUtil.sendTextMessage(wxid, "未获取到商品数据,请检查链接格式", 1, wxid, false); state.reset(); @@ -937,10 +912,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, "请输入开通金额(1-50元,支持小数点后两位):\n" + "示例:20.50", 1, wxid, false); } else if ("2".equals(message)) { // 用户选择不开通礼金 @@ -952,12 +924,8 @@ public class JDUtil { String finalWenAn = cacheMap.get("finalWenAn" + wxid); finalWenAn = (finalWenAn.replace(productInfo.getString("url"), transferUrl)); - wxUtil.sendTextMessage(wxid, - "不开礼金,只转链的方案:\n", - 1, wxid, false); - wxUtil.sendTextMessage(wxid, - finalWenAn, - 1, wxid, true); + wxUtil.sendTextMessage(wxid, "不开礼金,只转链的方案:\n", 1, wxid, false); + wxUtil.sendTextMessage(wxid, finalWenAn, 1, wxid, true); } else { wxUtil.sendTextMessage(wxid, "未找到商品信息,请重新开始流程", 1, wxid, false); } @@ -968,11 +936,7 @@ public class JDUtil { } else { // 无效输入 - wxUtil.sendTextMessage(wxid, - "请输入有效选项:\n" + - "回复 1 - 开通礼金\n" + - "回复 2 - 直接转链", - 1, wxid, false); + wxUtil.sendTextMessage(wxid, "请输入有效选项:\n" + "回复 1 - 开通礼金\n" + "回复 2 - 直接转链", 1, wxid, false); } } catch (Exception e) { logger.error("处理礼金确认异常 - 用户: {}", wxid, e); @@ -1448,8 +1412,7 @@ public class JDUtil { //for (HashMap.Entry entry : itemMap.entrySet()) { //couponInfo.append(" ").append(entry.getKey()).append(": ").append(entry.getValue()).append("\n"); //} - couponInfo.append(" ").append("店铺:\n").append(itemMap.get("shopName")).append("\n").append(" 标题:\n").append(replaceAll).append("\n").append("自营 POP:\n").append(itemMap.get("owner").equals("g") ? " 自营 " : " POP ") - .append("\n 佣金:\n").append(itemMap.get("commission")).append("\n").append("佣金比例:\n").append(itemMap.get("commissionShare")); + couponInfo.append(" ").append("店铺:\n").append(itemMap.get("shopName")).append("\n").append(" 标题:\n").append(replaceAll).append("\n").append("自营 POP:\n").append(itemMap.get("owner").equals("g") ? " 自营 " : " POP ").append("\n 佣金:\n").append(itemMap.get("commission")).append("\n").append("佣金比例:\n").append(itemMap.get("commissionShare")); //StringBuilder images = new StringBuilder(); @@ -1583,8 +1546,7 @@ public class JDUtil { } // 在JDUtil类中新增方法实现商品详情查询接口 - public UnionOpenGoodsBigfieldQueryResponse getUnionOpenGoodsBigfieldQueryResponse(String skuId) throws - Exception { + public UnionOpenGoodsBigfieldQueryResponse getUnionOpenGoodsBigfieldQueryResponse(String skuId) throws Exception { JdClient client = new DefaultJdClient(SERVER_URL, ACCESS_TOKEN, LPF_APP_KEY_WZ, LPF_SECRET_KEY_WZ); UnionOpenGoodsBigfieldQueryRequest request = new UnionOpenGoodsBigfieldQueryRequest(); @@ -1758,6 +1720,39 @@ public class JDUtil { return JSON.parseObject(json, UserInteractionState.class); } +public void sendOrderToWxByOrderD(String order, String fromWxid) { + String temp = WENAN_D; + // 今天的日期 + String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String redisKey = "order_count:" + today; + Integer count = 1; + + try { + // 从 Redis 获取当前日期的订单计数器 + String s = redisTemplate.opsForValue().get(redisKey); + if (s != null) { + count = Integer.parseInt(s) + 1; // 递增计数器 + } + + // 将新的计数器值保存回 Redis + redisTemplate.opsForValue().set(redisKey, String.valueOf(count), 1, TimeUnit.DAYS); + + // 生成订单号 + String orderID = today + String.format("%03d", count); // 格式化为 3 位数字,不足补零 + + // 替换模板中的占位符 + temp = temp.replace("{单号}", orderID); + + // 发送订单信息到微信 + wxUtil.sendTextMessage(fromWxid, temp, 1, fromWxid, false); + + } catch (Exception e) { + logger.error("生成订单号时发生异常 - 用户: {}, 日期: {}", fromWxid, today, e); + wxUtil.sendTextMessage(fromWxid, "生成订单号时发生异常,请重试", 1, fromWxid, false); + } +} + + // 定义一个内部类来存储用户交互状态 @Getter @Setter diff --git a/src/main/java/cn/van/business/util/WxMessageConsumer.java b/src/main/java/cn/van/business/util/WxMessageConsumer.java index d50c0ba..64ee799 100644 --- a/src/main/java/cn/van/business/util/WxMessageConsumer.java +++ b/src/main/java/cn/van/business/util/WxMessageConsumer.java @@ -250,6 +250,11 @@ public class WxMessageConsumer { jdUtils.sendOrderToWxByOrderPDD(msg.replace("拼", ""), fromWxid); return; } + if (msg.startsWith("单")) { + logger.info("消息以单开头,处理拼多多指令消息"); + jdUtils.sendOrderToWxByOrderD(msg.replace("单", ""), fromWxid); + return; + } logger.info("未命中前置指令,开始命中 Default 流程"); jdUtils.sendOrderToWxByOrderDefault(msg, fromWxid); }