Browse Source

从缓存中获取用户信息,如果没有,去数据库查找,并放入缓存。同意组创建:添加组缓存;组长同意进群:增加成员缓存;获取最近十条话题、获取历史话题、获取屏蔽话题列表,去缓存查找发布人信息。

dev_shibei_match
wangchao 5 years ago
parent
commit
d586f79a95
  1. 4
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/ResiGroupMemberDTO.java
  2. 30
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/ResiGroupMemberInfoRedisResultDTO.java
  3. 2
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java
  4. 46
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/redis/ResiGroupMemberRedis.java
  5. 34
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java
  6. 134
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
  7. 5
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/utils/ModuleConstant.java
  8. 4
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserResiInfoListFormDTO.java
  9. 4
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserResiInfoServiceImpl.java

4
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/ResiGroupMemberDTO.java

@ -98,4 +98,8 @@ public class ResiGroupMemberDTO implements Serializable {
*/ */
private String updatedBy; private String updatedBy;
/**
* 客户Id
* */
private String customerId;
} }

30
epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/member/result/ResiGroupMemberInfoRedisResultDTO.java

@ -0,0 +1,30 @@
package com.epmet.resi.group.dto.member.result;
import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
import java.util.Set;
/**
* @Description
* @ClassName ResiGroupMemberInfoRedisResultDTO
* @Author wangc
* @date 2020.04.14 00:21
*/
@Data
public class ResiGroupMemberInfoRedisResultDTO implements Serializable {
private static final long serialVersionUID = -1L;
/**
* 该组内所有成员的key
*
* */
private Set<String> memberKeys;
/**
* 该组内所有成员的信息
* */
private Map<String,ResiGroupMemberInfoRedisDTO> memberMap;
}

2
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/group/service/impl/ResiGroupServiceImpl.java

@ -465,7 +465,7 @@ public class ResiGroupServiceImpl extends BaseServiceImpl<ResiGroupDao, ResiGrou
userRoleFormDTO.setApp("resi"); userRoleFormDTO.setApp("resi");
userRoleFormDTO.setCustomerId(resiGroupDTO.getCustomerId()); userRoleFormDTO.setCustomerId(resiGroupDTO.getCustomerId());
userRoleFormDTO.setUserId(agreeApplyGroupFormDTO.getUserId()); userRoleFormDTO.setUserId(agreeApplyGroupFormDTO.getUserId());
//userRoleFormDTO.setGridId() //userRoleFormDTO.setGridId
//epmetUserFeignClient.getUserRoleInfo(userRoleFormDTO); //epmetUserFeignClient.getUserRoleInfo(userRoleFormDTO);
} }

46
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/redis/ResiGroupMemberRedis.java

@ -17,13 +17,20 @@
package com.epmet.modules.member.redis; package com.epmet.modules.member.redis;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.map.MapUtil;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.redis.RedisKeys; import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO; import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO;
import com.epmet.resi.group.dto.member.result.ResiGroupMemberInfoRedisResultDTO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.*;
/** /**
* 群组成员关系表 * 群组成员关系表
* *
@ -54,8 +61,45 @@ public class ResiGroupMemberRedis {
} }
} }
public String get(String id){ /**
* @Description 得到一个指定组内成员信息,如果redis中没有则返回null
* @Param groupId
* @Param userId
* @return ResiGroupMemberInfoRedisDTO.class
* @Author wangc
* @Date 2020.04.13 23:36
**/
public ResiGroupMemberInfoRedisDTO get(String groupId ,String userId){
Map<String, Object> map = redisUtils.hGetAll(RedisKeys.getResiGroupMemberInfoKey(groupId,userId));
if (MapUtil.isEmpty(map)) {
return null; return null;
} }
//map to bean
ResiGroupMemberInfoRedisDTO member = BeanUtil.mapToBean(map, ResiGroupMemberInfoRedisDTO.class, true);
return member;
}
/**
* @Description 得到一个组中所有成员的信息
* @Param groupId
* @return
* @Author wangc
* @Date 2020.04.14 00:13
**/
public ResiGroupMemberInfoRedisResultDTO getKeys(String groupId){
Set<String> groupMemberKeys =
redisUtils.keys(RedisKeys.getResiGroupInfoKey(groupId).concat("*"));
Map<String,ResiGroupMemberInfoRedisDTO> memberMap = new HashMap<>(NumConstant.ONE_HUNDRED);
for(String key : groupMemberKeys){
ResiGroupMemberInfoRedisDTO member = (ResiGroupMemberInfoRedisDTO)redisUtils.get(key);
if(null != member){
memberMap.put(member.getUserId(),member);
}
}
ResiGroupMemberInfoRedisResultDTO result = new ResiGroupMemberInfoRedisResultDTO();
result.setMemberKeys(groupMemberKeys);
result.setMemberMap(memberMap);
return result;
}
} }

