From 2335361160b08c52528b2ff15a4aa469ccc83a71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=92?= Date: Wed, 5 Nov 2025 21:39:28 +0800 Subject: [PATCH] 1 --- .../service/impl/InstructionServiceImpl.java | 49 ++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java index cf6b318..bddc7de 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/InstructionServiceImpl.java @@ -938,10 +938,15 @@ private String handleTF(String input) { .append("\n") .append(fullAddress.toString()); - return generateOrderText(sheng.toString()); + // 传递第三方单号给 generateOrderText + return generateOrderText(sheng.toString(), thirdPartyOrderNo); } private String generateOrderText(String shengInput) { + return generateOrderText(shengInput, null); + } + + private String generateOrderText(String shengInput, String providedThirdPartyOrderNo) { String[] split = shengInput.split("\n"); // 第一行可能是 生 或 生{备注} String head = split[0].trim(); @@ -957,20 +962,22 @@ private String handleTF(String input) { String address = split[5].trim(); // 第一重判断:从分销标记中提取订单编号进行去重(如 JY202510093195) - if (stringRedisTemplate != null) { - String orderNumber = extractOrderNumber(fenxiao); - if (orderNumber != null && !orderNumber.isEmpty()) { - String orderNumberKey = "order_number:" + orderNumber; - String existedOrderNumber = stringRedisTemplate.opsForValue().get(orderNumberKey); - if (existedOrderNumber != null) { - String warn = "[炸弹] [炸弹] [炸弹] 此订单编号(" + orderNumber + ")已经存在,请勿重复生成订单 [炸弹] [炸弹] [炸弹] "; - StringBuilder warnOut = new StringBuilder(); - warnOut.append(warn).append("\n"); - return warnOut.toString().trim(); - } - // 记录订单编号,24小时过期 - stringRedisTemplate.opsForValue().set(orderNumberKey, orderNumber, 1, TimeUnit.DAYS); + // 如果提供了第三方单号,也用于去重判断 + String orderNumberForDedup = providedThirdPartyOrderNo; + if (orderNumberForDedup == null || orderNumberForDedup.isEmpty()) { + orderNumberForDedup = extractOrderNumber(fenxiao); + } + if (stringRedisTemplate != null && orderNumberForDedup != null && !orderNumberForDedup.isEmpty()) { + String orderNumberKey = "order_number:" + orderNumberForDedup; + String existedOrderNumber = stringRedisTemplate.opsForValue().get(orderNumberKey); + if (existedOrderNumber != null) { + String warn = "[炸弹] [炸弹] [炸弹] 此订单编号(" + orderNumberForDedup + ")已经存在,请勿重复生成订单 [炸弹] [炸弹] [炸弹] "; + StringBuilder warnOut = new StringBuilder(); + warnOut.append(warn).append("\n"); + return warnOut.toString().trim(); } + // 记录订单编号,24小时过期 + stringRedisTemplate.opsForValue().set(orderNumberKey, orderNumberForDedup, 1, TimeUnit.DAYS); } // 第二重判断:地址 24 小时去重校验(白名单放行) @@ -1023,8 +1030,11 @@ private String handleTF(String input) { } } - // 从分销标记中提取第三方单号 - String thirdPartyOrderNo = extractOrderNumber(fenxiao); + // 优先使用提供的第三方单号,如果没有则从分销标记中提取 + String thirdPartyOrderNo = providedThirdPartyOrderNo; + if (thirdPartyOrderNo == null || thirdPartyOrderNo.isEmpty()) { + thirdPartyOrderNo = extractOrderNumber(fenxiao); + } String thirdPartyOrderNoValue = (thirdPartyOrderNo != null && !thirdPartyOrderNo.isEmpty()) ? thirdPartyOrderNo : ""; for (int i = 0; i < total; i++) { @@ -1331,11 +1341,16 @@ private String handleTF(String input) { // 优先从字段中获取第三方单号,如果没有则从分销标记中提取 String thirdPartyOrderNo = fields.getOrDefault("第三方单号", null); - if (thirdPartyOrderNo == null || thirdPartyOrderNo.trim().isEmpty()) { + if (thirdPartyOrderNo != null) { + // 清理换行符和空白字符 + thirdPartyOrderNo = thirdPartyOrderNo.replaceAll("\\s+", "").trim(); + } + if (thirdPartyOrderNo == null || thirdPartyOrderNo.isEmpty()) { if (distributionMark != null && !distributionMark.isEmpty()) { thirdPartyOrderNo = extractOrderNumber(distributionMark); } } + // 保存第三方单号到订单对象 order.setThirdPartyOrderNo(thirdPartyOrderNo != null && !thirdPartyOrderNo.trim().isEmpty() ? thirdPartyOrderNo.trim() : null); order.setModelNumber(fields.getOrDefault("型号", null)); order.setLink(fields.getOrDefault("链接", null));