This commit is contained in:
van
2026-04-01 15:52:55 +08:00
parent 6a88a68320
commit 921c8a2374
9 changed files with 399 additions and 1 deletions

View File

@@ -0,0 +1,134 @@
package com.ruoyi.jarvis.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.Date;
/**
* 企微 inbound 消息追踪 wecom_inbound_trace
*/
public class WeComInboundTrace extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long id;
@Excel(name = "消息ID")
private String msgId;
@Excel(name = "AgentID")
private String agentId;
@Excel(name = "CorpId")
private String corpId;
@Excel(name = "发送人UserID")
private String fromUserName;
private String content;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "微信发送时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date wxMsgTime;
private String replyContent;
@Excel(name = "会话进行中", readConverterExp = "0=否,1=是")
private Integer sessionActive;
@Excel(name = "会话场景")
private String sessionScene;
@Excel(name = "会话步骤")
private String sessionStep;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public String getAgentId() {
return agentId;
}
public void setAgentId(String agentId) {
this.agentId = agentId;
}
public String getCorpId() {
return corpId;
}
public void setCorpId(String corpId) {
this.corpId = corpId;
}
public String getFromUserName() {
return fromUserName;
}
public void setFromUserName(String fromUserName) {
this.fromUserName = fromUserName;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getWxMsgTime() {
return wxMsgTime;
}
public void setWxMsgTime(Date wxMsgTime) {
this.wxMsgTime = wxMsgTime;
}
public String getReplyContent() {
return replyContent;
}
public void setReplyContent(String replyContent) {
this.replyContent = replyContent;
}
public Integer getSessionActive() {
return sessionActive;
}
public void setSessionActive(Integer sessionActive) {
this.sessionActive = sessionActive;
}
public String getSessionScene() {
return sessionScene;
}
public void setSessionScene(String sessionScene) {
this.sessionScene = sessionScene;
}
public String getSessionStep() {
return sessionStep;
}
public void setSessionStep(String sessionStep) {
this.sessionStep = sessionStep;
}
}

View File

@@ -15,6 +15,8 @@ public class WeComInboundRequest {
private String toUserName;
private String agentId;
private String msgId;
/** 企微 XML CreateTime秒级 Unix 时间戳wxSend 传入) */
private Long wxCreateTime;
public String getFromUserName() {
return fromUserName;
@@ -55,4 +57,12 @@ public class WeComInboundRequest {
public void setMsgId(String msgId) {
this.msgId = msgId;
}
public Long getWxCreateTime() {
return wxCreateTime;
}
public void setWxCreateTime(Long wxCreateTime) {
this.wxCreateTime = wxCreateTime;
}
}

View File

@@ -0,0 +1,16 @@
package com.ruoyi.jarvis.mapper;
import com.ruoyi.jarvis.domain.WeComInboundTrace;
import java.util.List;
public interface WeComInboundTraceMapper {
int insertWeComInboundTrace(WeComInboundTrace trace);
WeComInboundTrace selectWeComInboundTraceById(Long id);
List<WeComInboundTrace> selectWeComInboundTraceList(WeComInboundTrace query);
int deleteWeComInboundTraceByIds(Long[] ids);
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.jarvis.service;
import com.ruoyi.jarvis.domain.WeComInboundTrace;
import com.ruoyi.jarvis.domain.dto.WeComInboundRequest;
import java.util.List;
public interface IWeComInboundTraceService {
void recordInbound(WeComInboundRequest request, String reply);
WeComInboundTrace selectWeComInboundTraceById(Long id);
List<WeComInboundTrace> selectWeComInboundTraceList(WeComInboundTrace query);
int deleteWeComInboundTraceByIds(Long[] ids);
}

View File

@@ -0,0 +1,73 @@
package com.ruoyi.jarvis.service.impl;
import com.ruoyi.jarvis.domain.WeComInboundTrace;
import com.ruoyi.jarvis.domain.dto.WeComChatSession;
import com.ruoyi.jarvis.domain.dto.WeComInboundRequest;
import com.ruoyi.jarvis.mapper.WeComInboundTraceMapper;
import com.ruoyi.jarvis.service.IWeComChatSessionService;
import com.ruoyi.jarvis.service.IWeComInboundTraceService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Service
public class WeComInboundTraceServiceImpl implements IWeComInboundTraceService {
private static final Logger log = LoggerFactory.getLogger(WeComInboundTraceServiceImpl.class);
@Resource
private WeComInboundTraceMapper weComInboundTraceMapper;
@Resource
private IWeComChatSessionService weComChatSessionService;
@Override
public void recordInbound(WeComInboundRequest request, String reply) {
if (request == null || !StringUtils.hasText(request.getFromUserName())) {
return;
}
try {
String from = request.getFromUserName().trim();
WeComInboundTrace trace = new WeComInboundTrace();
trace.setMsgId(request.getMsgId());
trace.setAgentId(request.getAgentId());
trace.setCorpId(request.getToUserName());
trace.setFromUserName(from);
trace.setContent(request.getContent());
Long wxSec = request.getWxCreateTime();
if (wxSec != null && wxSec > 0) {
trace.setWxMsgTime(new Date(wxSec * 1000L));
}
trace.setReplyContent(reply != null ? reply : "");
WeComChatSession session = weComChatSessionService.get(from);
trace.setSessionActive(session != null ? 1 : 0);
if (session != null) {
trace.setSessionScene(session.getScene());
trace.setSessionStep(session.getStep());
}
weComInboundTraceMapper.insertWeComInboundTrace(trace);
} catch (Exception e) {
log.warn("企微消息追踪落库失败: {}", e.toString());
}
}
@Override
public WeComInboundTrace selectWeComInboundTraceById(Long id) {
return weComInboundTraceMapper.selectWeComInboundTraceById(id);
}
@Override
public List<WeComInboundTrace> selectWeComInboundTraceList(WeComInboundTrace query) {
return weComInboundTraceMapper.selectWeComInboundTraceList(query);
}
@Override
public int deleteWeComInboundTraceByIds(Long[] ids) {
return weComInboundTraceMapper.deleteWeComInboundTraceByIds(ids);
}
}