1
This commit is contained in:
@@ -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 "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)";
|
||||||
|
|||||||
Reference in New Issue
Block a user