feat: 聊天列表添加未读信息
This commit is contained in:
parent
441d843573
commit
ed316c7925
|
|
@ -33,3 +33,4 @@ build/
|
|||
.vscode/
|
||||
logs
|
||||
*.log
|
||||
*.log
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import com.nflg.mobilebroken.repository.service.*;
|
|||
import com.nflg.mobilebroken.starter.annotation.MethodInfoMark;
|
||||
import com.nflg.mobilebroken.starter.service.impl.APPSSEManagerService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
|
@ -96,6 +97,9 @@ public class TicketController extends ControllerBase {
|
|||
@Resource
|
||||
private TicketEventPublisher ticketEventPublisher;
|
||||
|
||||
@Resource
|
||||
private RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
/**
|
||||
* 获取问题类型
|
||||
* @return 问题类型列表
|
||||
|
|
@ -501,8 +505,33 @@ public class TicketController extends ControllerBase {
|
|||
**/
|
||||
@GetMapping("getChatMessages")
|
||||
@ApiMark(moduleName = "工单管理", apiName = "获取工单聊天记录")
|
||||
public ApiResult<List<ChatMessageVO>> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) {
|
||||
return ApiResult.success(ticketChatService.getMessages(ticketId));
|
||||
public ApiResult<MessageVO> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) {
|
||||
MessageVO vo=new MessageVO();
|
||||
List<ChatMessageVO> messageVOS=ticketChatService.getMessages(ticketId);
|
||||
vo.setMessages(messageVOS);
|
||||
String key="chatMessage:readed:"+ticketId+":admin:"+AdminUserUtil.getUserId();
|
||||
Set<String> readeds=redisTemplate.opsForSet().members(key);
|
||||
Set<String> notReadeds=new HashSet<>();
|
||||
if (CollectionUtil.isEmpty(readeds)){
|
||||
notReadeds=messageVOS.stream()
|
||||
.filter(m->!Objects.equals(m.getSenderId(),AdminUserUtil.getUserId()))
|
||||
.map(ChatMessageVO::getId)
|
||||
.collect(Collectors.toSet());
|
||||
}else {
|
||||
for (ChatMessageVO messageVO:messageVOS) {
|
||||
if (Objects.equals(messageVO.getSenderId(),AdminUserUtil.getUserId()) || readeds.contains(messageVO.getId())){
|
||||
messageVO.setReaded(true);
|
||||
}else {
|
||||
notReadeds.add(messageVO.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(notReadeds)) {
|
||||
redisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new));
|
||||
vo.setNotReadCount(notReadeds.size());
|
||||
vo.setFirstMessageId(notReadeds.stream().findFirst().get());
|
||||
}
|
||||
return ApiResult.success(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import com.nflg.mobilebroken.repository.entity.*;
|
|||
import com.nflg.mobilebroken.repository.service.*;
|
||||
import com.nflg.mobilebroken.starter.service.impl.AdminSSEManagerService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
|
@ -88,6 +89,9 @@ public class TiketController extends ControllerBase {
|
|||
@Resource
|
||||
private TicketEventPublisher ticketEventPublisher;
|
||||
|
||||
@Resource
|
||||
private RedisTemplate<String, String> redisTemplate;
|
||||
|
||||
/**
|
||||
* 搜索设备
|
||||
* @param request 搜索条件
|
||||
|
|
@ -276,8 +280,33 @@ public class TiketController extends ControllerBase {
|
|||
* @return 聊天记录
|
||||
**/
|
||||
@GetMapping("getChatMessages")
|
||||
public ApiResult<List<ChatMessageVO>> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) {
|
||||
return ApiResult.success(ticketChatService.getMessages(ticketId));
|
||||
public ApiResult<MessageVO> getChatMessages(@Valid @RequestParam @NotNull Integer ticketId) {
|
||||
MessageVO vo=new MessageVO();
|
||||
List<ChatMessageVO> messageVOS=ticketChatService.getMessages(ticketId);
|
||||
vo.setMessages(messageVOS);
|
||||
String key="chatMessage:readed:"+ticketId+":app:"+AppUserUtil.getUserId();
|
||||
Set<String> readeds=redisTemplate.opsForSet().members(key);
|
||||
Set<String> notReadeds=new HashSet<>();
|
||||
if (CollectionUtil.isEmpty(readeds)){
|
||||
notReadeds=messageVOS.stream()
|
||||
.filter(m->!Objects.equals(m.getSenderId(),AppUserUtil.getUserId()))
|
||||
.map(ChatMessageVO::getId)
|
||||
.collect(Collectors.toSet());
|
||||
}else {
|
||||
for (ChatMessageVO messageVO:messageVOS) {
|
||||
if (Objects.equals(messageVO.getSenderId(),AppUserUtil.getUserId()) || readeds.contains(messageVO.getId())){
|
||||
messageVO.setReaded(true);
|
||||
}else {
|
||||
notReadeds.add(messageVO.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtil.isNotEmpty(notReadeds)) {
|
||||
redisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new));
|
||||
vo.setNotReadCount(notReadeds.size());
|
||||
vo.setFirstMessageId(notReadeds.stream().findFirst().get());
|
||||
}
|
||||
return ApiResult.success(vo);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -40,4 +40,7 @@ public class ChatMessageVO {
|
|||
|
||||
// 引用的消息
|
||||
private ChatMessageVO quote;
|
||||
|
||||
// 是否已读
|
||||
private Boolean readed=false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
package com.nflg.mobilebroken.common.pojo.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class MessageVO {
|
||||
|
||||
// 未读消息数量
|
||||
private Integer notReadCount;
|
||||
|
||||
// 第一条消息id
|
||||
private String firstMessageId;
|
||||
|
||||
// 消息列表
|
||||
private List<ChatMessageVO> messages;
|
||||
}
|
||||
Loading…
Reference in New Issue