From 1dd3c71446262bf526ccfd071bad657cfec8d5e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=92?= Date: Wed, 27 Aug 2025 21:44:08 +0800 Subject: [PATCH] 1 --- .../service/impl/InstructionServiceImpl.java | 72 +++++++++++++++++-- 1 file changed, 66 insertions(+), 6 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 14544f0..5f6c1b9 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 @@ -156,9 +156,9 @@ public class InstructionServiceImpl implements IInstructionService { } return sb.toString(); } - if (input.startsWith("录单") || input.startsWith("慢单")) { - // 提取日期(yyyyMMdd 或 yyyyMMdd-yyyyMMdd 或 关键词:昨日/三日/七日) - List range = parseDateRange(input.replaceFirst("^录单|^慢单", "").trim()); + if (input.startsWith("录单")) { + // 录单导出样式(tab) + List range = parseDateRange(input.replaceFirst("^录单", "").trim()); if (range == null) { LocalDate today = effectiveToday().toLocalDate(); range = Arrays.asList(today, today); @@ -168,12 +168,14 @@ public class InstructionServiceImpl implements IInstructionService { List list = jdOrderService.selectJDOrderList(new JDOrder()); if (list == null) list = Collections.emptyList(); List filtered = list.stream().filter(o -> o.getOrderTime()!=null && !o.getOrderTime().before(start) && !o.getOrderTime().after(end)).collect(Collectors.toList()); - if (filtered.isEmpty()) return "时间范围内没有订单"; + if (filtered.isEmpty()) return "今天没有订单。"; + // 按 remark 排序 + List sorted = filtered.stream().sorted(Comparator.comparing(JDOrder::getRemark, Comparator.nullsFirst(String::compareTo))).collect(Collectors.toList()); StringBuilder sb = new StringBuilder(); - for (JDOrder o : filtered) { + for (JDOrder o : sorted) { sb.append(nvl(o.getRemark())).append('\t') .append(nvl(o.getOrderId())).append('\t') - .append(fmt(o.getOrderTime())).append('\t') + .append(fmt(o.getOrderTime()).split(" ")[0]).append('\t') .append(nvl(o.getModelNumber())).append('\t') .append(nvl(o.getAddress())).append('\t') .append(nvl(o.getLogisticsLink())).append('\t') @@ -185,6 +187,64 @@ public class InstructionServiceImpl implements IInstructionService { } return sb.toString(); } + if (input.startsWith("慢单")) { + // 慢单:分销标记分组 -> 型号统计 + 详情 + List range = parseDateRange(input.replaceFirst("^慢单", "").trim()); + if (range == null) { + LocalDate today = effectiveToday().toLocalDate(); + range = Arrays.asList(today, today); + } + Date start = Date.from(range.get(0).atStartOfDay(ZoneId.systemDefault()).toInstant()); + Date end = Date.from(range.get(1).atTime(LocalTime.MAX).atZone(ZoneId.systemDefault()).toInstant()); + List list = jdOrderService.selectJDOrderList(new JDOrder()); + if (list == null) list = Collections.emptyList(); + List filtered = list.stream().filter(o -> o.getOrderTime()!=null && !o.getOrderTime().before(start) && !o.getOrderTime().after(end)).collect(Collectors.toList()); + if (filtered.isEmpty()) return "今天没有订单。"; + + Map> byDM = filtered.stream() + .filter(o -> o.getStatus() == null || !"拍错退款".equals(o.getStatus())) + .collect(Collectors.groupingBy(JDOrder::getDistributionMark)); + + StringBuilder out = new StringBuilder(); + List>> dmEntries = new ArrayList<>(byDM.entrySet()); + dmEntries.sort(Comparator.comparing(en -> en.getKey() == null ? "" : en.getKey())); + for (Map.Entry> e : dmEntries) { + String dm = e.getKey() != null ? e.getKey() : "未提供"; + List orders = e.getValue(); + + Map byModel = orders.stream().collect(Collectors.groupingBy(JDOrder::getModelNumber, Collectors.counting())); + int totalCount = 0; + StringBuilder summary = new StringBuilder(); + List> modelEntries = new ArrayList<>(byModel.entrySet()); + modelEntries.sort(Comparator.comparing(en -> en.getKey() == null ? "" : en.getKey())); + for (Map.Entry em : modelEntries) { + int c = em.getValue().intValue(); + totalCount += c; + summary.append("型号:").append(em.getKey() != null ? em.getKey() : "未知") + .append(" 数量:").append(c); + } + summary.append("总计:").append(totalCount).append("\n详情:"); + + List sorted = orders.stream().sorted(Comparator.comparing(JDOrder::getRemark, Comparator.nullsFirst(String::compareTo))).collect(Collectors.toList()); + StringBuilder detail = new StringBuilder(); + int idx = 0; + for (JDOrder o : sorted) { + if ("拍错退款".equals(o.getStatus())) continue; + idx++; + detail.append("\n").append(idx).append(" ────────────\n") + .append("单:").append(o.getRemark() != null ? o.getRemark() : "未提供") + .append("\n备注:").append(o.getStatus() != null ? o.getStatus() : " ") + .append("\n型号:").append(o.getModelNumber() != null ? o.getModelNumber() : "未提供") + .append("\n地址:").append(o.getAddress() != null ? o.getAddress() : "未提供") + .append("\n物流链接:\n").append(o.getLogisticsLink() != null ? o.getLogisticsLink() : "无"); + } + + out.append("分销标记:").append(dm) + .append(summary) + .append(detail).append("\n"); + } + return out.toString().trim(); + } if (input.startsWith("单")) { return handleDanWriteDb(input); }