diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java index 72a6db9b10..b18e48c389 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisUtils.java @@ -206,6 +206,17 @@ public class RedisUtils { }).collect(Collectors.toList()); } + /** + * @Description 获取缓存List + * @Param key + * @author zxc + * @date 2021/3/30 下午3:33 + */ + public List getListLrange(String key){ + List range = redisTemplate.opsForList().range(key, 0, -1); + return range; + } + /** * @Description Redis lrem : * 根据参数 count 的值,移除列表中与参数 value 相等的元素 diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/constant/GroupConstant.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/constant/GroupConstant.java index ba879a3fee..928115a08f 100644 --- a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/constant/GroupConstant.java +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/constant/GroupConstant.java @@ -5,4 +5,8 @@ package com.epmet.dataaggre.constant; * @DateTime 2020/12/25 上午10:55 */ public interface GroupConstant { + + String BADGE_ICON = "badgeIcon"; + + String BADGE_KEY = "epmet:badge:user:"; } diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/UserInfosResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/UserInfosResultDTO.java new file mode 100644 index 0000000000..19bfd88186 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/epmetuser/result/UserInfosResultDTO.java @@ -0,0 +1,21 @@ +package com.epmet.dataaggre.dto.epmetuser.result; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author zxc + * @DateTime 2021/3/30 上午11:04 + * @DESC + */ +@Data +public class UserInfosResultDTO implements Serializable { + + private static final long serialVersionUID = 7129564173128153335L; + + private String userId; + private String userShowName; + private String headPhoto; + +} diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/resigroup/form/CandidateListFormDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/resigroup/form/CandidateListFormDTO.java new file mode 100644 index 0000000000..60113c8ed1 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/resigroup/form/CandidateListFormDTO.java @@ -0,0 +1,35 @@ +package com.epmet.dataaggre.dto.resigroup.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @Author zxc + * @DateTime 2021/3/30 上午9:34 + * @DESC + */ +@Data +public class CandidateListFormDTO implements Serializable { + + private static final long serialVersionUID = 6184071611057671961L; + + public interface CandidateListForm{} + + /** + * 小组ID + */ + @NotBlank(message = "小组ID不能为空",groups = CandidateListForm.class) + private String groupId; + + @NotNull(message = "pageNo不能为空",groups = CandidateListForm.class) + private Integer pageNo; + + @NotNull(message = "pageSize不能为空",groups = CandidateListForm.class) + private Integer pageSize; + + private String customerId; + +} diff --git a/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/resigroup/result/CandidateListResultDTO.java b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/resigroup/result/CandidateListResultDTO.java new file mode 100644 index 0000000000..100c94f58d --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-client/src/main/java/com/epmet/dataaggre/dto/resigroup/result/CandidateListResultDTO.java @@ -0,0 +1,57 @@ +package com.epmet.dataaggre.dto.resigroup.result; + +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author zxc + * @DateTime 2021/3/30 上午9:15 + * @DESC + */ +@Data +public class CandidateListResultDTO implements Serializable { + + private static final long serialVersionUID = 4720936429310456924L; + + /** + * resi_group_member.id: 成员id + */ + private String memberId; + + /** + * 组员的用户id + */ + private String userId; + + /** + * 成员头像 + */ + private String headPhoto; + + /** + * 成员的显示名称 + */ + private String userShowName; + + /** + * 徽章Url集合 + */ + private String leaderFlag; + + /** + * leader群主,member成员 + */ + private List badgeList; + + public CandidateListResultDTO() { + this.memberId = ""; + this.userId = ""; + this.headPhoto = ""; + this.userShowName = ""; + this.leaderFlag = ""; + this.badgeList = new ArrayList<>(); + } +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/ResiGroupController.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/ResiGroupController.java index 984db9af9f..259b22cff0 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/ResiGroupController.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/controller/ResiGroupController.java @@ -1,8 +1,20 @@ package com.epmet.dataaggre.controller; +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.dataaggre.dto.resigroup.form.CandidateListFormDTO; +import com.epmet.dataaggre.dto.resigroup.result.CandidateListResultDTO; +import com.epmet.dataaggre.service.resigroup.ResiGroupService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * @Author zxc * @DateTime 2020/12/25 上午9:45 @@ -10,4 +22,21 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("resigroup") public class ResiGroupController { + + @Autowired + private ResiGroupService resiGroupService; + + /** + * @Description 可胜任组长-组员列表(工作端通用) + * @Param formDTO + * @author zxc + * @date 2021/3/30 上午9:45 + */ + @PostMapping("candidatelist") + public Result> candidateList(@RequestBody CandidateListFormDTO formDTO, @LoginUser TokenDto tokenDto){ + ValidatorUtils.validateEntity(formDTO, CandidateListFormDTO.CandidateListForm.class); + formDTO.setCustomerId(tokenDto.getCustomerId()); + return new Result>().ok(resiGroupService.candidateList(formDTO)); + } + } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/UserBaseInfoDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/UserBaseInfoDao.java index f7ced8b6f0..9932cffea5 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/UserBaseInfoDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/epmetuser/UserBaseInfoDao.java @@ -18,8 +18,12 @@ package com.epmet.dataaggre.dao.epmetuser; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dataaggre.dto.epmetuser.result.UserInfosResultDTO; import com.epmet.dataaggre.entity.epmetuser.UserBaseInfoEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 用户基础信息 @@ -29,5 +33,13 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface UserBaseInfoDao extends BaseDao { - + + /** + * @Description 根据UserIds查询 + * @Param userIds + * @author zxc + * @date 2021/3/30 上午11:07 + */ + List selectUserInfosByUserIds(@Param("userIds") List userIds); + } \ No newline at end of file diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/resigroup/ResiGroupDao.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/resigroup/ResiGroupDao.java index 1658a05ad9..f297a4f82f 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/resigroup/ResiGroupDao.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/dao/resigroup/ResiGroupDao.java @@ -18,8 +18,12 @@ package com.epmet.dataaggre.dao.resigroup; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dataaggre.dto.resigroup.result.CandidateListResultDTO; import com.epmet.dataaggre.entity.resigroup.ResiGroupEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 群组信息表 @@ -29,5 +33,13 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface ResiGroupDao extends BaseDao { + + /** + * @Description 根据小组ID查询组员信息身份【不包括组长】 + * @Param groupId + * @author zxc + * @date 2021/3/30 上午10:13 + */ + List candidateList(@Param("groupId")String groupId); } \ No newline at end of file diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/redis/ResiGroupRedis.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/redis/ResiGroupRedis.java new file mode 100644 index 0000000000..3efbd220d4 --- /dev/null +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/redis/ResiGroupRedis.java @@ -0,0 +1,47 @@ +package com.epmet.dataaggre.redis; + +import com.epmet.commons.tools.redis.RedisUtils; +import com.epmet.dataaggre.constant.GroupConstant; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Author zxc + * @DateTime 2021/3/30 下午1:39 + * @DESC + */ +@Component +@Slf4j +public class ResiGroupRedis { + + @Autowired + private RedisUtils redisUtils; + + /** + * @Description 获取用户徽章 + * @Param customerId + * @Param userId + * @author zxc + * @date 2021/3/30 下午3:33 + */ + public List getBadgeInfoByUserId(String customerId,String userId){ + String key = GroupConstant.BADGE_KEY+customerId+":"+userId; + List result = redisUtils.getListLrange(key); + if (!CollectionUtils.isEmpty(result)){ + List icons = new ArrayList<>(); + for (Object o : result) { + Map map = (Map) o; + icons.add(map.get(GroupConstant.BADGE_ICON)); + } + return icons; + } + return new ArrayList<>(); + } + +} diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java index fc3acacff7..cf6e79f549 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/EpmetUserService.java @@ -1,8 +1,21 @@ package com.epmet.dataaggre.service.epmetuser; +import com.epmet.dataaggre.dto.epmetuser.result.UserInfosResultDTO; + +import java.util.List; + /** * @Author zxc * @DateTime 2020/12/25 上午9:20 */ public interface EpmetUserService { + + /** + * @Description 根据UserIds查询 + * @Param userIds + * @author zxc + * @date 2021/3/30 上午11:07 + */ + List selectUserInfosByUserIds(List userIds); + } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java index a992809a17..964dc4b9ca 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/epmetuser/impl/EpmetUserServiceImpl.java @@ -2,10 +2,15 @@ package com.epmet.dataaggre.service.epmetuser.impl; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.dataaggre.constant.DataSourceConstant; +import com.epmet.dataaggre.dao.epmetuser.UserBaseInfoDao; +import com.epmet.dataaggre.dto.epmetuser.result.UserInfosResultDTO; import com.epmet.dataaggre.service.epmetuser.EpmetUserService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * @Author zxc * @DateTime 2020/12/25 上午9:21 @@ -14,4 +19,18 @@ import org.springframework.stereotype.Service; @DataSource(DataSourceConstant.EPMET_USER) @Slf4j public class EpmetUserServiceImpl implements EpmetUserService { + + @Autowired + private UserBaseInfoDao userBaseInfoDao; + + /** + * @Description 根据UserIds查询 + * @Param userIds + * @author zxc + * @date 2021/3/30 上午11:07 + */ + @Override + public List selectUserInfosByUserIds(List userIds) { + return userBaseInfoDao.selectUserInfosByUserIds(userIds); + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/ResiGroupService.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/ResiGroupService.java index 0b3b4d1891..5b163c4f5d 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/ResiGroupService.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/ResiGroupService.java @@ -1,6 +1,9 @@ package com.epmet.dataaggre.service.resigroup; import com.epmet.dataaggre.dto.resigroup.ResiTopicDTO; +import com.epmet.dataaggre.dto.resigroup.form.CandidateListFormDTO; +import com.epmet.dataaggre.dto.resigroup.result.CandidateListResultDTO; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -9,5 +12,12 @@ import java.util.List; * @DateTime 2020/12/25 上午9:21 */ public interface ResiGroupService { + /** + * @Description 可胜任组长-组员列表(工作端通用) + * @Param formDTO + * @author zxc + * @date 2021/3/30 上午9:45 + */ + List candidateList(CandidateListFormDTO formDTO); List selectTopicInfoByIds(List topicIds); } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/impl/ResiGroupServiceImpl.java b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/impl/ResiGroupServiceImpl.java index 931c13ffbb..41ead995ab 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/impl/ResiGroupServiceImpl.java +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/java/com/epmet/dataaggre/service/resigroup/impl/ResiGroupServiceImpl.java @@ -2,14 +2,25 @@ package com.epmet.dataaggre.service.resigroup.impl; import com.epmet.commons.dynamic.datasource.annotation.DataSource; import com.epmet.dataaggre.constant.DataSourceConstant; +import com.epmet.dataaggre.dao.resigroup.ResiGroupDao; import com.epmet.dataaggre.dao.resigroup.ResiTopicDao; +import com.epmet.dataaggre.dto.epmetuser.result.UserInfosResultDTO; import com.epmet.dataaggre.dto.resigroup.ResiTopicDTO; +import com.epmet.dataaggre.dto.resigroup.form.CandidateListFormDTO; +import com.epmet.dataaggre.dto.resigroup.result.CandidateListResultDTO; +import com.epmet.dataaggre.redis.ResiGroupRedis; +import com.epmet.dataaggre.service.epmetuser.EpmetUserService; import com.epmet.dataaggre.service.resigroup.ResiGroupService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * @Author zxc @@ -21,9 +32,50 @@ import java.util.List; public class ResiGroupServiceImpl implements ResiGroupService { @Autowired private ResiTopicDao resiTopicDao; + @Autowired + private ResiGroupDao resiGroupDao; + @Autowired + private EpmetUserService epmetUserService; + @Autowired + private ResiGroupRedis resiGroupRedis; @Override public List selectTopicInfoByIds(List topicIds) { return resiTopicDao.selectTopicInfoByIds(topicIds); } + + /** + * @Description 可胜任组长-组员列表(工作端通用) + * @Param formDTO + * @author zxc + * @date 2021/3/30 上午9:45 + */ + @Override + public List candidateList(CandidateListFormDTO formDTO) { + // 根据小组ID查询组员信息身份【不包括组长自己】 + PageInfo pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize()).doSelectPageInfo(() -> resiGroupDao.candidateList(formDTO.getGroupId())); + List result = pageInfo.getList(); + // 没有直接返回空集合 + if (CollectionUtils.isEmpty(result)){ + return new ArrayList<>(); + } + // 获取userIds + List userIds = result.stream().map(m -> m.getUserId()).collect(Collectors.toList()); + // 查询用户信息【名字 头像】 + List userInfos = epmetUserService.selectUserInfosByUserIds(userIds); + result.forEach(r -> { + if (!CollectionUtils.isEmpty(userInfos)){ + userInfos.forEach(u -> { + if (r.getUserId().equals(u.getUserId())){ + r.setHeadPhoto(u.getHeadPhoto()); + r.setUserShowName(u.getUserShowName()); + } + }); + } + // 徽章赋值 + List badgeInfo = resiGroupRedis.getBadgeInfoByUserId(formDTO.getCustomerId(), r.getUserId()); + r.setBadgeList(null==badgeInfo ? new ArrayList<>() : badgeInfo); + }); + return result; + } } diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/UserBaseInfoDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/UserBaseInfoDao.xml index 72039e24cd..6f0e5223d5 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/UserBaseInfoDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/epmetuser/UserBaseInfoDao.xml @@ -3,4 +3,23 @@ + + \ No newline at end of file diff --git a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/resigroup/ResiGroupDao.xml b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/resigroup/ResiGroupDao.xml index d2c9e20e2d..8a350ceec9 100644 --- a/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/resigroup/ResiGroupDao.xml +++ b/epmet-module/data-aggregator/data-aggregator-server/src/main/resources/mapper/resigroup/ResiGroupDao.xml @@ -3,4 +3,16 @@ + + \ No newline at end of file