This commit is contained in:
Leo
2025-11-10 18:55:03 +08:00
parent 72b3458ef9
commit 3176e45057

View File

@@ -76,8 +76,12 @@ public class InstructionServiceImpl implements IInstructionService {
result = Collections.singletonList(handleTF(input));
} else if (input.startsWith("H")) {
result = Collections.singletonList(handleH(input));
} else if (input.startsWith("W")) {
result = Collections.singletonList(handleW(input));
} else if (input.startsWith("")) {
result = Collections.singletonList(handleSheng(input));
} else if (isPDDWCommand(input)) {
result = Collections.singletonList(handlePDDW(input));
} else if (input.equals("拼多多") || input.startsWith("拼多多\n") || input.startsWith("拼多多\r\n") || isPDDFormat(input)) {
result = Collections.singletonList(handlePDD(input));
} else if (input.startsWith("录单") || input.startsWith("慢单") || input.startsWith("慢搜") || input.startsWith("慢查") || input.startsWith("")) {
@@ -749,8 +753,22 @@ private String handleTF(String input) {
private String handleH(String input) {
String[] lines = input.replaceFirst("^H", "").split("\n");
if (lines.length < 3) return "H 指令需三行:姓名[后缀]\n电话\n地址 … [后缀] 型号";
return handleHLike(input, "H", "H");
}
private String handleW(String input) {
return handleHLike(input, "W", "W");
}
private String handleHLike(String input, String commandKeyword, String distributionMark) {
String cleaned = input.replaceFirst("^" + Pattern.quote(commandKeyword), "");
if (cleaned.startsWith("\n")) {
cleaned = cleaned.substring(1);
}
String[] lines = cleaned.split("\n");
if (lines.length < 3) {
return commandKeyword + " 指令需三行:姓名[后缀]\n电话\n地址 … [后缀] 型号";
}
String nameLine = lines[0].trim();
String phone = lines[1].trim();
@@ -764,7 +782,7 @@ private String handleTF(String input) {
String fullAddress = cleanedAddress + " 安装派送联系" + phone + (suffix.isEmpty() ? "" : "" + suffix);
StringBuilder sheng = new StringBuilder();
sheng.append("\n").append("H\n").append(modelNumber).append("\n").append("\n") // 转链链接留空
sheng.append("\n").append(distributionMark).append("\n").append(modelNumber).append("\n").append("\n") // 转链链接留空
.append("1\n").append(name).append(fullAddress);
return generateOrderText(sheng.toString());
}
@@ -805,34 +823,58 @@ private String handleTF(String input) {
return false;
}
private boolean isPDDWCommand(String input) {
if (input == null) {
return false;
}
String trimmed = input.trim();
if (trimmed.isEmpty()) {
return false;
}
return trimmed.equals("拼多多 W") || trimmed.equals("拼多多W")
|| trimmed.startsWith("拼多多 W") || trimmed.startsWith("拼多多W");
}
private String handlePDD(String input) {
return handlePDDWithMark(input, "拼多多", "PDD");
}
private String handlePDDW(String input) {
return handlePDDWithMark(input, "拼多多 W", "PDD-W");
}
private String handlePDDWithMark(String input, String commandKeyword, String distributionMark) {
// 拼多多新格式:
// 拼多多251102-457567158704072
// <指令>251102-457567158704072
// 赵政委[6947]
// 17283248756
// 安徽省 宿州市 埇桥区 映月湾东区3栋103[6947]
// eb150
//
// 旧格式兼容:
// 🕒 林[1518]
// 17284023487
// 广西壮族自治区 柳州市 柳北区 绿城·杨柳郡柳园7栋[1518]
// eb150
// 如果输入只是"拼多多",返回提示信息
if (input.equals("拼多多") || input.trim().equals("拼多多")) {
return "请粘贴拼多多格式数据:\n新格式推荐\n拼多多251102-457567158704072\n赵政委[6947]\n17283248756\n安徽省 宿州市 埇桥区 映月湾东区3栋103[6947]\neb150\n\n旧格式兼容\n🕒 林[1518]\n17284023487\n广西壮族自治区 柳州市 柳北区 绿城·杨柳郡柳园7栋[1518]\neb150";
if (input == null || input.trim().isEmpty()) {
return buildPddHelpMessage(commandKeyword);
}
String[] lines = input.split("\r?\n");
String trimmedOriginal = input.trim();
if (trimmedOriginal.equals(commandKeyword)) {
return buildPddHelpMessage(commandKeyword);
}
String normalizedInput = normalizePddInput(input, commandKeyword);
String[] lines = normalizedInput.split("\r?\n");
String thirdPartyOrderNo = null;
int nameLineIndex = 0;
boolean isNewFormat = false;
// 检查是否是新格式(第一行包含"拼多多"
if (lines.length > 0) {
String firstLine = lines[0].trim();
// 格式1拼多多数字-数字一行格式拼多多251102-457567158704072
Pattern orderNoPattern = Pattern.compile("拼多多(\\d+-\\d+)");
Matcher matcher = orderNoPattern.matcher(firstLine);
@@ -840,7 +882,7 @@ private String handleTF(String input) {
thirdPartyOrderNo = matcher.group(1); // 提取订单号部分(不含"拼多多"
isNewFormat = true;
nameLineIndex = 1; // 新格式下,姓名在第二行
}
}
// 格式2第一行是"拼多多",第二行是订单号(多行格式)
else if (firstLine.equals("拼多多") && lines.length > 1) {
String secondLine = lines.length > 1 ? lines[1].trim() : "";
@@ -853,30 +895,31 @@ private String handleTF(String input) {
nameLineIndex = 2; // 多行格式下,姓名在第三行
} else {
// 旧格式:移除"拼多多"前缀(如果有)
String data = input.replaceFirst("^拼多多\\s*[\r\n]+", "").trim();
String data = normalizedInput.replaceFirst("^拼多多\\s*[\r\n]+", "").trim();
lines = data.split("\r?\n");
nameLineIndex = 0;
}
} else {
// 旧格式:移除"拼多多"前缀(如果有)
String data = input.replaceFirst("^拼多多\\s*[\r\n]+", "").trim();
String data = normalizedInput.replaceFirst("^拼多多\\s*[\r\n]+", "").trim();
lines = data.split("\r?\n");
nameLineIndex = 0;
}
}
// 检查行数
// 如果第三方单号在第二行多行格式需要6行如果在第一行一行格式需要5行
int requiredLines = isNewFormat ? (nameLineIndex == 2 ? 6 : 5) : 4;
if (lines.length < requiredLines) {
String formatDesc = isNewFormat ?
(nameLineIndex == 2 ?
"\n1. 拼多多\n2. 订单号\n3. 姓名[编号]\n4. 电话\n5. 地址[编号]\n6. 型号" :
"\n1. 拼多多订单号\n2. 姓名[编号]\n3. 电话\n4. 地址[编号]\n5. 型号") :
String commandLabel = commandKeyword.trim();
String formatDesc = isNewFormat ?
(nameLineIndex == 2 ?
"\n1. " + commandLabel + "\n2. 订单号\n3. 姓名[编号]\n4. 电话\n5. 地址[编号]\n6. 型号" :
"\n1. " + commandLabel + " 订单号\n2. 姓名[编号]\n3. 电话\n4. 地址[编号]\n5. 型号") :
"\n1. 🕒 姓名[编号]\n2. 电话\n3. 地址[编号]\n4. 型号";
return "拼多多格式错误,需要" + requiredLines + "行数据:" + formatDesc;
return commandLabel + " 格式错误,需要" + requiredLines + "行数据:" + formatDesc;
}
// 解析姓名行
String nameLine = lines[nameLineIndex].trim();
// 移除emoji和特殊字符提取中文姓名
@@ -890,23 +933,23 @@ private String handleTF(String input) {
}
// 提取编号(如果有)
String suffix = extractBetweenBrackets(nameLine);
// 解析电话行
int phoneLineIndex = nameLineIndex + 1;
String phone = lines[phoneLineIndex].trim();
// 解析地址行
int addressLineIndex = nameLineIndex + 2;
String addressLine = lines[addressLineIndex].trim();
// 移除编号括号和其中的内容
String address = addressLine.replaceAll("\\[.*?]", "").trim();
// 解析型号行
int modelLineIndex = nameLineIndex + 3;
String modelNumber = lines[modelLineIndex].trim();
// 清洗型号
modelNumber = sanitizeModel(modelNumber);
// 构建完整地址:姓名 + 固定号码(13068923963) + 地址 + 原始电话 + 转 + 编号
// 格式:赵政委 13068923963 安徽省 宿州市 埇桥区 映月湾东区3栋103 17283248756转6947
StringBuilder fullAddress = new StringBuilder();
@@ -926,17 +969,14 @@ private String handleTF(String input) {
if (!suffix.isEmpty()) {
fullAddress.append("").append(suffix);
}
// 获取转链链接
String jf = productJdConfigService.getJdUrlByProductModel(modelNumber);
// 构建分销标记:只保存 PDD不包含第三方单号
String distributionMark = "PDD";
// 构建"生"指令格式
StringBuilder sheng = new StringBuilder();
sheng.append("\n")
.append(distributionMark) // 分销标记PDD
.append(distributionMark) // 分销标记
.append("\n")
.append(modelNumber)
.append("\n")
@@ -945,11 +985,40 @@ private String handleTF(String input) {
.append("1") // 数量默认为1
.append("\n")
.append(fullAddress.toString());
// 传递第三方单号给 generateOrderText
return generateOrderText(sheng.toString(), thirdPartyOrderNo);
}
private String buildPddHelpMessage(String commandKeyword) {
String commandLabel = commandKeyword.trim();
String examplePrefix = commandLabel;
return "请粘贴" + commandLabel + "格式数据:\n" +
"新格式(推荐):\n" +
examplePrefix + "251102-457567158704072\n" +
"赵政委[6947]\n" +
"17283248756\n" +
"安徽省 宿州市 埇桥区 映月湾东区3栋103[6947]\n" +
"eb150\n\n" +
"旧格式(兼容):\n" +
"🕒 林[1518]\n" +
"17284023487\n" +
"广西壮族自治区 柳州市 柳北区 绿城·杨柳郡柳园7栋[1518]\n" +
"eb150";
}
private String normalizePddInput(String input, String commandKeyword) {
if (input == null) {
return "";
}
String normalized = input;
String trimmedKeyword = commandKeyword.trim();
if ("拼多多 W".equals(trimmedKeyword)) {
normalized = normalized.replaceFirst("^\\s*拼多多\\s*[Ww]", "拼多多");
}
return normalized;
}
private String generateOrderText(String shengInput) {
return generateOrderText(shengInput, null);
}