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 e8d0cc6..22f32ef 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 @@ -1130,8 +1130,10 @@ private String handleTF(String input) { // ===== “单 …” 写库 ===== private String handleDanWriteDb(String input) { + // 保存原始输入,用于返回前端时保留完整物流链接 + String originalInput = input.trim().replace("元", ""); // 与 JDUtil.parseOrderFromText 一致的模板字段 - JDOrder order = parseOrderFromText(input.trim().replace("元", "")); + JDOrder order = parseOrderFromText(originalInput); // 字段校验并返回缺失项 StringBuilder missing = new StringBuilder(); @@ -1226,8 +1228,8 @@ private String handleTF(String input) { jdOrderService.insertJDOrder(order); } - // 返回完整的表单格式 - return formatOrderForm(order); + // 返回完整的表单格式,使用原始输入保留完整物流链接 + return formatOrderForm(order, originalInput); } private boolean isEmpty(String s) { @@ -1236,10 +1238,15 @@ private String handleTF(String input) { /** * 格式化订单为完整表单格式 + * @param order 订单对象 + * @param originalInput 原始输入文本,用于提取完整的物流链接 */ - private String formatOrderForm(JDOrder order) { + private String formatOrderForm(JDOrder order, String originalInput) { StringBuilder sb = new StringBuilder(); + // 从原始输入中提取完整的物流链接 + String originalLogisticsLink = extractOriginalLogisticsLink(originalInput); + sb.append("单:\n"); sb.append(order.getRemark() != null ? order.getRemark() : "").append("\n"); sb.append("备注:").append(order.getStatus() != null ? order.getStatus() : "").append("\n"); @@ -1256,7 +1263,8 @@ private String handleTF(String input) { sb.append("地址:\n"); sb.append(order.getAddress() != null ? order.getAddress() : "").append("\n"); sb.append("物流链接:\n"); - sb.append(order.getLogisticsLink() != null ? order.getLogisticsLink() : "").append("\n"); + // 使用原始输入的完整物流链接,如果没有则使用数据库中的值 + sb.append(originalLogisticsLink != null ? originalLogisticsLink : (order.getLogisticsLink() != null ? order.getLogisticsLink() : "")).append("\n"); sb.append("订单号:\n"); sb.append(order.getOrderId() != null ? order.getOrderId() : "").append("\n"); sb.append("下单人:\n"); @@ -1266,6 +1274,24 @@ private String handleTF(String input) { return sb.toString(); } + + /** + * 从原始输入中提取完整的物流链接文本(不做清理) + */ + private String extractOriginalLogisticsLink(String input) { + if (input == null || input.isEmpty()) { + return null; + } + // 提取"物流链接:"到"订单号:"之间的完整内容 + java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("物流链接:\\s*(.*?)\\s*(?=订单号:|\\Z)", java.util.regex.Pattern.DOTALL); + java.util.regex.Matcher matcher = pattern.matcher(input); + if (matcher.find()) { + String logisticsLink = matcher.group(1).trim(); + // 如果为空,返回null + return logisticsLink.isEmpty() ? null : logisticsLink; + } + return null; + } // 参照 JDUtil.parseOrderFromText private JDOrder parseOrderFromText(String input) { @@ -1364,16 +1390,8 @@ private String handleTF(String input) { } catch (Exception ignore) { } order.setAddress(fields.getOrDefault("地址", null)); - // 保留完整的物流链接,不做清理 - String logisticsLink = fields.getOrDefault("物流链接", null); - if (logisticsLink != null) { - logisticsLink = logisticsLink.trim(); - // 如果为空字符串,设置为null - if (logisticsLink.isEmpty()) { - logisticsLink = null; - } - } - order.setLogisticsLink(logisticsLink); + // 写入数据库时清理物流链接,只保留URL + order.setLogisticsLink(extractFirstUrl(fields.getOrDefault("物流链接", ""))); order.setOrderId(fields.getOrDefault("订单号", null)); order.setBuyer(fields.getOrDefault("下单人", null)); // 京粉实际价格不从表单解析,而是从数据库order_rows表中查询获取