Browse Source

话题接口加上徽章

dev_shibei_match
wangchao 5 years ago
parent
commit
02087e11fa
  1. 6
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovHiddenTopicInfoResultDTO.java
  2. 6
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/GovTopicInfoResultDTO.java
  3. 5
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicDetailResultDTO.java
  4. 7
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueDetailResultDTO.java
  5. 6
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicIncludeIssueInfoResultDTO.java
  6. 6
      epmet-module/resi-group/resi-group-client/src/main/java/com/epmet/resi/group/dto/topic/result/ResiTopicInfoResultDTO.java
  7. 122
      epmet-module/resi-group/resi-group-server/src/main/java/com/epmet/modules/topic/service/impl/ResiTopicServiceImpl.java
  8. 3
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserBadgeUnitFormDTO.java
  9. 35
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/form/UserGroupFormDTO.java
  10. 36
      epmet-user/epmet-user-client/src/main/java/com/epmet/dto/result/UserBadgeInfoResultDTO.java
  11. 10
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/EpmetUserOpenFeignClient.java
  12. 12
      epmet-user/epmet-user-client/src/main/java/com/epmet/feign/fallback/EpmetUserOpenFeignClientFallback.java
  13. 21
      epmet-user/epmet-user-server/src/main/java/com/epmet/controller/BadgeController.java
  14. 15
      epmet-user/epmet-user-server/src/main/java/com/epmet/dao/UserBadgeDao.java
  15. 49
      epmet-user/epmet-user-server/src/main/java/com/epmet/redis/UserBadgeRedis.java
  16. 15
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/UserBadgeService.java
  17. 18
      epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/UserBadgeServiceImpl.java
  18. 48
      epmet-user/epmet-user-server/src/main/resources/mapper/UserBadgeDao.xml

6
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<String> badgeList;
}

6
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<String> badgeList;
}

5
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<String> topicImgs;
/**
* 徽章Url集合
*/
private List<String> badgeList;
}

7
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<String> badgeList;
}

6
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<String> badgeList;
}

6
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<String> badgeList;
}

