fix: 优化im搜索
This commit is contained in:
parent
7c64e1f11d
commit
b30909942a
@ -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<ImTalk> queryWrapper() {
|
||||||
|
QueryWrapper<ImTalk> 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;
|
||||||
|
}
|
||||||
|
}
|
@ -6,15 +6,19 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author chc
|
* @author chc
|
||||||
* @since 2022/6/2114:46
|
* @since 2022/6/2114:46
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel
|
@ApiModel
|
||||||
public class ImQueryParams extends PageVO {
|
public class ImQueryParams extends PageVO {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 5792718094087541134L;
|
||||||
|
|
||||||
@ApiModelProperty("用户Id")
|
@ApiModelProperty("用户Id")
|
||||||
private String memberId;
|
private String memberId;
|
||||||
|
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
package cn.lili.modules.im.entity.dto;
|
package cn.lili.modules.im.entity.dto;
|
||||||
|
|
||||||
|
import cn.hutool.core.text.CharSequenceUtil;
|
||||||
import cn.lili.common.enums.ResultCode;
|
import cn.lili.common.enums.ResultCode;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.utils.StringUtils;
|
|
||||||
import cn.lili.common.vo.PageVO;
|
import cn.lili.common.vo.PageVO;
|
||||||
import cn.lili.modules.im.entity.dos.ImMessage;
|
import cn.lili.modules.im.entity.dos.ImMessage;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MessageQueryParams
|
* MessageQueryParams
|
||||||
@ -15,8 +16,12 @@ import lombok.Data;
|
|||||||
* @version v1.0
|
* @version v1.0
|
||||||
* 2022-01-20 17:16
|
* 2022-01-20 17:16
|
||||||
*/
|
*/
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
public class MessageQueryParams extends PageVO {
|
public class MessageQueryParams extends PageVO {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 3504156704697214077L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 聊天窗口
|
* 聊天窗口
|
||||||
*/
|
*/
|
||||||
@ -31,7 +36,7 @@ public class MessageQueryParams extends PageVO {
|
|||||||
private Integer num;
|
private Integer num;
|
||||||
|
|
||||||
public LambdaQueryWrapper<ImMessage> initQueryWrapper() {
|
public LambdaQueryWrapper<ImMessage> initQueryWrapper() {
|
||||||
if (StringUtils.isEmpty(talkId)) {
|
if (CharSequenceUtil.isEmpty(talkId)) {
|
||||||
throw new ServiceException(ResultCode.ERROR);
|
throw new ServiceException(ResultCode.ERROR);
|
||||||
}
|
}
|
||||||
if (num == null || num > 50) {
|
if (num == null || num > 50) {
|
||||||
@ -40,7 +45,7 @@ public class MessageQueryParams extends PageVO {
|
|||||||
|
|
||||||
LambdaQueryWrapper<ImMessage> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ImMessage> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
lambdaQueryWrapper.eq(ImMessage::getTalkId, talkId);
|
lambdaQueryWrapper.eq(ImMessage::getTalkId, talkId);
|
||||||
if (StringUtils.isNotEmpty(lastMessageId)) {
|
if (CharSequenceUtil.isNotEmpty(lastMessageId)) {
|
||||||
lambdaQueryWrapper.lt(ImMessage::getId, lastMessageId);
|
lambdaQueryWrapper.lt(ImMessage::getId, lastMessageId);
|
||||||
}
|
}
|
||||||
lambdaQueryWrapper.orderByDesc(ImMessage::getCreateTime);
|
lambdaQueryWrapper.orderByDesc(ImMessage::getCreateTime);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lili.modules.im.service;
|
package cn.lili.modules.im.service;
|
||||||
|
|
||||||
import cn.lili.modules.im.entity.dos.ImTalk;
|
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.entity.vo.ImTalkVO;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
@ -45,13 +46,13 @@ public interface ImTalkService extends IService<ImTalk> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户聊天列表
|
* 获取用户聊天列表
|
||||||
* @return
|
* @return 用户聊天列表
|
||||||
*/
|
*/
|
||||||
List<ImTalkVO> getUserTalkList();
|
List<ImTalkVO> getUserTalkList(IMTalkQueryParams imTalkQueryParams);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取商家聊天列表
|
* 获取商家聊天列表
|
||||||
* @return
|
* @return 商家聊天列表
|
||||||
*/
|
*/
|
||||||
List<ImTalkVO> getStoreTalkList();
|
List<ImTalkVO> getStoreTalkList(IMTalkQueryParams imTalkQueryParams);
|
||||||
}
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package cn.lili.modules.im.serviceimpl;
|
package cn.lili.modules.im.serviceimpl;
|
||||||
|
|
||||||
|
import cn.hutool.core.text.CharSequenceUtil;
|
||||||
import cn.lili.common.enums.ResultCode;
|
import cn.lili.common.enums.ResultCode;
|
||||||
import cn.lili.common.exception.ServiceException;
|
import cn.lili.common.exception.ServiceException;
|
||||||
import cn.lili.common.security.AuthUser;
|
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.common.security.enums.UserEnums;
|
||||||
import cn.lili.modules.im.entity.dos.ImMessage;
|
import cn.lili.modules.im.entity.dos.ImMessage;
|
||||||
import cn.lili.modules.im.entity.dos.ImTalk;
|
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.entity.vo.ImTalkVO;
|
||||||
import cn.lili.modules.im.mapper.ImTalkMapper;
|
import cn.lili.modules.im.mapper.ImTalkMapper;
|
||||||
import cn.lili.modules.im.service.ImMessageService;
|
import cn.lili.modules.im.service.ImMessageService;
|
||||||
@ -173,13 +175,16 @@ public class ImTalkServiceImpl extends ServiceImpl<ImTalkMapper, ImTalk> impleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ImTalkVO> getUserTalkList() {
|
public List<ImTalkVO> getUserTalkList(IMTalkQueryParams imTalkQueryParams) {
|
||||||
AuthUser authUser = UserContext.getCurrentUser();
|
AuthUser authUser = UserContext.getCurrentUser();
|
||||||
if (authUser == null) {
|
if (authUser == null) {
|
||||||
throw new ServiceException(ResultCode.USER_NOT_LOGIN);
|
throw new ServiceException(ResultCode.USER_NOT_LOGIN);
|
||||||
}
|
}
|
||||||
LambdaQueryWrapper<ImTalk> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ImTalk> 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);
|
queryWrapper.orderByDesc(ImTalk::getLastTalkTime);
|
||||||
List<ImTalk> imTalks = this.list(queryWrapper);
|
List<ImTalk> imTalks = this.list(queryWrapper);
|
||||||
List<ImTalkVO> imTalkVOList = imTalks.stream().map(imTalk -> new ImTalkVO(imTalk, authUser.getId())).collect(Collectors.toList());
|
List<ImTalkVO> imTalkVOList = imTalks.stream().map(imTalk -> new ImTalkVO(imTalk, authUser.getId())).collect(Collectors.toList());
|
||||||
@ -188,27 +193,27 @@ public class ImTalkServiceImpl extends ServiceImpl<ImTalkMapper, ImTalk> impleme
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ImTalkVO> getStoreTalkList() {
|
public List<ImTalkVO> getStoreTalkList(IMTalkQueryParams imTalkQueryParams) {
|
||||||
AuthUser authUser = UserContext.getCurrentUser();
|
AuthUser authUser = UserContext.getCurrentUser();
|
||||||
if (authUser == null) {
|
if (authUser == null) {
|
||||||
throw new ServiceException(ResultCode.STORE_NOT_LOGIN_ERROR);
|
throw new ServiceException(ResultCode.STORE_NOT_LOGIN_ERROR);
|
||||||
}
|
}
|
||||||
LambdaQueryWrapper<ImTalk> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ImTalk> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
queryWrapper.and(wq->{
|
queryWrapper.and(wq -> wq.eq(ImTalk::getUserId1, authUser.getStoreId()).or().eq(ImTalk::getUserId2, authUser.getStoreId()));
|
||||||
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);
|
queryWrapper.orderByDesc(ImTalk::getLastTalkTime);
|
||||||
List<ImTalk> imTalks = this.list(queryWrapper);
|
List<ImTalk> imTalks = this.list(queryWrapper);
|
||||||
|
|
||||||
List<ImTalkVO> imTalkVOList = imTalks.stream().map(imTalk -> {
|
List<ImTalkVO> imTalkVOList = imTalks.stream().map(imTalk -> new ImTalkVO(imTalk, authUser.getStoreId())).collect(Collectors.toList());
|
||||||
return new ImTalkVO(imTalk, authUser.getStoreId());
|
|
||||||
}).collect(Collectors.toList());
|
|
||||||
getUnread(imTalkVOList);
|
getUnread(imTalkVOList);
|
||||||
return imTalkVOList;
|
return imTalkVOList;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取未读消息数量
|
* 获取未读消息数量
|
||||||
|
*
|
||||||
* @param imTalkVOList 消息列表
|
* @param imTalkVOList 消息列表
|
||||||
*/
|
*/
|
||||||
private void getUnread(List<ImTalkVO> imTalkVOList) {
|
private void getUnread(List<ImTalkVO> imTalkVOList) {
|
||||||
|
@ -4,6 +4,7 @@ import cn.lili.common.enums.ResultCode;
|
|||||||
import cn.lili.common.enums.ResultUtil;
|
import cn.lili.common.enums.ResultUtil;
|
||||||
import cn.lili.common.vo.ResultMessage;
|
import cn.lili.common.vo.ResultMessage;
|
||||||
import cn.lili.modules.im.entity.dos.ImTalk;
|
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.entity.vo.ImTalkVO;
|
||||||
import cn.lili.modules.im.service.ImTalkService;
|
import cn.lili.modules.im.service.ImTalkService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
@ -58,14 +59,14 @@ public class ImTalkController {
|
|||||||
|
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
@ApiOperation(value = "分页获取用户聊天")
|
@ApiOperation(value = "分页获取用户聊天")
|
||||||
public ResultMessage<List<ImTalkVO>> getUserTalkList() {
|
public ResultMessage<List<ImTalkVO>> getUserTalkList(IMTalkQueryParams imTalkQueryParams) {
|
||||||
return ResultUtil.data(imTalkService.getUserTalkList());
|
return ResultUtil.data(imTalkService.getUserTalkList(imTalkQueryParams));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/store/list")
|
@GetMapping("/store/list")
|
||||||
@ApiOperation(value = "分页获取商家聊天")
|
@ApiOperation(value = "分页获取商家聊天")
|
||||||
public ResultMessage<List<ImTalkVO>> getStoreTalkList() {
|
public ResultMessage<List<ImTalkVO>> getStoreTalkList(IMTalkQueryParams imTalkQueryParams) {
|
||||||
return ResultUtil.data(imTalkService.getStoreTalkList());
|
return ResultUtil.data(imTalkService.getStoreTalkList(imTalkQueryParams));
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping(value = "/{id}")
|
@DeleteMapping(value = "/{id}")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user