34
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/member/service/impl/ResiGroupMemberServiceImpl.java

@ -30,6 +30,7 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.ReadFlagConstant; import com.epmet.constant.ReadFlagConstant;
import com.epmet.dto.UserMessageDTO; import com.epmet.dto.UserMessageDTO;
import com.epmet.dto.form.UserMessageFormDTO; import com.epmet.dto.form.UserMessageFormDTO;
import com.epmet.dto.form.UserResiInfoFormDTO;
import com.epmet.dto.form.UserResiInfoListFormDTO; import com.epmet.dto.form.UserResiInfoListFormDTO;
import com.epmet.dto.result.UserResiInfoResultDTO; import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.feign.MessageFeignClient; import com.epmet.feign.MessageFeignClient;
@ -42,6 +43,7 @@ import com.epmet.modules.group.service.ResiGroupService;
import com.epmet.modules.group.service.ResiGroupStatisticalService; import com.epmet.modules.group.service.ResiGroupStatisticalService;
import com.epmet.modules.member.dao.ResiGroupMemberDao; import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.member.entity.ResiGroupMemberEntity; import com.epmet.modules.member.entity.ResiGroupMemberEntity;
import com.epmet.modules.member.redis.ResiGroupMemberRedis;
import com.epmet.modules.member.service.GroupMemeberOperationService; import com.epmet.modules.member.service.GroupMemeberOperationService;
import com.epmet.modules.member.service.ResiGroupMemberService; import com.epmet.modules.member.service.ResiGroupMemberService;
import com.epmet.modules.topic.service.ResiTopicService; import com.epmet.modules.topic.service.ResiTopicService;
@ -53,6 +55,7 @@ import com.epmet.resi.group.dto.UserRoleDTO;
import com.epmet.resi.group.dto.group.ResiGroupDTO; import com.epmet.resi.group.dto.group.ResiGroupDTO;
import com.epmet.resi.group.dto.member.GroupMemeberOperationDTO; import com.epmet.resi.group.dto.member.GroupMemeberOperationDTO;
import com.epmet.resi.group.dto.member.ResiGroupMemberDTO; import com.epmet.resi.group.dto.member.ResiGroupMemberDTO;
import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO;
import com.epmet.resi.group.dto.member.form.*; import com.epmet.resi.group.dto.member.form.*;
import com.epmet.resi.group.dto.member.result.ApplyingMemberResultDTO; import com.epmet.resi.group.dto.member.result.ApplyingMemberResultDTO;
import com.epmet.resi.group.dto.member.result.GroupMemberListResultDTO; import com.epmet.resi.group.dto.member.result.GroupMemberListResultDTO;
@ -98,6 +101,9 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
@Autowired @Autowired
private ResiTopicService resiTopicService; private ResiTopicService resiTopicService;
@Autowired
private ResiGroupMemberRedis resiGroupMemberRedis;
@Override @Override
public PageData<ResiGroupMemberDTO> page(Map<String, Object> params) { public PageData<ResiGroupMemberDTO> page(Map<String, Object> params) {
IPage<ResiGroupMemberEntity> page = baseDao.selectPage( IPage<ResiGroupMemberEntity> page = baseDao.selectPage(
@ -330,6 +336,10 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
baseDao.updateResiGroupStatistical(groupMemeberOperationDTO.getGroupId(), userRoleDTO); baseDao.updateResiGroupStatistical(groupMemeberOperationDTO.getGroupId(), userRoleDTO);
//6、给用户发送消息 //6、给用户发送消息
this.sendUserApprovedMessage(resiGroupMemberDTO); this.sendUserApprovedMessage(resiGroupMemberDTO);
//7、增加成员缓存信息
resiGroupDTO.setCustomerId(resiGroupDTO.getCustomerId());
ResiGroupMemberInfoRedisDTO memberRedis = transferToMemberInfoRedis(resiGroupMemberDTO);
resiGroupMemberRedis.set(memberRedis);
return new Result(); return new Result();
} }
@ -509,4 +519,28 @@ public class ResiGroupMemberServiceImpl extends BaseServiceImpl<ResiGroupMemberD
return result; return result;
} }
/**
* @Description 将ResiGroupMemberDTO转换成ResiGroupMemberInfoRedisDTO
* @Param
* @return
* @Author wangc
* @Date 2020.04.13 21:48
**/
private ResiGroupMemberInfoRedisDTO transferToMemberInfoRedis(ResiGroupMemberDTO memberDTO){
ResiGroupMemberInfoRedisDTO targetObject =
ConvertUtils.sourceToTarget(memberDTO,ResiGroupMemberInfoRedisDTO.class);
targetObject.setMemberStatus(memberDTO.getStatus());
targetObject.setUserId(memberDTO.getId());
UserResiInfoFormDTO resiInfoParam = new UserResiInfoFormDTO();
resiInfoParam.setCustomerId(memberDTO.getCustomerId());
resiInfoParam.setUserId(memberDTO.getCustomerUserId());
Result<UserResiInfoResultDTO> result = epmetUserFeignClient.getUserResiInfoDTO(resiInfoParam);
if(result.success() && null != result.getData()){
targetObject.setUserHeadPhoto(result.getData().getHeadPhoto());
targetObject.setUserShowName(result.getData().getShowName());
}
return targetObject;
}
} }

