From 1579e570ebe17cfdc6cb1432101b2950e3137439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E6=AC=A7=EF=BC=88=E6=9E=97=E5=B9=B3=E5=87=A1?= =?UTF-8?q?=EF=BC=89?= Date: Wed, 11 Jun 2025 15:04:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=95=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/van/business/util/JDUtil.java | 110 ++++++++++++++++-- 1 file changed, 103 insertions(+), 7 deletions(-) diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index 5b27024..030d808 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -1707,7 +1707,7 @@ public class JDUtil { return; } - if (order == null || order.trim().isEmpty()) { + if (order.trim().isEmpty()) { wxUtil.sendTextMessage(fromWxid, "输入格式为:\n 单\n分销标记\n型号\n转链链接\n数量\n地址", 1, fromWxid, false); return; } @@ -1723,7 +1723,7 @@ public class JDUtil { // 今天的日期 String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd ")); String redisKey = "order_count:" + today; - Integer count; + int count; try { // 从 Redis 获取当前日期的订单计数器 @@ -1732,9 +1732,9 @@ public class JDUtil { logger.info("sendOrderToWxByOrderD.count beforeFor {}", count); - Integer num = 1; + int num = 1; try { - num = Integer.valueOf(split[4].trim()); + num = Integer.parseInt(split[4].trim()); } catch (NumberFormatException e) { logger.error("sendOrderToWxByOrderD 订单数量格式错误,请输入正确的数字", e); wxUtil.sendTextMessage(fromWxid, "订单数量格式错误,请输入正确的数字", 1, fromWxid, false); @@ -2070,10 +2070,10 @@ public class JDUtil { * @return 解析出的 LocalDate 对象,如果没有带日期则返回 null */ private LocalDate parseUserDateIfPresent(String input) { - if ((input.startsWith("慢单")|| input.startsWith("录单")) && !input.startsWith("单")) { - logger.info("开始解析用户输入的日期 {}", input); + if ((input.startsWith("慢单") || input.startsWith("录单")) && !input.startsWith("单")) { + logger.info("开始解析用户输入的日期 {}", input); String dateStr = input.replaceAll("慢单|录单", "").trim(); - logger.info("解析出的日期 {}", dateStr); + logger.info("解析出的日期 {}", dateStr); if (!dateStr.isEmpty()) { return getDateFromLD(dateStr); } @@ -2291,10 +2291,106 @@ public class JDUtil { order.append("单").append("\n").append("H-TF").append("\n").append(modelNumber).append("\n").append(" ").append("\n").append(quantityStr).append("\n").append(address); sendOrderToWxByOrderD(order.toString(), fromWxid); } + } else if (input.startsWith("H")) { + /* + * 示例输入: + * 陆霭杰[9130] + * 19592469028 + * 广东省 广州市 从化区 太平镇康乐东路苏宁易购 (送前电联13922281001)[9130] 115-12lcs + * 提取出: + * 型号:115-12lcs + * 陆霭杰13068923963广东省 广州市 从化区 太平镇康乐东路苏宁易购 (送前电联13922281001)派送安装联系19592469028转9130 + */ + // 按换行符切割输入为数组 + String[] parts = input.replace("H", "").split("\n"); + if (parts.length < 3) { + wxUtil.sendTextMessage(fromWxid, "输入格式不正确,请确保包含三行数据", 1, fromWxid, false); + return; + } + + // 第一行:姓名 + 编号 + String nameLine = parts[0].trim(); // 如:陆霭杰[9130] + + // 使用正则表达式提取中文字符作为收件人姓名 + Pattern namePattern = Pattern.compile("[\\u4E00-\\u9FA5]+"); + Matcher nameMatcher = namePattern.matcher(nameLine); + String name = "13068923963"; + if (nameMatcher.find()) { + name = nameMatcher.group() + name; + } + + // 提取编号 [9130] + String suffix = ""; + int suffixStart = nameLine.indexOf('['); + int suffixEnd = nameLine.indexOf(']'); + if (suffixStart != -1 && suffixEnd != -1 && suffixEnd > suffixStart) { + suffix = nameLine.substring(suffixStart + 1, suffixEnd); // 获取 [] 中的内容 + } + + // 第二行:电话号码 + String phone = parts[1].trim(); // 如:19592469028 + + // 第三行:地址 + 型号 + String addressLine = parts[2].trim(); // 如:广东省 广州市 ... [9130] 115-12lcs + + // 使用正则表达式提取中文字符作为地址主体 + StringBuilder addressBuilder = new StringBuilder(); + Pattern pattern = Pattern.compile("[\\u4E00-\\u9FA5]+"); + Matcher matcher = pattern.matcher(addressLine); + + if (matcher.find()) { + addressBuilder.append(matcher.group()); + } + + for (int i = 3; i < parts.length; i++) { + addressBuilder.append(parts[i]); + } + + // 提取型号(最后一组非中文字符) + String modelNumber = ""; + String[] addressParts = addressLine.split("\\s+"); + for (String part : addressParts) { + if (!part.matches(".*[\u4E00-\u9FA5].*")) { // 不含中文的字段可能是型号 + modelNumber = part; + } + } + + // 清理掉地址中的编号 [9130] 和型号部分 + String cleanedAddress = addressLine.replaceAll("\\$$.*?\$$", "") // 去除 [] + .replace(modelNumber, "") // 去除型号 + .replaceAll("\\s+", " ").trim(); + + // 拼接“安装派送联系”字段 + String deliveryInfo = " 安装派送联系" + phone + "转" + suffix; + + // 最终地址 + String fullAddress = cleanedAddress + deliveryInfo; + + // 构造最终输出 + StringBuilder order = new StringBuilder(); + //单 + //分销标记 + //型号 + //转链链接 + //数量 + //地址 + // 分销标记 + // 型号 + // 转链链接 + // 默认数量为1 + order.append("单\n") + .append("H\n") // 分销标记 + .append(modelNumber).append("\n") // 型号 + .append("\n") // 转链链接 + .append("1\n").append(name).append(fullAddress); // 地址+联系信息 + + // 发送给微信 + sendOrderToWxByOrderD(order.toString(), fromWxid); } + }