This commit is contained in:
Leo
2025-12-14 14:20:16 +08:00
parent f541962b21
commit f08fc60857

View File

@@ -2667,30 +2667,51 @@ public class JDUtil {
// 生成当前日期
JDOrder jdOrder = parseOrderFromText(input.trim().replace("", ""));
if (Util.isAnyEmpty(jdOrder.getOrderId(), jdOrder.getBuyer(), jdOrder.getOrderTime(), jdOrder.getPaymentAmount(), jdOrder.getRebateAmount(), jdOrder.getAddress(), jdOrder.getLogisticsLink(), jdOrder.getModelNumber(), jdOrder.getLink(), jdOrder.getOrderId(), jdOrder.getBuyer())) {
// 警告缺少的字段getOrderId
// 验证必填字段(根据新模板格式)
// 单号存储在remark字段中订单号存储在orderId字段中
StringBuilder sb = new StringBuilder();
if (Util.isEmpty(jdOrder.getOrderId())) {
boolean hasError = false;
if (Util.isEmpty(jdOrder.getRemark())) {
sb.append("单号\n");
hasError = true;
}
if (Util.isEmpty(jdOrder.getBuyer())) {
sb.append("下单人\n");
hasError = true;
}
if (Util.isEmpty(jdOrder.getPaymentAmount())) {
sb.append("下单价格\n");
hasError = true;
}
if (Util.isEmpty(jdOrder.getRebateAmount())) {
sb.append("后返金额\n");
hasError = true;
}
if (Util.isEmpty(jdOrder.getLogisticsLink())) {
sb.append("物流链接\n");
hasError = true;
}
if (Util.isEmpty(jdOrder.getAddress())) {
sb.append("收货地址\n");
hasError = true;
}
if (Util.isEmpty(jdOrder.getModelNumber())) {
sb.append("型号\n");
hasError = true;
}
if (Util.isEmpty(jdOrder.getOrderTime())) {
sb.append("下单时间\n");
hasError = true;
}
if (hasError) {
// 添加调试信息:打印解析到的字段值
logger.warn("录单解析失败,解析到的字段值: remark={}, buyer={}, paymentAmount={}, rebateAmount={}, logisticsLink={}, address={}, modelNumber={}, orderTime={}",
jdOrder.getRemark(), jdOrder.getBuyer(), jdOrder.getPaymentAmount(),
jdOrder.getRebateAmount(), jdOrder.getLogisticsLink(), jdOrder.getAddress(),
jdOrder.getModelNumber(), jdOrder.getOrderTime());
for (int i = 0; i < 3; i++) {
wxUtil.sendTextMessage(fromWxid, "[炸弹] [炸弹] [炸弹] 录单警告!!! \n缺少表单字段 \n" + sb, 1, fromWxid, true);
}
@@ -2917,8 +2938,8 @@ public class JDUtil {
}
}
// 调试:打印提取到的字段(可选,生产环境可以注释掉)
// logger.debug("解析到的字段: {}", fields);
// 调试:打印提取到的字段
logger.info("解析到的字段: {}", fields);
// 构建 JDOrder 对象
JDOrder order = new JDOrder();
@@ -2982,9 +3003,10 @@ public class JDUtil {
String escapedStart = Pattern.quote(startKeyword);
String escapedEnd = Pattern.quote(endKeyword);
// 匹配模式startKeyword + 可选的空白和换行 + 字段值(非贪婪,支持多行) + 可选的空白和换行 + 后面是endKeyword或分隔线或结束
// 匹配模式startKeyword + 可选的空白和换行 + 字段值(非贪婪,支持多行) + 后面是换行+endKeyword或换行+分隔线或结束
// 使用[\s\S]来匹配包括换行在内的所有字符
String patternStr = escapedStart + "[\\s\\n]*([\\s\\S]*?)(?=[\\s\\n]*" + escapedEnd + "|[\\s\\n]*—————————|\\Z)";
// 改进:更精确地匹配字段值,确保能捕获到换行后的内容
String patternStr = escapedStart + "[\\s\\n]*([\\s\\S]*?)(?=\\s*\\n?\\s*" + escapedEnd + "|\\s*\\n?\\s*—————————|\\Z)";
Pattern pattern = Pattern.compile(patternStr, Pattern.DOTALL);
Matcher matcher = pattern.matcher(input);
@@ -3001,11 +3023,18 @@ public class JDUtil {
String key = startKeyword.replace("", "").trim();
if (!value.isEmpty()) {
map.put(key, value);
logger.debug("成功提取字段: {} = {}", key, value.length() > 50 ? value.substring(0, 50) + "..." : value);
} else {
logger.debug("字段值为空: {}", key);
}
} else {
logger.debug("未找到字段值: startKeyword={}", startKeyword);
}
} else {
logger.debug("正则未匹配: startKeyword={}, endKeyword={}", startKeyword, endKeyword);
}
} catch (Exception e) {
logger.warn("提取字段失败: startKeyword={}, endKeyword={}, error={}", startKeyword, endKeyword, e.getMessage());
logger.warn("提取字段失败: startKeyword={}, endKeyword={}, error={}", startKeyword, endKeyword, e.getMessage(), e);
}
}