diff --git a/src/main/java/com/syzb/group/controller/admin/AdminGroupMessageController.java b/src/main/java/com/syzb/group/controller/admin/AdminGroupMessageController.java index e24c949..98ba0ff 100644 --- a/src/main/java/com/syzb/group/controller/admin/AdminGroupMessageController.java +++ b/src/main/java/com/syzb/group/controller/admin/AdminGroupMessageController.java @@ -1,9 +1,11 @@ package com.syzb.group.controller.admin; import com.syzb.common.handler.BizException; +import com.syzb.common.query.OnlyIdPageQuery; import com.syzb.common.query.OnlyIdQuery; import com.syzb.common.result.AppPager; import com.syzb.common.result.CommonResult; +import com.syzb.common.result.Pager; import com.syzb.common.result.ResponseStatus; import com.syzb.common.vo.BackendUserVO; import com.syzb.common.vo.OnlyIdVO; @@ -58,18 +60,18 @@ public class AdminGroupMessageController { @ApiOperation("后台获取私聊列表") @PostMapping("/admin/group/message/getPrivateChatList") - public CommonResult> getPrivateChatList(@Validated @RequestBody @ApiParam(required = true) OnlyIdQuery query, - @RequestAttribute(value = "backendUser", required = false) BackendUserVO backendUserVO) { - List list = adminGroupMessageService.getPrivateChatList(query, backendUserVO); - return CommonResult.success(list); + public CommonResult> getPrivateChatList(@Validated @RequestBody @ApiParam(required = true) OnlyIdPageQuery query, + @RequestAttribute(value = "backendUser", required = false) BackendUserVO backendUserVO) { + Pager page = adminGroupMessageService.getPrivateChatList(query, backendUserVO); + return CommonResult.success(page); } @ApiOperation("后台获取用户列表") @PostMapping("/admin/group/message/getCustomerList") - public CommonResult> getCustomerList(@Validated @RequestBody @ApiParam(required = true) OnlyIdQuery query, - @RequestAttribute(value = "backendUser", required = false) BackendUserVO backendUserVO) { - List list = adminGroupMessageService.getCustomerList(query, backendUserVO); - return CommonResult.success(list); + public CommonResult> getCustomerList(@Validated @RequestBody @ApiParam(required = true) OnlyIdPageQuery query, + @RequestAttribute(value = "backendUser", required = false) BackendUserVO backendUserVO) { + Pager page = adminGroupMessageService.getCustomerList(query, backendUserVO); + return CommonResult.success(page); } @ApiOperation("后台推荐产品消息") diff --git a/src/main/java/com/syzb/group/mapper/GroupMessageMapper.java b/src/main/java/com/syzb/group/mapper/GroupMessageMapper.java index 4e68060..0faf486 100644 --- a/src/main/java/com/syzb/group/mapper/GroupMessageMapper.java +++ b/src/main/java/com/syzb/group/mapper/GroupMessageMapper.java @@ -2,9 +2,12 @@ package com.syzb.group.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.syzb.common.vo.DateIdVO; import com.syzb.group.entity.GroupMessage; +import com.syzb.video.entity.VideoLiveExtend; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -27,8 +30,17 @@ public interface GroupMessageMapper extends BaseMapper { " FROM group_message \n" + " WHERE group_id = #{groupId} AND interactive_type = 2 and private_user_id is not null \n" + ") t \n" + + "${ew.customSqlSegment}") + > E selectPrivateChatPage(@Param("groupId") Integer groupId, Page page, @Param(Constants.WRAPPER) Wrapper wrapper); + + @Select("SELECT id, private_user_id \n" + + "FROM ( \n" + + " SELECT id, private_user_id, ROW_NUMBER() OVER (PARTITION BY private_user_id ORDER BY id DESC) as rn \n" + + " FROM group_message \n" + + " WHERE group_id = #{groupId} AND interactive_type = 2 and private_user_id in (${userIds}) \n" + + ") t \n" + "WHERE rn = 1") - List selectPrivateChatList(@Param("groupId") Integer groupId); + List selectPrivateChatList(@Param("groupId") Integer groupId, @Param("userIds") String userIds); @Select("SELECT group_id, interactive_type, user_type, COUNT(0) AS id \n" + "FROM group_message \n" + diff --git a/src/main/java/com/syzb/group/service/admin/AdminGroupMessageService.java b/src/main/java/com/syzb/group/service/admin/AdminGroupMessageService.java index bd7922c..ffaa035 100644 --- a/src/main/java/com/syzb/group/service/admin/AdminGroupMessageService.java +++ b/src/main/java/com/syzb/group/service/admin/AdminGroupMessageService.java @@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.base.Functions; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.map.IMap; @@ -17,8 +18,10 @@ import com.syzb.common.config.cache.CacheKey; import com.syzb.common.constant.IsOrNot; import com.syzb.common.constant.ProductType; import com.syzb.common.handler.BizException; +import com.syzb.common.query.OnlyIdPageQuery; import com.syzb.common.query.OnlyIdQuery; import com.syzb.common.result.AppPager; +import com.syzb.common.result.Pager; import com.syzb.common.result.ResponseStatus; import com.syzb.common.service.CommentBlackService; import com.syzb.common.state.StateMachine; @@ -44,6 +47,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; @Service public class AdminGroupMessageService { @@ -182,33 +186,45 @@ public class AdminGroupMessageService { return new AppPager<>(voList, hasNext); } - public List getPrivateChatList(OnlyIdQuery query, BackendUserVO backendUserVO) { + public Pager getPrivateChatList(OnlyIdPageQuery query, BackendUserVO backendUserVO) { Integer groupId = query.getId(); - List list = groupMessageMapper.selectPrivateChatList(groupId); + QueryWrapper wrapper = Wrappers.query() + .eq("rn", 1) + .orderByDesc("id"); + Page page = groupMessageMapper.selectPrivateChatPage(groupId, query.toPage(), wrapper); + List list = page.getRecords(); Map advisorMap = advisorInfoService.getAdvisorVoMap(); - return list.stream().map(GroupMessage::getId).map(id -> groupCacheService.getMessage(id, advisorMap)).collect(Collectors.toList()); + List voList = list.stream().map(GroupMessage::getId).map(id -> groupCacheService.getMessage(id, advisorMap)).collect(Collectors.toList()); + return new Pager<>(voList, page.getTotal()); } - public List getCustomerList(OnlyIdQuery query, BackendUserVO backendUserVO) { + public Pager getCustomerList(OnlyIdPageQuery query, BackendUserVO backendUserVO) { Integer groupId = query.getId(); Set moduleIdSet = groupCommonService.getModuleIds(groupId); if (CollUtil.isEmpty(moduleIdSet)) { - return Collections.emptyList(); + return Pager.emptyPager(); } LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() .select(ModuleUser::getUserId) .in(ModuleUser::getModuleId, moduleIdSet) .orderByDesc(ModuleUser::getCreateTime); - List moduleUserList = moduleUserMapper.selectList(wrapper); - if (CollUtil.isEmpty(moduleUserList)) { - return Collections.emptyList(); + Page page = moduleUserMapper.selectPage(query.toPage(), wrapper); + if (CollUtil.isEmpty(page.getRecords())) { + return new Pager<>(Collections.emptyList(), page.getTotal()); } - List privateChatList = getPrivateChatList(query, backendUserVO); - Map privateChatMap = privateChatList.stream().collect(Collectors.toMap(GroupMessageVO::getId, Functions.identity())); - return moduleUserList.stream().map(moduleUser -> { - String userId = moduleUser.getUserId(); - return privateChatMap.getOrDefault(userId, new GroupMessageVO(userId)); + List userIdList = page.getRecords().stream().map(ModuleUser::getUserId).collect(Collectors.toList()); + String userIds = userIdList.stream().map(userId -> "'" + userId + "'").collect(Collectors.joining(",")); + List privateChatList = groupMessageMapper.selectPrivateChatList(groupId, userIds); + Map privateChatMap = privateChatList.stream().collect(Collectors.toMap(GroupMessage::getPrivateUserId, Functions.identity())); + Map advisorMap = advisorInfoService.getAdvisorVoMap(); + List voList = userIdList.stream().map(userId -> { + GroupMessage groupMessage = privateChatMap.get(userId); + if (groupMessage == null) { + return new GroupMessageVO(userId); + } + return groupCacheService.getMessage(groupMessage.getId(), advisorMap); }).collect(Collectors.toList()); + return new Pager<>(voList, page.getTotal()); } @Transactional(rollbackFor = Exception.class)