统计接口完善

This commit is contained in:
easonzhu 2025-02-23 16:30:22 +08:00
parent bb7c854203
commit 2e9fc9025a
8 changed files with 212 additions and 186 deletions

View File

@ -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<Pager<GroupCustomerVO>> listCustomer(@Validated @RequestBody @ApiParam(required = true) ListGroupCustomerQuery query,
@RequestAttribute(value = "backendUser", required = false) BackendUserVO backendUserVO) {

View File

@ -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 {

View File

@ -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<GroupVO> 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<AppPager<GroupVO>> list(@Validated @RequestBody @ApiParam(required = true) ListGroupAppQuery query) {
AppPager<GroupVO> page = groupInfoService.listForApp(query);
AppPager<GroupVO> page = appGroupInfoService.listForApp(query);
return CommonResult.success(page);
}
}

View File

@ -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;
}

View File

@ -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()
);
}

View File

@ -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<GroupInfo> groupWrapper = Wrappers.<GroupInfo>lambdaQuery()
.select(GroupInfo::getId);
List<GroupInfo> groups = groupInfoMapper.selectList(groupWrapper);
if (CollUtil.isEmpty(groups)) {
return;
}
List<Integer> groupIds = groups.stream().map(GroupInfo::getId).collect(Collectors.toList());
// 获取昨日数据
// 如果昨天数据还是昨天统计的那需要重新计算否则不需计算
QueryWrapper<GroupCollect> collectWrapper = Wrappers.<GroupCollect>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<Integer> groupIds, LocalDate date) {
LocalDateTime startTime = date.atStartOfDay();
LocalDateTime endTime = date.plusDays(1).atStartOfDay();
List<IdCountVO> visitMemberList = groupUserFlowMapper.selectGroupUserCount(startTime, endTime);
Map<Integer, Integer> visitMemberMap = visitMemberList.stream().collect(Collectors.toMap(IdCountVO::getId, IdCountVO::getCount));
List<GroupMessage> messageMemberCollect = groupMessageMapper.collectMessageMember(startTime, endTime);
Map<Integer, List<GroupMessage>> groupMessageMemberMap = messageMemberCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId));
List<GroupMessage> messageCollect = groupMessageMapper.collectMessage(startTime, endTime);
Map<Integer, List<GroupMessage>> groupMessageMap = messageCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId));
LocalDateTime now = LocalDateTime.now();
List<GroupCollect> 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<GroupMessage> 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<GroupMessage> 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.<GroupCollect>lambdaQuery().eq(GroupCollect::getDate, date));
groupCollectMapper.insertBatchSomeColumn(collectList);
}
}
public List<GroupCollectVO> queryCollect(QueryGroupCollectQuery query, BackendUserVO backendUserVO) {
Integer groupId = query.getGroupId();
LocalDate startDate = query.getStartDate();
@ -89,7 +199,7 @@ public class AdminGroupCollectService {
public Pager<GroupCustomerVO> 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<String> userIdSet = moduleUserList.stream().map(ModuleUser::getUserId).collect(Collectors.toSet());
List<WxUser> wxUserList = wxUserMapper.selectList(Wrappers.<WxUser>lambdaQuery()
.in(WxUser::getId, userIdSet));
if (CollUtil.isEmpty(wxUserList)) {
return Pager.emptyPager();
}
Map<String, WxUser> wxUserMap = wxUserList.stream().collect(Collectors.toMap(WxUser::getId, Function.identity()));
Set<String> blackUserIds = commentBlackService.getBlackUserIds(groupId, ProductType.GROUP.value);
Set<String> onlineUserIds = groupCacheService.getOnlineUserIds(groupId);
@ -119,7 +226,10 @@ public class AdminGroupCollectService {
List<GroupCustomerVO> 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<GroupCustomerVO> voList = voStream.collect(Collectors.toList());
List<GroupCustomerVO> pageList = CollUtil.page(query.getCurrent(), query.getSize(), voList);
List<GroupCustomerVO> pageList = CollUtil.page(query.getCurrent() - 1, query.getSize(), voList);
return new Pager<>(pageList, voList.size());
}

View File

@ -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<String, Object> 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<GroupMessageReadVO> cacheList = hazelcastInstance.getList(CacheKey.GroupKey.TEMP_READ_LIST);
// 合并重复项
Map<Integer, Set<String>> 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<GroupMessageRead> 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<Integer> messageIds) {
QueryWrapper<GroupMessageRead> wrapper = Wrappers.<GroupMessageRead>query()
.select("message_id", "count(0) as group_id")
.in("message_id", messageIds)
.groupBy("message_id");
List<GroupMessageRead> 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);
}

View File

@ -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<GroupMessageReadVO> cacheList = hazelcastInstance.getList(CacheKey.GroupKey.TEMP_READ_LIST);
// 合并重复项
Map<Integer, Set<String>> 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<GroupMessageRead> 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<GroupInfo> groupWrapper = Wrappers.<GroupInfo>lambdaQuery()
.select(GroupInfo::getId);
List<GroupInfo> groups = groupInfoMapper.selectList(groupWrapper);
if (CollUtil.isEmpty(groups)) {
return;
}
List<Integer> groupIds = groups.stream().map(GroupInfo::getId).collect(Collectors.toList());
// 获取昨日数据
// 如果昨天数据还是昨天统计的那需要重新计算否则不需计算
QueryWrapper<GroupCollect> collectWrapper = Wrappers.<GroupCollect>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<Integer> groupIds, LocalDate date) {
LocalDateTime startTime = date.atStartOfDay();
LocalDateTime endTime = date.plusDays(1).atStartOfDay();
List<IdCountVO> visitMemberList = groupUserFlowMapper.selectGroupUserCount(startTime, endTime);
Map<Integer, Integer> visitMemberMap = visitMemberList.stream().collect(Collectors.toMap(IdCountVO::getId, IdCountVO::getCount));
List<GroupMessage> messageMemberCollect = groupMessageMapper.collectMessageMember(startTime, endTime);
Map<Integer, List<GroupMessage>> groupMessageMemberMap = messageMemberCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId));
List<GroupMessage> messageCollect = groupMessageMapper.collectMessage(startTime, endTime);
Map<Integer, List<GroupMessage>> groupMessageMap = messageCollect.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId));
LocalDateTime now = LocalDateTime.now();
List<GroupCollect> 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<GroupMessage> 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<GroupMessage> 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.<GroupCollect>lambdaQuery().eq(GroupCollect::getDate, date));
groupCollectMapper.insertBatchSomeColumn(collectList);
}
}
private void saveGroupMessageCollect(Set<Integer> messageIds) {
QueryWrapper<GroupMessageRead> wrapper = Wrappers.<GroupMessageRead>query()
.select("message_id", "count(0) as group_id")
.in("message_id", messageIds)
.groupBy("message_id");
List<GroupMessageRead> 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<Integer> getModuleIds(Integer groupId) {
Set<Integer> moduleIdSet = new HashSet<>();
LambdaQueryWrapper<GroupInfo> wrapper = Wrappers.<GroupInfo>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<Integer> moduleIds = getModuleIds(groupId);
if (CollUtil.isEmpty(moduleIds)) {
return 0;