From 20c87f5f5111fb2af075428440e90694debd1d82 Mon Sep 17 00:00:00 2001 From: Van0313 <60689272+Van0313@users.noreply.github.com> Date: Thu, 22 May 2025 23:43:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=95=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/van/business/model/jd/JDOrder.java | 33 ++++++ .../repository/JDOrderRepository.java | 37 ++++++ .../java/cn/van/business/util/JDUtil.java | 105 +++++++++++++++++- .../java/cn/van/business/util/WXUtil.java | 11 +- .../van/business/util/WxMessageConsumer.java | 8 ++ 5 files changed, 188 insertions(+), 6 deletions(-) create mode 100644 src/main/java/cn/van/business/model/jd/JDOrder.java create mode 100644 src/main/java/cn/van/business/repository/JDOrderRepository.java diff --git a/src/main/java/cn/van/business/model/jd/JDOrder.java b/src/main/java/cn/van/business/model/jd/JDOrder.java new file mode 100644 index 0000000..97421d8 --- /dev/null +++ b/src/main/java/cn/van/business/model/jd/JDOrder.java @@ -0,0 +1,33 @@ +package cn.van.business.model.jd; + +import jakarta.persistence.*; +import lombok.Data; + +import java.util.Date; + +@Entity +@Table(name = "jd_order") +@Data +public class JDOrder { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String remark; // 单据备注(如日期编号) + private String distributionMark; // 分销标记 + private String modelNumber; // 型号 + private String link; // 链接 + private Double paymentAmount; // 下单付款金额 + private Double rebateAmount; // 后返金额 + private String address; // 地址 + private String logisticsLink; // 物流链接 + private String orderId; // 订单号 + private String buyer; // 下单人 + private Date orderTime; // 下单时间 + + @Column(updatable = false, insertable = false, columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP") + private Date createTime; + + @Column(columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") + private Date updateTime; +} diff --git a/src/main/java/cn/van/business/repository/JDOrderRepository.java b/src/main/java/cn/van/business/repository/JDOrderRepository.java new file mode 100644 index 0000000..303779f --- /dev/null +++ b/src/main/java/cn/van/business/repository/JDOrderRepository.java @@ -0,0 +1,37 @@ +package cn.van.business.repository; + +import cn.van.business.model.jd.JDOrder; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * JD订单数据访问层 + */ +@Repository +public interface JDOrderRepository extends JpaRepository { + /** + * 根据订单号查询订单 + * + * @param orderId 订单号 + * @return JDOrder 实体 + */ + JDOrder findByOrderId(String orderId); + + /** + * 根据下单人查询订单列表 + * + * @param buyer 下单人 + * @return 订单列表 + */ + List findByBuyer(String buyer); + + /** + * 根据分销标记查询订单列表 + * + * @param distributionMark 分销标记 + * @return 订单列表 + */ + List findByDistributionMark(String distributionMark); +} diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index 9839b47..009f5f2 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -3,9 +3,11 @@ package cn.van.business.util; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; +import cn.van.business.model.jd.JDOrder; import cn.van.business.model.jd.OrderRow; import cn.van.business.model.pl.Comment; import cn.van.business.repository.CommentRepository; +import cn.van.business.repository.JDOrderRepository; import cn.van.business.repository.OrderRowRepository; import cn.van.business.util.ds.DeepSeekClientUtil; import cn.van.business.util.ds.GPTClientUtil; @@ -120,6 +122,7 @@ public class JDUtil { private final StringRedisTemplate redisTemplate; private final OrderRowRepository orderRowRepository; private final CommentRepository commentRepository; + private JDOrderRepository jdOrderRepository; private final OrderUtil orderUtil; private final DeepSeekClientUtil deepSeekClientUtil; @@ -131,8 +134,8 @@ public class JDUtil { // 构造函数中注入StringRedisTemplate @Autowired - public JDUtil(StringRedisTemplate redisTemplate, OrderRowRepository orderRowRepository, WXUtil wxUtil, OrderUtil orderUtil, DeepSeekClientUtil deepSeekClientUtil, CommentRepository commentRepository, GPTClientUtil gptClientUtil) { - + public JDUtil(JDOrderRepository jdOrderRepository, StringRedisTemplate redisTemplate, OrderRowRepository orderRowRepository, WXUtil wxUtil, OrderUtil orderUtil, DeepSeekClientUtil deepSeekClientUtil, CommentRepository commentRepository, GPTClientUtil gptClientUtil) { + this.jdOrderRepository = jdOrderRepository; this.redisTemplate = redisTemplate; this.orderRowRepository = orderRowRepository; this.wxUtil = wxUtil; @@ -1864,4 +1867,102 @@ public class JDUtil { private long violations; // 违规订单数 private double violationCommission;// 违规佣金 } + + public void LD(String input, String fromWxid) { + JDOrder jdOrder = parseOrderFromText(input); + StringBuilder sb = new StringBuilder(); + //单号 下单日期 型号 内部订单号 地址 物流 外派给谁 后返金额 谁的单 下单价格 + // 从jdOrder中获取转化 + String distributionMark = jdOrder.getDistributionMark(); + String distributionMark2 = ""; + if (distributionMark != null){ + if (distributionMark.startsWith("H")){ + distributionMark2 = "鸿"; + } else if (distributionMark.startsWith("F")) { + distributionMark2 = "凡"; + } + } + sb.append(jdOrder.getOrderId()).append("\n").append(jdOrder.getModelNumber()).append("\n") + .append(jdOrder.getOrderId()).append("\n").append(jdOrder.getAddress()).append("\n").append(jdOrder.getLogisticsLink()).append("\n") + .append(jdOrder.getBuyer()).append("\n").append(jdOrder.getPaymentAmount()).append("\n"); + logger.info("订单信息:{}", sb); + + } + + public JDOrder parseOrderFromText(String input) { + // 清理多余的空白字符 + input = input.replaceAll("\\s+", " ").trim(); + + Map fields = new HashMap<>(); + + // 定义正则表达式提取各个字段 + extractField(input, fields, "单:", "分销标记:"); + extractField(input, fields, "分销标记:", "型号:"); + extractField(input, fields, "型号:", "链接:"); + extractField(input, fields, "链接:", "下单付款:"); + extractField(input, fields, "下单付款:", "后返金额:"); + extractField(input, fields, "后返金额:", "地址:"); + extractField(input, fields, "地址:", "物流链接:"); + extractField(input, fields, "物流链接:", "订单号:"); + extractField(input, fields, "订单号:", "下单人:"); + + // 手动提取“下单人” + Pattern buyerPattern = Pattern.compile("下单人:\\s*(.*?)\\s*(?=单:|\\Z)", Pattern.DOTALL); + Matcher buyerMatcher = buyerPattern.matcher(input); + if (buyerMatcher.find()) { + fields.put("下单人", buyerMatcher.group(1).trim()); + } + + // 构建 JDOrder 对象 + JDOrder order = new JDOrder(); + order.setRemark(fields.getOrDefault("单", null)); + order.setDistributionMark(fields.getOrDefault("分销标记", null)); + order.setModelNumber(fields.getOrDefault("型号", null)); + order.setLink(fields.getOrDefault("链接", null)); + + try { + order.setPaymentAmount(Double.parseDouble(fields.getOrDefault("下单付款", "0"))); + } catch (NumberFormatException ignored) { + } + + try { + order.setRebateAmount(Double.parseDouble(fields.getOrDefault("后返金额", "0"))); + } catch (NumberFormatException ignored) { + } + + order.setAddress(fields.getOrDefault("地址", null)); + order.setLogisticsLink(extractFirstUrl(fields.getOrDefault("物流链接", ""))); + order.setOrderId(fields.getOrDefault("订单号", null)); + order.setBuyer(fields.getOrDefault("下单人", null)); + + // 设置下单时间,格式为 yyyy-MM-dd HH:mm:ss + try { + String dateStr = fields.getOrDefault("单", "").split(" ")[0]; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + order.setOrderTime(sdf.parse(dateStr)); + } catch (Exception e) { + order.setOrderTime(new Date()); + } + + return order; + } + + // 提取字段的方法 + private void extractField(String input, Map map, String startKeyword, String endKeyword) { + Pattern pattern = Pattern.compile(startKeyword + "\\s*(.*?)\\s*(?=" + endKeyword + "|\\Z)", Pattern.DOTALL); + Matcher matcher = pattern.matcher(input); + + if (matcher.find()) { + String value = matcher.group(1).trim().replaceAll("^" + startKeyword, "").trim(); + map.put(startKeyword.replace(":", ""), value); + } + } + + // 提取 URL 的辅助方法 + private String extractFirstUrl(String text) { + if (text == null || text.isEmpty()) return null; + Pattern urlPattern = Pattern.compile("(https?://[^\\s]+)"); + Matcher matcher = urlPattern.matcher(text); + return matcher.find() ? matcher.group(0) : null; + } } diff --git a/src/main/java/cn/van/business/util/WXUtil.java b/src/main/java/cn/van/business/util/WXUtil.java index 0eb0c56..840bc17 100644 --- a/src/main/java/cn/van/business/util/WXUtil.java +++ b/src/main/java/cn/van/business/util/WXUtil.java @@ -49,6 +49,9 @@ public class WXUtil { // 搬运群,对外带佣金,不带方案 public static String chatRoom_BY = "50400969285@chatroom"; + + //群(50006079425@chatroom) + public static String chatRoom_JD_Order = "50400969285@chatroom"; /** * url http://127.0.0.1:7777/DaenWxHook/httpapi/ * 获取微信列表 (X0000) @@ -187,10 +190,10 @@ public class WXUtil { jdidToWxidMap.put(admin12.getUnionId(), admin12.getWxid()); jdidToRemarkMap.put(admin12.getUnionId(), admin12.getName()); - //SuperAdmin admin13 = new SuperAdmin("wxid_ytpc72mdoskt22", "琼", "2036761094", "", ""); - //super_admins.put(admin13.getWxid() + admin13.getUnionId(), admin13); - //jdidToWxidMap.put(admin13.getUnionId(), admin13.getWxid()); - //jdidToRemarkMap.put(admin13.getUnionId(), admin13.getName()); + SuperAdmin admin13 = new SuperAdmin("wxid_ytpc72mdoskt22", "牛", "2036827177", "0218a93e14d1a37661889e91333aed30", "c0f5f9a37d904f95a9e968be97ad37bb"); + super_admins.put(admin13.getWxid() + admin13.getUnionId(), admin13); + jdidToWxidMap.put(admin13.getUnionId(), admin13.getWxid()); + jdidToRemarkMap.put(admin13.getUnionId(), admin13.getName()); /* 内部管理群 */ diff --git a/src/main/java/cn/van/business/util/WxMessageConsumer.java b/src/main/java/cn/van/business/util/WxMessageConsumer.java index 90ea771..fc5b79a 100644 --- a/src/main/java/cn/van/business/util/WxMessageConsumer.java +++ b/src/main/java/cn/van/business/util/WxMessageConsumer.java @@ -110,6 +110,14 @@ public class WxMessageConsumer { jdUtils.xb(msg, fromWxid); return; } + // 录单群 + if (fromWxid.equals(chatRoom_JD_Order)){ + if (msg.startsWith("单")) { + logger.info("录单"); + jdUtils.LD(msg, fromWxid); + return; + } + } // 超级管理员内部群 if (chatRoom_admin_inner.contains(fromWxid)) { if (msg.startsWith("单")) {