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 03a28eb..2b73298 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 @@ -97,7 +97,7 @@ public class InstructionServiceImpl implements IInstructionService { @Override public List execute(String command, boolean forceGenerate, boolean isFromConsole, String wecomUserId) { - // 存储接收的消息到Redis队列ALTER TABLE jd_order ADD COLUMN waybill_no VARCHAR(128) DEFAULT NULL COMMENT '物流运单号(手工填写或扫描回写)' AFTER logistics_link; + // 存储接收的消息到Redis队列 storeMessageToRedis("instruction:request", command); @@ -1582,8 +1582,10 @@ public class InstructionServiceImpl implements IInstructionService { return warn; } - // 订单号重复校验(控制台入口跳过此校验,允许管理员更新单号) - if (!isFromConsole && !isEmpty(order.getOrderId())) { + boolean placeholderJdOrderId = isPlaceholderJdOrderId(order); + + // 订单号重复校验(控制台入口跳过;填物流单号时京东单号「1」允许重复) + if (!isFromConsole && !isEmpty(order.getOrderId()) && !placeholderJdOrderId) { JDOrder existingByOrderId = jdOrderService.selectJDOrderByOrderId(order.getOrderId()); if (existingByOrderId != null) { // 如果是更新同一条记录(remark相同),则不提示重复 @@ -1645,8 +1647,8 @@ public class InstructionServiceImpl implements IInstructionService { } } - // 验证1:如果查询不到对应订单,提示用户(控制台入口跳过此校验) - if (!isFromConsole && (isEmpty(order.getOrderId()) || orderRow == null)) { + // 验证1:如果查询不到对应订单,提示用户(控制台入口跳过;占位京东单号「1」跳过) + if (!isFromConsole && !placeholderJdOrderId && (isEmpty(order.getOrderId()) || orderRow == null)) { String warn = "[炸弹] [炸弹] [炸弹] 录单警告!!! \n查询不到对应订单(使用红包 或者 转链),请五分钟后再试,或重新下单"; return warn; } @@ -1668,7 +1670,8 @@ public class InstructionServiceImpl implements IInstructionService { JDOrder exists = null; // 如果订单号不为空,优先根据订单号查找已存在的订单(用于刷新数据) - if (!isEmpty(order.getOrderId())) { + // 占位「1」会有多条,不能按订单号更新,否则会覆盖第一单 + if (!isEmpty(order.getOrderId()) && !placeholderJdOrderId) { exists = jdOrderService.selectJDOrderByOrderId(order.getOrderId()); if (exists != null) { // 根据订单号找到已存在的订单,更新该订单(刷新数据) @@ -1770,6 +1773,19 @@ public class InstructionServiceImpl implements IInstructionService { return s == null || s.isEmpty(); } + /** + * 无物流链接、只填物流单号时,京东单号「1」为占位:允许重复,且不按该单号更新已有订单。 + */ + private boolean isPlaceholderJdOrderId(JDOrder order) { + if (order == null || isEmpty(order.getOrderId()) || isEmpty(order.getWaybillNo())) { + return false; + } + if (!isEmpty(order.getLogisticsLink())) { + return false; + } + return "1".equals(order.getOrderId().trim()); + } + /** * 格式化订单为完整表单格式 * @param order 订单对象