|
|
@ -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.NumConstant; |
|
|
|
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.security.dto.TokenDto; |
|
|
|
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.member.dao.ResiGroupMemberDao; |
|
|
|
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.topic.dao.ResiTopicAttachmentDao; |
|
|
|
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.TopicConstant; |
|
|
|
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.result.ResiGroupMemberInfoRedisResultDTO; |
|
|
|
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.ResiTopicPageFormDTO; |
|
|
@ -63,12 +67,15 @@ import com.epmet.resi.group.dto.topic.result.ResiTopicInfoResultDTO; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.apache.commons.logging.Log; |
|
|
|
import org.apache.commons.logging.LogFactory; |
|
|
|
import org.bouncycastle.math.raw.Mod; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
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 |
|
|
|
private ResiTopicOperationDao resiTopicOperationDao; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ResiTopicCommentDao resiTopicCommentDao; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
EpmetUserFeignClient epmetUserFeignClient; |
|
|
|
|
|
|
@ -104,7 +108,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
ResiGroupStatisticalDao resiGroupStatisticalDao; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
RedisUtils redisUtil; |
|
|
|
private ResiGroupMemberRedis resiGroupMemberRedis; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private ResiTopicOperationService resiTopicOperationService; |
|
|
@ -277,8 +281,8 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
|
|
|
|
if(null != lastestTenTopics && lastestTenTopics.size() > 0) { |
|
|
|
|
|
|
|
//2.遍历存储用户信息
|
|
|
|
List<String> userIdList = new ArrayList<>(); |
|
|
|
//2.遍历存储用户信息 从数据库中查找
|
|
|
|
/*List<String> userIdList = new ArrayList<>(); |
|
|
|
for (ResiTopicInfoResultDTO topic : lastestTenTopics) { |
|
|
|
userIdList.add(topic.getUserId()); |
|
|
|
} |
|
|
@ -286,6 +290,10 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
formDTO.setUserIdList(userIdList); |
|
|
|
Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO); |
|
|
|
setUserInfo(userResiInfoDTOListResult, lastestTenTopics); |
|
|
|
*/ |
|
|
|
|
|
|
|
//2.2从缓存中查找用户信息
|
|
|
|
setCacheUserInfo(groupId,lastestTenTopics); |
|
|
|
} |
|
|
|
return new Result<List<ResiTopicInfoResultDTO>>().ok(lastestTenTopics); |
|
|
|
} |
|
|
@ -316,7 +324,8 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
|
|
|
|
if (null != pastTopics && pastTopics.size() > 0) { |
|
|
|
|
|
|
|
//2.遍历用户信息
|
|
|
|
/* |
|
|
|
//2.遍历用户信息
|
|
|
|
List<String> userIdList = new ArrayList<>(); |
|
|
|
for (ResiTopicInfoResultDTO topic : pastTopics) { |
|
|
|
userIdList.add(topic.getUserId()); |
|
|
@ -325,7 +334,12 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
formDTO.setUserIdList(userIdList); |
|
|
|
Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO); |
|
|
|
setUserInfo(userResiInfoDTOListResult, pastTopics); |
|
|
|
} |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
//2.2 在缓存中拉取用户信息
|
|
|
|
setCacheUserInfo(topicPageFormDTO.getGroupId(), pastTopics); |
|
|
|
} |
|
|
|
return new Result<List<ResiTopicInfoResultDTO>>().ok(pastTopics); |
|
|
|
} |
|
|
|
|
|
|
@ -506,24 +520,53 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
resultDTO.setTopicImgs(attachmentUrls); |
|
|
|
|
|
|
|
//3.拿取用户信息
|
|
|
|
|
|
|
|
|
|
|
|
ResiTopicDTO topic = get(topicId); |
|
|
|
ResiGroupEntity group = resiGroupDao.selectById(topic.getGroupId()); |
|
|
|
UserResiInfoFormDTO userParam = new UserResiInfoFormDTO(); |
|
|
|
userParam.setUserId(topic.getCreatedBy()); |
|
|
|
userParam.setCustomerId(group.getCustomerId()); |
|
|
|
Result<UserResiInfoResultDTO> userInfo = epmetUserFeignClient.getUserResiInfoDTO(userParam); |
|
|
|
if(userInfo.success()){ |
|
|
|
if(null != userInfo.getData()){ |
|
|
|
resultDTO.setReleaseUserName(userInfo.getData().getShowName()); |
|
|
|
resultDTO.setReleaseUserHeadPhoto(userInfo.getData().getHeadPhoto()); |
|
|
|
} |
|
|
|
|
|
|
|
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.USER_INFO_LIST_NOT_FOUND); |
|
|
|
logger.warn(ModuleConstant.GROUP_MEMBER_NOT_EXISTS_IN_CACHE); |
|
|
|
|
|
|
|
UserResiInfoFormDTO userParam = new UserResiInfoFormDTO(); |
|
|
|
userParam.setUserId(topic.getCreatedBy()); |
|
|
|
userParam.setCustomerId(group.getCustomerId()); |
|
|
|
Result<UserResiInfoResultDTO> userInfo = epmetUserFeignClient.getUserResiInfoDTO(userParam); |
|
|
|
if(userInfo.success()){ |
|
|
|
if(null != userInfo.getData()){ |
|
|
|
resultDTO.setReleaseUserName(userInfo.getData().getShowName()); |
|
|
|
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{ |
|
|
|
logger.warn(ModuleConstant.USER_INFO_LIST_NOT_FOUND); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new Result<ResiTopicDetailResultDTO>().ok(resultDTO); |
|
|
|
} |
|
|
|
|
|
|
@ -549,14 +592,16 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
//2.遍历用户信息
|
|
|
|
if (null != hiddenTopics && hiddenTopics.size() > 0) { |
|
|
|
|
|
|
|
List<String> userIdList = new ArrayList<>(); |
|
|
|
/*List<String> userIdList = new ArrayList<>(); |
|
|
|
for (ResiTopicInfoResultDTO topic : hiddenTopics) { |
|
|
|
userIdList.add(topic.getUserId()); |
|
|
|
} |
|
|
|
UserResiInfoListFormDTO formDTO = new UserResiInfoListFormDTO(); |
|
|
|
formDTO.setUserIdList(userIdList); |
|
|
|
Result<List<UserResiInfoResultDTO>> userResiInfoDTOListResult = epmetUserFeignClient.getUserResiInfoList(formDTO); |
|
|
|
setUserInfo(userResiInfoDTOListResult, hiddenTopics); |
|
|
|
setUserInfo(userResiInfoDTOListResult, hiddenTopics);*/ |
|
|
|
|
|
|
|
setCacheUserInfo(topicPageFormDTO.getGroupId(), hiddenTopics); |
|
|
|
} |
|
|
|
|
|
|
|
return new Result<List<ResiTopicInfoResultDTO>>().ok(hiddenTopics); |
|
|
@ -629,7 +674,7 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
* @Author wangc |
|
|
|
* @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.getData().size() > 0){ |
|
|
|
for(UserResiInfoResultDTO resiUser : userResiInfoDTOListResult.getData()){ |
|
|
@ -684,4 +729,75 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi |
|
|
|
resiTopicOperationService.insertBatch(topicOperationList); |
|
|
|
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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|