1
This commit is contained in:
@@ -1220,12 +1220,26 @@ private String handleTF(String input) {
|
||||
|
||||
// 参照 JDUtil.parseOrderFromText
|
||||
private JDOrder parseOrderFromText(String input) {
|
||||
input = input.replaceAll("\\s+", " ").trim();
|
||||
// 不要替换所有空格,保留换行符用于正确解析
|
||||
Map<String, String> fields = new HashMap<>();
|
||||
|
||||
// 先尝试新格式(带第三方单号和京粉实际价格)
|
||||
extractField(input, fields, "单:", "备注:");
|
||||
extractField(input, fields, "备注:", "分销标记:");
|
||||
extractField(input, fields, "分销标记:", "第三方单号:");
|
||||
extractField(input, fields, "第三方单号:", "型号:");
|
||||
|
||||
// 检查是否有"第三方单号:"字段,如果没有则是旧格式
|
||||
boolean hasThirdPartyOrderNo = input.contains("第三方单号:");
|
||||
boolean hasJingfenPrice = input.contains("京粉实际价格:");
|
||||
|
||||
if (hasThirdPartyOrderNo) {
|
||||
// 新格式:有第三方单号字段
|
||||
extractField(input, fields, "分销标记:", "第三方单号:");
|
||||
extractField(input, fields, "第三方单号:", "型号:");
|
||||
} else {
|
||||
// 旧格式:分销标记后面直接是型号
|
||||
extractField(input, fields, "分销标记:", "型号:");
|
||||
}
|
||||
|
||||
extractField(input, fields, "型号:", "链接:");
|
||||
extractField(input, fields, "链接:", "下单付款:");
|
||||
extractField(input, fields, "下单付款:", "后返金额:");
|
||||
@@ -1233,21 +1247,52 @@ private String handleTF(String input) {
|
||||
extractField(input, fields, "地址:", "物流链接:");
|
||||
extractField(input, fields, "物流链接:", "订单号:");
|
||||
extractField(input, fields, "订单号:", "下单人:");
|
||||
extractField(input, fields, "下单人:", "京粉实际价格:");
|
||||
extractField(input, fields, "京粉实际价格:", "");
|
||||
java.util.regex.Pattern buyerPattern = java.util.regex.Pattern.compile("下单人:\\s*(.*?)\\s*(?=京粉实际价格:|单:|\\Z)", java.util.regex.Pattern.DOTALL);
|
||||
|
||||
if (hasJingfenPrice) {
|
||||
// 新格式:有京粉实际价格字段
|
||||
extractField(input, fields, "下单人:", "京粉实际价格:");
|
||||
extractField(input, fields, "京粉实际价格:", "");
|
||||
} else {
|
||||
// 旧格式:下单人后面没有京粉实际价格
|
||||
extractField(input, fields, "下单人:", "");
|
||||
}
|
||||
|
||||
// 使用正则提取下单人(兼容新旧格式)
|
||||
String nextField = hasJingfenPrice ? "京粉实际价格:" : "单:";
|
||||
java.util.regex.Pattern buyerPattern = java.util.regex.Pattern.compile("下单人:\\s*(.*?)\\s*(?=" + nextField + "|\\Z)", java.util.regex.Pattern.DOTALL);
|
||||
java.util.regex.Matcher buyerMatcher = buyerPattern.matcher(input);
|
||||
if (buyerMatcher.find()) {
|
||||
fields.put("下单人", buyerMatcher.group(1).trim());
|
||||
String buyer = buyerMatcher.group(1).trim();
|
||||
// 如果提取的内容包含换行符,可能是提取过度了,只取第一行
|
||||
if (buyer.contains("\n")) {
|
||||
buyer = buyer.split("\n")[0].trim();
|
||||
}
|
||||
fields.put("下单人", buyer);
|
||||
}
|
||||
|
||||
JDOrder order = new JDOrder();
|
||||
order.setRemark(fields.getOrDefault("单", null));
|
||||
order.setDistributionMark(fields.getOrDefault("分销标记", null));
|
||||
|
||||
// 处理分销标记:如果提取的内容包含换行符,说明可能提取过度了,只取第一行
|
||||
String distributionMark = fields.getOrDefault("分销标记", null);
|
||||
if (distributionMark != null && distributionMark.contains("\n")) {
|
||||
// 如果包含换行符,只取第一行,并清理可能的额外内容
|
||||
String firstLine = distributionMark.split("\n")[0].trim();
|
||||
// 检查第一行是否包含其他字段的关键词(如"型号:"),如果有则截断
|
||||
if (firstLine.contains("型号:") || firstLine.contains("链接:")) {
|
||||
int index = firstLine.indexOf("型号:");
|
||||
if (index < 0) index = firstLine.indexOf("链接:");
|
||||
if (index > 0) {
|
||||
firstLine = firstLine.substring(0, index).trim();
|
||||
}
|
||||
}
|
||||
distributionMark = firstLine;
|
||||
}
|
||||
order.setDistributionMark(distributionMark);
|
||||
|
||||
// 优先从字段中获取第三方单号,如果没有则从分销标记中提取
|
||||
String thirdPartyOrderNo = fields.getOrDefault("第三方单号", null);
|
||||
if (thirdPartyOrderNo == null || thirdPartyOrderNo.trim().isEmpty()) {
|
||||
String distributionMark = fields.getOrDefault("分销标记", null);
|
||||
if (distributionMark != null && !distributionMark.isEmpty()) {
|
||||
thirdPartyOrderNo = extractOrderNumber(distributionMark);
|
||||
}
|
||||
@@ -1289,10 +1334,27 @@ private String handleTF(String input) {
|
||||
}
|
||||
|
||||
private void extractField(String input, Map<String, String> map, String startKeyword, String endKeyword) {
|
||||
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(startKeyword + "\\s*(.*?)\\s*(?=" + endKeyword + "|\\Z)", java.util.regex.Pattern.DOTALL);
|
||||
// 如果结束关键词为空,匹配到字符串末尾
|
||||
String endPattern = endKeyword.isEmpty() ? "\\Z" : endKeyword;
|
||||
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(startKeyword + "\\s*(.*?)\\s*(?=" + endPattern + ")", java.util.regex.Pattern.DOTALL);
|
||||
java.util.regex.Matcher matcher = pattern.matcher(input);
|
||||
if (matcher.find()) {
|
||||
String value = matcher.group(1).trim().replaceAll("^" + startKeyword, "").trim();
|
||||
String value = matcher.group(1).trim();
|
||||
// 移除可能的前缀(如果value以startKeyword开头)
|
||||
if (value.startsWith(startKeyword)) {
|
||||
value = value.substring(startKeyword.length()).trim();
|
||||
}
|
||||
// 如果值包含换行符,且结束关键词存在,需要确保只取到第一个换行符或结束关键词之前
|
||||
if (!endKeyword.isEmpty() && value.contains("\n")) {
|
||||
// 检查是否包含结束关键词
|
||||
int endIndex = value.indexOf(endKeyword);
|
||||
if (endIndex >= 0) {
|
||||
value = value.substring(0, endIndex).trim();
|
||||
} else {
|
||||
// 如果找不到结束关键词,取第一个换行符之前的内容
|
||||
value = value.split("\n")[0].trim();
|
||||
}
|
||||
}
|
||||
map.put(startKeyword.replace(":", ""), value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
<if test="params.beginTime != null"> and order_time >= #{params.beginTime}</if>
|
||||
<if test="params.endTime != null"> and order_time <= #{params.endTime}</if>
|
||||
</where>
|
||||
<choose>
|
||||
1 <choose>
|
||||
<when test="params.orderBy != null and params.orderBy != ''">
|
||||
order by ${params.orderBy} ${params.isAsc}
|
||||
</when>
|
||||
|
||||
Reference in New Issue
Block a user