This commit is contained in:
2025-11-05 21:39:28 +08:00
parent 5d5a2f0d66
commit 2335361160

View File

@@ -938,10 +938,15 @@ private String handleTF(String input) {
.append("\n") .append("\n")
.append(fullAddress.toString()); .append(fullAddress.toString());
return generateOrderText(sheng.toString()); // 传递第三方单号给 generateOrderText
return generateOrderText(sheng.toString(), thirdPartyOrderNo);
} }
private String generateOrderText(String shengInput) { private String generateOrderText(String shengInput) {
return generateOrderText(shengInput, null);
}
private String generateOrderText(String shengInput, String providedThirdPartyOrderNo) {
String[] split = shengInput.split("\n"); String[] split = shengInput.split("\n");
// 第一行可能是 生 或 生{备注} // 第一行可能是 生 或 生{备注}
String head = split[0].trim(); String head = split[0].trim();
@@ -957,20 +962,22 @@ private String handleTF(String input) {
String address = split[5].trim(); String address = split[5].trim();
// 第一重判断:从分销标记中提取订单编号进行去重(如 JY202510093195 // 第一重判断:从分销标记中提取订单编号进行去重(如 JY202510093195
if (stringRedisTemplate != null) { // 如果提供了第三方单号,也用于去重判断
String orderNumber = extractOrderNumber(fenxiao); String orderNumberForDedup = providedThirdPartyOrderNo;
if (orderNumber != null && !orderNumber.isEmpty()) { if (orderNumberForDedup == null || orderNumberForDedup.isEmpty()) {
String orderNumberKey = "order_number:" + orderNumber; orderNumberForDedup = extractOrderNumber(fenxiao);
}
if (stringRedisTemplate != null && orderNumberForDedup != null && !orderNumberForDedup.isEmpty()) {
String orderNumberKey = "order_number:" + orderNumberForDedup;
String existedOrderNumber = stringRedisTemplate.opsForValue().get(orderNumberKey); String existedOrderNumber = stringRedisTemplate.opsForValue().get(orderNumberKey);
if (existedOrderNumber != null) { if (existedOrderNumber != null) {
String warn = "[炸弹] [炸弹] [炸弹] 此订单编号(" + orderNumber + ")已经存在,请勿重复生成订单 [炸弹] [炸弹] [炸弹] "; String warn = "[炸弹] [炸弹] [炸弹] 此订单编号(" + orderNumberForDedup + ")已经存在,请勿重复生成订单 [炸弹] [炸弹] [炸弹] ";
StringBuilder warnOut = new StringBuilder(); StringBuilder warnOut = new StringBuilder();
warnOut.append(warn).append("\n"); warnOut.append(warn).append("\n");
return warnOut.toString().trim(); return warnOut.toString().trim();
} }
// 记录订单编号24小时过期 // 记录订单编号24小时过期
stringRedisTemplate.opsForValue().set(orderNumberKey, orderNumber, 1, TimeUnit.DAYS); stringRedisTemplate.opsForValue().set(orderNumberKey, orderNumberForDedup, 1, TimeUnit.DAYS);
}
} }
// 第二重判断:地址 24 小时去重校验(白名单放行) // 第二重判断:地址 24 小时去重校验(白名单放行)
@@ -1023,8 +1030,11 @@ private String handleTF(String input) {
} }
} }
// 从分销标记中提取第三方单号 // 优先使用提供的第三方单号,如果没有则从分销标记中提取
String thirdPartyOrderNo = extractOrderNumber(fenxiao); String thirdPartyOrderNo = providedThirdPartyOrderNo;
if (thirdPartyOrderNo == null || thirdPartyOrderNo.isEmpty()) {
thirdPartyOrderNo = extractOrderNumber(fenxiao);
}
String thirdPartyOrderNoValue = (thirdPartyOrderNo != null && !thirdPartyOrderNo.isEmpty()) ? thirdPartyOrderNo : ""; String thirdPartyOrderNoValue = (thirdPartyOrderNo != null && !thirdPartyOrderNo.isEmpty()) ? thirdPartyOrderNo : "";
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
@@ -1331,11 +1341,16 @@ private String handleTF(String input) {
// 优先从字段中获取第三方单号,如果没有则从分销标记中提取 // 优先从字段中获取第三方单号,如果没有则从分销标记中提取
String thirdPartyOrderNo = fields.getOrDefault("第三方单号", null); String thirdPartyOrderNo = fields.getOrDefault("第三方单号", null);
if (thirdPartyOrderNo == null || thirdPartyOrderNo.trim().isEmpty()) { if (thirdPartyOrderNo != null) {
// 清理换行符和空白字符
thirdPartyOrderNo = thirdPartyOrderNo.replaceAll("\\s+", "").trim();
}
if (thirdPartyOrderNo == null || thirdPartyOrderNo.isEmpty()) {
if (distributionMark != null && !distributionMark.isEmpty()) { if (distributionMark != null && !distributionMark.isEmpty()) {
thirdPartyOrderNo = extractOrderNumber(distributionMark); thirdPartyOrderNo = extractOrderNumber(distributionMark);
} }
} }
// 保存第三方单号到订单对象
order.setThirdPartyOrderNo(thirdPartyOrderNo != null && !thirdPartyOrderNo.trim().isEmpty() ? thirdPartyOrderNo.trim() : null); order.setThirdPartyOrderNo(thirdPartyOrderNo != null && !thirdPartyOrderNo.trim().isEmpty() ? thirdPartyOrderNo.trim() : null);
order.setModelNumber(fields.getOrDefault("型号", null)); order.setModelNumber(fields.getOrDefault("型号", null));
order.setLink(fields.getOrDefault("链接", null)); order.setLink(fields.getOrDefault("链接", null));