1
This commit is contained in:
@@ -17,6 +17,8 @@ import java.util.*;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将 jd 项目中 JDUtil 的指令能力,抽取为无微信依赖的本地执行版。
|
* 将 jd 项目中 JDUtil 的指令能力,抽取为无微信依赖的本地执行版。
|
||||||
@@ -31,6 +33,8 @@ public class InstructionServiceImpl implements IInstructionService {
|
|||||||
private IJDOrderService jdOrderService;
|
private IJDOrderService jdOrderService;
|
||||||
@Resource
|
@Resource
|
||||||
private SuperAdminService superAdminService;
|
private SuperAdminService superAdminService;
|
||||||
|
@Resource
|
||||||
|
private StringRedisTemplate stringRedisTemplate;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String execute(String command) {
|
public String execute(String command) {
|
||||||
@@ -182,12 +186,13 @@ public class InstructionServiceImpl implements IInstructionService {
|
|||||||
if (raw.isEmpty()) return "TF 指令格式:TF\t型号\t数量\t地址(可含其它字段)";
|
if (raw.isEmpty()) return "TF 指令格式:TF\t型号\t数量\t地址(可含其它字段)";
|
||||||
String[] parts = raw.split("\t");
|
String[] parts = raw.split("\t");
|
||||||
if (parts.length < 3) return "TF 指令至少包含:型号、数量、地址 三段(以制表符分隔)";
|
if (parts.length < 3) return "TF 指令至少包含:型号、数量、地址 三段(以制表符分隔)";
|
||||||
String model = parts[0].trim();
|
String model = sanitizeModel(parts[0]);
|
||||||
String quantityStr = parts[1].trim();
|
String quantityStr = parts[1].trim();
|
||||||
int quantity;
|
int quantity;
|
||||||
try { quantity = Integer.parseInt(quantityStr); } catch (Exception e) { return "数量格式错误"; }
|
try { quantity = Integer.parseInt(quantityStr); } catch (Exception e) { return "数量格式错误"; }
|
||||||
StringBuilder address = new StringBuilder();
|
StringBuilder address = new StringBuilder();
|
||||||
for (int i = 2; i < parts.length; i++) address.append(parts[i]);
|
for (int i = 2; i < parts.length; i++) address.append(parts[i]);
|
||||||
|
String addressClean = sanitizeAddress(address.toString());
|
||||||
String jf = PRODUCT_WITH_JF.getOrDefault(model, "");
|
String jf = PRODUCT_WITH_JF.getOrDefault(model, "");
|
||||||
|
|
||||||
StringBuilder sheng = new StringBuilder();
|
StringBuilder sheng = new StringBuilder();
|
||||||
@@ -196,7 +201,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
|||||||
.append(model).append("\n")
|
.append(model).append("\n")
|
||||||
.append(jf).append("\n")
|
.append(jf).append("\n")
|
||||||
.append(quantity).append("\n")
|
.append(quantity).append("\n")
|
||||||
.append(address);
|
.append(addressClean);
|
||||||
return generateOrderText(sheng.toString());
|
return generateOrderText(sheng.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,7 +237,11 @@ public class InstructionServiceImpl implements IInstructionService {
|
|||||||
if (split.length != 6) {
|
if (split.length != 6) {
|
||||||
return "生 指令格式:\n生\n分销标记\n型号\n转链链接\n数量\n地址";
|
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) {
|
private String generateOrderText(String shengInput) {
|
||||||
@@ -246,11 +255,17 @@ public class InstructionServiceImpl implements IInstructionService {
|
|||||||
int num = 1;
|
int num = 1;
|
||||||
try { num = Integer.parseInt(split[4].trim()); } catch (Exception ignore) {}
|
try { num = Integer.parseInt(split[4].trim()); } catch (Exception ignore) {}
|
||||||
String address = split[5].trim();
|
String address = split[5].trim();
|
||||||
|
|
||||||
String today = new java.text.SimpleDateFormat("yyyy-MM-dd ").format(new Date());
|
String today = new java.text.SimpleDateFormat("yyyy-MM-dd ").format(new Date());
|
||||||
|
String redisKey = "order_count:" + today;
|
||||||
StringBuilder out = new StringBuilder();
|
StringBuilder out = new StringBuilder();
|
||||||
for (int i = 1; i <= Math.max(1, num); i++) {
|
int total = Math.max(1, num);
|
||||||
String orderId = today + String.format("%03d", i);
|
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)
|
out.append("单:\n").append(orderId)
|
||||||
.append(" \n备注:").append(remark)
|
.append(" \n备注:").append(remark)
|
||||||
.append("\n分销标记:").append(fenxiao)
|
.append("\n分销标记:").append(fenxiao)
|
||||||
@@ -258,7 +273,7 @@ public class InstructionServiceImpl implements IInstructionService {
|
|||||||
.append("\n链接:\n").append(link)
|
.append("\n链接:\n").append(link)
|
||||||
.append("\n下单付款:\n\n后返金额:\n\n地址:\n").append(address)
|
.append("\n下单付款:\n\n后返金额:\n\n地址:\n").append(address)
|
||||||
.append("\n物流链接:\n\n订单号:\n\n下单人:\n\n");
|
.append("\n物流链接:\n\n订单号:\n\n下单人:\n\n");
|
||||||
if (i < num) out.append("\n");
|
if (i < total - 1) out.append("\n");
|
||||||
}
|
}
|
||||||
return out.toString();
|
return out.toString();
|
||||||
}
|
}
|
||||||
@@ -283,6 +298,38 @@ public class InstructionServiceImpl implements IInstructionService {
|
|||||||
return result;
|
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) {
|
private String handleTransferLike(String input) {
|
||||||
// 前端仍复用已有 /jarvis/jdorder/generatePromotionContent 接口,这里仅提供一个回显占位
|
// 前端仍复用已有 /jarvis/jdorder/generatePromotionContent 接口,这里仅提供一个回显占位
|
||||||
return "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)";
|
return "指令入口:请在\"一键转链\"页面使用(输入文案/链接后点生成)";
|
||||||
|
|||||||
Reference in New Issue
Block a user