Browse Source

fix user points rank

master
yujt 5 years ago
parent
commit
f3bcf5edb1
  1. 9
      epdc-cloud-user/src/main/java/com/elink/esua/epdc/dao/UserGridRelationDao.java
  2. 9
      epdc-cloud-user/src/main/java/com/elink/esua/epdc/service/UserGridRelationService.java
  3. 4
      epdc-cloud-user/src/main/java/com/elink/esua/epdc/service/impl/UserGridRelationServiceImpl.java
  4. 68
      epdc-cloud-user/src/main/java/com/elink/esua/epdc/service/impl/UserServiceImpl.java
  5. 71
      epdc-cloud-user/src/main/resources/mapper/UserDao.xml
  6. 9
      epdc-cloud-user/src/main/resources/mapper/UserGridRelationDao.xml

9
epdc-cloud-user/src/main/java/com/elink/esua/epdc/dao/UserGridRelationDao.java

@ -73,13 +73,4 @@ public interface UserGridRelationDao extends BaseDao<UserGridRelationEntity> {
*/ */
void updateGridByDeptId(String newDeptName, Long deptId); void updateGridByDeptId(String newDeptName, Long deptId);
/**
* 根据deptId查询用户网格关系表有多少用户在同一个网格/街道
*
* @param deptId
* @return java.util.List<java.lang.String>
* @Author zhangyong
* @Date 17:08 2020-06-04
**/
List<String> selectListUserIdByDeptId(Long deptId);
} }

9
epdc-cloud-user/src/main/java/com/elink/esua/epdc/service/UserGridRelationService.java

@ -196,13 +196,4 @@ public interface UserGridRelationService extends BaseService<UserGridRelationEnt
**/ **/
UserGridRelationDTO getUserFirstScanGird(String userId); UserGridRelationDTO getUserFirstScanGird(String userId);
/**
* 根据deptId查询用户网格关系表有多少用户在同一个网格/街道
*
* @param deptId
* @return java.util.List<java.lang.String>
* @Author zhangyong
* @Date 17:08 2020-06-04
**/
List<String> listUserIdByDeptId(Long deptId);
} }

4
epdc-cloud-user/src/main/java/com/elink/esua/epdc/service/impl/UserGridRelationServiceImpl.java

@ -278,8 +278,4 @@ public class UserGridRelationServiceImpl extends BaseServiceImpl<UserGridRelatio
return entities; return entities;
} }
@Override
public List<String> listUserIdByDeptId(Long deptId) {
return baseDao.selectListUserIdByDeptId(deptId);
}
} }

68
epdc-cloud-user/src/main/java/com/elink/esua/epdc/service/impl/UserServiceImpl.java

