This commit is contained in:
2025-08-27 21:44:08 +08:00
parent 435cfc1c3c
commit 1dd3c71446

View File

@@ -156,9 +156,9 @@ public class InstructionServiceImpl implements IInstructionService {
} }
return sb.toString(); return sb.toString();
} }
if (input.startsWith("录单") || input.startsWith("慢单")) { if (input.startsWith("录单")) {
// 提取日期yyyyMMdd 或 yyyyMMdd-yyyyMMdd 或 关键词:昨日/三日/七日 // 录单导出样式tab
List<LocalDate> range = parseDateRange(input.replaceFirst("^录单|^慢单", "").trim()); List<LocalDate> range = parseDateRange(input.replaceFirst("^录单", "").trim());
if (range == null) { if (range == null) {
LocalDate today = effectiveToday().toLocalDate(); LocalDate today = effectiveToday().toLocalDate();
range = Arrays.asList(today, today); range = Arrays.asList(today, today);
@@ -168,12 +168,14 @@ public class InstructionServiceImpl implements IInstructionService {
List<JDOrder> list = jdOrderService.selectJDOrderList(new JDOrder()); List<JDOrder> list = jdOrderService.selectJDOrderList(new JDOrder());
if (list == null) list = Collections.emptyList(); if (list == null) list = Collections.emptyList();
List<JDOrder> filtered = list.stream().filter(o -> o.getOrderTime()!=null && !o.getOrderTime().before(start) && !o.getOrderTime().after(end)).collect(Collectors.toList()); List<JDOrder> 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<JDOrder> sorted = filtered.stream().sorted(Comparator.comparing(JDOrder::getRemark, Comparator.nullsFirst(String::compareTo))).collect(Collectors.toList());
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (JDOrder o : filtered) { for (JDOrder o : sorted) {
sb.append(nvl(o.getRemark())).append('\t') sb.append(nvl(o.getRemark())).append('\t')
.append(nvl(o.getOrderId())).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.getModelNumber())).append('\t')
.append(nvl(o.getAddress())).append('\t') .append(nvl(o.getAddress())).append('\t')
.append(nvl(o.getLogisticsLink())).append('\t') .append(nvl(o.getLogisticsLink())).append('\t')
@@ -185,6 +187,64 @@ public class InstructionServiceImpl implements IInstructionService {
} }
return sb.toString(); return sb.toString();
} }
if (input.startsWith("慢单")) {
// 慢单:分销标记分组 -> 型号统计 + 详情
List<LocalDate> 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<JDOrder> list = jdOrderService.selectJDOrderList(new JDOrder());
if (list == null) list = Collections.emptyList();
List<JDOrder> filtered = list.stream().filter(o -> o.getOrderTime()!=null && !o.getOrderTime().before(start) && !o.getOrderTime().after(end)).collect(Collectors.toList());
if (filtered.isEmpty()) return "今天没有订单。";
Map<String, List<JDOrder>> byDM = filtered.stream()
.filter(o -> o.getStatus() == null || !"拍错退款".equals(o.getStatus()))
.collect(Collectors.groupingBy(JDOrder::getDistributionMark));
StringBuilder out = new StringBuilder();
List<Map.Entry<String, List<JDOrder>>> dmEntries = new ArrayList<>(byDM.entrySet());
dmEntries.sort(Comparator.comparing(en -> en.getKey() == null ? "" : en.getKey()));
for (Map.Entry<String, List<JDOrder>> e : dmEntries) {
String dm = e.getKey() != null ? e.getKey() : "未提供";
List<JDOrder> orders = e.getValue();
Map<String, Long> byModel = orders.stream().collect(Collectors.groupingBy(JDOrder::getModelNumber, Collectors.counting()));
int totalCount = 0;
StringBuilder summary = new StringBuilder();
List<Map.Entry<String, Long>> modelEntries = new ArrayList<>(byModel.entrySet());
modelEntries.sort(Comparator.comparing(en -> en.getKey() == null ? "" : en.getKey()));
for (Map.Entry<String, Long> 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<JDOrder> 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("")) { if (input.startsWith("")) {
return handleDanWriteDb(input); return handleDanWriteDb(input);
} }