Browse Source

居民端首页积分排行

dev
zhaoqifeng 4 years ago
parent
commit
abb5e472b4
  1. 5
      epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/BizPointUserTotalDetailDTO.java
  2. 21
      epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/GridPointRankResultDTO.java
  3. 21
      epmet-module/epmet-point/epmet-point-client/src/main/java/com/epmet/dto/result/MyPointRankResultDTO.java
  4. 30
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/controller/ResiPointController.java
  5. 6
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/dao/UserPointStatisticalDailyDao.java
  6. 26
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/UserPointStatisticalDailyService.java
  7. 144
      epmet-module/epmet-point/epmet-point-server/src/main/java/com/epmet/service/impl/UserPointStatisticalDailyServiceImpl.java
  8. 50
      epmet-module/epmet-point/epmet-point-server/src/main/resources/mapper/UserPointStatisticalDailyDao.xml

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

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

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

30
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<List<MyPointTaskResultDTO>>().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<MyPointRankResultDTO> myPointRank(@LoginUser TokenDto tokenDto, @RequestBody GroupPointFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, GroupPointFormDTO.GridRank.class);
return new Result<MyPointRankResultDTO>().ok(userPointStatisticalDailyService.myPointRank(tokenDto, formDTO));
}
/**
* @Description 网格当月积分在组织和客户内排名
* @Param tokenDto
* @Param formDTO
* @Return {@link Result<GridPointRankResultDTO>}
* @Author zhaoqifeng
* @Date 2021/9/10 14:13
*/
@PostMapping("gridpointrank")
public Result<GridPointRankResultDTO> gridPointRank(@LoginUser TokenDto tokenDto, @RequestBody GroupPointFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, GroupPointFormDTO.GridRank.class);
return new Result<GridPointRankResultDTO>().ok(userPointStatisticalDailyService.gridPointRank(tokenDto, formDTO));
}
}

6
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<UserPointStatistic
**/
List<ResiAroundPartyPointRankResultDTO> selectListGridPartyRankByMonth(ResiAroundPartyPointRankFormDTO formDTO);
List<AllPartyResultDTO> selectListGridPartyNewRankByMonth(ResiAroundPartyPointRankFormDTO formDTO);
List<BizPointUserTotalDetailDTO> selectUserPointByMonth(@Param("customerId") String customerId, @Param("agencyId") String agencyId,
@Param("gridId") String gridId);
List<BizPointUserTotalDetailDTO> selectGridPointByMonth(@Param("customerId") String customerId, @Param("agencyId") String agencyId);
}

26
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<UserPointS
* @date 2021/9/6 3:30 下午
*/
List<AllPartyResultDTO> 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);
}

