From 02087e11fa4b5f69fce3b71f8fa2599d95168332 Mon Sep 17 00:00:00 2001 From: wangchao Date: Wed, 11 Nov 2020 14:42:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=9D=E9=A2=98=E6=8E=A5=E5=8F=A3=E5=8A=A0?= =?UTF-8?q?=E4=B8=8A=E5=BE=BD=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../result/GovHiddenTopicInfoResultDTO.java | 6 + .../topic/result/GovTopicInfoResultDTO.java | 6 + .../result/ResiTopicDetailResultDTO.java | 5 + .../ResiTopicIncludeIssueDetailResultDTO.java | 7 + .../ResiTopicIncludeIssueInfoResultDTO.java | 6 + .../topic/result/ResiTopicInfoResultDTO.java | 6 + .../service/impl/ResiTopicServiceImpl.java | 122 ++++++++++++++++-- .../epmet/dto/form/UserBadgeUnitFormDTO.java | 3 +- .../com/epmet/dto/form/UserGroupFormDTO.java | 35 +++++ .../dto/result/UserBadgeInfoResultDTO.java | 36 ++++++ .../epmet/feign/EpmetUserOpenFeignClient.java | 10 ++ .../EpmetUserOpenFeignClientFallback.java | 12 ++ .../com/epmet/controller/BadgeController.java | 21 ++- .../main/java/com/epmet/dao/UserBadgeDao.java | 15 ++- .../java/com/epmet/redis/UserBadgeRedis.java | 49 ++++++- .../com/epmet/service/UserBadgeService.java | 15 ++- .../service/impl/UserBadgeServiceImpl.java | 18 +++ .../main/resources/mapper/UserBadgeDao.xml | 48 +++++++ 18 files changed, 395 insertions(+), 25 deletions(-) create mode 100644 epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserGroupFormDTO.java create mode 100644 epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserBadgeInfoResultDTO.java diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovHiddenTopicInfoResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovHiddenTopicInfoResultDTO.java index 6008f6c0eb..073a984545 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovHiddenTopicInfoResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovHiddenTopicInfoResultDTO.java @@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * @Description @@ -51,4 +52,9 @@ public class GovHiddenTopicInfoResultDTO implements Serializable { * 话题的第一张图片地址 * */ private String topicFirstPhoto; + + /** + * 徽章Url集合 + */ + private List badgeList; } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovTopicInfoResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovTopicInfoResultDTO.java index d60a24382d..84a1e2f5aa 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovTopicInfoResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovTopicInfoResultDTO.java @@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serializable; import java.util.Date; +import java.util.List; /** @@ -57,4 +58,9 @@ public class GovTopicInfoResultDTO implements Serializable { * 话题的状态 * */ private String topicState; + + /** + * 徽章Url集合 + */ + private List badgeList; } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicDetailResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicDetailResultDTO.java index 1a41c1afd0..cce7d050fb 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicDetailResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicDetailResultDTO.java @@ -56,4 +56,9 @@ public class ResiTopicDetailResultDTO implements Serializable { * */ private List topicImgs; + /** + * 徽章Url集合 + */ + private List badgeList; + } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueDetailResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueDetailResultDTO.java index 988d319ad8..97c0a12faf 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueDetailResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueDetailResultDTO.java @@ -70,4 +70,11 @@ public class ResiTopicIncludeIssueDetailResultDTO implements Serializable { * 关闭详情 如果没有关闭 对象里的字符串属性为String * */ private ResiTopicClosingMsgResultDTO closeDetail; + + /** + * 徽章Url列表 + */ + private List badgeList; + + } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueInfoResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueInfoResultDTO.java index 55fe66f286..e2822a9189 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueInfoResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueInfoResultDTO.java @@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * @Description 话题信息返回DTO(包含议题Id和是否转为议题Flag) @@ -71,4 +72,9 @@ public class ResiTopicIncludeIssueInfoResultDTO implements Serializable { * 议题Id,当shiftIssueFlag为false时返回"" * */ private String issueId; + + /** + * 用户徽章 当releaseUserFlag为"me"时为空 + */ + private List badgeList; } diff --git a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicInfoResultDTO.java b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicInfoResultDTO.java index 613b506acf..be2f5452e9 100644 --- a/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicInfoResultDTO.java +++ b/epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicInfoResultDTO.java @@ -5,6 +5,7 @@ import lombok.Data; import java.io.Serializable; import java.util.Date; +import java.util.List; /** * @Description 查看历史话题返回对象 @@ -62,4 +63,9 @@ public class ResiTopicInfoResultDTO implements Serializable{ * 第一张图片 * */ private String firstPhoto; + + /** + * 用户勋章Url集合 + */ + private List badgeList; } diff --git a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java index bce65c7543..6e86d0221b 100644 --- a/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java +++ b/epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java @@ -42,6 +42,7 @@ import com.epmet.dto.form.*; import com.epmet.dto.result.CommonDataFilterResultDTO; import com.epmet.dto.result.IssueInitiatorResultDTO; import com.epmet.dto.result.UserResiInfoResultDTO; +import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.modules.constant.GroupMemberConstant; import com.epmet.modules.constant.ResiGroupRedisKeys; import com.epmet.modules.feign.EpmetUserFeignClient; @@ -88,6 +89,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; import java.util.*; @@ -142,6 +144,9 @@ public class ResiTopicServiceImpl extends BaseServiceImpl>> badgeR + = userOpenFeignClient.userShowBadge( + new UserGroupFormDTO(group.getCustomerId(), + pastTopics.stream() + .filter(top -> StringUtils.equals("other",top.getReleaseUserFlag())) + .map(ResiTopicIncludeIssueInfoResultDTO::getUserId) + .distinct().collect(Collectors.toList()))); + if(null != badgeR && badgeR.success() && null != badgeR.getData() && !badgeR.getData().isEmpty()){ + Map> badgeM = badgeR.getData(); + pastTopics.forEach(top -> { + if(StringUtils.equals("other",top.getReleaseUserFlag())){ + top.setBadgeList( + CollectionUtils.isEmpty(badgeM.get(top.getUserId())) ? + Collections.EMPTY_LIST : + badgeM.get(top.getUserId()).stream().map(UserBadgeUnitFormDTO :: getBadgeIcon).collect(Collectors.toList()) + ); + }else top.setBadgeList(Collections.EMPTY_LIST); + }); + + }else pastTopics.forEach(top -> top.setBadgeList(Collections.EMPTY_LIST)); + + } + + } + + return new Result>().ok(pastTopics); } @@ -616,6 +652,18 @@ public class ResiTopicServiceImpl extends BaseServiceImpl userId = new LinkedList<>();userId.add(topicDetail.getCreatedBy()); + Result>> badgeR + = userOpenFeignClient.userShowBadge(new UserGroupFormDTO(group.getCustomerId(), userId)); + if(null != badgeR && badgeR.success() && null != badgeR.getData() && !badgeR.getData().isEmpty()){ + resultDTO.setBadgeList( + CollectionUtils.isEmpty(badgeR.getData().get(topicDetail.getCreatedBy())) ? + Collections.EMPTY_LIST: + badgeR.getData().get(topicDetail.getCreatedBy()).stream().map(UserBadgeUnitFormDTO :: getBadgeIcon).collect(Collectors.toList()) + ); + }else resultDTO.setBadgeList(Collections.EMPTY_LIST); return new Result().ok(resultDTO); } @@ -641,6 +689,36 @@ public class ResiTopicServiceImpl extends BaseServiceImpl 0) { setCacheUserInfo(topicPageFormDTO.getGroupId(), hiddenTopics); + + + //3.用户徽章 + //3.1首先需要拿到客户Id + ResiGroupEntity group = resiGroupDao.selectById(topicPageFormDTO.getGroupId()); + if(null != group && StringUtils.isNotBlank(group.getCustomerId())){ + Result>> badgeR + = userOpenFeignClient.userShowBadge( + new UserGroupFormDTO(group.getCustomerId(), + hiddenTopics.stream() + .filter(top -> StringUtils.equals("other",top.getReleaseUserFlag())) + .map(ResiTopicInfoResultDTO::getUserId) + .distinct().collect(Collectors.toList()))); + if(null != badgeR && badgeR.success() && null != badgeR.getData() && !badgeR.getData().isEmpty()){ + Map> badgeM = badgeR.getData(); + hiddenTopics.forEach(top -> { + if(StringUtils.equals("other",top.getReleaseUserFlag())){ + top.setBadgeList( + CollectionUtils.isEmpty(badgeM.get(top.getUserId())) ? + Collections.EMPTY_LIST : + badgeM.get(top.getUserId()).stream().map(UserBadgeUnitFormDTO :: getBadgeIcon).collect(Collectors.toList()) + ); + }else top.setBadgeList(Collections.EMPTY_LIST); + }); + + }else hiddenTopics.forEach(top -> top.setBadgeList(Collections.EMPTY_LIST)); + + } + + } return new Result>().ok(hiddenTopics); @@ -791,6 +869,30 @@ public class ResiTopicServiceImpl extends BaseServiceImpl>> badgeR + = userOpenFeignClient.userShowBadge( + new UserGroupFormDTO(group.getCustomerId(), + pastTopics.stream() + .map(ResiTopicInfoResultDTO::getUserId) + .distinct().collect(Collectors.toList()))); + if (null != badgeR && badgeR.success() && null != badgeR.getData() && !badgeR.getData().isEmpty()) { + Map> badgeM = badgeR.getData(); + pastTopics.forEach(top -> { + top.setBadgeList( + CollectionUtils.isEmpty(badgeM.get(top.getUserId())) ? + Collections.EMPTY_LIST : + badgeM.get(top.getUserId()).stream().map(UserBadgeUnitFormDTO::getBadgeIcon).collect(Collectors.toList()) + ); + }); + + } else pastTopics.forEach(top -> top.setBadgeList(Collections.EMPTY_LIST)); + + } } return new Result>().ok(pastTopics); @@ -864,11 +966,13 @@ public class ResiTopicServiceImpl extends BaseServiceImpl 0) { for (UserResiInfoResultDTO user : result.getData()) { - ResiTopicInfoResultDTO topic = - topicMap.get(user.getUserId()).get(0); - topic.setReleaseUserHeadPhoto(user.getHeadPhoto()); - topic.setReleaseUserName(user.getShowName()); + if(!CollectionUtils.isEmpty(topicMap.get(user.getUserId()))){ + topicMap.get(user.getUserId()).forEach( topic -> { + topic.setReleaseUserHeadPhoto(user.getHeadPhoto()); + topic.setReleaseUserName(user.getShowName()); + }); + } //存入缓存 ResiGroupMemberInfoRedisDTO memberRedisDTO = new ResiGroupMemberInfoRedisDTO(); ResiGroupMemberDTO memberMySql = resiGroupMemberDao.selectGroupMemberInfo(groupId, user.getUserId()); @@ -936,10 +1040,12 @@ public class ResiTopicServiceImpl extends BaseServiceImpl 0) { for (UserResiInfoResultDTO user : result.getData()) { - ResiTopicIncludeIssueInfoResultDTO topic = - topicMap.get(user.getUserId()).get(0); - topic.setReleaseUserHeadPhoto(user.getHeadPhoto()); - topic.setReleaseUserName(user.getShowName()); + if(!CollectionUtils.isEmpty(topicMap.get(user.getUserId()))){ + topicMap.get(user.getUserId()).forEach( topic -> { + topic.setReleaseUserHeadPhoto(user.getHeadPhoto()); + topic.setReleaseUserName(user.getShowName()); + }); + } //存入缓存 ResiGroupMemberInfoRedisDTO memberRedisDTO = new ResiGroupMemberInfoRedisDTO(); diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserBadgeUnitFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserBadgeUnitFormDTO.java index a68dd2157e..124b94b3bd 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserBadgeUnitFormDTO.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserBadgeUnitFormDTO.java @@ -6,7 +6,8 @@ import java.io.Serializable; import java.util.Objects; /** - * @Description 用户-徽章缓存单元(专为redis操作提供) 尽量不要使用这个DTO,因为重写了hashcode和equals!!!!!!! + * @Description 用户-徽章缓存单元(专为redis操作提供) 尽量不要使用这个DTO,因为重写了hashcode和equals + * 在为单个用户查询时可以使用这个DTO,FIXME 批量查询时不要用该类接收!!!!!! * @ClassName UserBadgeUnitFormDTO * @Auth wangc * @Date 2020-11-05 10:00 diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserGroupFormDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserGroupFormDTO.java new file mode 100644 index 0000000000..341a868589 --- /dev/null +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserGroupFormDTO.java @@ -0,0 +1,35 @@ +package com.epmet.dto.form; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + +/** + * @Description 传入一组用户Id + * @ClassName UserGroupFormDTO + * @Auth wangc + * @Date 2020-11-10 14:47 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserGroupFormDTO implements Serializable { + private static final long serialVersionUID = -8406380736895707328L; + + /** + * 客户Id + */ + @NotBlank(message = "客户Id不能为空") + private String customerId; + + /** + * 用户Id集合 + */ + @NotEmpty(message = "用户Id不能为空") + private List userIds; +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserBadgeInfoResultDTO.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserBadgeInfoResultDTO.java new file mode 100644 index 0000000000..d600c35254 --- /dev/null +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserBadgeInfoResultDTO.java @@ -0,0 +1,36 @@ +package com.epmet.dto.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 用户勋章单位DTO + ClassName UserBadgeInfoResultDTO + * @Auth wangc + * @Date 2020-11-10 15:29 + */ +@Data +public class UserBadgeInfoResultDTO implements Serializable { + private static final long serialVersionUID = -793619932269122320L; + + /** + * 用户Id + */ + private String userId; + + /** + * 徽章Id + */ + private String badgeId; + + /** + * 徽章图标 url + */ + private String badgeIcon; + + /** + * 徽章名称 + */ + private String badgeName; +} diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java index ac69c933c4..4049181d75 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java @@ -421,4 +421,14 @@ public interface EpmetUserOpenFeignClient { */ @PostMapping("/epmetuser/useradvice/submitadvice") Result submitAdvice(@RequestBody SubmitAdviceFormDTO dto); + + /** + * @Description 供其他服务调用 查询指定用户需要显示的徽章信息(缓存补偿) + * @param param + * @return com.epmet.commons.tools.utils.Result>> + * @author wangc + * @date 2020.11.10 15:59 + */ + @PostMapping("/epmetuser/badge/usershowbadge") + Result>> userShowBadge(@RequestBody UserGroupFormDTO param); } diff --git a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java index 423bf32e20..443c905f67 100644 --- a/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java +++ b/epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java @@ -288,4 +288,16 @@ public class EpmetUserOpenFeignClientFallback implements EpmetUserOpenFeignClien public Result submitAdvice(SubmitAdviceFormDTO dto) { return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "submitAdvice", dto); } + + /** + * @Description 供其他服务调用 查询指定用户需要显示的徽章信息(缓存补偿) + * @param param + * @return com.epmet.commons.tools.utils.Result>> + * @author wangc + * @date 2020.11.10 15:59 + */ + @Override + public Result>> userShowBadge(UserGroupFormDTO param) { + return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "userShowBadge", param); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/BadgeController.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/BadgeController.java index faaf9c3d04..a18ad036fd 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/BadgeController.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/controller/BadgeController.java @@ -4,10 +4,7 @@ import com.epmet.commons.tools.annotation.LoginUser; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.commons.tools.validator.ValidatorUtils; -import com.epmet.dto.form.AddBadgeFormDTO; -import com.epmet.dto.form.BadgeAuditFormDTO; -import com.epmet.dto.form.BadgeFormDTO; -import com.epmet.dto.form.EditBadgeFormDTO; +import com.epmet.dto.form.*; import com.epmet.dto.result.BadgeAuditRecordResultDTO; import com.epmet.dto.result.BadgeAuditingResultDTO; import com.epmet.dto.result.BadgeDetailResultDTO; @@ -18,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; /** * @author zhaoqifeng @@ -29,6 +27,8 @@ import java.util.List; public class BadgeController { @Autowired private BadgeService badgeService; + @Autowired + private UserBadgeRedis badgeRedis; /** * 徽章列表 @@ -152,4 +152,17 @@ public class BadgeController { badgeService.audit(tokenDto, formDTO); return new Result(); } + + /** + * @Description 供其他服务调用 查询指定用户需要显示的徽章信息(缓存补偿) + * @param param + * @return com.epmet.commons.tools.utils.Result>> + * @author wangc + * @date 2020.11.10 15:59 + */ + @PostMapping("usershowbadge") + public Result>> userShowBadge(@RequestBody UserGroupFormDTO param){ + ValidatorUtils.validateEntity(param); + return new Result>>().ok(badgeRedis.batchObtainUserBadge(param.getCustomerId(),param.getUserIds())); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/UserBadgeDao.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/UserBadgeDao.java index 082b0051cb..e861249258 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/UserBadgeDao.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/dao/UserBadgeDao.java @@ -5,10 +5,7 @@ import com.epmet.dto.form.AuthFieldFormDTO; import com.epmet.dto.form.OpenedOrClosedFormDTO; import com.epmet.dto.form.UserBadgeListFormDTO; import com.epmet.dto.form.UserBadgeUnitFormDTO; -import com.epmet.dto.result.AuthFieldResultDTO; -import com.epmet.dto.result.CertificationDetailResultDTO; -import com.epmet.dto.result.UserBadgeListResultDTO; -import com.epmet.dto.result.UserOperListResultDTO; +import com.epmet.dto.result.*; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -112,4 +109,14 @@ public interface UserBadgeDao { * @date 2020.11.09 14:14 */ List selectUserSortedBadge(@Param("userId")String userId,@Param("customerId")String customerId); + + /** + * @Description 批量查找用户全部的显示徽章(排序) + * @param customerId + * @param userIds + * @return java.util.List + * @author wangc + * @date 2020.11.09 14:14 + */ + List selectBatchUserSortedBadge(@Param("customerId")String customerId, @Param("userIds")List userIds); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBadgeRedis.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBadgeRedis.java index 72a912f393..16644fa332 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBadgeRedis.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBadgeRedis.java @@ -10,6 +10,7 @@ import com.epmet.constant.BadgeConstant; import com.epmet.constant.UserRedisKeys; import com.epmet.dao.BadgeDao; import com.epmet.dto.form.UserBadgeUnitFormDTO; +import com.epmet.dto.result.UserBadgeInfoResultDTO; import com.epmet.dto.result.UserBadgeListResultDTO; import com.epmet.service.UserBadgeService; import lombok.extern.slf4j.Slf4j; @@ -23,9 +24,8 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.Optional; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; import static com.epmet.commons.tools.redis.RedisUtils.MINUTE_THIRTY_EXPIRE; @@ -118,7 +118,6 @@ public class UserBadgeRedis { final List sortedBadges = cache; redisTemplate.executePipelined((RedisCallback>) connection ->{ sortedBadges.forEach(badge -> { - connection.listCommands().rPush(UserRedisKeys.getResiUserBadgeKey(customerId, userId).getBytes(), redisTemplate.getValueSerializer().serialize(badge)); }); @@ -128,6 +127,48 @@ public class UserBadgeRedis { return cache; } + /** + * @Description 批量获取用户显示徽章 + * @param customerId + * @param userIds + * @return java.util.Map> + * @author wangc + * @date 2020.11.10 15:00 + */ + public Map> batchObtainUserBadge(String customerId,List userIds){ + if(CollectionUtils.isEmpty(userIds)) return Collections.EMPTY_MAP; + Map> result = new HashMap<>(); + //存放缓存为空的 + List cacheBlank = new LinkedList<>(); + userIds.forEach(userId -> { + List badges = + redisUtils.lrange(UserRedisKeys.getResiUserBadgeKey(customerId,userId), NumConstant.ZERO, NumConstant.ONE_NEG, UserBadgeUnitFormDTO.class); + if(CollectionUtils.isEmpty(badges)){cacheBlank.add(userId);}else{result.put(userId,badges);} + }); + if(!CollectionUtils.isEmpty(cacheBlank)){ + Map> + map = badgeService.getBatchUserSortedBadge(customerId,cacheBlank); + if(null != map && !map.isEmpty()){ + map.forEach((k,v) -> { + List covert = + v.stream().map( o -> { + return ConvertUtils.sourceToTarget(o,UserBadgeUnitFormDTO.class); + }).collect(Collectors.toList()); + result.put(k,covert); + + redisTemplate.executePipelined((RedisCallback>) connection ->{ + covert.forEach(badge -> { + connection.listCommands().rPush(UserRedisKeys.getResiUserBadgeKey(customerId, k).getBytes(), + redisTemplate.getValueSerializer().serialize(badge)); + }); + return null; + }); + }); + } + } + return result; + } + /** * 用户点亮或取消徽章 * @param diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserBadgeService.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserBadgeService.java index 65e9494cc8..a905bb2f9b 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserBadgeService.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserBadgeService.java @@ -3,12 +3,10 @@ package com.epmet.service; import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.Result; import com.epmet.dto.form.*; -import com.epmet.dto.result.AuthFieldResultDTO; -import com.epmet.dto.result.CertificationDetailResultDTO; -import com.epmet.dto.result.UserBadgeListResultDTO; -import com.epmet.dto.result.UserOperListResultDTO; +import com.epmet.dto.result.*; import java.util.List; +import java.util.Map; /** * @Author zxc @@ -91,4 +89,13 @@ public interface UserBadgeService { */ List getUserSortedBadge(String userId,String customerId); + /** + * @Description 批量获取用户显示徽章 + * @param customerId + * @param userIds + * @return java.util.Map> + * @author wangc + * @date 2020.11.10 15:12 + */ + Map> getBatchUserSortedBadge(String customerId, List userIds); } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java index 4c60001f6a..f7939fabb8 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java @@ -27,7 +27,10 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Author zxc @@ -287,4 +290,19 @@ public class UserBadgeServiceImpl implements UserBadgeService { return userBadgeDao.selectUserSortedBadge(userId,customerId); } + /** + * @Description 批量获取用户显示徽章 + * @param customerId + * @param userIds + * @return java.util.Map> + * @author wangc + * @date 2020.11.10 15:12 + */ + @Override + public Map> getBatchUserSortedBadge(String customerId, List userIds) { + List badges = userBadgeDao.selectBatchUserSortedBadge(customerId,userIds); + if(CollectionUtils.isEmpty(badges)) return Collections.EMPTY_MAP; + return badges.stream().collect(Collectors.groupingBy(UserBadgeInfoResultDTO :: getUserId)); + } + } diff --git a/epmet-user/epmet-user-server/src/main/resources/mapper/UserBadgeDao.xml b/epmet-user/epmet-user-server/src/main/resources/mapper/UserBadgeDao.xml index f7186b1424..8377839e72 100644 --- a/epmet-user/epmet-user-server/src/main/resources/mapper/UserBadgeDao.xml +++ b/epmet-user/epmet-user-server/src/main/resources/mapper/UserBadgeDao.xml @@ -252,4 +252,52 @@ ORDER BY userBadge.updated_time DESC + +