录单
This commit is contained in:
33
src/main/java/cn/van/business/model/jd/JDOrder.java
Normal file
33
src/main/java/cn/van/business/model/jd/JDOrder.java
Normal 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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
/* 内部管理群 */
|
||||
|
||||
@@ -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("单")) {
|
||||
|
||||
Reference in New Issue
Block a user