144
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<UserPo
return result;
}
/**
* @param tokenDto
* @param formDTO
* @Description 个人当月积分在网格和客户中的排名
* @Param tokenDto
* @Param formDTO
* @Return {@link MyPointRankResultDTO}
* @Author zhaoqifeng
* @Date 2021/9/10 14:18
*/
@Override
public MyPointRankResultDTO myPointRank(TokenDto tokenDto, GroupPointFormDTO formDTO) {
List<String> userIds = new ArrayList<>();
userIds.add(tokenDto.getUserId());
//获取我的个人信息
Result<List<UserBaseInfoResultDTO>> 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<BizPointUserTotalDetailDTO> list = getUserPointList(tokenDto.getCustomerId(), null, null);
result.setCustomerRank(getRank(list, tokenDto.getUserId()));
//获取网格用户积分
List<BizPointUserTotalDetailDTO> 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<GridInfoResultDTO> gridInfoResult = govOrgOpenFeignClient.queryGridInfo(formDTO.getGridId());
if (!gridInfoResult.success()) {
throw new RenException(gridInfoResult.getCode());
}
result.setGridName(gridInfoResult.getData().getGridName());
String agencyId = gridInfoResult.getData().getParentAgencyId();
//获取客户下用户积分
List<BizPointUserTotalDetailDTO> list = getGridPointList(tokenDto.getCustomerId(), null);
result.setCustomerRank(getGridRank(list, formDTO.getGridId()));
List<BizPointUserTotalDetailDTO> agencyPointList = getGridPointList(tokenDto.getCustomerId(), agencyId);
result.setAgencyRank(getGridRank(agencyPointList, formDTO.getGridId()));
return result;
}
/**
* 获取认证通过的党员的 用户id
*
@ -372,4 +434,84 @@ public class UserPointStatisticalDailyServiceImpl extends BaseServiceImpl<UserPo
}
return rankResultDTOS;
}
/**
* @Description 获取客户下用户的当月积分
*
* @Param customerId
* @Return {@link List<BizPointUserTotalDetailDTO>}
* @Author zhaoqifeng
* @Date 2021/9/10 15:04
*/
private List<BizPointUserTotalDetailDTO> getUserPointList(String customerId, String agencyId, String gridId) {
return baseDao.selectUserPointByMonth(customerId, agencyId, gridId);
}
private List<BizPointUserTotalDetailDTO> getGridPointList(String customerId, String agencyId) {
return baseDao.selectGridPointByMonth(customerId, agencyId);
}
private Boolean havePoint(List<BizPointUserTotalDetailDTO> list, String userId) {
Map<String, Integer> map = list.stream().collect(Collectors.toMap(BizPointUserTotalDetailDTO::getUserId, BizPointUserTotalDetailDTO::getTotalPoint));
return null != map.get(userId);
}
private String getGridRank(List<BizPointUserTotalDetailDTO> list, String gridId) {
if (CollectionUtils.isEmpty(list)) {
return NumConstant.ONE_STR;
}
//如果当月网格没有积分变动,则积分为0
Map<String, Integer> 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<String, String> rankMap = list.stream().collect(Collectors.toMap(BizPointUserTotalDetailDTO::getGridId, BizPointUserTotalDetailDTO::getRank));
return rankMap.get(gridId);
}
private String getRank(List<BizPointUserTotalDetailDTO> 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<String, String> map = list.stream().collect(Collectors.toMap(BizPointUserTotalDetailDTO::getUserId, BizPointUserTotalDetailDTO::getRank));
return map.get(userId);
}
}

50
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}
</select>
<select id="selectUserPointByMonth" resultType="com.epmet.dto.BizPointUserTotalDetailDTO">
SELECT
a.CUSTOMER_ID,
a.AGENCY_ID,
a.GRID_ID,
a.USER_ID,
SUM( POINT ) AS TOTAL_POINT
FROM
biz_point_user_total_detail a
INNER JOIN user_point_action_log b ON a.USER_ID = b.USER_ID
AND b.CUSTOMER_ID = #{customerId}
AND DATE_FORMAT( b.CREATED_TIME, '%Y%m' )= DATE_FORMAT( CURDATE( ), '%Y%m' )
AND b.DEL_FLAG = '0'
WHERE
a.DEL_FLAG = '0'
AND a.CUSTOMER_ID = #{customerId}
<if test="null != agencyId and agencyId != ''">
AND a.AGENCY_ID = #{agencyId}
</if>
<if test="null != gridId and gridId != ''">
AND a.GRID_ID = #{gridId}
</if>
GROUP BY a.CUSTOMER_ID,
a.AGENCY_ID,
a.GRID_ID,
a.USER_ID
</select>
<select id="selectGridPointByMonth" resultType="com.epmet.dto.BizPointUserTotalDetailDTO">
SELECT
a.CUSTOMER_ID,
a.AGENCY_ID,
a.GRID_ID,
SUM( POINT ) AS TOTAL_POINT
FROM
biz_point_user_total_detail a
INNER JOIN user_point_action_log b ON a.USER_ID = b.USER_ID
AND b.CUSTOMER_ID = #{customerId}
AND DATE_FORMAT( b.CREATED_TIME, '%Y%m' )= DATE_FORMAT( CURDATE( ), '%Y%m' )
AND b.DEL_FLAG = '0'
WHERE
a.DEL_FLAG = '0'
AND a.CUSTOMER_ID = #{customerId}
<if test="null != agencyId and agencyId != ''">
AND a.AGENCY_ID = #{agencyId}
</if>
GROUP BY a.CUSTOMER_ID,
a.AGENCY_ID,
a.GRID_ID
</select>
</mapper>

Loading…
Cancel
Save