From b30909942a662905024a890ad3a03b8afabfa5db Mon Sep 17 00:00:00 2001 From: misworga831 Date: Mon, 16 Oct 2023 11:49:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96im=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../im/entity/dto/IMTalkQueryParams.java | 47 ++++++++++++ .../modules/im/entity/dto/ImQueryParams.java | 6 +- .../im/entity/dto/MessageQueryParams.java | 11 ++- .../modules/im/service/ImTalkService.java | 9 +-- .../im/serviceimpl/ImTalkServiceImpl.java | 71 ++++++++++--------- .../lili/controller/im/ImTalkController.java | 9 +-- 6 files changed, 108 insertions(+), 45 deletions(-) create mode 100644 framework/src/main/java/cn/lili/modules/im/entity/dto/IMTalkQueryParams.java diff --git a/framework/src/main/java/cn/lili/modules/im/entity/dto/IMTalkQueryParams.java b/framework/src/main/java/cn/lili/modules/im/entity/dto/IMTalkQueryParams.java new file mode 100644 index 00000000..6557c6b8 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/im/entity/dto/IMTalkQueryParams.java @@ -0,0 +1,47 @@ +package cn.lili.modules.im.entity.dto; + +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.modules.im.entity.dos.ImTalk; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author paulG + * @since 2023/2/6 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class IMTalkQueryParams { + + @ApiModelProperty("用户1 id") + private String userId1; + + @ApiModelProperty("用户2 id") + private String userId2; + + @ApiModelProperty("用户1 name") + private String name1; + + @ApiModelProperty("用户2 name") + private String name2; + + @ApiModelProperty("关键字") + private String userName; + + + public QueryWrapper queryWrapper() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(userId1), "user_id1", this.userId1); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(userId2), "user_id2", this.userId2); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(name1), "name1", this.name1); + queryWrapper.eq(CharSequenceUtil.isNotEmpty(name2), "name2", this.name2); + queryWrapper.nested(CharSequenceUtil.isNotEmpty(userName), i -> i.like("name1", userName).or().like("name2", userName)); + return queryWrapper; + } +} diff --git a/framework/src/main/java/cn/lili/modules/im/entity/dto/ImQueryParams.java b/framework/src/main/java/cn/lili/modules/im/entity/dto/ImQueryParams.java index 8dc1f0fa..26fde23c 100644 --- a/framework/src/main/java/cn/lili/modules/im/entity/dto/ImQueryParams.java +++ b/framework/src/main/java/cn/lili/modules/im/entity/dto/ImQueryParams.java @@ -6,15 +6,19 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; /** * @author chc * @since 2022/6/2114:46 */ +@EqualsAndHashCode(callSuper = true) @Data @ApiModel public class ImQueryParams extends PageVO { + private static final long serialVersionUID = 5792718094087541134L; + @ApiModelProperty("用户Id") private String memberId; @@ -29,7 +33,7 @@ public class ImQueryParams extends PageVO { if (CharSequenceUtil.isNotEmpty(storeId)) { queryWrapper.eq("store_id", storeId); } - queryWrapper.eq("delete_flag",false); + queryWrapper.eq("delete_flag", false); queryWrapper.orderByDesc("create_time"); return queryWrapper; } diff --git a/framework/src/main/java/cn/lili/modules/im/entity/dto/MessageQueryParams.java b/framework/src/main/java/cn/lili/modules/im/entity/dto/MessageQueryParams.java index 372522c1..f9743302 100644 --- a/framework/src/main/java/cn/lili/modules/im/entity/dto/MessageQueryParams.java +++ b/framework/src/main/java/cn/lili/modules/im/entity/dto/MessageQueryParams.java @@ -1,12 +1,13 @@ package cn.lili.modules.im.entity.dto; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; -import cn.lili.common.utils.StringUtils; import cn.lili.common.vo.PageVO; import cn.lili.modules.im.entity.dos.ImMessage; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.Data; +import lombok.EqualsAndHashCode; /** * MessageQueryParams @@ -15,8 +16,12 @@ import lombok.Data; * @version v1.0 * 2022-01-20 17:16 */ +@EqualsAndHashCode(callSuper = true) @Data public class MessageQueryParams extends PageVO { + + private static final long serialVersionUID = 3504156704697214077L; + /** * 聊天窗口 */ @@ -31,7 +36,7 @@ public class MessageQueryParams extends PageVO { private Integer num; public LambdaQueryWrapper initQueryWrapper() { - if (StringUtils.isEmpty(talkId)) { + if (CharSequenceUtil.isEmpty(talkId)) { throw new ServiceException(ResultCode.ERROR); } if (num == null || num > 50) { @@ -40,7 +45,7 @@ public class MessageQueryParams extends PageVO { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(ImMessage::getTalkId, talkId); - if (StringUtils.isNotEmpty(lastMessageId)) { + if (CharSequenceUtil.isNotEmpty(lastMessageId)) { lambdaQueryWrapper.lt(ImMessage::getId, lastMessageId); } lambdaQueryWrapper.orderByDesc(ImMessage::getCreateTime); diff --git a/framework/src/main/java/cn/lili/modules/im/service/ImTalkService.java b/framework/src/main/java/cn/lili/modules/im/service/ImTalkService.java index b648a393..122776fc 100644 --- a/framework/src/main/java/cn/lili/modules/im/service/ImTalkService.java +++ b/framework/src/main/java/cn/lili/modules/im/service/ImTalkService.java @@ -1,6 +1,7 @@ package cn.lili.modules.im.service; import cn.lili.modules.im.entity.dos.ImTalk; +import cn.lili.modules.im.entity.dto.IMTalkQueryParams; import cn.lili.modules.im.entity.vo.ImTalkVO; import com.baomidou.mybatisplus.extension.service.IService; @@ -45,13 +46,13 @@ public interface ImTalkService extends IService { /** * 获取用户聊天列表 - * @return + * @return 用户聊天列表 */ - List getUserTalkList(); + List getUserTalkList(IMTalkQueryParams imTalkQueryParams); /** * 获取商家聊天列表 - * @return + * @return 商家聊天列表 */ - List getStoreTalkList(); + List getStoreTalkList(IMTalkQueryParams imTalkQueryParams); } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/im/serviceimpl/ImTalkServiceImpl.java b/framework/src/main/java/cn/lili/modules/im/serviceimpl/ImTalkServiceImpl.java index b5a4b17f..a4ec61f8 100644 --- a/framework/src/main/java/cn/lili/modules/im/serviceimpl/ImTalkServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/im/serviceimpl/ImTalkServiceImpl.java @@ -1,5 +1,6 @@ package cn.lili.modules.im.serviceimpl; +import cn.hutool.core.text.CharSequenceUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; @@ -7,6 +8,7 @@ import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.modules.im.entity.dos.ImMessage; import cn.lili.modules.im.entity.dos.ImTalk; +import cn.lili.modules.im.entity.dto.IMTalkQueryParams; import cn.lili.modules.im.entity.vo.ImTalkVO; import cn.lili.modules.im.mapper.ImTalkMapper; import cn.lili.modules.im.service.ImMessageService; @@ -51,35 +53,35 @@ public class ImTalkServiceImpl extends ServiceImpl impleme //登录用户的Id String selfId = ""; //查看当前用户角色对Id进行赋值 - if(UserEnums.STORE.equals(currentUser.getRole())){ + if (UserEnums.STORE.equals(currentUser.getRole())) { selfId = currentUser.getStoreId(); - }else if(UserEnums.MEMBER.equals(currentUser.getRole())){ + } else if (UserEnums.MEMBER.equals(currentUser.getRole())) { selfId = currentUser.getId(); } //小数在前保证永远是同一个对话 String finalSelfId = selfId; - queryWrapper.and(wq-> wq.eq(ImTalk::getUserId2, userId).eq(ImTalk::getUserId1, finalSelfId).or().eq(ImTalk::getUserId2, finalSelfId).eq(ImTalk::getUserId1, userId)); + queryWrapper.and(wq -> wq.eq(ImTalk::getUserId2, userId).eq(ImTalk::getUserId1, finalSelfId).or().eq(ImTalk::getUserId2, finalSelfId).eq(ImTalk::getUserId1, userId)); ImTalk imTalk = this.getOne(queryWrapper); //如果没有聊天,则创建聊天 if (imTalk == null) { //当自己为店铺时 - if(UserEnums.STORE.equals(currentUser.getRole())){ + if (UserEnums.STORE.equals(currentUser.getRole())) { Store selfStore = storeService.getById(selfId); //没有这个用户信息 Member other = memberService.getById(userId); - if(other == null){ + if (other == null) { return null; } //自己为店铺其他人必定为用户 - imTalk = new ImTalk(other,selfStore); - }else if(UserEnums.MEMBER.equals(currentUser.getRole())){ + imTalk = new ImTalk(other, selfStore); + } else if (UserEnums.MEMBER.equals(currentUser.getRole())) { //没有这个店铺信息 Member self = memberService.getById(selfId); Member otherMember = memberService.getById(userId); Store otherStore = storeService.getById(userId); - if(otherStore != null){ + if (otherStore != null) { imTalk = new ImTalk(self, otherStore); - }else if (otherMember != null){ + } else if (otherMember != null) { imTalk = new ImTalk(self, otherMember); } } @@ -95,41 +97,41 @@ public class ImTalkServiceImpl extends ServiceImpl impleme //登录用户的Id String selfId = ""; //查看当前用户角色对Id进行赋值 - if(UserEnums.STORE.equals(currentUser.getRole())){ + if (UserEnums.STORE.equals(currentUser.getRole())) { selfId = currentUser.getStoreId(); - }else if(UserEnums.MEMBER.equals(currentUser.getRole())){ + } else if (UserEnums.MEMBER.equals(currentUser.getRole())) { selfId = currentUser.getId(); } //小数在前保证永远是同一个对话 String finalSelfId = selfId; - queryWrapper.and(wq-> wq.eq(ImTalk::getUserId2, userId).eq(ImTalk::getUserId1, finalSelfId).or().eq(ImTalk::getUserId2, finalSelfId).eq(ImTalk::getUserId1, userId)); + queryWrapper.and(wq -> wq.eq(ImTalk::getUserId2, userId).eq(ImTalk::getUserId1, finalSelfId).or().eq(ImTalk::getUserId2, finalSelfId).eq(ImTalk::getUserId1, userId)); ImTalk imTalk = this.getOne(queryWrapper); //如果没有聊天,则创建聊天 if (imTalk == null) { //当自己为店铺时 - if(UserEnums.STORE.equals(currentUser.getRole())){ + if (UserEnums.STORE.equals(currentUser.getRole())) { Store selfStore = storeService.getById(selfId); //没有这个用户信息 Member other = memberService.getById(userId); - if(other == null){ + if (other == null) { return null; } //自己为店铺其他人必定为用户 - imTalk = new ImTalk(other,selfStore); - }else if(UserEnums.MEMBER.equals(currentUser.getRole())){ + imTalk = new ImTalk(other, selfStore); + } else if (UserEnums.MEMBER.equals(currentUser.getRole())) { //没有这个店铺信息 Member self = memberService.getById(selfId); Member otherMember = memberService.getById(userId); Store otherStore = storeService.getById(userId); - if(otherStore != null){ + if (otherStore != null) { imTalk = new ImTalk(self, otherStore); - }else if (otherMember != null){ + } else if (otherMember != null) { imTalk = new ImTalk(self, otherMember); } } this.save(imTalk); } - return new ImTalkVO(imTalk,currentUser.getId()); + return new ImTalkVO(imTalk, currentUser.getId()); } /** @@ -173,13 +175,16 @@ public class ImTalkServiceImpl extends ServiceImpl impleme } @Override - public List getUserTalkList() { + public List getUserTalkList(IMTalkQueryParams imTalkQueryParams) { AuthUser authUser = UserContext.getCurrentUser(); - if(authUser == null){ + if (authUser == null) { throw new ServiceException(ResultCode.USER_NOT_LOGIN); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.and(wq-> wq.eq(ImTalk::getUserId1, authUser.getId()).or().eq(ImTalk::getUserId2,authUser.getId())); + queryWrapper.and(wq -> wq.eq(ImTalk::getUserId1, authUser.getId()).or().eq(ImTalk::getUserId2, authUser.getId())); + if (CharSequenceUtil.isNotEmpty(imTalkQueryParams.getUserName())) { + queryWrapper.and(wq -> wq.ne(ImTalk::getUserId1, authUser.getId()).like(ImTalk::getName1, imTalkQueryParams.getUserName()).or().ne(ImTalk::getUserId2, authUser.getId()).like(ImTalk::getName2, imTalkQueryParams.getUserName())); + } queryWrapper.orderByDesc(ImTalk::getLastTalkTime); List imTalks = this.list(queryWrapper); List imTalkVOList = imTalks.stream().map(imTalk -> new ImTalkVO(imTalk, authUser.getId())).collect(Collectors.toList()); @@ -188,33 +193,33 @@ public class ImTalkServiceImpl extends ServiceImpl impleme } @Override - public List getStoreTalkList() { + public List getStoreTalkList(IMTalkQueryParams imTalkQueryParams) { AuthUser authUser = UserContext.getCurrentUser(); - if(authUser == null){ + if (authUser == null) { throw new ServiceException(ResultCode.STORE_NOT_LOGIN_ERROR); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.and(wq->{ - wq.eq(ImTalk::getUserId1, authUser.getStoreId()).or().eq(ImTalk::getUserId2,authUser.getStoreId()); - }); + queryWrapper.and(wq -> wq.eq(ImTalk::getUserId1, authUser.getStoreId()).or().eq(ImTalk::getUserId2, authUser.getStoreId())); + if (CharSequenceUtil.isNotEmpty(imTalkQueryParams.getUserName())) { + queryWrapper.and(wq -> wq.ne(ImTalk::getUserId1, authUser.getStoreId()).like(ImTalk::getName1, imTalkQueryParams.getUserName()).or().ne(ImTalk::getUserId2, authUser.getStoreId()).like(ImTalk::getName2, imTalkQueryParams.getUserName())); + } queryWrapper.orderByDesc(ImTalk::getLastTalkTime); List imTalks = this.list(queryWrapper); - List imTalkVOList = imTalks.stream().map(imTalk -> { - return new ImTalkVO(imTalk, authUser.getStoreId()); - }).collect(Collectors.toList()); + List imTalkVOList = imTalks.stream().map(imTalk -> new ImTalkVO(imTalk, authUser.getStoreId())).collect(Collectors.toList()); getUnread(imTalkVOList); return imTalkVOList; } /** * 获取未读消息数量 + * * @param imTalkVOList 消息列表 */ - private void getUnread(List imTalkVOList){ - if(!imTalkVOList.isEmpty()){ + private void getUnread(List imTalkVOList) { + if (!imTalkVOList.isEmpty()) { for (ImTalkVO imTalkVO : imTalkVOList) { - long count = imMessageService.count(new LambdaQueryWrapper().eq(ImMessage::getFromUser, imTalkVO.getUserId()).eq(ImMessage::getTalkId,imTalkVO.getId()).eq(ImMessage::getIsRead, false)); + long count = imMessageService.count(new LambdaQueryWrapper().eq(ImMessage::getFromUser, imTalkVO.getUserId()).eq(ImMessage::getTalkId, imTalkVO.getId()).eq(ImMessage::getIsRead, false)); imTalkVO.setUnread(count); } } diff --git a/im-api/src/main/java/cn/lili/controller/im/ImTalkController.java b/im-api/src/main/java/cn/lili/controller/im/ImTalkController.java index eee31a4a..9a6137f4 100644 --- a/im-api/src/main/java/cn/lili/controller/im/ImTalkController.java +++ b/im-api/src/main/java/cn/lili/controller/im/ImTalkController.java @@ -4,6 +4,7 @@ import cn.lili.common.enums.ResultCode; import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.modules.im.entity.dos.ImTalk; +import cn.lili.modules.im.entity.dto.IMTalkQueryParams; import cn.lili.modules.im.entity.vo.ImTalkVO; import cn.lili.modules.im.service.ImTalkService; import io.swagger.annotations.Api; @@ -58,14 +59,14 @@ public class ImTalkController { @GetMapping("/list") @ApiOperation(value = "分页获取用户聊天") - public ResultMessage> getUserTalkList() { - return ResultUtil.data(imTalkService.getUserTalkList()); + public ResultMessage> getUserTalkList(IMTalkQueryParams imTalkQueryParams) { + return ResultUtil.data(imTalkService.getUserTalkList(imTalkQueryParams)); } @GetMapping("/store/list") @ApiOperation(value = "分页获取商家聊天") - public ResultMessage> getStoreTalkList() { - return ResultUtil.data(imTalkService.getStoreTalkList()); + public ResultMessage> getStoreTalkList(IMTalkQueryParams imTalkQueryParams) { + return ResultUtil.data(imTalkService.getStoreTalkList(imTalkQueryParams)); } @DeleteMapping(value = "/{id}")