Gqingci 2 дней назад
Родитель
Сommit
a91c6657dd

+ 23 - 5
ruoyi-modules/ruoyi-main/src/main/java/org/dromara/main/service/impl/CsMessageServiceImpl.java

@@ -80,6 +80,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
     @Transactional(rollbackFor = Exception.class)
     public CsMessageVo sendTextMessage(CsMessageBo bo) {
         Long senderId = resolveSenderId(bo.getSenderId());
+        CsSession session = sessionMapper.selectById(bo.getSessionId());
         CsMessage message = new CsMessage();
         message.setSessionId(bo.getSessionId());
         message.setMsgNo(bo.getMsgNo());
@@ -97,8 +98,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
             StrUtil.sub(bo.getContent(), 0, 100));
 
         CsMessageVo vo = converter.convert(message, CsMessageVo.class);
-        // 广播前填充 senderRole/senderName/senderAvatar 等字段,确保前端能正确识别发送者
-        enrichMessageVo(vo, sessionMapper.selectById(bo.getSessionId()), null, null, Collections.emptyMap());
+        enrichRealtimeMessageVo(vo, session);
         messagingTemplate.convertAndSend("/topic/session/" + bo.getSessionId(), vo);
         notifyWaiter(vo);
 
@@ -116,6 +116,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
     public CsMessageVo sendImageMessage(Long sessionId, String msgNo, Long senderId, MultipartFile file, Integer senderType) {
         try {
             Long actualSenderId = resolveSenderId(senderId);
+            CsSession session = sessionMapper.selectById(sessionId);
             OssClient ossClient = OssFactory.instance();
             String fileName = file.getOriginalFilename();
             InputStream inputStream = file.getInputStream();
@@ -146,7 +147,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
             sessionService.updateLastMessage(sessionId, "[图片]");
 
             CsMessageVo vo = converter.convert(message, CsMessageVo.class);
-            enrichMessageVo(vo, sessionMapper.selectById(sessionId), null, null, Collections.emptyMap());
+            enrichRealtimeMessageVo(vo, session);
             messagingTemplate.convertAndSend("/topic/session/" + sessionId, vo);
             notifyWaiter(vo);
 
@@ -167,6 +168,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
     public CsMessageVo sendFileMessage(Long sessionId, String msgNo, Long senderId, MultipartFile file, Integer senderType) {
         try {
             Long actualSenderId = resolveSenderId(senderId);
+            CsSession session = sessionMapper.selectById(sessionId);
             OssClient ossClient = OssFactory.instance();
             String fileName = file.getOriginalFilename();
             InputStream inputStream = file.getInputStream();
@@ -197,7 +199,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
             sessionService.updateLastMessage(sessionId, "[文件]" + fileName);
 
             CsMessageVo vo = converter.convert(message, CsMessageVo.class);
-            enrichMessageVo(vo, sessionMapper.selectById(sessionId), null, null, Collections.emptyMap());
+            enrichRealtimeMessageVo(vo, session);
             messagingTemplate.convertAndSend("/topic/session/" + sessionId, vo);
             notifyWaiter(vo);
 
@@ -211,6 +213,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
     @Transactional(rollbackFor = Exception.class)
     public CsMessageVo sendJobCard(CsMessageBo bo) {
         Long senderId = resolveSenderId(bo.getSenderId());
+        CsSession session = sessionMapper.selectById(bo.getSessionId());
         CsMessage message = new CsMessage();
         message.setSessionId(bo.getSessionId());
         message.setMsgNo(bo.getMsgNo());
@@ -226,7 +229,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
         sessionService.updateLastMessage(bo.getSessionId(), "[岗位推荐]");
 
         CsMessageVo vo = converter.convert(message, CsMessageVo.class);
-        enrichMessageVo(vo, sessionMapper.selectById(bo.getSessionId()), null, null, Collections.emptyMap());
+        enrichRealtimeMessageVo(vo, session);
         messagingTemplate.convertAndSend("/topic/session/" + bo.getSessionId(), vo);
         notifyWaiter(vo);
 
@@ -289,6 +292,21 @@ public class CsMessageServiceImpl implements ICsMessageService {
         return 1;
     }
 
+    private void enrichRealtimeMessageVo(CsMessageVo vo, CsSession session) {
+        CsSeatConfig seat = session != null && session.getSeatId() != null
+            ? seatConfigMapper.selectById(session.getSeatId())
+            : null;
+        Map<Long, SysUser> waiterMap = Collections.emptyMap();
+        if (vo != null && Objects.equals(vo.getSenderType(), 2) && vo.getSenderId() != null) {
+            SysUser waiter = sysUserMapper.selectById(vo.getSenderId());
+            if (waiter != null) {
+                waiterMap = Collections.singletonMap(waiter.getUserId(), waiter);
+            }
+        }
+        MainCompanyApply companyApply = loadCompanyApply(session);
+        enrichMessageVo(vo, session, seat, companyApply, waiterMap);
+    }
+
     private List<CsMessageVo> enrichMessageVos(List<CsMessageVo> records, CsSession session) {
         if (records == null || records.isEmpty()) {
             return records;