diff --git a/research-admin/src/main/java/com/research/web/controller/client/session/SessionController.java b/research-admin/src/main/java/com/research/web/controller/client/session/SessionController.java index ebe33e3c..62e73bfe 100644 --- a/research-admin/src/main/java/com/research/web/controller/client/session/SessionController.java +++ b/research-admin/src/main/java/com/research/web/controller/client/session/SessionController.java @@ -80,4 +80,16 @@ public class SessionController { public JsonResponse queryUnRead(){ return JsonResponse.ok(sessionService.queryUnRead()); } + + @ApiOperation(value = "群组会话添加人员") + @RequestMapping(value = "/addSessionMember", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse addSessionMember(@ApiParam @Validated @RequestBody SessionDto.AddSessionMember dto){ + return JsonResponse.ok(sessionService.addSessionMember(dto)); + } + + @ApiOperation(value = "群组会话删除人员") + @RequestMapping(value = "/delSessionMember", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse delSessionMember(@ApiParam @Validated @RequestBody SessionDto.AddSessionMember dto){ + return JsonResponse.ok(sessionService.delSessionMember(dto)); + } } diff --git a/research-system/src/main/java/com/research/system/domain/dto/SessionDto.java b/research-system/src/main/java/com/research/system/domain/dto/SessionDto.java index 77399348..7d7c8f38 100644 --- a/research-system/src/main/java/com/research/system/domain/dto/SessionDto.java +++ b/research-system/src/main/java/com/research/system/domain/dto/SessionDto.java @@ -63,4 +63,11 @@ public class SessionDto { private List idList; } + @Data + public static class AddSessionMember{ + @ApiModelProperty("会话id") + private Long sessionId; + @ApiModelProperty("会话成员") + private List memberList; + } } diff --git a/research-system/src/main/java/com/research/system/domain/vo/SessionVo.java b/research-system/src/main/java/com/research/system/domain/vo/SessionVo.java index 960a1108..3b529cb0 100644 --- a/research-system/src/main/java/com/research/system/domain/vo/SessionVo.java +++ b/research-system/src/main/java/com/research/system/domain/vo/SessionVo.java @@ -104,7 +104,7 @@ public class SessionVo { @ApiModelProperty("会话ID") private Long sessionId; @ApiModelProperty("该会话ID未读数量") - private Integer num; + private Integer num = 0; } } diff --git a/research-system/src/main/java/com/research/system/service/SessionService.java b/research-system/src/main/java/com/research/system/service/SessionService.java index 46ee1ea4..7e110017 100644 --- a/research-system/src/main/java/com/research/system/service/SessionService.java +++ b/research-system/src/main/java/com/research/system/service/SessionService.java @@ -27,4 +27,8 @@ public interface SessionService { Integer delLog(SessionDto.Delete dto); SessionVo.UnRead queryUnRead(); + + Integer addSessionMember(SessionDto.AddSessionMember dto); + + Integer delSessionMember(SessionDto.AddSessionMember dto); } diff --git a/research-system/src/main/java/com/research/system/service/impl/SessionServiceImpl.java b/research-system/src/main/java/com/research/system/service/impl/SessionServiceImpl.java index 14382f96..f948e3a7 100644 --- a/research-system/src/main/java/com/research/system/service/impl/SessionServiceImpl.java +++ b/research-system/src/main/java/com/research/system/service/impl/SessionServiceImpl.java @@ -20,8 +20,10 @@ import com.research.system.service.SessionService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @Author zzc @@ -72,7 +74,20 @@ public class SessionServiceImpl implements SessionService { if (dto.getPageNum() > 0) { PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); } - messageLogResult.setLogList(new PageInfo<>(sessionDao.queryLogList(dto.getParam()))); + List logLists = sessionDao.queryLogList(dto.getParam()); + if (CollUtil.isNotEmpty(logLists)) { + List collect = logLists.stream().sorted(Comparator.comparing(SessionVo.MessageLogResult.LogList::getSendTime)).collect(Collectors.toList()); + for (SessionVo.MessageLogResult.LogList logList : collect) { + ChatMessageReadStatusExample chatMessageReadStatusExample = new ChatMessageReadStatusExample(); + chatMessageReadStatusExample.createCriteria().andSessionIdEqualTo(dto.getParam().getSessionId()) + .andSessionMessageIdEqualTo(logList.getMessageId()) + .andSessionMemberIdEqualTo(SecurityUtils.getUserId()); + ChatMessageReadStatus chatMessageReadStatus = new ChatMessageReadStatus(); + chatMessageReadStatus.setReadStatus(Byte.valueOf("1")); + chatMessageReadStatusMapper.updateByExampleSelective(chatMessageReadStatus, chatMessageReadStatusExample); + } + messageLogResult.setLogList(new PageInfo<>(collect)); + } messageLogResult.setMemberList(sessionDao.queryMemberList(dto.getParam())); return messageLogResult; } @@ -177,7 +192,56 @@ public class SessionServiceImpl implements SessionService { //根据登录人查询未读消息 List unReadItems = sessionDao.queryUnReadList(SecurityUtils.getUserId()); unRead.setUnreadList(unReadItems); - unRead.setTotal(CollUtil.isNotEmpty(unReadItems) ? unReadItems.stream().map(SessionVo.UnRead.UnReadItem::getNum).reduce(0, Integer::sum) : 0); + if (CollUtil.isNotEmpty(unReadItems)) { + List collect = unReadItems.stream().map(SessionVo.UnRead.UnReadItem::getNum).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collect)) { + Integer total = 0; + for (Integer integer : collect) { + if (integer != null && integer > 0) { + total += integer; + } + } + unRead.setTotal(total); + } + } return unRead; } + + @Override + public Integer addSessionMember(SessionDto.AddSessionMember dto) { + ChatSessions chatSessions = chatSessionsMapper.selectByPrimaryKey(dto.getSessionId()); + if (chatSessions == null) { + throw new RuntimeException("会话不存在"); + } + for (Long aLong : dto.getMemberList()) { + SysUser sysUser = sysUserService.selectUserById(aLong); + if (sysUser == null) { + continue; + } + ChatSessionMembers chatSessionMembers = new ChatSessionMembers(); + chatSessionMembers.setId(IdUtil.getSnowflakeNextId()); + chatSessionMembers.setSessionId(chatSessions.getId()); + chatSessionMembers.setSessionMemberId(aLong); + chatSessionMembers.setIsCreator(Objects.equals(aLong, SecurityUtils.getUserId()) ? (byte) 1 : (byte) 0); + chatSessionMembers.setIsAdmin(Objects.equals(aLong, SecurityUtils.getUserId()) ? (byte) 1 : (byte) 0); + chatSessionMembers.setSessionAlias(""); + chatSessionMembers.setCreateBy(SecurityUtils.getUsername()); + chatSessionMembers.setCreateTime(new java.util.Date()); + chatSessionMembersMapper.insertSelective(chatSessionMembers); + } + return 1; + } + + @Override + public Integer delSessionMember(SessionDto.AddSessionMember dto) { + ChatSessions chatSessions = chatSessionsMapper.selectByPrimaryKey(dto.getSessionId()); + if (chatSessions == null) { + throw new RuntimeException("会话不存在"); + } + ChatSessionMembersExample chatSessionMembersExample = new ChatSessionMembersExample(); + chatSessionMembersExample.createCriteria().andSessionIdEqualTo(chatSessions.getId()).andSessionMemberIdIn(dto.getMemberList()).andSessionIdEqualTo(chatSessions.getId()); + ChatSessionMembers chatSessionMembers = new ChatSessionMembers(); + chatSessionMembers.setDelFlag((byte) 1); + return chatSessionMembersMapper.updateByExampleSelective(chatSessionMembers, chatSessionMembersExample); + } } diff --git a/research-system/src/main/resources/mapper/dao/SessionDao.xml b/research-system/src/main/resources/mapper/dao/SessionDao.xml index 7d2738fe..41701063 100644 --- a/research-system/src/main/resources/mapper/dao/SessionDao.xml +++ b/research-system/src/main/resources/mapper/dao/SessionDao.xml @@ -17,11 +17,12 @@ select * from m.create_time as lastMessageTime, m.sender_id as senderId, s.create_time as createTime, - null + null as orgName FROM chat_sessions s LEFT JOIN chat_session_messages m on s.id = m.session_id - where s.created_by = #{userId} + LEFT JOIN chat_session_members csm on s.id = csm.session_id + where csm.session_member_id = #{userId} and s.session_name like concat('%',#{nickname},'%') @@ -44,6 +45,7 @@ select * from LEFT JOIN chat_session_members sm on sm.session_member_id = l.user_id and sm.is_creator = 1 LEFT JOIN chat_sessions cs on sm.session_id = cs.id and session_type = 0 + l.user_id != #{userId} and l.nick_name like concat('%',#{nickname},'%') @@ -100,8 +102,8 @@ select * from