From 435cfc1c3c23d9c98715a9b55e7c027d41991188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=92?= Date: Wed, 27 Aug 2025 20:36:28 +0800 Subject: [PATCH] 1 --- .../ruoyi/jarvis/mapper/JDOrderMapper.java | 8 ++ .../ruoyi/jarvis/service/IJDOrderService.java | 12 ++ .../service/impl/InstructionServiceImpl.java | 121 +++++++++++++++++- .../service/impl/JDOrderServiceImpl.java | 20 +++ .../resources/mapper/jarvis/JDOrderMapper.xml | 44 +++++++ 5 files changed, 203 insertions(+), 2 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/JDOrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/JDOrderMapper.java index f67a4c0..9547f89 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/JDOrderMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/mapper/JDOrderMapper.java @@ -17,6 +17,14 @@ public interface JDOrderMapper { * 根据主键查询 */ JDOrder selectJDOrderById(Long id); + + int insertJDOrder(JDOrder jdOrder); + + int updateJDOrder(JDOrder jdOrder); + + JDOrder selectJDOrderByRemark(String remark); + + List selectJDOrderListByAddress(String address); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IJDOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IJDOrderService.java index a766cdc..20c00e9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IJDOrderService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/IJDOrderService.java @@ -16,6 +16,18 @@ public interface IJDOrderService { * 按ID查询 */ JDOrder selectJDOrderById(Long id); + + /** 新增 */ + int insertJDOrder(JDOrder jdOrder); + + /** 更新 */ + int updateJDOrder(JDOrder jdOrder); + + /** 按 remark 查单(单号) */ + JDOrder selectJDOrderByRemark(String remark); + + /** 按地址倒序查询全部 */ + java.util.List selectJDOrderListByAddress(String address); } 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 e1a660c..14544f0 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 @@ -185,9 +185,8 @@ public class InstructionServiceImpl implements IInstructionService { } return sb.toString(); } - // 单… 的解析/入库在 jd 工程内较复杂,这里仅返回模板校验结果 if (input.startsWith("单")) { - return "录单模板校验暂未开放(仅支持 慢搜/慢查、录单/慢单 查询)"; + return handleDanWriteDb(input); } return helpText(); } @@ -395,6 +394,124 @@ public class InstructionServiceImpl implements IInstructionService { return s.replaceAll("[\\t ]+", " ").replaceAll("\n{3,}", "\n\n").trim(); } + // ===== “单 …” 写库 ===== + private String handleDanWriteDb(String input) { + // 与 JDUtil.parseOrderFromText 一致的模板字段 + JDOrder order = parseOrderFromText(input.trim().replace("元", "")); + + // 字段校验并返回缺失项 + StringBuilder missing = new StringBuilder(); + if (isEmpty(order.getOrderId())) missing.append("单号\n"); + if (isEmpty(order.getBuyer())) missing.append("下单人\n"); + if (order.getPaymentAmount() == null || order.getPaymentAmount() == 0) missing.append("下单价格\n"); + if (order.getRebateAmount() == null) missing.append("后返金额\n"); + if (isEmpty(order.getLogisticsLink())) missing.append("物流链接\n"); + if (isEmpty(order.getAddress())) missing.append("收货地址\n"); + if (isEmpty(order.getModelNumber())) missing.append("型号\n"); + if (missing.length() > 0) { + String warn = "[炸弹] [炸弹] [炸弹] 录单警告!!! \n缺少表单字段 \n" + missing; + return warn; + } + + // 地址重复提示(不阻断写入,与 JDUtil 提示一致) + List byAddress = jdOrderService.selectJDOrderListByAddress(order.getAddress()); + if (byAddress != null && !byAddress.isEmpty()) { + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String latest = sdf.format(byAddress.get(0).getOrderTime()); + // 仅提示 + } + + // 按 remark 判断新增/更新 + JDOrder exists = jdOrderService.selectJDOrderByRemark(order.getRemark()); + String info; + if (exists != null) { + order.setId(exists.getId()); + jdOrderService.updateJDOrder(order); + info = "更新成功"; + } else { + jdOrderService.insertJDOrder(order); + info = "新增成功"; + } + + StringBuilder sb = new StringBuilder(); + String distributionMark2 = ""; + if (!isEmpty(order.getDistributionMark())) { + if (order.getDistributionMark().startsWith("H")) distributionMark2 = "鸿"; + else if (order.getDistributionMark().startsWith("F")) distributionMark2 = "凡"; + } + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd"); + sb.append(order.getRemark()).append('\t') + .append(order.getOrderId()).append('\t') + .append(sdf.format(order.getOrderTime())).append('\t') + .append(order.getModelNumber()).append('\t') + .append(order.getAddress()).append('\t') + .append(order.getLogisticsLink()).append('\t') + .append('\t').append(order.getBuyer()).append('\t') + .append(nvl(order.getPaymentAmount())).append('\t') + .append(nvl(order.getRebateAmount())).append('\t') + .append(distributionMark2); + + return info + "\n" + sb; + } + + private boolean isEmpty(String s) { return s == null || s.isEmpty(); } + + // 参照 JDUtil.parseOrderFromText + private JDOrder parseOrderFromText(String input) { + input = input.replaceAll("\\s+", " ").trim(); + Map fields = new HashMap<>(); + extractField(input, fields, "单:", "备注:"); + extractField(input, fields, "备注:", "分销标记:"); + extractField(input, fields, "分销标记:", "型号:"); + extractField(input, fields, "型号:", "链接:"); + extractField(input, fields, "链接:", "下单付款:"); + extractField(input, fields, "下单付款:", "后返金额:"); + extractField(input, fields, "后返金额:", "地址:"); + extractField(input, fields, "地址:", "物流链接:"); + extractField(input, fields, "物流链接:", "订单号:"); + extractField(input, fields, "订单号:", "下单人:"); + java.util.regex.Pattern buyerPattern = java.util.regex.Pattern.compile("下单人:\\s*(.*?)\\s*(?=单:|\\Z)", java.util.regex.Pattern.DOTALL); + java.util.regex.Matcher buyerMatcher = buyerPattern.matcher(input); + if (buyerMatcher.find()) { + fields.put("下单人", buyerMatcher.group(1).trim()); + } + + JDOrder order = new JDOrder(); + order.setRemark(fields.getOrDefault("单", null)); + order.setDistributionMark(fields.getOrDefault("分销标记", null)); + order.setModelNumber(fields.getOrDefault("型号", null)); + order.setLink(fields.getOrDefault("链接", null)); + order.setStatus(fields.getOrDefault("备注", null)); + try { order.setPaymentAmount(Double.parseDouble(fields.getOrDefault("下单付款", "0"))); } catch (Exception ignore) {} + try { order.setRebateAmount(Double.parseDouble(fields.getOrDefault("后返金额", "0"))); } catch (Exception ignore) {} + order.setAddress(fields.getOrDefault("地址", null)); + order.setLogisticsLink(extractFirstUrl(fields.getOrDefault("物流链接", ""))); + order.setOrderId(fields.getOrDefault("订单号", null)); + order.setBuyer(fields.getOrDefault("下单人", null)); + try { + String dateStr = fields.getOrDefault("单", "").split(" ")[0]; + java.text.SimpleDateFormat sdf2 = new java.text.SimpleDateFormat("yyyy-MM-dd"); + order.setOrderTime(sdf2.parse(dateStr)); + } catch (Exception e) { order.setOrderTime(new Date()); } + return order; + } + + private void extractField(String input, Map map, String startKeyword, String endKeyword) { + java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(startKeyword + "\\s*(.*?)\\s*(?=" + endKeyword + "|\\Z)", java.util.regex.Pattern.DOTALL); + java.util.regex.Matcher matcher = pattern.matcher(input); + if (matcher.find()) { + String value = matcher.group(1).trim().replaceAll("^" + startKeyword, "").trim(); + map.put(startKeyword.replace(":", ""), value); + } + } + + private String extractFirstUrl(String text) { + if (text == null || text.isEmpty()) return null; + java.util.regex.Pattern urlPattern = java.util.regex.Pattern.compile("(https?://[^\\s]+)"); + java.util.regex.Matcher matcher = urlPattern.matcher(text); + return matcher.find() ? matcher.group(0) : null; + } + private String handleTransferLike(String input) { // 前端仍复用已有 /jarvis/jdorder/generatePromotionContent 接口,这里仅提供一个回显占位 return "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)"; diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderServiceImpl.java index fc0b19d..19e4ac9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/JDOrderServiceImpl.java @@ -23,6 +23,26 @@ public class JDOrderServiceImpl implements IJDOrderService { public JDOrder selectJDOrderById(Long id) { return jdOrderMapper.selectJDOrderById(id); } + + @Override + public int insertJDOrder(JDOrder jdOrder) { + return jdOrderMapper.insertJDOrder(jdOrder); + } + + @Override + public int updateJDOrder(JDOrder jdOrder) { + return jdOrderMapper.updateJDOrder(jdOrder); + } + + @Override + public JDOrder selectJDOrderByRemark(String remark) { + return jdOrderMapper.selectJDOrderByRemark(remark); + } + + @Override + public List selectJDOrderListByAddress(String address) { + return jdOrderMapper.selectJDOrderListByAddress(address); + } } diff --git a/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml index 07289bb..bccd1e4 100644 --- a/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/jarvis/JDOrderMapper.xml @@ -56,6 +56,50 @@ where id = #{id} + + insert into jd_order ( + remark, distribution_mark, model_number, link, + payment_amount, rebate_amount, address, logistics_link, + order_id, buyer, order_time, create_time, update_time, status + ) values ( + #{remark}, #{distributionMark}, #{modelNumber}, #{link}, + #{paymentAmount}, #{rebateAmount}, #{address}, #{logisticsLink}, + #{orderId}, #{buyer}, #{orderTime}, now(), now(), #{status} + ) + + + + update jd_order + + remark = #{remark}, + distribution_mark = #{distributionMark}, + model_number = #{modelNumber}, + link = #{link}, + payment_amount = #{paymentAmount}, + rebate_amount = #{rebateAmount}, + address = #{address}, + logistics_link = #{logisticsLink}, + order_id = #{orderId}, + buyer = #{buyer}, + order_time = #{orderTime}, + status = #{status}, + update_time = now() + + where id = #{id} + + + + + +