fix: 修复IM新用户与自己对话问题

This commit is contained in:
chc 2023-03-20 12:03:34 +08:00
parent d48e5a05a6
commit c2abc4e2e4
3 changed files with 52 additions and 1 deletions

View File

@ -21,6 +21,13 @@ public interface ImTalkService extends IService<ImTalk> {
*/
ImTalk getTalkByUser(String userId1);
/**
* 获取与某人的聊天
* @param userId
* @return
*/
ImTalkVO getTalkByUserId(String userId);
/**
* 置顶消息
*

View File

@ -88,6 +88,50 @@ public class ImTalkServiceImpl extends ServiceImpl<ImTalkMapper, ImTalk> impleme
return imTalk;
}
@Override
public ImTalkVO getTalkByUserId(String userId) {
LambdaQueryWrapper<ImTalk> queryWrapper = new LambdaQueryWrapper<>();
AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
//登录用户的Id
String selfId = "";
//查看当前用户角色对Id进行赋值
if(UserEnums.STORE.equals(currentUser.getRole())){
selfId = currentUser.getStoreId();
}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));
ImTalk imTalk = this.getOne(queryWrapper);
//如果没有聊天则创建聊天
if (imTalk == null) {
//当自己为店铺时
if(UserEnums.STORE.equals(currentUser.getRole())){
Store selfStore = storeService.getById(selfId);
//没有这个用户信息
Member other = memberService.getById(userId);
if(other == null){
return null;
}
//自己为店铺其他人必定为用户
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){
imTalk = new ImTalk(self, otherStore);
}else if (otherMember != null){
imTalk = new ImTalk(self, otherMember);
}
}
this.save(imTalk);
}
return new ImTalkVO(imTalk,currentUser.getId());
}
/**
* 发起聊天后如果聊天不可见为true则需要修正
*

View File

@ -46,7 +46,7 @@ public class ImTalkController {
@GetMapping(value = "/by/user/{userId}")
@ApiOperation(value = "查看与某人聊天详情")
public ResultMessage<ImTalkVO> getByUser(@PathVariable String userId) {
return ResultUtil.data(new ImTalkVO(imTalkService.getTalkByUser(userId),userId));
return ResultUtil.data(imTalkService.getTalkByUserId(userId));
}
@GetMapping(value = "/top")