|
@@ -67,7 +67,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
if (beforeMsgId != null) {
|
|
if (beforeMsgId != null) {
|
|
|
lqw.lt(CsMessage::getId, beforeMsgId);
|
|
lqw.lt(CsMessage::getId, beforeMsgId);
|
|
|
}
|
|
}
|
|
|
- lqw.orderByDesc(CsMessage::getSendTime);
|
|
|
|
|
|
|
+ lqw.orderByDesc(CsMessage::getSendTime, CsMessage::getId);
|
|
|
|
|
|
|
|
Page<CsMessage> page = baseMapper.selectPage(pageQuery.build(), lqw);
|
|
Page<CsMessage> page = baseMapper.selectPage(pageQuery.build(), lqw);
|
|
|
Page<CsMessageVo> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
|
|
Page<CsMessageVo> voPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
|
|
@@ -90,7 +90,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
message.setContent(bo.getContent());
|
|
message.setContent(bo.getContent());
|
|
|
message.setStatus(1);
|
|
message.setStatus(1);
|
|
|
message.setIsRead(0);
|
|
message.setIsRead(0);
|
|
|
- message.setSendTime(LocalDateTime.now());
|
|
|
|
|
|
|
+ message.setSendTime(resolveSendTime(bo.getSessionId()));
|
|
|
|
|
|
|
|
baseMapper.insert(message);
|
|
baseMapper.insert(message);
|
|
|
sessionService.updateLastMessage(bo.getSessionId(),
|
|
sessionService.updateLastMessage(bo.getSessionId(),
|
|
@@ -140,7 +140,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
message.setFileType(contentType);
|
|
message.setFileType(contentType);
|
|
|
message.setStatus(1);
|
|
message.setStatus(1);
|
|
|
message.setIsRead(0);
|
|
message.setIsRead(0);
|
|
|
- message.setSendTime(LocalDateTime.now());
|
|
|
|
|
|
|
+ message.setSendTime(resolveSendTime(sessionId));
|
|
|
|
|
|
|
|
baseMapper.insert(message);
|
|
baseMapper.insert(message);
|
|
|
sessionService.updateLastMessage(sessionId, "[图片]");
|
|
sessionService.updateLastMessage(sessionId, "[图片]");
|
|
@@ -191,7 +191,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
message.setFileType(contentType);
|
|
message.setFileType(contentType);
|
|
|
message.setStatus(1);
|
|
message.setStatus(1);
|
|
|
message.setIsRead(0);
|
|
message.setIsRead(0);
|
|
|
- message.setSendTime(LocalDateTime.now());
|
|
|
|
|
|
|
+ message.setSendTime(resolveSendTime(sessionId));
|
|
|
|
|
|
|
|
baseMapper.insert(message);
|
|
baseMapper.insert(message);
|
|
|
sessionService.updateLastMessage(sessionId, "[文件]" + fileName);
|
|
sessionService.updateLastMessage(sessionId, "[文件]" + fileName);
|
|
@@ -220,7 +220,7 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
message.setPayload(JSONUtil.toJsonStr(bo.getPayload()));
|
|
message.setPayload(JSONUtil.toJsonStr(bo.getPayload()));
|
|
|
message.setStatus(1);
|
|
message.setStatus(1);
|
|
|
message.setIsRead(0);
|
|
message.setIsRead(0);
|
|
|
- message.setSendTime(LocalDateTime.now());
|
|
|
|
|
|
|
+ message.setSendTime(resolveSendTime(bo.getSessionId()));
|
|
|
|
|
|
|
|
baseMapper.insert(message);
|
|
baseMapper.insert(message);
|
|
|
sessionService.updateLastMessage(bo.getSessionId(), "[岗位推荐]");
|
|
sessionService.updateLastMessage(bo.getSessionId(), "[岗位推荐]");
|
|
@@ -258,6 +258,26 @@ public class CsMessageServiceImpl implements ICsMessageService {
|
|
|
return senderId != null ? senderId : LoginHelper.getUserId();
|
|
return senderId != null ? senderId : LoginHelper.getUserId();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 同一会话内保证消息时间单调递增,避免多节点时钟偏差导致后发消息时间反而更早。
|
|
|
|
|
+ */
|
|
|
|
|
+ private LocalDateTime resolveSendTime(Long sessionId) {
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ if (sessionId == null) {
|
|
|
|
|
+ return now;
|
|
|
|
|
+ }
|
|
|
|
|
+ CsMessage lastMessage = baseMapper.selectOne(
|
|
|
|
|
+ Wrappers.lambdaQuery(CsMessage.class)
|
|
|
|
|
+ .eq(CsMessage::getSessionId, sessionId)
|
|
|
|
|
+ .orderByDesc(CsMessage::getSendTime, CsMessage::getId)
|
|
|
|
|
+ .last("LIMIT 1")
|
|
|
|
|
+ );
|
|
|
|
|
+ if (lastMessage != null && lastMessage.getSendTime() != null && !now.isAfter(lastMessage.getSendTime())) {
|
|
|
|
|
+ return lastMessage.getSendTime().plusSeconds(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ return now;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private Integer resolveSenderType(Long sessionId, Long senderId) {
|
|
private Integer resolveSenderType(Long sessionId, Long senderId) {
|
|
|
if (senderId == null || sessionId == null) {
|
|
if (senderId == null || sessionId == null) {
|
|
|
return 1;
|
|
return 1;
|