diff --git a/src/main/java/cn/van/business/model/cj/XbMessage.java b/src/main/java/cn/van/business/model/cj/XbMessage.java index f6e9dd1..fdd797d 100644 --- a/src/main/java/cn/van/business/model/cj/XbMessage.java +++ b/src/main/java/cn/van/business/model/cj/XbMessage.java @@ -32,4 +32,15 @@ public class XbMessage { @Column(name = "from_wxid", length = 100) private String fromWxid; -} + @Size(max = 1024) + @Column(name = "first_line", length = 1024) + private String firstLine; + + @Size(max = 1024) + @Column(name = "first_sku_name", length = 1024) + private String firstSkuName; + + @Column(name = "first_price") + private Double firstPrice; + +} \ No newline at end of file diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index 35c4c92..bad41d8 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -1449,6 +1449,10 @@ public class JDUtil { xbMessage.setCreateDate(LocalDate.now()); xbMessage.setTipOriginalMessage(message); xbMessage.setFromWxid(wxid); + String firstLine = message.split("\n")[0]; + Double price = parsePrice(message); + xbMessage.setFirstLine(firstLine); + xbMessage.setFirstPrice(price); xbMessage = xbMessageRepository.save(xbMessage); xbMessageId = xbMessage.getId(); } @@ -2780,4 +2784,32 @@ public class JDUtil { Matcher matcher = urlPattern.matcher(text); return matcher.find() ? matcher.group(0) : null; } + /** + * 从字符串中解析出价格数值 + * @param input 包含价格的字符串(如"🔥7.2折⎜◉854.64💰") + * @return 解析出的价格(double类型),解析失败返回null + */ + public static Double parsePrice(String input) { + if (input == null || input.isEmpty()) { + return null; + } + + // 正则表达式:匹配一个或多个数字,可包含一个小数点 + Pattern pattern = Pattern.compile("\\d+\\.\\d+|\\d+"); + Matcher matcher = pattern.matcher(input); + + // 从右向左查找最后一个数字(价格通常在字符串末尾) + double price = -1; + while (matcher.find()) { + String numberStr = matcher.group(); + try { + price = Double.parseDouble(numberStr); + } catch (NumberFormatException e) { + // 忽略转换失败的情况 + continue; + } + } + + return price >= 0 ? price : null; + } }