122
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<ResiTopicDao, ResiTopi
@Autowired
private GovIssueFeignClient govIssueFeignClient;
@Autowired
private EpmetUserOpenFeignClient userOpenFeignClient;
@Value("${openapi.scan.server.url}")
private String scanApiUrl;
@Value("${openapi.scan.method.textSyncScan}")
@ -386,7 +391,38 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
//2. 在缓存中拉取用户信息
setCacheUserInfoWithIssue(topicPageFormDTO.getGroupId(), pastTopics);
//3.用户徽章
//3.1首先需要拿到客户Id
ResiGroupEntity group = resiGroupDao.selectById(topicPageFormDTO.getGroupId());
if(null != group && StringUtils.isNotBlank(group.getCustomerId())){
Result<Map<String, List<UserBadgeUnitFormDTO>>> 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<String, List<UserBadgeUnitFormDTO>> 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<List<ResiTopicIncludeIssueInfoResultDTO>>().ok(pastTopics);
}
@ -616,6 +652,18 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
}
}
resultDTO.setCloseDetail(closeDetail);
//4.获取用户徽章的信息
List<String> userId = new LinkedList<>();userId.add(topicDetail.getCreatedBy());
Result<Map<String, List<UserBadgeUnitFormDTO>>> 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<ResiTopicIncludeIssueDetailResultDTO>().ok(resultDTO);
}
@ -641,6 +689,36 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
//2.遍历用户信息
if (null != hiddenTopics && hiddenTopics.size() > 0) {
setCacheUserInfo(topicPageFormDTO.getGroupId(), hiddenTopics);
//3.用户徽章
//3.1首先需要拿到客户Id
ResiGroupEntity group = resiGroupDao.selectById(topicPageFormDTO.getGroupId());
if(null != group && StringUtils.isNotBlank(group.getCustomerId())){
Result<Map<String, List<UserBadgeUnitFormDTO>>> 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<String, List<UserBadgeUnitFormDTO>> 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<List<ResiTopicInfoResultDTO>>().ok(hiddenTopics);
@ -791,6 +869,30 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
//2. 在缓存中拉取用户信息
setCacheUserInfo(topicPageFormDTO.getGroupId(), pastTopics);
//3.用户徽章
//3.1首先需要拿到客户Id
ResiGroupEntity group = resiGroupDao.selectById(topicPageFormDTO.getGroupId());
if (null != group && StringUtils.isNotBlank(group.getCustomerId())) {
Result<Map<String, List<UserBadgeUnitFormDTO>>> 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<String, List<UserBadgeUnitFormDTO>> 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<List<ResiTopicInfoResultDTO>>().ok(pastTopics);
@ -864,11 +966,13 @@ public class ResiTopicServiceImpl extends BaseServiceImpl<ResiTopicDao, ResiTopi
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());
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<ResiTopicDao, ResiTopi
if (result.success() && null != result.getData() && result.getData().size() > 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();

3
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
* 在为单个用户查询时可以使用这个DTOFIXME 批量查询时不要用该类接收
* @ClassName UserBadgeUnitFormDTO
* @Auth wangc
* @Date 2020-11-05 10:00

35
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<String> userIds;
}

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

10
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<java.util.Map<java.lang.String,java.util.List<com.epmet.dto.form.UserBadgeUnitFormDTO>>>
* @author wangc
* @date 2020.11.10 15:59
*/
@PostMapping("/epmetuser/badge/usershowbadge")
Result<Map<String,List<UserBadgeUnitFormDTO>>> userShowBadge(@RequestBody UserGroupFormDTO param);
}

12
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<java.util.Map<java.lang.String,java.util.List<com.epmet.dto.form.UserBadgeUnitFormDTO>>>
* @author wangc
* @date 2020.11.10 15:59
*/
@Override
public Result<Map<String, List<UserBadgeUnitFormDTO>>> userShowBadge(UserGroupFormDTO param) {
return ModuleUtils.feignConError(ServiceConstant.EPMET_USER_SERVER, "userShowBadge", param);
}
}

21
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<java.util.Map<java.lang.String,java.util.List<com.epmet.dto.form.UserBadgeUnitFormDTO>>>
* @author wangc
* @date 2020.11.10 15:59
*/
@PostMapping("usershowbadge")
public Result<Map<String,List<UserBadgeUnitFormDTO>>> userShowBadge(@RequestBody UserGroupFormDTO param){
ValidatorUtils.validateEntity(param);
return new Result<Map<String,List<UserBadgeUnitFormDTO>>>().ok(badgeRedis.batchObtainUserBadge(param.getCustomerId(),param.getUserIds()));
}
}

15
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<UserBadgeUnitFormDTO> selectUserSortedBadge(@Param("userId")String userId,@Param("customerId")String customerId);
/**
* @Description 批量查找用户全部的显示徽章(排序)
* @param customerId
* @param userIds
* @return java.util.List<com.epmet.dto.result.UserBadgeInfoResultDTO>
* @author wangc
* @date 2020.11.09 14:14
*/
List<UserBadgeInfoResultDTO> selectBatchUserSortedBadge(@Param("customerId")String customerId, @Param("userIds")List<String> userIds);
}

