This commit is contained in:
雷欧(林平凡)
2025-08-28 10:17:44 +08:00
parent bb2bd8ea77
commit 4e80dcbaa3
3 changed files with 28 additions and 28 deletions

View File

@@ -30,7 +30,7 @@ public class InstructionController extends BaseController {
@PostMapping("/execute") @PostMapping("/execute")
public AjaxResult execute(@RequestBody Map<String, String> body) { public AjaxResult execute(@RequestBody Map<String, String> body) {
String cmd = body != null ? body.get("command") : null; String cmd = body != null ? body.get("command") : null;
String result = instructionService.execute(cmd); java.util.List<String> result = instructionService.execute(cmd);
return AjaxResult.success(result); return AjaxResult.success(result);
} }
} }

View File

@@ -7,9 +7,9 @@ public interface IInstructionService {
/** /**
* 执行文本指令,返回结果文本 * 执行文本指令,返回结果文本
* @param command 指令内容 * @param command 指令内容
* @return 执行结果文本 * @return 执行结果文本列表(可能为单条或多条)
*/ */
String execute(String command); java.util.List<String> execute(String command);
} }

View File

@@ -58,33 +58,33 @@ public class InstructionServiceImpl implements IInstructionService {
"\n"; "\n";
@Override @Override
public String execute(String command) { public List<String> execute(String command) {
if (command == null || command.trim().isEmpty()) { if (command == null || command.trim().isEmpty()) {
return "请输入指令"; return Collections.singletonList("请输入指令");
} }
String input = command.trim(); String input = command.trim();
// 一级命令分流:京系(统计/订单)、录单/慢单、转链/礼金… // 一级命令分流:京系(统计/订单)、录单/慢单、转链/礼金…
if (input.startsWith("") || menuKeywords().contains(input)) { if (input.startsWith("") || menuKeywords().contains(input)) {
return handleJingFen(input.replaceFirst("^京", "")); return Collections.singletonList(handleJingFen(input.replaceFirst("^京", "")));
} }
// TF/H/生 生成类指令 // TF/H/生 生成类指令
if (input.startsWith("TF")) { if (input.startsWith("TF")) {
return handleTF(input); return Collections.singletonList(handleTF(input));
} }
if (input.startsWith("H")) { if (input.startsWith("H")) {
return handleH(input); return Collections.singletonList(handleH(input));
} }
if (input.startsWith("")) { if (input.startsWith("")) {
return handleSheng(input); return Collections.singletonList(handleSheng(input));
} }
if (input.startsWith("录单") || input.startsWith("慢单") || input.startsWith("慢搜") || input.startsWith("慢查") || input.startsWith("")) { if (input.startsWith("录单") || input.startsWith("慢单") || input.startsWith("慢搜") || input.startsWith("慢查") || input.startsWith("")) {
return handleRecordLike(input); return handleRecordLikeMulti(input);
} }
if (input.startsWith("转链") || input.startsWith("文案") || input.startsWith("")) { if (input.startsWith("转链") || input.startsWith("文案") || input.startsWith("")) {
return handleTransferLike(input); return Collections.singletonList(handleTransferLike(input));
} }
return helpText(); return Collections.singletonList(helpText());
} }
private Set<String> menuKeywords() { private Set<String> menuKeywords() {
@@ -124,18 +124,18 @@ public class InstructionServiceImpl implements IInstructionService {
} }
} }
private String handleRecordLike(String input) { private List<String> handleRecordLikeMulti(String input) {
// 仅实现“慢搜/慢查 关键词”与“录单/慢单 日期范围”的只读输出,避免侵入写库 // 仅实现“慢搜/慢查 关键词”与“录单/慢单 日期范围”的只读输出,避免侵入写库
if (input.startsWith("慢搜") || input.startsWith("慢查")) { if (input.startsWith("慢搜") || input.startsWith("慢查")) {
String kw = input.replaceFirst("^慢搜|^慢查", "").trim(); String kw = input.replaceFirst("^慢搜|^慢查", "").trim();
if (kw.isEmpty()) return "请输入搜索关键词"; if (kw.isEmpty()) return Collections.singletonList("请输入搜索关键词");
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();
String low = kw.toLowerCase(Locale.ROOT); String low = kw.toLowerCase(Locale.ROOT);
List<JDOrder> matched = list.stream().filter(o -> List<JDOrder> matched = list.stream().filter(o ->
contains(o.getRemark(), low) || contains(o.getOrderId(), low) || contains(o.getModelNumber(), low) || contains(o.getAddress(), low) || contains(o.getBuyer(), low) contains(o.getRemark(), low) || contains(o.getOrderId(), low) || contains(o.getModelNumber(), low) || contains(o.getAddress(), low) || contains(o.getBuyer(), low)
).limit(50).collect(Collectors.toList()); ).limit(50).collect(Collectors.toList());
if (matched.isEmpty()) return "未找到匹配的订单"; if (matched.isEmpty()) return Collections.singletonList("未找到匹配的订单");
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
int i = 0; int i = 0;
for (JDOrder o : matched) { for (JDOrder o : matched) {
@@ -154,7 +154,7 @@ public class InstructionServiceImpl implements IInstructionService {
.append("\n备注").append(nvl(o.getStatus())) .append("\n备注").append(nvl(o.getStatus()))
.append("\n━━━━━━━━━━━━\n"); .append("\n━━━━━━━━━━━━\n");
} }
return sb.toString(); return Collections.singletonList(sb.toString());
} }
if (input.startsWith("录单")) { if (input.startsWith("录单")) {
// 录单导出样式tab // 录单导出样式tab
@@ -168,7 +168,7 @@ 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 Collections.singletonList("今天没有订单。");
// 按 remark 排序 // 按 remark 排序
List<JDOrder> sorted = filtered.stream().sorted(Comparator.comparing(JDOrder::getRemark, Comparator.nullsFirst(String::compareTo))).collect(Collectors.toList()); 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();
@@ -185,7 +185,7 @@ public class InstructionServiceImpl implements IInstructionService {
.append(mapDistribution(o.getDistributionMark())).append('\t') .append(mapDistribution(o.getDistributionMark())).append('\t')
.append(nvl(o.getStatus())).append("\n"); .append(nvl(o.getStatus())).append("\n");
} }
return sb.toString(); return Collections.singletonList(sb.toString());
} }
if (input.startsWith("慢单")) { if (input.startsWith("慢单")) {
// 慢单:分销标记分组 -> 型号统计 + 详情 // 慢单:分销标记分组 -> 型号统计 + 详情
@@ -199,13 +199,12 @@ 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 Collections.singletonList("今天没有订单。");
Map<String, List<JDOrder>> byDM = filtered.stream() Map<String, List<JDOrder>> byDM = filtered.stream()
.filter(o -> o.getStatus() == null || !"拍错退款".equals(o.getStatus())) .filter(o -> o.getStatus() == null || !"拍错退款".equals(o.getStatus()))
.collect(Collectors.groupingBy(JDOrder::getDistributionMark)); .collect(Collectors.groupingBy(JDOrder::getDistributionMark));
List<String> outputs = new ArrayList<>();
StringBuilder out = new StringBuilder();
List<Map.Entry<String, List<JDOrder>>> dmEntries = new ArrayList<>(byDM.entrySet()); List<Map.Entry<String, List<JDOrder>>> dmEntries = new ArrayList<>(byDM.entrySet());
dmEntries.sort(Comparator.comparing(en -> en.getKey() == null ? "" : en.getKey())); dmEntries.sort(Comparator.comparing(en -> en.getKey() == null ? "" : en.getKey()));
for (Map.Entry<String, List<JDOrder>> e : dmEntries) { for (Map.Entry<String, List<JDOrder>> e : dmEntries) {
@@ -238,17 +237,18 @@ public class InstructionServiceImpl implements IInstructionService {
.append("\n地址").append(o.getAddress() != null ? o.getAddress() : "未提供") .append("\n地址").append(o.getAddress() != null ? o.getAddress() : "未提供")
.append("\n物流链接\n").append(o.getLogisticsLink() != null ? o.getLogisticsLink() : ""); .append("\n物流链接\n").append(o.getLogisticsLink() != null ? o.getLogisticsLink() : "");
} }
StringBuilder single = new StringBuilder();
out.append("分销标记:\n").append(dm) single.append("分销标记:\n").append(dm)
.append(summary) .append(summary)
.append(detail).append("\n"); .append(detail).append("\n");
outputs.add(single.toString().trim());
} }
return out.toString().trim(); return outputs.isEmpty() ? Collections.singletonList("无数据") : outputs;
} }
if (input.startsWith("")) { if (input.startsWith("")) {
return handleDanWriteDb(input); return Collections.singletonList(handleDanWriteDb(input));
} }
return helpText(); return Collections.singletonList(helpText());
} }
// ===== TF/H/生 处理 ===== // ===== TF/H/生 处理 =====