Files
Jarvis_java/src/main/java/cn/van/business/util/WxMessageConsumer.java
雷欧(林平凡) 4f97e84f18 录单
2025-06-11 15:12:14 +08:00

148 lines
5.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cn.van.business.util;
import cn.van.business.enums.FromType;
import cn.van.business.model.wx.WxMessage;
import cn.van.business.repository.SettingRepository;
import cn.van.business.repository.WxMessageDataForChatRepository;
import cn.van.business.repository.WxUserRepository;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static cn.van.business.util.WXUtil.*;
/**
* @author Leo
* @version 1.0
* @create 2023/12/19 0019 上午 11:03
* @description
*/
@Component
public class WxMessageConsumer {
private static final Logger logger = LoggerFactory.getLogger(WxMessageConsumer.class);
private final JDUtil jdUtils;
@Autowired
public WxMessageConsumer(@Lazy JDUtil jdUtils) {
this.jdUtils = jdUtils;
}
@Async("threadPoolTaskExecutor")
public void consume(WxMessage wxMessage) throws Exception {
if (wxMessage.getEvent() == null) {
return;
}
if (FromType.PRIVATE.getKey().equals(wxMessage.getEvent())) {
handlePrivateMessage(wxMessage);
} else if (FromType.GROUP.getKey().equals(wxMessage.getEvent())) {
handleGroupMessage(wxMessage);
}
}
/**
* 处理私聊消息
*
* @param wxMessage
*/
private void handlePrivateMessage(WxMessage wxMessage) throws Exception {
logger.info("处理私聊消息: {}", JSON.toJSONString(wxMessage));
WxMessage.DataSection data = wxMessage.getData();
WxMessage.DataSection.InnerData innerData = data.getData();
if (Util.isAnyEmpty(innerData.getMsg(), innerData.getFromWxid())) {
logger.info("消息内容为空,不处理");
return;
} else {
logger.info("消息内容:{}", innerData.getMsg());
}
String fromWxid = innerData.getFromWxid();
WXUtil.SuperAdmin superAdmin = getSuperAdmins(fromWxid).get(0);
if (Util.isEmpty(superAdmin)) {
logger.info("不是超管消息,不处理");
return;
}
String msg = innerData.getMsg();
if (msg.startsWith("")) {
logger.info("消息以京开头,处理京东指令消息");
jdUtils.sendOrderToWxByOrderJD(msg.replace("", ""), fromWxid);
return;
}
if (msg.startsWith("")) {
logger.info("消息以单开头,处理单指令消息");
jdUtils.sendOrderToWxByOrderD(msg.replace("", ""), fromWxid);
return;
}
logger.info("未命中前置指令,开始命中 Default 流程");
jdUtils.sendOrderToWxByOrderDefault(msg, fromWxid);
}
private void handleGroupMessage(WxMessage wxMessage) {
logger.info("处理群聊消息: {}", JSON.toJSONString(wxMessage));
WxMessage.DataSection data = wxMessage.getData();
WxMessage.DataSection.InnerData innerData = data.getData();
if (Util.isAnyEmpty(innerData.getMsg(), innerData.getFromWxid())) {
logger.info("消息内容为空,不处理");
return;
} else {
logger.info("消息内容:{}", innerData.getMsg());
}
String fromWxid = innerData.getFromWxid();
String msg = innerData.getMsg();
if (chatRoom_xb.containsKey(fromWxid)) {
logger.info("线报群消息");
jdUtils.xb(msg, fromWxid);
return;
}
// 录单群
if ((chatRoom_JD_Order.contains(fromWxid))){
if (msg.startsWith("") || msg.startsWith("慢单") || msg.startsWith("录单") || msg.startsWith("TF") || msg.startsWith("H")) {
//logger.info("录单");
jdUtils.LD(msg, fromWxid);
return;
}
}
// 超级管理员内部群
if (chatRoom_admin_inner.contains(fromWxid)) {
if (msg.startsWith("")) {
logger.info("消息以单开头,处理单指令消息");
jdUtils.sendOrderToWxByOrderD(msg.replace("", ""), fromWxid);
return;
}
}
// 可以对外的群聊
if (!chatRoom_admin.contains(fromWxid) && !chatRoom_admin_pl.contains(fromWxid)) {
logger.info("不是白名单群聊,不处理");
return;
}
if (chatRoom_admin_pl.contains(fromWxid)) {
logger.info("处理评价指令消息 {}" ,fromWxid);
jdUtils.sendOrderToWxByOrderP(msg.trim(), fromWxid);
}else {
logger.info("未命中前置指令,开始命中 Default 流程");
jdUtils.sendOrderToWxByOrderDefault(msg, fromWxid);
}
}
}