This commit is contained in:
2025-08-27 19:47:34 +08:00
parent 9a88d84f41
commit 8257a8ccec

View File

@@ -43,6 +43,16 @@ public class InstructionServiceImpl implements IInstructionService {
if (input.startsWith("") || menuKeywords().contains(input)) { if (input.startsWith("") || menuKeywords().contains(input)) {
return handleJingFen(input.replaceFirst("^京", "")); return handleJingFen(input.replaceFirst("^京", ""));
} }
// TF/H/生 生成类指令
if (input.startsWith("TF")) {
return handleTF(input);
}
if (input.startsWith("H")) {
return handleH(input);
}
if (input.startsWith("")) {
return 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 handleRecordLike(input);
} }
@@ -157,6 +167,122 @@ public class InstructionServiceImpl implements IInstructionService {
return helpText(); return helpText();
} }
// ===== TF/H/生 处理 =====
private static final Map<String, String> PRODUCT_WITH_JF = new HashMap<>();
static {
PRODUCT_WITH_JF.put("ZQD130F-EB130", "https://u.jd.com/Y6ZKmwN");
PRODUCT_WITH_JF.put("ZQD130F-EB130B", "https://u.jd.com/YGZKHZS");
PRODUCT_WITH_JF.put("ZQD150F-EB150", " https://u.jd.com/YDZK5rD");
PRODUCT_WITH_JF.put("ZQD180F-EB200", "https://u.jd.com/YDZKmb2");
PRODUCT_WITH_JF.put("CXW-298-IQ92DPRO", "https://u.jd.com/Y1AMT2l");
}
private String handleTF(String input) {
String raw = input.replaceFirst("^TF", "").trim();
if (raw.isEmpty()) return "TF 指令格式TF\t型号\t数量\t地址(可含其它字段)";
String[] parts = raw.split("\t");
if (parts.length < 3) return "TF 指令至少包含:型号、数量、地址 三段(以制表符分隔)";
String model = parts[0].trim();
String quantityStr = parts[1].trim();
int quantity;
try { quantity = Integer.parseInt(quantityStr); } catch (Exception e) { return "数量格式错误"; }
StringBuilder address = new StringBuilder();
for (int i = 2; i < parts.length; i++) address.append(parts[i]);
String jf = PRODUCT_WITH_JF.getOrDefault(model, "");
StringBuilder sheng = new StringBuilder();
sheng.append("\n")
.append("H-TF\n")
.append(model).append("\n")
.append(jf).append("\n")
.append(quantity).append("\n")
.append(address);
return generateOrderText(sheng.toString());
}
private String handleH(String input) {
String[] lines = input.replaceFirst("^H", "").split("\n");
if (lines.length < 3) return "H 指令需三行:姓名[后缀]\n电话\n地址 … [后缀] 型号";
String nameLine = lines[0].trim();
String phone = lines[1].trim();
String addressLine = lines[2].trim();
String name = extractChinese(nameLine);
String suffix = extractBetweenBrackets(nameLine);
String modelNumber = extractLastNonChineseToken(addressLine);
String cleanedAddress = addressLine.replaceAll("\\[.*?]", "").replace(modelNumber, "").replaceAll("\\s+", " ").trim();
String fullAddress = cleanedAddress + " 安装派送联系" + phone + (suffix.isEmpty()?"":"" + suffix);
StringBuilder sheng = new StringBuilder();
sheng.append("\n")
.append("H\n")
.append(modelNumber).append("\n")
.append("\n") // 转链链接留空
.append("1\n")
.append(name).append(fullAddress);
return generateOrderText(sheng.toString());
}
private String handleSheng(String input) {
// 输入格式:
// 生\n分销标记\n型号\n转链链接\n数量\n地址
String[] split = input.split("\n");
if (split.length != 6) {
return "生 指令格式:\n生\n分销标记\n型号\n转链链接\n数量\n地址";
}
return generateOrderText(input);
}
private String generateOrderText(String shengInput) {
String[] split = shengInput.split("\n");
// 第一行可能是 生 或 生{备注}
String head = split[0].trim();
String remark = head.replace("", "").trim();
String fenxiao = split[1].trim();
String model = split[2].trim();
String link = split[3].trim();
int num = 1;
try { num = Integer.parseInt(split[4].trim()); } catch (Exception ignore) {}
String address = split[5].trim();
String today = new java.text.SimpleDateFormat("yyyy-MM-dd ").format(new Date());
StringBuilder out = new StringBuilder();
for (int i = 1; i <= Math.max(1, num); i++) {
String orderId = today + String.format("%03d", i);
out.append("单:\n").append(orderId)
.append(" \n备注").append(remark)
.append("\n分销标记").append(fenxiao)
.append("\n型号\n").append(model)
.append("\n链接\n").append(link)
.append("\n下单付款\n\n后返金额\n\n地址\n").append(address)
.append("\n物流链接\n\n订单号\n\n下单人\n\n");
if (i < num) out.append("\n");
}
return out.toString();
}
private String extractChinese(String s) {
Matcher m = Pattern.compile("[\\u4E00-\\u9FA5]+").matcher(s);
return m.find() ? m.group() : "";
}
private String extractBetweenBrackets(String s) {
int a = s.indexOf('['); int b = s.indexOf(']');
if (a != -1 && b != -1 && b > a) return s.substring(a+1, b);
return "";
}
private String extractLastNonChineseToken(String s) {
String[] tokens = s.split("\\s+");
String result = "";
for (String t : tokens) {
if (!t.matches(".*[\\u4E00-\\u9FA5].*")) result = t;
}
return result;
}
private String handleTransferLike(String input) { private String handleTransferLike(String input) {
// 前端仍复用已有 /jarvis/jdorder/generatePromotionContent 接口,这里仅提供一个回显占位 // 前端仍复用已有 /jarvis/jdorder/generatePromotionContent 接口,这里仅提供一个回显占位
return "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)"; return "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)";