This commit is contained in:
2025-08-27 19:52:35 +08:00
parent 8257a8ccec
commit 4250f927cc

View File

@@ -17,6 +17,8 @@ import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.concurrent.TimeUnit;
/**
* 将 jd 项目中 JDUtil 的指令能力,抽取为无微信依赖的本地执行版。
@@ -31,6 +33,8 @@ public class InstructionServiceImpl implements IInstructionService {
private IJDOrderService jdOrderService;
@Resource
private SuperAdminService superAdminService;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public String execute(String command) {
@@ -182,12 +186,13 @@ public class InstructionServiceImpl implements IInstructionService {
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 model = sanitizeModel(parts[0]);
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 addressClean = sanitizeAddress(address.toString());
String jf = PRODUCT_WITH_JF.getOrDefault(model, "");
StringBuilder sheng = new StringBuilder();
@@ -196,7 +201,7 @@ public class InstructionServiceImpl implements IInstructionService {
.append(model).append("\n")
.append(jf).append("\n")
.append(quantity).append("\n")
.append(address);
.append(addressClean);
return generateOrderText(sheng.toString());
}
@@ -232,7 +237,11 @@ public class InstructionServiceImpl implements IInstructionService {
if (split.length != 6) {
return "生 指令格式:\n生\n分销标记\n型号\n转链链接\n数量\n地址";
}
return generateOrderText(input);
// 轻度清洗:移除**、| 等噪声
split[2] = sanitizeModel(split[2]);
split[3] = sanitizeLink(split[3]);
split[5] = sanitizeAddress(split[5]);
return generateOrderText(String.join("\n", split));
}
private String generateOrderText(String shengInput) {
@@ -246,11 +255,17 @@ public class InstructionServiceImpl implements IInstructionService {
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());
String redisKey = "order_count:" + today;
StringBuilder out = new StringBuilder();
for (int i = 1; i <= Math.max(1, num); i++) {
String orderId = today + String.format("%03d", i);
int total = Math.max(1, num);
for (int i = 0; i < total; i++) {
Long curr = stringRedisTemplate != null ? stringRedisTemplate.opsForValue().increment(redisKey) : null;
if (curr != null && Boolean.TRUE.equals(stringRedisTemplate.getExpire(redisKey) == null || stringRedisTemplate.getExpire(redisKey) <= 0 ? Boolean.TRUE : Boolean.FALSE)) {
stringRedisTemplate.expire(redisKey, 1, TimeUnit.DAYS);
}
String seq = curr == null ? String.format("%03d", i + 1) : String.format("%03d", curr);
String orderId = today + seq;
out.append("单:\n").append(orderId)
.append(" \n备注").append(remark)
.append("\n分销标记").append(fenxiao)
@@ -258,7 +273,7 @@ public class InstructionServiceImpl implements IInstructionService {
.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");
if (i < total - 1) out.append("\n");
}
return out.toString();
}
@@ -283,6 +298,38 @@ public class InstructionServiceImpl implements IInstructionService {
return result;
}
// ===== 文本清洗 =====
private String sanitizeModel(String s) {
if (s == null) return "";
s = s.replace("\\n", "");
s = removeNoiseSymbols(s);
return normalizeWhitespace(s);
}
private String sanitizeAddress(String s) {
if (s == null) return "";
s = s.replaceAll("\\[.*?]", "");
s = removeNoiseSymbols(s);
return normalizeWhitespace(s);
}
private String sanitizeLink(String s) {
if (s == null) return "";
return normalizeWhitespace(s.trim());
}
private String removeNoiseSymbols(String s) {
// 移除常见噪声:**、*、|(含全角)、零宽字符等
s = s.replaceAll("\\*+", "");
s = s.replace("|", "").replace("", "");
s = s.replace("\u200B", "").replace("\uFEFF", "");
return s;
}
private String normalizeWhitespace(String s) {
return s.replaceAll("[\\t ]+", " ").replaceAll("\n{3,}", "\n\n").trim();
}
private String handleTransferLike(String input) {
// 前端仍复用已有 /jarvis/jdorder/generatePromotionContent 接口,这里仅提供一个回显占位
return "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)";