From 72ecd4cb25bde51a120e5c0388001866725cdac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=92?= Date: Sun, 5 Oct 2025 01:05:54 +0800 Subject: [PATCH] 1 --- .../service/impl/InstructionServiceImpl.java | 59 +++++++++++++++++-- 1 file changed, 54 insertions(+), 5 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 c61d448..d9f6e26 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 @@ -222,7 +222,7 @@ public class InstructionServiceImpl implements IInstructionService { return Collections.singletonList(sb.toString()); } if (input.startsWith("慢单")) { - // 慢单:分销标记分组 -> 型号统计 + 详情 + // 慢单:分销标记分组 -> 型号统计 + 详情 + 算钱文本 List range = parseDateRange(input.replaceFirst("^慢单", "").trim()); if (range == null) { LocalDate today = effectiveToday().toLocalDate(); @@ -239,11 +239,24 @@ public class InstructionServiceImpl implements IInstructionService { List outputs = new ArrayList<>(); List>> dmEntries = new ArrayList<>(byDM.entrySet()); dmEntries.sort(Comparator.comparing(en -> en.getKey() == null ? "" : en.getKey())); + + + // 全局型号数量和金额统计 + Map globalModelCounts = new HashMap<>(); + Map globalModelAmounts = new HashMap<>(); + 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())); + Map modelAmounts = orders.stream().collect(Collectors.groupingBy(JDOrder::getModelNumber, Collectors.summingDouble(o -> { + if (o.getPaymentAmount() != null && o.getRebateAmount() != null) { + return o.getPaymentAmount() - o.getRebateAmount(); + } + return 0.0; + }))); + int totalCount = 0; StringBuilder summary = new StringBuilder(); List> modelEntries = new ArrayList<>(byModel.entrySet()); @@ -251,7 +264,14 @@ public class InstructionServiceImpl implements IInstructionService { for (Map.Entry em : modelEntries) { int c = em.getValue().intValue(); totalCount += c; - summary.append("型号:").append(em.getKey() != null ? em.getKey() : "未知").append(" 数量:").append(c).append("\n"); + String model = em.getKey() != null ? em.getKey() : "未知"; + + summary.append("型号:").append(model).append(" 数量:").append(c).append("\n"); + + // 累积到全局统计 + globalModelCounts.put(model, globalModelCounts.getOrDefault(model, 0) + c); + Double amount = modelAmounts.get(model); + globalModelAmounts.put(model, globalModelAmounts.getOrDefault(model, 0.0) + (amount != null ? amount : 0.0)); } summary.append("总计:").append(totalCount).append("\n详情:"); @@ -263,10 +283,39 @@ public class InstructionServiceImpl implements IInstructionService { 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() : "无"); } - StringBuilder single = new StringBuilder(); - single.append("分销标记:").append(dm).append("\n").append(summary).append(detail).append("\n"); - outputs.add(single.toString().trim()); + // 拆分为多条消息 - 订单详情 + StringBuilder infoSingle = new StringBuilder(); + infoSingle.append("分销标记:").append(dm).append("\n").append(summary).append(detail).append("\n"); + outputs.add(infoSingle.toString().trim()); } + + // 添加算钱文本(全局统计版本) + if (!globalModelCounts.isEmpty()) { + StringBuilder priceText = new StringBuilder(); + priceText.append("算钱文本:\n"); + + // 先输出型号和数量 + List> sortedEntries = globalModelCounts.entrySet().stream() + .sorted(Comparator.comparing(Map.Entry::getKey)) + .collect(Collectors.toList()); + + for (Map.Entry entry : sortedEntries) { + String model = entry.getKey(); + int count = entry.getValue(); + priceText.append("型号:").append(model).append(" 数量:").append(count).append("\n"); + } + + // 再输出金额计算 + for (Map.Entry entry : sortedEntries) { + String model = entry.getKey(); + int count = entry.getValue(); + Double amount = globalModelAmounts.getOrDefault(model, 0.0); + priceText.append(String.format("%.2f", amount)).append("-").append(String.format("%.0f", (double) count * 200)).append("\n"); // 假设每台200元返现 + } + + outputs.add(priceText.toString().trim()); + } + return outputs.isEmpty() ? Collections.singletonList("无数据") : outputs; } if (input.startsWith("单")) {