diff --git a/src/main/java/com/syzb/group/controller/admin/AdminGroupCollectController.java b/src/main/java/com/syzb/group/controller/admin/AdminGroupCollectController.java index 91a1275..55d7462 100644 --- a/src/main/java/com/syzb/group/controller/admin/AdminGroupCollectController.java +++ b/src/main/java/com/syzb/group/controller/admin/AdminGroupCollectController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; -@Api(tags = "交易圈admin接口") +@Api(tags = "交易圈admin统计接口") @RestController public class AdminGroupCollectController { @@ -44,7 +44,7 @@ public class AdminGroupCollectController { return CommonResult.success(vo); } - @ApiOperation("后台查询学院列表") + @ApiOperation("后台查询学员列表") @PostMapping("/admin/group/college/listCustomer") public CommonResult> listCustomer(@Validated @RequestBody @ApiParam(required = true) ListGroupCustomerQuery query, @RequestAttribute(value = "backendUser", required = false) BackendUserVO backendUserVO) { diff --git a/src/main/java/com/syzb/group/controller/admin/AdminGroupInfoController.java b/src/main/java/com/syzb/group/controller/admin/AdminGroupInfoController.java index 35ee81f..e6cddbb 100644 --- a/src/main/java/com/syzb/group/controller/admin/AdminGroupInfoController.java +++ b/src/main/java/com/syzb/group/controller/admin/AdminGroupInfoController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -@Api(tags = "交易圈admin接口") +@Api(tags = "交易圈admin信息接口") @RestController public class AdminGroupInfoController { diff --git a/src/main/java/com/syzb/group/controller/app/AppGroupInfoController.java b/src/main/java/com/syzb/group/controller/app/AppGroupInfoController.java index 72ab94e..9e5d047 100644 --- a/src/main/java/com/syzb/group/controller/app/AppGroupInfoController.java +++ b/src/main/java/com/syzb/group/controller/app/AppGroupInfoController.java @@ -5,7 +5,7 @@ import com.syzb.common.result.AppPager; import com.syzb.common.result.CommonResult; import com.syzb.common.vo.FrontUserVO; import com.syzb.group.query.info.ListGroupAppQuery; -import com.syzb.group.service.GroupInfoService; +import com.syzb.group.service.app.AppGroupInfoService; import com.syzb.group.vo.GroupVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -23,20 +23,20 @@ import javax.annotation.Resource; public class AppGroupInfoController { @Resource - private GroupInfoService groupInfoService; + private AppGroupInfoService appGroupInfoService; @ApiOperation("app查询交易圈详情") @PostMapping("/app/group/info/get") public CommonResult get(@Validated @RequestBody @ApiParam(required = true) OnlyIdQuery query, @RequestAttribute(value = "frontUser", required = false) FrontUserVO frontUserVO) { - GroupVO vo = groupInfoService.getForApp(query, frontUserVO); + GroupVO vo = appGroupInfoService.getForApp(query, frontUserVO); return CommonResult.success(vo); } @ApiOperation("app首页查询交易圈列表") @PostMapping("/app/group/info/list") public CommonResult> list(@Validated @RequestBody @ApiParam(required = true) ListGroupAppQuery query) { - AppPager page = groupInfoService.listForApp(query); + AppPager page = appGroupInfoService.listForApp(query); return CommonResult.success(page); } } \ No newline at end of file diff --git a/src/main/java/com/syzb/group/query/ListGroupCustomerQuery.java b/src/main/java/com/syzb/group/query/ListGroupCustomerQuery.java index e8fec6c..05882c4 100644 --- a/src/main/java/com/syzb/group/query/ListGroupCustomerQuery.java +++ b/src/main/java/com/syzb/group/query/ListGroupCustomerQuery.java @@ -12,7 +12,7 @@ public class ListGroupCustomerQuery extends PageQuery { private String userId; @ApiModelProperty("昵称") - private Integer nickName; + private String nickName; @ApiModelProperty("在线状态 1:在线 2:不在线") private Integer isOnline; @@ -39,11 +39,11 @@ public class ListGroupCustomerQuery extends PageQuery { this.userId = userId; } - public Integer getNickName() { + public String getNickName() { return nickName; } - public void setNickName(Integer nickName) { + public void setNickName(String nickName) { this.nickName = nickName; } diff --git a/src/main/java/com/syzb/group/schedule/GroupTask.java b/src/main/java/com/syzb/group/schedule/GroupTask.java index 98f548f..4aa1883 100644 --- a/src/main/java/com/syzb/group/schedule/GroupTask.java +++ b/src/main/java/com/syzb/group/schedule/GroupTask.java @@ -2,6 +2,9 @@ package com.syzb.group.schedule; import com.syzb.common.config.cache.CacheKey; import com.syzb.common.service.CacheService; +import com.syzb.group.mapper.GroupMessageMapper; +import com.syzb.group.service.admin.AdminGroupCollectService; +import com.syzb.group.service.admin.AdminGroupMessageService; import com.syzb.group.service.common.GroupCommonService; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -18,6 +21,12 @@ public class GroupTask { @Resource private GroupCommonService groupCommonService; + @Resource + private AdminGroupCollectService adminGroupCollectService; + + @Resource + private AdminGroupMessageService adminGroupMessageService; + /** * 保存消息已读 */ @@ -26,7 +35,7 @@ public class GroupTask { cacheService.lock(CacheKey.LockKey.SAVE_MESSAGE_READ, 0, TimeUnit.SECONDS, 4, TimeUnit.MINUTES, - groupCommonService::saveGroupMessageRead + adminGroupMessageService::saveGroupMessageRead ); } @@ -44,7 +53,7 @@ public class GroupTask { cacheService.lock(CacheKey.LockKey.COLLECT_GROUP_DATA, 0, TimeUnit.SECONDS, 4, TimeUnit.MINUTES, - () -> groupCommonService.collectGroupData() + () -> adminGroupCollectService.collectGroupData() ); } diff --git a/src/main/java/com/syzb/group/service/admin/AdminGroupCollectService.java b/src/main/java/com/syzb/group/service/admin/AdminGroupCollectService.java index aa27855..28aee73 100644 --- a/src/main/java/com/syzb/group/service/admin/AdminGroupCollectService.java +++ b/src/main/java/com/syzb/group/service/admin/AdminGroupCollectService.java @@ -3,6 +3,7 @@ package com.syzb.group.service.admin; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; 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.hazelcast.map.IMap; import com.syzb.business.entity.ModuleUser; @@ -14,9 +15,17 @@ import com.syzb.common.query.OnlyIdQuery; import com.syzb.common.result.Pager; import com.syzb.common.service.CommentBlackService; import com.syzb.common.vo.BackendUserVO; +import com.syzb.common.vo.IdCountVO; import com.syzb.group.constant.GroupCustomerStatus; +import com.syzb.group.constant.GroupInteractiveType; +import com.syzb.group.constant.GroupMessageUserType; import com.syzb.group.entity.GroupCollect; +import com.syzb.group.entity.GroupInfo; +import com.syzb.group.entity.GroupMessage; import com.syzb.group.mapper.GroupCollectMapper; +import com.syzb.group.mapper.GroupInfoMapper; +import com.syzb.group.mapper.GroupMessageMapper; +import com.syzb.group.mapper.GroupUserFlowMapper; import com.syzb.group.query.ListGroupCustomerQuery; import com.syzb.group.query.QueryGroupCollectQuery; import com.syzb.group.service.common.GroupCacheService; @@ -25,7 +34,6 @@ import com.syzb.group.vo.GroupCollectVO; import com.syzb.group.vo.GroupCustomerVO; import com.syzb.rbac.entity.WxUser; import com.syzb.rbac.mapper.WxUserMapper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -58,9 +66,111 @@ public class AdminGroupCollectService { @Resource private CommentBlackService commentBlackService; - @Autowired + + @Resource private GroupCacheService groupCacheService; + @Resource + private GroupUserFlowMapper groupUserFlowMapper; + + @Resource + private GroupInfoMapper groupInfoMapper; + + @Resource + private GroupMessageMapper groupMessageMapper; + + public void collectGroupData() { + LocalDate today = LocalDate.now(); + LocalDate yesterday = today.minusDays(1); + LambdaQueryWrapper groupWrapper = Wrappers.lambdaQuery() + .select(GroupInfo::getId); + List groups = groupInfoMapper.selectList(groupWrapper); + if (CollUtil.isEmpty(groups)) { + return; + } + List groupIds = groups.stream().map(GroupInfo::getId).collect(Collectors.toList()); + // 获取昨日数据 + // 如果昨天数据还是昨天统计的,那需要重新计算;否则不需计算 + QueryWrapper collectWrapper = Wrappers.query() + .select("max(create_time) as create_time") + .eq("date", yesterday); + GroupCollect yesterdayLatest = groupCollectMapper.selectOne(collectWrapper); + if (yesterdayLatest != null && yesterdayLatest.getCreateTime().isBefore(today.atStartOfDay())) { + collectGroupData(groupIds, yesterday); + } + collectGroupData(groupIds, today); + } + + public void collectGroupData(List groupIds, LocalDate date) { + LocalDateTime startTime = date.atStartOfDay(); + LocalDateTime endTime = date.plusDays(1).atStartOfDay(); + List visitMemberList = groupUserFlowMapper.selectGroupUserCount(startTime, endTime); + Map visitMemberMap = visitMemberList.stream().collect(Collectors.toMap(IdCountVO::getId, IdCountVO::getCount)); + + List messageMemberCollect = groupMessageMapper.collectMessageMember(startTime, endTime); + Map> groupMessageMemberMap = messageMemberCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId)); + + List messageCollect = groupMessageMapper.collectMessage(startTime, endTime); + Map> groupMessageMap = messageCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId)); + + LocalDateTime now = LocalDateTime.now(); + + List collectList = groupIds.stream().map(groupId -> { + GroupCollect collect = new GroupCollect(); + collect.setGroupId(groupId); + collect.setDate(date); + collect.setTotalMembers(groupCommonService.getModuleMemberCount(groupId, false)); + collect.setVisitedMembers(visitMemberMap.getOrDefault(groupId, 0)); + collect.setNewMembers(groupCommonService.getModuleMemberCount(groupId, true)); + collect.setInteractionMembers(0); + collect.setPrivateChatMembers(0); + List messageMemberList = groupMessageMemberMap.get(groupId); + if (CollUtil.isNotEmpty(messageMemberList)) { + for (GroupMessage groupMessage : messageMemberList) { + if (GroupInteractiveType.GROUP.value.equals(groupMessage.getInteractiveType())) { + collect.setInteractionMembers(groupMessage.getId()); + } else if (GroupInteractiveType.PRIVATE.value.equals(groupMessage.getInteractiveType())) { + collect.setPrivateChatMembers(groupMessage.getId()); + } + } + } + collect.setAdvisorGroupContent(0); + collect.setAssistantGroupContent(0); + collect.setCustomerGroupContent(0); + collect.setAdvisorPrivateContent(0); + collect.setAssistantPrivateContent(0); + collect.setCustomerPrivateContent(0); + List messageList = groupMessageMap.get(groupId); + if (CollUtil.isNotEmpty(messageList)) { + for (GroupMessage groupMessage : messageList) { + if (GroupInteractiveType.GROUP.value.equals(groupMessage.getInteractiveType())) { + if (GroupMessageUserType.ADVISOR.value.equals(groupMessage.getUserType())) { + collect.setAdvisorGroupContent(groupMessage.getId()); + } else if (GroupMessageUserType.ASSISTANT.value.equals(groupMessage.getUserType())) { + collect.setAssistantGroupContent(groupMessage.getId()); + } else if (GroupMessageUserType.CUSTOMER.value.equals(groupMessage.getUserType())) { + collect.setCustomerGroupContent(groupMessage.getId()); + } + } else if (GroupInteractiveType.PRIVATE.value.equals(groupMessage.getInteractiveType())) { + if (GroupMessageUserType.ADVISOR.value.equals(groupMessage.getUserType())) { + collect.setAdvisorPrivateContent(groupMessage.getId()); + } else if (GroupMessageUserType.ASSISTANT.value.equals(groupMessage.getUserType())) { + collect.setAssistantPrivateContent(groupMessage.getId()); + } else if (GroupMessageUserType.CUSTOMER.value.equals(groupMessage.getUserType())) { + collect.setCustomerPrivateContent(groupMessage.getId()); + } + } + } + } + collect.setCreateTime(now); + return collect; + }).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(collectList)) { + groupCollectMapper.delete(Wrappers.lambdaQuery().eq(GroupCollect::getDate, date)); + groupCollectMapper.insertBatchSomeColumn(collectList); + } + } + public List queryCollect(QueryGroupCollectQuery query, BackendUserVO backendUserVO) { Integer groupId = query.getGroupId(); LocalDate startDate = query.getStartDate(); @@ -89,7 +199,7 @@ public class AdminGroupCollectService { public Pager listCustomer(ListGroupCustomerQuery query, BackendUserVO backendUserVO) { Integer groupId = query.getGroupId(); String userId = query.getUserId(); - Integer nickName = query.getNickName(); + String nickName = query.getNickName(); Integer isOnline = query.getIsOnline(); Integer customerStatus = query.getCustomerStatus(); Integer commentBlackStatus = query.getCommentBlackStatus(); @@ -106,9 +216,6 @@ public class AdminGroupCollectService { Set userIdSet = moduleUserList.stream().map(ModuleUser::getUserId).collect(Collectors.toSet()); List wxUserList = wxUserMapper.selectList(Wrappers.lambdaQuery() .in(WxUser::getId, userIdSet)); - if (CollUtil.isEmpty(wxUserList)) { - return Pager.emptyPager(); - } Map wxUserMap = wxUserList.stream().collect(Collectors.toMap(WxUser::getId, Function.identity())); Set blackUserIds = commentBlackService.getBlackUserIds(groupId, ProductType.GROUP.value); Set onlineUserIds = groupCacheService.getOnlineUserIds(groupId); @@ -119,7 +226,10 @@ public class AdminGroupCollectService { List list = stream.map(moduleUser -> { GroupCustomerVO vo = new GroupCustomerVO(moduleUser); WxUser wxUser = wxUserMap.get(moduleUser.getUserId()); - vo.setNickName(wxUser == null ? null : wxUser.getNickName()); + if (wxUser != null) { + vo.setNickName(wxUser.getNickName()); + vo.setHeadPicUrl(wxUser.getImgUrl()); + } vo.setIsOnline(onlineUserIds.contains(moduleUser.getUserId()) ? IsOrNot.IS.value : IsOrNot.NOT.value); vo.setCommentBlackStatus(blackUserIds.contains(moduleUser.getUserId()) ? IsOrNot.IS.value : IsOrNot.NOT.value); vo.setCustomerStatus(calCustomerStatus(moduleUser).value); @@ -139,7 +249,7 @@ public class AdminGroupCollectService { voStream = voStream.filter(vo -> commentBlackStatus.equals(vo.getCommentBlackStatus())); } List voList = voStream.collect(Collectors.toList()); - List pageList = CollUtil.page(query.getCurrent(), query.getSize(), voList); + List pageList = CollUtil.page(query.getCurrent() - 1, query.getSize(), voList); return new Pager<>(pageList, voList.size()); } 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 636b665..c90f2d2 100644 --- a/src/main/java/com/syzb/group/service/admin/AdminGroupMessageService.java +++ b/src/main/java/com/syzb/group/service/admin/AdminGroupMessageService.java @@ -1,9 +1,12 @@ package com.syzb.group.service.admin; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; 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.hazelcast.core.HazelcastInstance; import com.hazelcast.map.IMap; import com.syzb.advisor.service.AdvisorInfoService; import com.syzb.advisor.vo.AdvisorBasicVO; @@ -21,19 +24,21 @@ import com.syzb.common.vo.OnlyIdVO; import com.syzb.group.constant.*; import com.syzb.group.entity.GroupInfo; import com.syzb.group.entity.GroupMessage; +import com.syzb.group.entity.GroupMessageRead; import com.syzb.group.mapper.GroupInfoMapper; import com.syzb.group.mapper.GroupMessageMapper; +import com.syzb.group.mapper.GroupMessageReadMapper; import com.syzb.group.query.message.*; import com.syzb.group.service.common.GroupCacheService; import com.syzb.group.service.common.GroupMessageService; +import com.syzb.group.vo.message.GroupMessageReadVO; import com.syzb.group.vo.message.GroupMessageVO; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service @@ -66,6 +71,12 @@ public class AdminGroupMessageService { @Resource private IMap groupCache; + @Resource + private HazelcastInstance hazelcastInstance; + + @Resource + private GroupMessageReadMapper groupMessageReadMapper; + @Transactional(rollbackFor = Exception.class) public OnlyIdVO sendAdvisorMessage(SendGroupMessageAdminQuery query, BackendUserVO backendUser) { GroupInfo group = groupInfoMapper.selectById(query.getGroupId()); @@ -287,6 +298,65 @@ public class AdminGroupMessageService { adminGroupInfoService.clearCache(groupId); } + @Transactional(rollbackFor = Exception.class) + public void saveGroupMessageRead() { + List cacheList = hazelcastInstance.getList(CacheKey.GroupKey.TEMP_READ_LIST); + // 合并重复项 + Map> map = new HashMap<>(cacheList.size()); + for (GroupMessageReadVO read : cacheList) { + if (read != null) { + read.getMessageIds().forEach(m -> + map.computeIfAbsent(m, k -> new HashSet<>()).add(read.getUserId())); + } + } + + LocalDateTime now = LocalDateTime.now(); + + List list = map.entrySet().stream() + .map(entry -> { + Integer messageId = entry.getKey(); + GroupMessageVO message = groupCacheService.getMessage(messageId, null); + if (message == null + || !GroupInteractiveType.GROUP.value.equals(message.getInteractiveType()) + || (!GroupMessageUserType.ADVISOR.value.equals(message.getUserType()) && + !GroupMessageUserType.ASSISTANT.value.equals(message.getUserType()))) { + return null; + } + return entry.getValue().stream().map(userId -> { + GroupMessageRead read = new GroupMessageRead(); + read.setMessageId(messageId); + read.setUserId(userId); + read.setGroupId(message.getGroupId()); + read.setCreateTime(now); + return read; + }).collect(Collectors.toList()); + }).filter(Objects::nonNull).flatMap(List::stream).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(list)) { + groupMessageReadMapper.replaceBatch(list); + } + + // 更新消息里的已读统计 + if (CollUtil.isNotEmpty(map)) { + saveGroupMessageCollect(map.keySet()); + } + + cacheList.clear(); + } + + private void saveGroupMessageCollect(Set messageIds) { + QueryWrapper wrapper = Wrappers.query() + .select("message_id", "count(0) as group_id") + .in("message_id", messageIds) + .groupBy("message_id"); + List list = groupMessageReadMapper.selectList(wrapper); + for (GroupMessageRead read : list) { + GroupMessage message = new GroupMessage(); + message.setId(read.getMessageId()); + message.setReadCount(read.getGroupId()); + groupMessageMapper.updateById(message); + } + } + private void clearCache(Integer messageId) { groupCache.remove(CacheKey.GroupKey.GROUP_MESSAGE_DETAIL + messageId); } diff --git a/src/main/java/com/syzb/group/service/common/GroupCommonService.java b/src/main/java/com/syzb/group/service/common/GroupCommonService.java index 3f76b40..69da758 100644 --- a/src/main/java/com/syzb/group/service/common/GroupCommonService.java +++ b/src/main/java/com/syzb/group/service/common/GroupCommonService.java @@ -33,75 +33,18 @@ import java.util.stream.Collectors; @Service public class GroupCommonService { - @Resource - private HazelcastInstance hazelcastInstance; - @Resource private GroupCacheService groupCacheService; - @Resource - private GroupMessageMapper groupMessageMapper; - @Resource private GroupInfoMapper groupInfoMapper; @Resource private GroupUserFlowMapper groupUserFlowMapper; - @Resource - private GroupCollectMapper groupCollectMapper; - - @Resource - private GroupMessageReadMapper groupMessageReadMapper; - @Resource private ModuleUserMapper moduleUserMapper; - @Transactional(rollbackFor = Exception.class) - public void saveGroupMessageRead() { - List cacheList = hazelcastInstance.getList(CacheKey.GroupKey.TEMP_READ_LIST); - // 合并重复项 - Map> map = new HashMap<>(cacheList.size()); - for (GroupMessageReadVO read : cacheList) { - if (read != null) { - read.getMessageIds().forEach(m -> - map.computeIfAbsent(m, k -> new HashSet<>()).add(read.getUserId())); - } - } - - LocalDateTime now = LocalDateTime.now(); - - List list = map.entrySet().stream() - .map(entry -> { - Integer messageId = entry.getKey(); - GroupMessageVO message = groupCacheService.getMessage(messageId, null); - if (message == null - || !GroupInteractiveType.GROUP.value.equals(message.getInteractiveType()) - || (!GroupMessageUserType.ADVISOR.value.equals(message.getUserType()) && - !GroupMessageUserType.ASSISTANT.value.equals(message.getUserType()))) { - return null; - } - return entry.getValue().stream().map(userId -> { - GroupMessageRead read = new GroupMessageRead(); - read.setMessageId(messageId); - read.setUserId(userId); - read.setGroupId(message.getGroupId()); - read.setCreateTime(now); - return read; - }).collect(Collectors.toList()); - }).filter(Objects::nonNull).flatMap(List::stream).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(list)) { - groupMessageReadMapper.replaceBatch(list); - } - - // 更新消息里的已读统计 - if (CollUtil.isNotEmpty(map)) { - saveGroupMessageCollect(map.keySet()); - } - - cacheList.clear(); - } - /** * 写入视频用户数据 */ @@ -135,112 +78,6 @@ public class GroupCommonService { } } - public void collectGroupData() { - LocalDate today = LocalDate.now(); - LocalDate yesterday = today.minusDays(1); - LambdaQueryWrapper groupWrapper = Wrappers.lambdaQuery() - .select(GroupInfo::getId); - List groups = groupInfoMapper.selectList(groupWrapper); - if (CollUtil.isEmpty(groups)) { - return; - } - List groupIds = groups.stream().map(GroupInfo::getId).collect(Collectors.toList()); - // 获取昨日数据 - // 如果昨天数据还是昨天统计的,那需要重新计算;否则不需计算 - QueryWrapper collectWrapper = Wrappers.query() - .select("max(create_time) as create_time") - .eq("date", yesterday); - GroupCollect yesterdayLatest = groupCollectMapper.selectOne(collectWrapper); - if (yesterdayLatest != null && yesterdayLatest.getCreateTime().isBefore(today.atStartOfDay())) { - collectGroupData(groupIds, yesterday); - } - collectGroupData(groupIds, today); - } - - public void collectGroupData(List groupIds, LocalDate date) { - LocalDateTime startTime = date.atStartOfDay(); - LocalDateTime endTime = date.plusDays(1).atStartOfDay(); - List visitMemberList = groupUserFlowMapper.selectGroupUserCount(startTime, endTime); - Map visitMemberMap = visitMemberList.stream().collect(Collectors.toMap(IdCountVO::getId, IdCountVO::getCount)); - - List messageMemberCollect = groupMessageMapper.collectMessageMember(startTime, endTime); - Map> groupMessageMemberMap = messageMemberCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId)); - - List messageCollect = groupMessageMapper.collectMessage(startTime, endTime); - Map> groupMessageMap = messageCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId)); - - LocalDateTime now = LocalDateTime.now(); - - List collectList = groupIds.stream().map(groupId -> { - GroupCollect collect = new GroupCollect(); - collect.setGroupId(groupId); - collect.setDate(date); - collect.setTotalMembers(getModuleMemberCount(groupId, false)); - collect.setVisitedMembers(visitMemberMap.getOrDefault(groupId, 0)); - collect.setNewMembers(getModuleMemberCount(groupId, true)); - collect.setInteractionMembers(0); - collect.setPrivateChatMembers(0); - List messageMemberList = groupMessageMemberMap.get(groupId); - if (CollUtil.isNotEmpty(messageMemberList)) { - for (GroupMessage groupMessage : messageMemberList) { - if (GroupInteractiveType.GROUP.value.equals(groupMessage.getInteractiveType())) { - collect.setInteractionMembers(groupMessage.getId()); - } else if (GroupInteractiveType.PRIVATE.value.equals(groupMessage.getInteractiveType())) { - collect.setPrivateChatMembers(groupMessage.getId()); - } - } - } - collect.setAdvisorGroupContent(0); - collect.setAssistantGroupContent(0); - collect.setCustomerGroupContent(0); - collect.setAdvisorPrivateContent(0); - collect.setAssistantPrivateContent(0); - collect.setCustomerPrivateContent(0); - List messageList = groupMessageMap.get(groupId); - if (CollUtil.isNotEmpty(messageList)) { - for (GroupMessage groupMessage : messageList) { - if (GroupInteractiveType.GROUP.value.equals(groupMessage.getInteractiveType())) { - if (GroupMessageUserType.ADVISOR.value.equals(groupMessage.getUserType())) { - collect.setAdvisorGroupContent(groupMessage.getId()); - } else if (GroupMessageUserType.ASSISTANT.value.equals(groupMessage.getUserType())) { - collect.setAssistantGroupContent(groupMessage.getId()); - } else if (GroupMessageUserType.CUSTOMER.value.equals(groupMessage.getUserType())) { - collect.setCustomerGroupContent(groupMessage.getId()); - } - } else if (GroupInteractiveType.PRIVATE.value.equals(groupMessage.getInteractiveType())) { - if (GroupMessageUserType.ADVISOR.value.equals(groupMessage.getUserType())) { - collect.setAdvisorPrivateContent(groupMessage.getId()); - } else if (GroupMessageUserType.ASSISTANT.value.equals(groupMessage.getUserType())) { - collect.setAssistantPrivateContent(groupMessage.getId()); - } else if (GroupMessageUserType.CUSTOMER.value.equals(groupMessage.getUserType())) { - collect.setCustomerPrivateContent(groupMessage.getId()); - } - } - } - } - collect.setCreateTime(now); - return collect; - }).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(collectList)) { - groupCollectMapper.delete(Wrappers.lambdaQuery().eq(GroupCollect::getDate, date)); - groupCollectMapper.insertBatchSomeColumn(collectList); - } - } - - private void saveGroupMessageCollect(Set messageIds) { - QueryWrapper wrapper = Wrappers.query() - .select("message_id", "count(0) as group_id") - .in("message_id", messageIds) - .groupBy("message_id"); - List list = groupMessageReadMapper.selectList(wrapper); - for (GroupMessageRead read : list) { - GroupMessage message = new GroupMessage(); - message.setId(read.getMessageId()); - message.setReadCount(read.getGroupId()); - groupMessageMapper.updateById(message); - } - } - public Set getModuleIds(Integer groupId) { Set moduleIdSet = new HashSet<>(); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery() @@ -261,7 +98,7 @@ public class GroupCommonService { return moduleIdSet; } - private Integer getModuleMemberCount(Integer groupId, boolean isNew) { + public Integer getModuleMemberCount(Integer groupId, boolean isNew) { Set moduleIds = getModuleIds(groupId); if (CollUtil.isEmpty(moduleIds)) { return 0;