修改圈子成员人数统计

This commit is contained in:
easonzhu 2025-02-22 22:41:23 +08:00
parent 0af2f8f3ef
commit af8bceb495
2 changed files with 41 additions and 31 deletions

View File

@ -18,6 +18,7 @@ import com.syzb.common.constant.IsOrNot;
import com.syzb.common.util.logger.LoggerUtil; import com.syzb.common.util.logger.LoggerUtil;
import com.syzb.group.entity.GroupInfo; import com.syzb.group.entity.GroupInfo;
import com.syzb.group.mapper.GroupInfoMapper; import com.syzb.group.mapper.GroupInfoMapper;
import com.syzb.group.service.common.GroupCommonService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -42,7 +43,7 @@ public class BusinessDataService {
private ModuleUserMapper moduleUserMapper; private ModuleUserMapper moduleUserMapper;
@Resource @Resource
private GroupInfoMapper groupInfoMapper; private GroupCommonService groupCommonService;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void syncOrder() { public void syncOrder() {
@ -79,7 +80,7 @@ public class BusinessDataService {
List<ModuleUser> lastModuleUserList = moduleUserMapper.selectList(wrapper); List<ModuleUser> lastModuleUserList = moduleUserMapper.selectList(wrapper);
Map<Integer, LocalDateTime> updateTimeMap = lastModuleUserList.stream().collect(Collectors.toMap(ModuleUser::getModuleId, ModuleUser::getUpdateTime)); Map<Integer, LocalDateTime> updateTimeMap = lastModuleUserList.stream().collect(Collectors.toMap(ModuleUser::getModuleId, ModuleUser::getUpdateTime));
LocalDateTime endTime = LocalDateTime.now(); LocalDateTime endTime = LocalDateTime.now();
Set<Integer> moduleIds = getModuleIds(); Set<Integer> moduleIds = groupCommonService.getModuleIds(null);
for (Integer moduleId : moduleIds) { for (Integer moduleId : moduleIds) {
LocalDateTime startTime = updateTimeMap.getOrDefault(moduleId, INIT_SYNC_TIME); LocalDateTime startTime = updateTimeMap.getOrDefault(moduleId, INIT_SYNC_TIME);
List<BusinessModuleUserVO> moduleUserList = businessApiService.getModuleUserList(moduleId, startTime, endTime); List<BusinessModuleUserVO> moduleUserList = businessApiService.getModuleUserList(moduleId, startTime, endTime);
@ -100,25 +101,6 @@ public class BusinessDataService {
} }
} }
private Set<Integer> getModuleIds() {
Set<Integer> moduleIdSet = new HashSet<>();
LambdaQueryWrapper<GroupInfo> wrapper = Wrappers.<GroupInfo>lambdaQuery()
.select(GroupInfo::getAuthorityId);
List<GroupInfo> authIdList = groupInfoMapper.selectList(wrapper);
authIdList.stream().map(GroupInfo::getAuthorityId).filter(StrUtil::isNotBlank)
.forEach(authId -> {
String[] moduleIdStrArray = authId.split(",");
for (String moduleIdStr : moduleIdStrArray) {
try {
moduleIdSet.add(Integer.valueOf(moduleIdStr));
} catch (NumberFormatException e) {
LoggerUtil.error("权限ID格式错误:" + authId + ":" + e.getMessage());
}
}
});
return moduleIdSet;
}
private AppOrder convertOrder(BusinessOrderVO order, boolean isNew) { private AppOrder convertOrder(BusinessOrderVO order, boolean isNew) {
AppOrder appOrder = new AppOrder(); AppOrder appOrder = new AppOrder();
appOrder.setOrderId(order.getOrderId()); appOrder.setOrderId(order.getOrderId());

View File

@ -2,20 +2,23 @@ package com.syzb.group.service.common;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap; import com.hazelcast.map.IMap;
import com.syzb.business.entity.ModuleUser;
import com.syzb.business.mapper.ModuleUserMapper;
import com.syzb.common.config.cache.CacheKey; import com.syzb.common.config.cache.CacheKey;
import com.syzb.common.constant.IsOrNot; import com.syzb.common.constant.IsOrNot;
import com.syzb.common.entity.OnlineUser; import com.syzb.common.entity.OnlineUser;
import com.syzb.common.util.logger.LoggerUtil;
import com.syzb.common.vo.IdCountVO; import com.syzb.common.vo.IdCountVO;
import com.syzb.group.constant.GroupInteractiveType; import com.syzb.group.constant.GroupInteractiveType;
import com.syzb.group.constant.GroupMessageUserType; import com.syzb.group.constant.GroupMessageUserType;
import com.syzb.group.entity.*; import com.syzb.group.entity.*;
import com.syzb.group.mapper.*; import com.syzb.group.mapper.*;
import com.syzb.group.vo.GroupVO;
import com.syzb.group.vo.message.GroupMessageReadVO; import com.syzb.group.vo.message.GroupMessageReadVO;
import com.syzb.group.vo.message.GroupMessageVO; import com.syzb.group.vo.message.GroupMessageVO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -51,6 +54,9 @@ public class GroupCommonService {
@Resource @Resource
private GroupMessageReadMapper groupMessageReadMapper; private GroupMessageReadMapper groupMessageReadMapper;
@Resource
private ModuleUserMapper moduleUserMapper;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveGroupMessageRead() { public void saveGroupMessageRead() {
List<GroupMessageReadVO> cacheList = hazelcastInstance.getList(CacheKey.GroupKey.TEMP_READ_LIST); List<GroupMessageReadVO> cacheList = hazelcastInstance.getList(CacheKey.GroupKey.TEMP_READ_LIST);
@ -58,7 +64,7 @@ public class GroupCommonService {
Map<Integer, Set<String>> map = new HashMap<>(cacheList.size()); Map<Integer, Set<String>> map = new HashMap<>(cacheList.size());
for (GroupMessageReadVO read : cacheList) { for (GroupMessageReadVO read : cacheList) {
if (read != null) { if (read != null) {
read.getMessageIds().stream().forEach(m -> read.getMessageIds().forEach(m ->
map.computeIfAbsent(m, k -> new HashSet<>()).add(read.getUserId())); map.computeIfAbsent(m, k -> new HashSet<>()).add(read.getUserId()));
} }
} }
@ -169,9 +175,9 @@ public class GroupCommonService {
GroupCollect collect = new GroupCollect(); GroupCollect collect = new GroupCollect();
collect.setGroupId(groupId); collect.setGroupId(groupId);
collect.setDate(date); collect.setDate(date);
collect.setTotalMembers(getTotalMembers(groupId)); collect.setTotalMembers(getModuleMembers(groupId, false));
collect.setVisitedMembers(visitMemberMap.getOrDefault(groupId, 0)); collect.setVisitedMembers(visitMemberMap.getOrDefault(groupId, 0));
collect.setNewMembers(getNewMembers(groupId)); collect.setNewMembers(getModuleMembers(groupId, true));
collect.setInteractionMembers(0); collect.setInteractionMembers(0);
collect.setPrivateChatMembers(0); collect.setPrivateChatMembers(0);
List<GroupMessage> messageMemberList = groupMessageMemberMap.get(groupId); List<GroupMessage> messageMemberList = groupMessageMemberMap.get(groupId);
@ -235,13 +241,35 @@ public class GroupCommonService {
} }
} }
private Integer getTotalMembers(Integer groupId) { public Set<Integer> getModuleIds(Integer groupId) {
// TODO Set<Integer> moduleIdSet = new HashSet<>();
return 0; LambdaQueryWrapper<GroupInfo> wrapper = Wrappers.<GroupInfo>lambdaQuery()
.select(GroupInfo::getAuthorityId)
.eq(groupId != null, GroupInfo::getId, groupId);
List<GroupInfo> authIdList = groupInfoMapper.selectList(wrapper);
authIdList.stream().map(GroupInfo::getAuthorityId).filter(StrUtil::isNotBlank)
.forEach(authId -> {
String[] moduleIdStrArray = authId.split(",");
for (String moduleIdStr : moduleIdStrArray) {
try {
moduleIdSet.add(Integer.valueOf(moduleIdStr));
} catch (NumberFormatException e) {
LoggerUtil.error("权限ID格式错误:" + authId + ":" + e.getMessage());
}
}
});
return moduleIdSet;
} }
private Integer getNewMembers(Integer groupId) { private Integer getModuleMembers(Integer groupId, boolean isNew) {
// TODO Set<Integer> moduleIds = getModuleIds(groupId);
return 0; if (CollUtil.isEmpty(moduleIds)) {
return 0;
}
LambdaQueryWrapper<ModuleUser> wrapper = Wrappers.<ModuleUser>lambdaQuery()
.in(ModuleUser::getModuleId, moduleIds)
.ge(isNew, ModuleUser::getCreateTime, LocalDate.now().atStartOfDay());
return moduleUserMapper.selectCount(wrapper).intValue();
} }
} }