From abb5e472b4812fc5be26f2fc81c7f77e7ff7aeb0 Mon Sep 17 00:00:00 2001 From: zhaoqifeng Date: Fri, 10 Sep 2021 17:31:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=85=E6=B0=91=E7=AB=AF=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E7=A7=AF=E5=88=86=E6=8E=92=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../epmet/dto/BizPointUserTotalDetailDTO.java | 5 +- .../dto/result/GridPointRankResultDTO.java | 21 +++ .../dto/result/MyPointRankResultDTO.java | 21 +++ .../epmet/controller/ResiPointController.java | 30 ++++ .../dao/UserPointStatisticalDailyDao.java | 6 + .../UserPointStatisticalDailyService.java | 26 +++- .../UserPointStatisticalDailyServiceImpl.java | 144 +++++++++++++++++- .../mapper/UserPointStatisticalDailyDao.xml | 50 ++++++ 8 files changed, 298 insertions(+), 5 deletions(-) create mode 100644 epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GridPointRankResultDTO.java create mode 100644 epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/MyPointRankResultDTO.java diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java index 3e5dc04f11..fde907f861 100644 --- a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java @@ -17,9 +17,10 @@ package com.epmet.dto; +import lombok.Data; + import java.io.Serializable; import java.util.Date; -import lombok.Data; /** @@ -103,4 +104,6 @@ public class BizPointUserTotalDetailDTO implements Serializable { */ private Date updatedTime; + private String rank; + } \ No newline at end of file diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GridPointRankResultDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GridPointRankResultDTO.java new file mode 100644 index 0000000000..2ef1819bcc --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GridPointRankResultDTO.java @@ -0,0 +1,21 @@ +package com.epmet.dto.result; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2021/9/10 14:11 + */ +@NoArgsConstructor +@Data +public class GridPointRankResultDTO implements Serializable { + + private static final long serialVersionUID = 3288606889536923166L; + private String gridName; + private String agencyRank; + private String customerRank; +} diff --git a/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/MyPointRankResultDTO.java b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/MyPointRankResultDTO.java new file mode 100644 index 0000000000..484c8f8055 --- /dev/null +++ b/epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/MyPointRankResultDTO.java @@ -0,0 +1,21 @@ +package com.epmet.dto.result; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * @Description + * @Author zhaoqifeng + * @Date 2021/9/10 13:44 + */ +@NoArgsConstructor +@Data +public class MyPointRankResultDTO implements Serializable { + + private static final long serialVersionUID = -2438231097029179782L; + private String headPhoto; + private String gridRank; + private String customerRank; +} diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/ResiPointController.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/ResiPointController.java index 9f5ee8acf8..dbef30e35f 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/ResiPointController.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/ResiPointController.java @@ -190,4 +190,34 @@ public class ResiPointController { ValidatorUtils.validateEntity(formDTO); return new Result>().ok(pointActionLogService.queryMyPointTaskList(formDTO)); } + + /** + * @Description 个人当月积分在网格和客户中的排名 + * @Param tokenDto + * @Param formDTO + * @Return {@link Result< MyPointTaskResultDTO>} + * @Author zhaoqifeng + * @Date 2021/9/10 14:13 + */ + @PostMapping("mypointrank") + public Result myPointRank(@LoginUser TokenDto tokenDto, @RequestBody GroupPointFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, GroupPointFormDTO.GridRank.class); + return new Result().ok(userPointStatisticalDailyService.myPointRank(tokenDto, formDTO)); + } + + /** + * @Description 网格当月积分在组织和客户内排名 + * @Param tokenDto + * @Param formDTO + * @Return {@link Result} + * @Author zhaoqifeng + * @Date 2021/9/10 14:13 + */ + @PostMapping("gridpointrank") + public Result gridPointRank(@LoginUser TokenDto tokenDto, @RequestBody GroupPointFormDTO formDTO) { + ValidatorUtils.validateEntity(formDTO, GroupPointFormDTO.GridRank.class); + return new Result().ok(userPointStatisticalDailyService.gridPointRank(tokenDto, formDTO)); + } + + } diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointStatisticalDailyDao.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointStatisticalDailyDao.java index 2ae8bb24f5..2966e00f75 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointStatisticalDailyDao.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointStatisticalDailyDao.java @@ -18,6 +18,7 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.BizPointUserTotalDetailDTO; import com.epmet.dto.form.ResiAroundPartyPointRankFormDTO; import com.epmet.dto.result.AllPartyResultDTO; import com.epmet.dto.result.ResiAroundPartyPointRankResultDTO; @@ -85,4 +86,9 @@ public interface UserPointStatisticalDailyDao extends BaseDao selectListGridPartyRankByMonth(ResiAroundPartyPointRankFormDTO formDTO); List selectListGridPartyNewRankByMonth(ResiAroundPartyPointRankFormDTO formDTO); + + List selectUserPointByMonth(@Param("customerId") String customerId, @Param("agencyId") String agencyId, + @Param("gridId") String gridId); + + List selectGridPointByMonth(@Param("customerId") String customerId, @Param("agencyId") String agencyId); } diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointStatisticalDailyService.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointStatisticalDailyService.java index 1a82b5ca14..a563768be5 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointStatisticalDailyService.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointStatisticalDailyService.java @@ -19,13 +19,13 @@ package com.epmet.service; import com.epmet.commons.mybatis.service.BaseService; import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.dto.UserPointStatisticalDailyDTO; import com.epmet.dto.form.AllPartyFormDTO; +import com.epmet.dto.form.GroupPointFormDTO; import com.epmet.dto.form.ResiAroundPartyPointRankFormDTO; import com.epmet.dto.form.ResiPointRankFormDTO; -import com.epmet.dto.result.AllPartyResultDTO; -import com.epmet.dto.result.ResiAroundPartyPointRankResultDTO; -import com.epmet.dto.result.ResiPointRankListResultDTO; +import com.epmet.dto.result.*; import com.epmet.entity.UserPointStatisticalDailyEntity; import java.util.List; @@ -135,4 +135,24 @@ public interface UserPointStatisticalDailyService extends BaseService allParty(AllPartyFormDTO formDTO); + + /** + * @Description 个人当月积分在网格和客户中的排名 + * @Param tokenDto + * @Param formDTO + * @Return {@link MyPointRankResultDTO} + * @Author zhaoqifeng + * @Date 2021/9/10 14:18 + */ + MyPointRankResultDTO myPointRank(TokenDto tokenDto, GroupPointFormDTO formDTO); + + /** + * @Description 网格当月积分在组织和客户内排名 + * @Param tokenDto + * @Param formDTO + * @Return {@link GridPointRankResultDTO} + * @Author zhaoqifeng + * @Date 2021/9/10 14:18 + */ + GridPointRankResultDTO gridPointRank(TokenDto tokenDto, GroupPointFormDTO formDTO); } diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointStatisticalDailyServiceImpl.java b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointStatisticalDailyServiceImpl.java index c75edbae56..65f8916512 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointStatisticalDailyServiceImpl.java +++ b/epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointStatisticalDailyServiceImpl.java @@ -25,11 +25,14 @@ import com.epmet.commons.tools.constant.FieldConstant; import com.epmet.commons.tools.constant.NumConstant; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.security.dto.TokenDto; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dao.UserPointStatisticalDailyDao; +import com.epmet.dto.BizPointUserTotalDetailDTO; import com.epmet.dto.UserPointStatisticalDailyDTO; import com.epmet.dto.form.AllPartyFormDTO; +import com.epmet.dto.form.GroupPointFormDTO; import com.epmet.dto.form.ResiAroundPartyPointRankFormDTO; import com.epmet.dto.form.ResiPointRankFormDTO; import com.epmet.dto.result.*; @@ -43,13 +46,14 @@ import com.epmet.utils.DimIdGenerator; import com.epmet.utils.ModuleConstant; import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -326,6 +330,64 @@ public class UserPointStatisticalDailyServiceImpl extends BaseServiceImpl userIds = new ArrayList<>(); + userIds.add(tokenDto.getUserId()); + //获取我的个人信息 + Result> myInfoResult = epmetUserOpenFeignClient.queryUserBaseInfo(userIds); + if(!myInfoResult.success()){ + throw new RenException(myInfoResult.getCode(), myInfoResult.getMsg()); + } + MyPointRankResultDTO result = new MyPointRankResultDTO(); + result.setHeadPhoto(myInfoResult.getData().get(0).getHeadImgUrl()); + //获取客户下用户积分 + List list = getUserPointList(tokenDto.getCustomerId(), null, null); + result.setCustomerRank(getRank(list, tokenDto.getUserId())); + //获取网格用户积分 + List gridRankList = getUserPointList(tokenDto.getCustomerId(), null, formDTO.getGridId()); + result.setCustomerRank(getRank(gridRankList, tokenDto.getUserId())); + return result; + } + + /** + * @param tokenDto + * @param formDTO + * @Description 网格当月积分在组织和客户内排名 + * @Param tokenDto + * @Param formDTO + * @Return {@link GridPointRankResultDTO} + * @Author zhaoqifeng + * @Date 2021/9/10 14:18 + */ + @Override + public GridPointRankResultDTO gridPointRank(TokenDto tokenDto, GroupPointFormDTO formDTO) { + GridPointRankResultDTO result = new GridPointRankResultDTO(); + //获取网格信息 + Result gridInfoResult = govOrgOpenFeignClient.queryGridInfo(formDTO.getGridId()); + if (!gridInfoResult.success()) { + throw new RenException(gridInfoResult.getCode()); + } + result.setGridName(gridInfoResult.getData().getGridName()); + String agencyId = gridInfoResult.getData().getParentAgencyId(); + //获取客户下用户积分 + List list = getGridPointList(tokenDto.getCustomerId(), null); + result.setCustomerRank(getGridRank(list, formDTO.getGridId())); + List agencyPointList = getGridPointList(tokenDto.getCustomerId(), agencyId); + result.setAgencyRank(getGridRank(agencyPointList, formDTO.getGridId())); + return result; + } + /** * 获取认证通过的党员的 用户id * @@ -372,4 +434,84 @@ public class UserPointStatisticalDailyServiceImpl extends BaseServiceImpl} + * @Author zhaoqifeng + * @Date 2021/9/10 15:04 + */ + private List getUserPointList(String customerId, String agencyId, String gridId) { + return baseDao.selectUserPointByMonth(customerId, agencyId, gridId); + } + + private List getGridPointList(String customerId, String agencyId) { + return baseDao.selectGridPointByMonth(customerId, agencyId); + } + + private Boolean havePoint(List list, String userId) { + Map map = list.stream().collect(Collectors.toMap(BizPointUserTotalDetailDTO::getUserId, BizPointUserTotalDetailDTO::getTotalPoint)); + return null != map.get(userId); + } + + + private String getGridRank(List list, String gridId) { + if (CollectionUtils.isEmpty(list)) { + return NumConstant.ONE_STR; + } + //如果当月网格没有积分变动,则积分为0 + Map map = list.stream().collect(Collectors.toMap(BizPointUserTotalDetailDTO::getGridId, BizPointUserTotalDetailDTO::getTotalPoint)); + if (null == map.get(gridId)) { + BizPointUserTotalDetailDTO dto = new BizPointUserTotalDetailDTO(); + dto.setGridId(gridId); + dto.setTotalPoint(NumConstant.ZERO); + list.add(dto); + } + //排序 + list = list.stream().sorted(Comparator.comparing(BizPointUserTotalDetailDTO :: getTotalPoint).reversed() + .thenComparing(BizPointUserTotalDetailDTO::getGridId)) + .collect(Collectors.toList()); + AtomicInteger i = new AtomicInteger(1); + AtomicInteger point = new AtomicInteger(0); + list.forEach(item -> { + if (item.getTotalPoint().equals(point.get())) { + item.setRank(String.valueOf(i)); + } else { + item.setRank(String.valueOf(i.getAndIncrement())); + } + point.set(item.getTotalPoint()); + }); + Map rankMap = list.stream().collect(Collectors.toMap(BizPointUserTotalDetailDTO::getGridId, BizPointUserTotalDetailDTO::getRank)); + return rankMap.get(gridId); + } + + private String getRank(List list, String userId) { + if (CollectionUtils.isEmpty(list)) { + return NumConstant.ONE_STR; + } + if (!havePoint(list, userId)) { + BizPointUserTotalDetailDTO dto = new BizPointUserTotalDetailDTO(); + dto.setUserId(userId); + dto.setTotalPoint(NumConstant.ZERO); + list.add(dto); + } + //排序 + list = list.stream().sorted(Comparator.comparing(BizPointUserTotalDetailDTO :: getTotalPoint).reversed() + .thenComparing(BizPointUserTotalDetailDTO::getUserId)) + .collect(Collectors.toList()); + AtomicInteger i = new AtomicInteger(1); + AtomicInteger point = new AtomicInteger(0); + list.forEach(item -> { + if (item.getTotalPoint().equals(point.get())) { + item.setRank(String.valueOf(i)); + } else { + item.setRank(String.valueOf(i.getAndIncrement())); + } + point.set(item.getTotalPoint()); + }); + Map map = list.stream().collect(Collectors.toMap(BizPointUserTotalDetailDTO::getUserId, BizPointUserTotalDetailDTO::getRank)); + return map.get(userId); + } } diff --git a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointStatisticalDailyDao.xml b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointStatisticalDailyDao.xml index 49179803c7..6bd5f6b76a 100644 --- a/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointStatisticalDailyDao.xml +++ b/epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointStatisticalDailyDao.xml @@ -227,4 +227,54 @@ ORDER BY P.point DESC LIMIT #{pageNo}, #{pageSize} + + +