134
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java

@ -24,6 +24,7 @@ import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.redis.RedisKeys;
import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.redis.RedisUtils;
import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
@ -39,6 +40,7 @@ import com.epmet.modules.group.entity.ResiGroupEntity;
import com.epmet.modules.group.entity.ResiGroupStatisticalEntity; import com.epmet.modules.group.entity.ResiGroupStatisticalEntity;
import com.epmet.modules.member.dao.ResiGroupMemberDao; import com.epmet.modules.member.dao.ResiGroupMemberDao;
import com.epmet.modules.member.entity.ResiGroupMemberEntity; import com.epmet.modules.member.entity.ResiGroupMemberEntity;
import com.epmet.modules.member.redis.ResiGroupMemberRedis;
import com.epmet.modules.member.service.ResiGroupMemberService; import com.epmet.modules.member.service.ResiGroupMemberService;
import com.epmet.modules.topic.dao.ResiTopicAttachmentDao; import com.epmet.modules.topic.dao.ResiTopicAttachmentDao;
import com.epmet.modules.topic.dao.ResiTopicCommentDao; import com.epmet.modules.topic.dao.ResiTopicCommentDao;
@ -53,7 +55,9 @@ import com.epmet.modules.utils.ModuleConstant;
import com.epmet.resi.group.constant.MemberStateConstant; import com.epmet.resi.group.constant.MemberStateConstant;
import com.epmet.resi.group.constant.TopicConstant; import com.epmet.resi.group.constant.TopicConstant;
import com.epmet.resi.group.dto.member.ResiGroupMemberDTO; import com.epmet.resi.group.dto.member.ResiGroupMemberDTO;
import com.epmet.resi.group.dto.member.ResiGroupMemberInfoRedisDTO;
import com.epmet.resi.group.dto.member.form.RemoveMemberFormDTO; import com.epmet.resi.group.dto.member.form.RemoveMemberFormDTO;
import com.epmet.resi.group.dto.member.result.ResiGroupMemberInfoRedisResultDTO;
import com.epmet.resi.group.dto.topic.ResiTopicDTO; import com.epmet.resi.group.dto.topic.ResiTopicDTO;
import com.epmet.resi.group.dto.topic.form.ResiTopicOperationFormDTO; import com.epmet.resi.group.dto.topic.form.ResiTopicOperationFormDTO;
import com.epmet.resi.group.dto.topic.form.ResiTopicPageFormDTO; import com.epmet.resi.group.dto.topic.form.ResiTopicPageFormDTO;
@ -63,12 +67,15 @@ import com.epmet.resi.group.dto.topic.result.ResiTopicInfoResultDTO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.bouncycastle.math.raw.Mod;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/** /**
* 话题信息表 * 话题信息表
@ -88,9 +95,6 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
@Autowired @Autowired
private ResiTopicOperationDao resiTopicOperationDao; private ResiTopicOperationDao resiTopicOperationDao;
@Autowired
private ResiTopicCommentDao resiTopicCommentDao;
@Autowired @Autowired
EpmetUserFeignClient epmetUserFeignClient; EpmetUserFeignClient epmetUserFeignClient;
@ -104,7 +108,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
ResiGroupStatisticalDao resiGroupStatisticalDao; ResiGroupStatisticalDao resiGroupStatisticalDao;
@Autowired @Autowired
RedisUtils redisUtil; private ResiGroupMemberRedis resiGroupMemberRedis;
@Autowired @Autowired
private ResiTopicOperationService resiTopicOperationService; private ResiTopicOperationService resiTopicOperationService;
@ -277,8 +281,8 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
if(null != lastestTenTopics && lastestTenTopics.size() > 0) { if(null != lastestTenTopics && lastestTenTopics.size() > 0) {
//2.遍历存储用户信息 //2.遍历存储用户信息 从数据库中查找
List<String> userIdList = new ArrayList<>(); /*List<String> userIdList = new ArrayList<>();
for (ResiTopicInfoResultDTO topic : lastestTenTopics) { for (ResiTopicInfoResultDTO topic : lastestTenTopics) {
userIdList.add(topic.getUserId()); userIdList.add(topic.getUserId());
} }
@ -286,6 +290,10 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
formDTO.setUserIdList(userIdList); formDTO.setUserIdList(userIdList);
Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO); Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO);
setUserInfo(userResiInfoDTOListResult, lastestTenTopics); setUserInfo(userResiInfoDTOListResult, lastestTenTopics);
*/
//2.2从缓存中查找用户信息
setCacheUserInfo(groupId,lastestTenTopics);
} }
return new Result<List<ResiTopicInfoResultDTO>>().ok(lastestTenTopics); return new Result<List<ResiTopicInfoResultDTO>>().ok(lastestTenTopics);
} }
@ -316,6 +324,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
if (null != pastTopics && pastTopics.size() > 0) { if (null != pastTopics && pastTopics.size() > 0) {
/*
//2.遍历用户信息 //2.遍历用户信息
List<String> userIdList = new ArrayList<>(); List<String> userIdList = new ArrayList<>();
for (ResiTopicInfoResultDTO topic : pastTopics) { for (ResiTopicInfoResultDTO topic : pastTopics) {
@ -325,6 +334,11 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
formDTO.setUserIdList(userIdList); formDTO.setUserIdList(userIdList);
Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO); Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO);
setUserInfo(userResiInfoDTOListResult, pastTopics); setUserInfo(userResiInfoDTOListResult, pastTopics);
*/
//2.2 在缓存中拉取用户信息
setCacheUserInfo(topicPageFormDTO.getGroupId(), pastTopics);
} }
return new Result<List<ResiTopicInfoResultDTO>>().ok(pastTopics); return new Result<List<ResiTopicInfoResultDTO>>().ok(pastTopics);
} }
@ -506,8 +520,18 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
resultDTO.setTopicImgs(attachmentUrls); resultDTO.setTopicImgs(attachmentUrls);
//3.拿取用户信息 //3.拿取用户信息
ResiTopicDTO topic = get(topicId); ResiTopicDTO topic = get(topicId);
ResiGroupEntity group = resiGroupDao.selectById(topic.getGroupId()); ResiGroupEntity group = resiGroupDao.selectById(topic.getGroupId());
ResiGroupMemberInfoRedisDTO memberRedis =
resiGroupMemberRedis.get(group.getId(),topic.getCreatedBy());
if(null != memberRedis && StringUtils.isNotBlank(memberRedis.getUserId())){
resultDTO.setReleaseUserName(memberRedis.getUserShowName());
resultDTO.setReleaseUserHeadPhoto(memberRedis.getUserHeadPhoto());
}else{
logger.warn(ModuleConstant.GROUP_MEMBER_NOT_EXISTS_IN_CACHE);
UserResiInfoFormDTO userParam = new UserResiInfoFormDTO(); UserResiInfoFormDTO userParam = new UserResiInfoFormDTO();
userParam.setUserId(topic.getCreatedBy()); userParam.setUserId(topic.getCreatedBy());
userParam.setCustomerId(group.getCustomerId()); userParam.setCustomerId(group.getCustomerId());
@ -516,11 +540,30 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
if(null != userInfo.getData()){ if(null != userInfo.getData()){
resultDTO.setReleaseUserName(userInfo.getData().getShowName()); resultDTO.setReleaseUserName(userInfo.getData().getShowName());
resultDTO.setReleaseUserHeadPhoto(userInfo.getData().getHeadPhoto()); resultDTO.setReleaseUserHeadPhoto(userInfo.getData().getHeadPhoto());
ResiGroupMemberInfoRedisDTO memberRedisDTO = new ResiGroupMemberInfoRedisDTO();
ResiGroupMemberDTO memberMySql = resiGroupMemberDao.selectGroupMemberInfo(group.getId(), userInfo.getData().getUserId());
memberRedisDTO.setUserId(userInfo.getData().getUserId());
memberRedisDTO.setUserHeadPhoto(userInfo.getData().getHeadPhoto());
memberRedisDTO.setUserShowName(userInfo.getData().getShowName());
memberRedisDTO.setEnterGroupType(memberMySql.getEnterGroupType());
memberRedisDTO.setGroupLeaderFlag(memberMySql.getGroupLeaderFlag());
memberRedisDTO.setMemberStatus(memberMySql.getStatus());
memberRedisDTO.setGroupId(group.getId());
resiGroupMemberRedis.set(memberRedisDTO);
} }
}else{ }else{
logger.warn(ModuleConstant.USER_INFO_LIST_NOT_FOUND); logger.warn(ModuleConstant.USER_INFO_LIST_NOT_FOUND);
} }
}
@ -549,14 +592,16 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
//2.遍历用户信息 //2.遍历用户信息
if (null != hiddenTopics && hiddenTopics.size() > 0) { if (null != hiddenTopics && hiddenTopics.size() > 0) {
List<String> userIdList = new ArrayList<>(); /*List<String> userIdList = new ArrayList<>();
for (ResiTopicInfoResultDTO topic : hiddenTopics) { for (ResiTopicInfoResultDTO topic : hiddenTopics) {
userIdList.add(topic.getUserId()); userIdList.add(topic.getUserId());
} }
UserResiInfoListFormDTO formDTO = new UserResiInfoListFormDTO(); UserResiInfoListFormDTO formDTO = new UserResiInfoListFormDTO();
formDTO.setUserIdList(userIdList); formDTO.setUserIdList(userIdList);
Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO); Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO);
setUserInfo(userResiInfoDTOListResult, hiddenTopics); setUserInfo(userResiInfoDTOListResult, hiddenTopics);*/
setCacheUserInfo(topicPageFormDTO.getGroupId(), hiddenTopics);
} }
return new Result<List<ResiTopicInfoResultDTO>>().ok(hiddenTopics); return new Result<List<ResiTopicInfoResultDTO>>().ok(hiddenTopics);
@ -629,7 +674,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
* @Author wangc * @Author wangc
* @Date 2020.04.10 17:47 * @Date 2020.04.10 17:47
**/ **/
public void setUserInfo(Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult,List<ResiTopicInfoResultDTO> topics){ private void setUserInfo(Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult,List<ResiTopicInfoResultDTO> topics){
if(userResiInfoDTOListResult.success() && null != userResiInfoDTOListResult.getData()){ if(userResiInfoDTOListResult.success() && null != userResiInfoDTOListResult.getData()){
if(userResiInfoDTOListResult.getData().size() > 0){ if(userResiInfoDTOListResult.getData().size() > 0){
for(UserResiInfoResultDTO resiUser : userResiInfoDTOListResult.getData()){ for(UserResiInfoResultDTO resiUser : userResiInfoDTOListResult.getData()){
@ -684,4 +729,75 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
resiTopicOperationService.insertBatch(topicOperationList); resiTopicOperationService.insertBatch(topicOperationList);
return result; return result;
} }
/**
* @Description 将缓存中的用户信息存放到话题列表当中
* @Param groupId
* @Param List<ResiTopicInfoResultDTO>
* @return void
* @Author wangc
* @Date 2020.04.14 10:32
**/
private void setCacheUserInfo(String groupId ,List<ResiTopicInfoResultDTO> topics) {
//1.初始化存储缺失缓存信息的组员Id的容器,默认去重
Set<String> usersNotInCache = new HashSet<>();
//2.读取用户缓存信息
ResiGroupMemberInfoRedisResultDTO memberRedis = resiGroupMemberRedis.getKeys(groupId);
if (null != memberRedis && null != memberRedis.getMemberKeys() && null != memberRedis.getMemberMap()) {
String keyPrefix = RedisKeys.getResiGroupMemberInfoKey(groupId, "");
for (ResiTopicInfoResultDTO topic : topics) {
//缓存中有该用户的key
if (memberRedis.getMemberKeys().contains(keyPrefix.concat(topic.getUserId()))) {
ResiGroupMemberInfoRedisDTO memberInfoCache = memberRedis.getMemberMap().get(topic.getUserId());
if (null != memberInfoCache) {
//缓存中有该用户信息
topic.setReleaseUserName(memberInfoCache.getUserShowName());
topic.setReleaseUserHeadPhoto(memberInfoCache.getUserHeadPhoto());
} else {
//缓存中没有该用户信息
usersNotInCache.add(topic.getUserId());
}
} else {
//缓存中没有该用户的key
usersNotInCache.add(topic.getUserId());
}
}
}
//3.如果存在缺失缓存的组员,去数据库中查找,并存入缓存
if (usersNotInCache.size() > 0) {
Map<String, List<ResiTopicInfoResultDTO>> topicMap
= topics.stream().collect(Collectors.groupingBy(ResiTopicInfoResultDTO::getUserId));
List<String> userIds = new ArrayList<>(usersNotInCache);
Result<List<UserResiInfoResultDTO>> result =
epmetUserFeignClient.getUserResiInfoList(new UserResiInfoListFormDTO(userIds));
if (result.success() && null != result.getData() && result.getData().size() > 0) {
for (UserResiInfoResultDTO user : result.getData()) {
ResiTopicInfoResultDTO topic =
topicMap.get(user.getUserId()).get(0);
topic.setReleaseUserHeadPhoto(user.getHeadPhoto());
topic.setReleaseUserName(user.getShowName());
//存进缓存
ResiGroupMemberInfoRedisDTO memberRedisDTO = new ResiGroupMemberInfoRedisDTO();
ResiGroupMemberDTO memberMySql = resiGroupMemberDao.selectGroupMemberInfo(groupId, user.getUserId());
memberRedisDTO.setMemberStatus(memberMySql.getStatus());
memberRedisDTO.setUserId(user.getUserId());
memberRedisDTO.setUserShowName(user.getShowName());
memberRedisDTO.setEnterGroupType(memberMySql.getEnterGroupType());
memberRedisDTO.setGroupLeaderFlag(memberMySql.getGroupLeaderFlag());
memberRedisDTO.setUserHeadPhoto(user.getHeadPhoto());
memberRedisDTO.setGroupId(groupId);
resiGroupMemberRedis.set(memberRedisDTO);
}
} else {
logger.warn(ModuleConstant.USER_INFO_LIST_NOT_FOUND);
}
}
}
} }

5
epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/utils/ModuleConstant.java

@ -152,4 +152,9 @@ public interface ModuleConstant extends Constant {
* 没有找到用户列表信息 * 没有找到用户列表信息
* */ * */
String USER_INFO_LIST_NOT_FOUND = "没有找到用户列表信息"; String USER_INFO_LIST_NOT_FOUND = "没有找到用户列表信息";
/**
* 缺失组成员缓存信息
* */
String GROUP_MEMBER_NOT_EXISTS_IN_CACHE = "缺失组成员缓存信息";
} }

4
epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserResiInfoListFormDTO.java

@ -1,6 +1,8 @@
package com.epmet.dto.form; package com.epmet.dto.form;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
@ -11,6 +13,8 @@ import java.util.List;
* @Date 2020/4/7 18:20 * @Date 2020/4/7 18:20
*/ */
@Data @Data
@AllArgsConstructor
@NoArgsConstructor
public class UserResiInfoListFormDTO implements Serializable { public class UserResiInfoListFormDTO implements Serializable {
private static final long serialVersionUID = -4454561042197166135L; private static final long serialVersionUID = -4454561042197166135L;

4
epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserResiInfoServiceImpl.java

@ -19,17 +19,14 @@ package com.epmet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.EpmetRoleKeyConstant; import com.epmet.commons.tools.constant.EpmetRoleKeyConstant;
import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.EpmetErrorCode;
import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.utils.Result;
import com.epmet.constant.UserConstant; import com.epmet.constant.UserConstant;
import com.epmet.constant.UserResiRegisterConstant;
import com.epmet.constant.UserRoleConstant; import com.epmet.constant.UserRoleConstant;
import com.epmet.dao.UserResiInfoDao; import com.epmet.dao.UserResiInfoDao;
import com.epmet.dto.UserResiInfoDTO; import com.epmet.dto.UserResiInfoDTO;
@ -39,7 +36,6 @@ import com.epmet.dto.form.UserResiInfoListFormDTO;
import com.epmet.dto.form.VerificationCodeFormDTO; import com.epmet.dto.form.VerificationCodeFormDTO;
import com.epmet.dto.result.UserResiInfoResultDTO; import com.epmet.dto.result.UserResiInfoResultDTO;
import com.epmet.entity.UserResiInfoEntity; import com.epmet.entity.UserResiInfoEntity;
import com.epmet.entity.UserRoleEntity;
import com.epmet.feign.MessageFeignClient; import com.epmet.feign.MessageFeignClient;
import com.epmet.redis.UserResiInfoRedis; import com.epmet.redis.UserResiInfoRedis;
import com.epmet.service.RegisterRelationService; import com.epmet.service.RegisterRelationService;

Loading…
Cancel
Save