Files
Jarvis_java/src/main/java/cn/van/business/util/WxMessageConsumer.java
Van0313 9b457d25eb 评论
2025-07-09 00:25:53 +08:00

150 lines
5.2 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 com.alibaba.fastjson2.JSON;
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 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;
private final OtherUtil otherUtil;
@Autowired
public WxMessageConsumer(@Lazy JDUtil jdUtils, OtherUtil otherUtil) {
this.jdUtils = jdUtils;
this.otherUtil = otherUtil;
}
@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) {
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;
}
if (msg.contains("<sourcedisplayname>唐门云课</sourcedisplayname>")){
logger.info("消息来自唐门云课,处理指令消息" );
otherUtil.tmyk(msg,fromWxid);
}
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") || msg.startsWith("慢搜") || msg.startsWith("慢查")) {
//logger.info("录单");
jdUtils.manman(msg, fromWxid);
return;
}
if (msg.startsWith("")){
logger.info("消息以生开头,处理单指令消息");
jdUtils.sendOrderToWxByOrderD(msg.replace("", ""), fromWxid);
}
}
// 超级管理员内部群
//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);
}
}
}