49
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<UserBadgeUnitFormDTO> sortedBadges = cache;
redisTemplate.executePipelined((RedisCallback<List<UserBadgeUnitFormDTO>>) 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<java.lang.String,java.util.List<com.epmet.dto.form.UserBadgeUnitFormDTO>>
* @author wangc
* @date 2020.11.10 15:00
*/
public Map<String,List<UserBadgeUnitFormDTO>> batchObtainUserBadge(String customerId,List<String> userIds){
if(CollectionUtils.isEmpty(userIds)) return Collections.EMPTY_MAP;
Map<String,List<UserBadgeUnitFormDTO>> result = new HashMap<>();
//存放缓存为空的
List<String> cacheBlank = new LinkedList<>();
userIds.forEach(userId -> {
List<UserBadgeUnitFormDTO> 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<String,List<UserBadgeInfoResultDTO>>
map = badgeService.getBatchUserSortedBadge(customerId,cacheBlank);
if(null != map && !map.isEmpty()){
map.forEach((k,v) -> {
List<UserBadgeUnitFormDTO> covert =
v.stream().map( o -> {
return ConvertUtils.sourceToTarget(o,UserBadgeUnitFormDTO.class);
}).collect(Collectors.toList());
result.put(k,covert);
redisTemplate.executePipelined((RedisCallback<List<UserBadgeUnitFormDTO>>) connection ->{
covert.forEach(badge -> {
connection.listCommands().rPush(UserRedisKeys.getResiUserBadgeKey(customerId, k).getBytes(),
redisTemplate.getValueSerializer().serialize(badge));
});
return null;
});
});
}
}
return result;
}
/**
* 用户点亮或取消徽章
* @param

15
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<UserBadgeUnitFormDTO> getUserSortedBadge(String userId,String customerId);
/**
* @Description 批量获取用户显示徽章
* @param customerId
* @param userIds
* @return java.util.Map<java.lang.String,java.util.List< com.epmet.dto.result.UserBadgeInfoResultDTO>>
* @author wangc
* @date 2020.11.10 15:12
*/
Map<String,List<UserBadgeInfoResultDTO>> getBatchUserSortedBadge(String customerId, List<String> userIds);
}

18
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<java.lang.String,java.util.List< com.epmet.dto.result.UserBadgeInfoResultDTO>>
* @author wangc
* @date 2020.11.10 15:12
*/
@Override
public Map<String, List<UserBadgeInfoResultDTO>> getBatchUserSortedBadge(String customerId, List<String> userIds) {
List<UserBadgeInfoResultDTO> badges = userBadgeDao.selectBatchUserSortedBadge(customerId,userIds);
if(CollectionUtils.isEmpty(badges)) return Collections.EMPTY_MAP;
return badges.stream().collect(Collectors.groupingBy(UserBadgeInfoResultDTO :: getUserId));
}
}

48
epmet-user/epmet-user-server/src/main/resources/mapper/UserBadgeDao.xml

@ -252,4 +252,52 @@
ORDER BY
userBadge.updated_time DESC
</select>
<select id="selectBatchUserSortedBadge" resultType="com.epmet.dto.result.UserBadgeInfoResultDTO">
SELECT
userBadge.user_id,
userBadge.badge_id,
badgeInfo.BADGE_NAME,
badgeInfo.BADGE_ICON
FROM
resi_user_badge userBadge
LEFT JOIN (
SELECT
id AS badgeId,
CUSTOMER_ID,
BADGE_NAME,
BADGE_ICON
FROM
(
SELECT
*
FROM
badge
WHERE
CUSTOMER_ID = #{customerId}
AND DEL_FLAG = '0'
AND BADGE_STATUS = 'online'
UNION ALL
SELECT
*
FROM
badge a
WHERE
CUSTOMER_ID = 'default'
AND a.DEL_FLAG = '0'
AND BADGE_STATUS = 'online'
AND NOT EXISTS ( SELECT ID FROM badge b WHERE CUSTOMER_ID = #{customerId} AND a.ID = b.ID )
) temp
) badgeInfo ON userBadge.badge_id = badgeInfo.badgeId
WHERE
userBadge.del_flag = '0'
<foreach collection="userIds" item="userId" open="AND ( " separator=" OR " close=" ) ">
userBadge.user_id = #{userId}
</foreach>
AND userBadge.customer_id = #{customerId}
AND userBadge.is_opened = 1
AND userBadge.certification_autid_status = 'approved'
ORDER BY
userBadge.user_id,userBadge.updated_time DESC
</select>
</mapper>

Loading…
Cancel
Save