This commit is contained in:
Van0313
2025-05-22 23:43:31 +08:00
parent a3f9695f68
commit 20c87f5f51
5 changed files with 188 additions and 6 deletions

View File

@@ -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;
}

View File

@@ -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<JDOrder, Long> {
/**
* 根据订单号查询订单
*
* @param orderId 订单号
* @return JDOrder 实体
*/
JDOrder findByOrderId(String orderId);
/**
* 根据下单人查询订单列表
*
* @param buyer 下单人
* @return 订单列表
*/
List<JDOrder> findByBuyer(String buyer);
/**
* 根据分销标记查询订单列表
*
* @param distributionMark 分销标记
* @return 订单列表
*/
List<JDOrder> findByDistributionMark(String distributionMark);
}

View File

@@ -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<String, String> 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<String, String> 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;
}
}

View File

@@ -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());
/* 内部管理群 */

View File

@@ -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("")) {