@ -1598,23 +1598,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserDao, UserEntity> implem
public EpdcAppUserRankingResultDTO listUserPointsRanking(EpdcAppUserRankingFormDTO formDto) { public EpdcAppUserRankingResultDTO listUserPointsRanking(EpdcAppUserRankingFormDTO formDto) {
int pageIndex = (formDto.getPageIndex() - NumConstant.ONE) * formDto.getPageSize(); int pageIndex = (formDto.getPageIndex() - NumConstant.ONE) * formDto.getPageSize();
formDto.setPageIndex(pageIndex); formDto.setPageIndex(pageIndex);
formDto.setDeptId(this.getRankDeptId(formDto));
// 获取 用户网格关系表 中的 用户id,做网格/街道 积分排行的源用户数据
List<String> listUser = this.getActRankingUserId(formDto);
formDto.setAllUserIdByDept(listUser);
// 积分相同,排名相同 // 积分相同,排名相同
EpdcAppUserRankingResultDTO rangking = new EpdcAppUserRankingResultDTO(); EpdcAppUserRankingResultDTO rangking = new EpdcAppUserRankingResultDTO();
// 获取排好序的 排行榜数据数据 // 获取排好序的 排行榜数据数据
rangking.setRank(this.sortListUsersRank(formDto)); rangking.setRank(baseDao.selectListUsersRanking(formDto));
// 查询当前用户积分记录 // 查询当前用户积分记录
EpdcAppRankingUserDTO currentUserDTO = baseDao.selectCurrentUserRanking(formDto); rangking.setCurrentUser(baseDao.selectCurrentUserRanking(formDto));
// 返回当前登录用户积分排名
if (null != currentUserDTO) {
currentUserDTO.setUserId(formDto.getUserId());
currentUserDTO.setRealName(formDto.getRealName());
rangking.setCurrentUser(currentUserDTO);
}
return rangking; return rangking;
} }
@ -1675,53 +1665,25 @@ public class UserServiceImpl extends BaseServiceImpl<UserDao, UserEntity> implem
} }
/** /**
* 获取排好序的排行榜数据 * 判断需要统计哪个部门下的用户排行榜
* *
* @param formDto * @param formDto
* @return java.util.List<com.elink.esua.epdc.dto.epdc.result.EpdcAppRankingUserDTO> * @return java.lang.Long
* @Author zhangyong * @author work@yujt.net.cn
* @Date 13:50 2020-06-01 * @date 2020/9/16 10:57
**/ */
private List<EpdcAppRankingUserDTO> sortListUsersRank(EpdcAppUserRankingFormDTO formDto) { private Long getRankDeptId(EpdcAppUserRankingFormDTO formDto) {
List<EpdcAppRankingUserDTO> listPointsRank;
listPointsRank = baseDao.selectListUsersRanking(formDto);
int sortNumber = 1;
if (listPointsRank != null) {
for (int i = 1; i < listPointsRank.size(); i++) {
listPointsRank.get(0).setRank(NumConstant.ONE);
if (listPointsRank.get(i - NumConstant.ONE).getPoints().intValue() == listPointsRank.get(i).getPoints().intValue()) {
listPointsRank.get(i).setRank(sortNumber);
} else {
sortNumber = sortNumber + NumConstant.ONE;
listPointsRank.get(i).setRank(sortNumber);
}
}
}
return listPointsRank;
}
/**
* 返回本次 积分排行 用户网格关系表中的用户id
*
* @param formDto
* @return java.util.List<java.lang.String>
* @Author zhangyong
* @Date 17:25 2020-06-04
**/
private List<String> getActRankingUserId(EpdcAppUserRankingFormDTO formDto) {
if (NumConstant.ZERO == formDto.getRankingType()) {
// 根据网格查询排行榜 // 根据网格查询排行榜
formDto.setDeptId(formDto.getDeptId()); Long deptId = formDto.getDeptId();
} else if (NumConstant.ONE == formDto.getRankingType()) {
// 根据街道查询排行榜 // 根据街道查询排行榜
Result<List<Long>> deptDto = adminFeignClient.listParentIdByDeptId(formDto.getDeptId(), OrganizationTypeConstant.ORG_TYPE_STREET_PARTY); if (NumConstant.ONE == formDto.getRankingType()) {
Result<List<Long>> deptDto = adminFeignClient.listParentIdByDeptId(deptId, OrganizationTypeConstant.ORG_TYPE_STREET_PARTY);
if (deptDto.success()) { if (deptDto.success()) {
formDto.setDeptId(deptDto.getData().get(NumConstant.ZERO)); deptId = deptDto.getData().get(NumConstant.ZERO);
} }
} }
// 根据从 用户网格关系表中查询到的用户id,做积分排名比较 return deptId;
List<String> listUser = userGridRelationService.listUserIdByDeptId(formDto.getDeptId());
return listUser;
} }
/** /**

71
epdc-cloud-user/src/main/resources/mapper/UserDao.xml

@ -728,22 +728,27 @@ WHERE 1 = 1
<select id="selectListUsersRanking" resultType="com.elink.esua.epdc.dto.epdc.result.EpdcAppRankingUserDTO"> <select id="selectListUsersRanking" resultType="com.elink.esua.epdc.dto.epdc.result.EpdcAppRankingUserDTO">
SELECT SELECT
u.ID userId, u.*,
u.REAL_NAME realName, IF( @prevRank > 0 AND @prevRank = u.`POINTS`, @rank, @rank := @rank + 1 ) rank,
u.FACE_IMG faceImg, @prevRank := u.`POINTS`
u.POINTS points
FROM FROM
epdc_user u (
SELECT
uu.`ID` AS userId,
uu.`POINTS`,
IF( uu.REAL_NAME IS NULL OR uu.`REAL_NAME` = '', uu.NICKNAME, uu.`REAL_NAME` ) realName,
uu.`FACE_IMG` AS faceImg
FROM
`epdc_user` uu
WHERE WHERE
u.DEL_FLAG = 0 AND u.STATE != 0 uu.ID IN ( SELECT DISTINCT ug.user_id FROM epdc_user_grid_relation ug WHERE ug.ALL_DEPT_IDS LIKE '%${deptId}%' )
<if test="allUserIdByDept!=null and allUserIdByDept.size()>0"> AND uu.state != '0'
and u.ID in AND uu.POINTS > 0
<foreach collection="allUserIdByDept" index="index" item="userId" open="(" separator="," close=")"> ORDER BY
#{userId} uu.POINTS DESC ,uu.CREATED_TIME
</foreach> ) u,
</if> ( SELECT @rank := 0, @prevRank := NULL ) r
ORDER BY u.POINTS DESC, u.CREATED_TIME DESC WHERE @rank &lt;= #{pageSize}
LIMIT #{pageIndex}, #{pageSize}
</select> </select>
<select id="selectListUsersGradeRanking" resultType="com.elink.esua.epdc.dto.epdc.result.UsersGradeRankingDTO"> <select id="selectListUsersGradeRanking" resultType="com.elink.esua.epdc.dto.epdc.result.UsersGradeRankingDTO">
@ -777,31 +782,27 @@ WHERE 1 = 1
</select> </select>
<select id="selectCurrentUserRanking" resultType="com.elink.esua.epdc.dto.epdc.result.EpdcAppRankingUserDTO"> <select id="selectCurrentUserRanking" resultType="com.elink.esua.epdc.dto.epdc.result.EpdcAppRankingUserDTO">
SELECT SELECT * FROM (
userRanking.rank, SELECT u.*,
userRanking.faceImg, IF( @prevRank = u.`POINTS`, @rank, @rank := @rank + 1 ) rank,
userRanking.points @prevRank := u.`POINTS`
FROM ( FROM (
SELECT SELECT
(@i:=@i+1) rank, uu.`ID` AS userId,
u.ID userId, uu.`POINTS`,
u.FACE_IMG faceImg, IF
IFNULL(u.POINTS, 0) points, ( uu.REAL_NAME IS NULL OR uu.`REAL_NAME` = '', uu.NICKNAME, uu.`REAL_NAME` ) realName,
GROUP_CONCAT(u.ID SEPARATOR ',') tjid uu.`FACE_IMG` AS faceImg
FROM FROM
epdc_user u ,(select @i:=0) t1 `epdc_user` uu
WHERE WHERE
u.DEL_FLAG = 0 AND u.STATE != 0 uu.ID IN ( SELECT DISTINCT ug.user_id FROM epdc_user_grid_relation ug WHERE ug.ALL_DEPT_IDS LIKE '%${deptId}%' )
<if test="allUserIdByDept!=null and allUserIdByDept.size()>0"> AND uu.state != '0'
and u.ID in ORDER BY
<foreach collection="allUserIdByDept" index="index" item="userId" open="(" separator="," close=")"> uu.POINTS DESC,
#{userId} uu.CREATED_TIME ) u,
</foreach> ( SELECT @rank := 0, @prevRank := NULL ) r
</if> )temp WHERE temp.userId = #{userId}
GROUP BY IFNULL(u.POINTS, 0)
ORDER BY IFNULL(u.POINTS, 0) DESC
) userRanking
WHERE instr(userRanking.tjid , #{userId}) > 0
</select> </select>
<select id="selectCurrentUserGradeRanking" resultType="com.elink.esua.epdc.dto.epdc.result.UsersGradeRankingDTO"> <select id="selectCurrentUserGradeRanking" resultType="com.elink.esua.epdc.dto.epdc.result.UsersGradeRankingDTO">

9
epdc-cloud-user/src/main/resources/mapper/UserGridRelationDao.xml

@ -52,13 +52,4 @@
LIMIT 1 LIMIT 1
</select> </select>
<select id="selectListUserIdByDeptId" resultType="String">
SELECT
USER_ID userId
FROM
`epdc_user_grid_relation`
WHERE
FIND_IN_SET( #{deptId}, ALL_DEPT_IDS )
AND DEL_FLAG = '0'
</select>
</mapper> </mapper>
Loading…
Cancel
Save