Browse Source

积分排行接口,增加当前用户的排名信息

feature/syp_points
zhangyongzhangyong 6 years ago
parent
commit
f38e22e487
  1. 10
      esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/EpdcAppPointsRankingFormDTO.java
  2. 14
      esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/result/EpdcAppPointsRankingResultDTO.java
  3. 31
      esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/result/EpdcAppPointsRankingTopTenDTO.java
  4. 36
      esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/result/EpdcAppPointsRankingUserDTO.java
  5. 28
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiPointsController.java
  6. 4
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/PointsFeignClient.java
  7. 2
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/PointsFeignClientFallback.java
  8. 5
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/PointsService.java
  9. 4
      esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/PointsServiceImpl.java
  10. 8
      esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppPointsController.java
  11. 33
      esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/dao/PointsLogsDao.java
  12. 4
      esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/service/PointsLogsService.java
  13. 34
      esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/service/impl/PointsLogsServiceImpl.java
  14. 53
      esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/resources/mapper/PointsLogsDao.xml

10
esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/form/EpdcAppPointsRankingFormDTO.java

@ -40,4 +40,14 @@ public class EpdcAppPointsRankingFormDTO implements Serializable {
*/
@NotNull(message = "排名方式:0-周,1-月不能为空")
private Integer rankingType;
/**
* 用户ID
*/
private String userId;
/**
* 用户昵称
*/
private String nickName;
}

14
esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/result/EpdcAppPointsRankingResultDTO.java

@ -3,6 +3,7 @@ package com.elink.esua.epdc.dto.result;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 移动端接口-积分管理模块-积分排行接口返回值
@ -15,18 +16,15 @@ public class EpdcAppPointsRankingResultDTO implements Serializable {
private static final long serialVersionUID = 3908231797102233188L;
/**
* 用户ID
* 积分排行接口返回值 - 前十列表
*/
private String userId;
private List<EpdcAppPointsRankingTopTenDTO> pointsRankingTopTen;
/**
* 用户昵称
* 积分排行接口返回值 -用户排名
*/
private String nickName;
private EpdcAppPointsRankingUserDTO pointsRankingUser;
/**
* 积分
*/
private Integer points;
}

31
esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/result/EpdcAppPointsRankingTopTenDTO.java

@ -0,0 +1,31 @@
package com.elink.esua.epdc.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 移动端接口-积分管理模块-积分排行接口返回值 - 前十
* @Author zhangyong
* @Date 2020-05-13
*/
@Data
public class EpdcAppPointsRankingTopTenDTO implements Serializable {
private static final long serialVersionUID = 3908231797102233188L;
/**
* 用户ID
*/
private String userId;
/**
* 用户昵称
*/
private String nickName;
/**
* 积分
*/
private Integer points;
}

36
esua-epdc/epdc-module/epdc-api/epdc-api-client/src/main/java/com/elink/esua/epdc/dto/result/EpdcAppPointsRankingUserDTO.java

@ -0,0 +1,36 @@
package com.elink.esua.epdc.dto.result;
import lombok.Data;
import java.io.Serializable;
/**
* 移动端接口-积分管理模块-积分排行接口返回值 - 用户排名信息
* @Author zhangyong
* @Date 2020-05-13
*/
@Data
public class EpdcAppPointsRankingUserDTO implements Serializable {
private static final long serialVersionUID = 3908231797102233188L;
/**
* 用户ID
*/
private String userId;
/**
* 用户昵称
*/
private String nickName;
/**
* 积分
*/
private Integer points;
/**
* 用户个人排名
*/
private Integer rank;
}

28
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/controller/ApiPointsController.java

@ -27,14 +27,15 @@ public class ApiPointsController {
@Autowired
private PointsService pointsService;
/**
* @Description: 当前登录用户 积分记录接口
* @Param: [userDetail, dto]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<com.elink.esua.epdc.dto.result.EpdcAppPointsRecordResultDTO>>
* @Author: zy
* @Date: 2020-04-29
*/
/**
* 当前登录用户 积分记录接口
*
* @param: [userDetail, dto]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<com.elink.esua.epdc.dto.result.EpdcAppPointsRecordResultDTO>>
* @Author: zy
* @Date: 2020-04-29
*/
@GetMapping("pointsRecord/list")
public Result<List<EpdcAppPointsRecordResultDTO>> listPointsRecord(@LoginUser TokenDto userDetail, EpdcAppPointsRecordFormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
@ -42,15 +43,16 @@ public class ApiPointsController {
}
/**
* @Description: 积分排行接口0 周排行1 月排行
* @Param: [formDto]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>>
* 积分排行接口0 周排行1 月排行
*
* @param: [userDetail, formDto]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>
* @Author: zy
* @Date: 2020-04-30
*/
@GetMapping("pointsRanking/list")
public Result<List<EpdcAppPointsRankingResultDTO>> listPointsRanking(EpdcAppPointsRankingFormDTO formDto) {
public Result<EpdcAppPointsRankingResultDTO> listPointsRanking(@LoginUser TokenDto userDetail, EpdcAppPointsRankingFormDTO formDto) {
ValidatorUtils.validateEntity(formDto);
return pointsService.listPointsRanking(formDto);
return pointsService.listPointsRanking(userDetail, formDto);
}
}

4
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/PointsFeignClient.java

@ -42,10 +42,10 @@ public interface PointsFeignClient {
* param pageIndex 必选 页码
* param pageSize 必选 页容量
* param rankingType 必选 排名方式0-1-
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>>
* @return: com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>
* @Author: zy
* @Date: 2020-04-30
*/
@GetMapping(value = "points/epdc-app/points/pointsRanking/list", consumes = MediaType.APPLICATION_JSON_VALUE)
Result<List<EpdcAppPointsRankingResultDTO>> listPointsRankingFeignClient(EpdcAppPointsRankingFormDTO formDto);
Result<EpdcAppPointsRankingResultDTO> listPointsRankingFeignClient(EpdcAppPointsRankingFormDTO formDto);
}

2
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/feign/fallback/PointsFeignClientFallback.java

@ -26,7 +26,7 @@ public class PointsFeignClientFallback implements PointsFeignClient {
}
@Override
public Result<List<EpdcAppPointsRankingResultDTO>> listPointsRankingFeignClient(EpdcAppPointsRankingFormDTO formDto) {
public Result<EpdcAppPointsRankingResultDTO> listPointsRankingFeignClient(EpdcAppPointsRankingFormDTO formDto) {
return ModuleUtils.feignConError(ServiceConstant.EPDC_POINTS_SERVER, "listPointsRankingFeignClient", formDto);
}
}

5
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/PointsService.java

@ -36,9 +36,10 @@ public interface PointsService {
* param pageIndex 必选 页码
* param pageSize 必选 页容量
* param rankingType 必选 排名方式0-1-
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>>
* @param userDetail 必选 获取用户信息
* @return: com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>
* @Author: zy
* @Date: 2020-04-30
*/
Result<List<EpdcAppPointsRankingResultDTO>> listPointsRanking(EpdcAppPointsRankingFormDTO formDto);
Result<EpdcAppPointsRankingResultDTO> listPointsRanking(TokenDto userDetail, EpdcAppPointsRankingFormDTO formDto);
}

4
esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/PointsServiceImpl.java

@ -31,7 +31,9 @@ public class PointsServiceImpl implements PointsService {
}
@Override
public Result<List<EpdcAppPointsRankingResultDTO>> listPointsRanking(EpdcAppPointsRankingFormDTO formDto) {
public Result<EpdcAppPointsRankingResultDTO> listPointsRanking(TokenDto userDetail, EpdcAppPointsRankingFormDTO formDto) {
formDto.setUserId(userDetail.getUserId());
formDto.setNickName(userDetail.getNickname());
return pointsFeignClient.listPointsRankingFeignClient(formDto);
}
}

8
esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/controller/EpdcAppPointsController.java

@ -41,13 +41,13 @@ public class EpdcAppPointsController {
/**
* @Description: 积分排行接口0 周排行1 月排行
* @Param: [formDto]
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>>
* @return: com.elink.esua.epdc.commons.tools.utils.Result<com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>
* @Author: zy
* @Date: 2020-04-30
*/
@GetMapping("pointsRanking/list")
public Result<List<EpdcAppPointsRankingResultDTO>> listPointsRanking(@RequestBody EpdcAppPointsRankingFormDTO formDto) {
List<EpdcAppPointsRankingResultDTO> list = pointsLogsService.listPointsRanking(formDto);
return new Result<List<EpdcAppPointsRankingResultDTO>>().ok(list);
public Result<EpdcAppPointsRankingResultDTO> listPointsRanking(@RequestBody EpdcAppPointsRankingFormDTO formDto) {
EpdcAppPointsRankingResultDTO list = pointsLogsService.listPointsRanking(formDto);
return new Result<EpdcAppPointsRankingResultDTO>().ok(list);
}
}

33
esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/dao/PointsLogsDao.java

@ -20,10 +20,11 @@ package com.elink.esua.epdc.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.dto.PointsLogsDTO;
import com.elink.esua.epdc.dto.form.PointsLogsFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRankingTopTenDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRankingUserDTO;
import com.elink.esua.epdc.dto.result.PointsLogsResultDTO;
import com.elink.esua.epdc.dto.form.EpdcAppPointsRankingFormDTO;
import com.elink.esua.epdc.dto.form.EpdcAppPointsRecordFormDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO;
import com.elink.esua.epdc.dto.result.EpdcAppPointsRecordResultDTO;
import com.elink.esua.epdc.entity.PointsLogsEntity;
import org.apache.ibatis.annotations.Mapper;
@ -86,11 +87,11 @@ public interface PointsLogsDao extends BaseDao<PointsLogsEntity> {
* param pageIndex 必选 页码
* param pageSize 必选 页容量
* param rankingType 必选 排名方式0-1-
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>>
* @return: java.util.List <com.elink.esua.epdc.dto.result.EpdcAppPointsRankingTopTenDTO>
* @Author: zy
* @Date: 2020-04-30
*/
List<EpdcAppPointsRankingResultDTO> selectListPointsRanking(EpdcAppPointsRankingFormDTO formDto);
List<EpdcAppPointsRankingTopTenDTO> selectListPointsRanking(EpdcAppPointsRankingFormDTO formDto);
/**
* 志愿者管理 积分记录页面分页查询
@ -101,4 +102,30 @@ public interface PointsLogsDao extends BaseDao<PointsLogsEntity> {
* @Date 15:31 2020-05-12
**/
List<PointsLogsDTO> selectListVolunteerPointsLog(Map<String, Object> params);
/**
* 积分排行接口0 周排行1 月排行 - 查询用户个人排名
*
* @param formDto
* param pageIndex 必选 页码
* param pageSize 必选 页容量
* param rankingType 必选 排名方式0-1-
* @return: com.elink.esua.epdc.dto.result.EpdcAppPointsRankingUserDTO
* @Author: zy
* @Date: 2020-05-13
*/
EpdcAppPointsRankingUserDTO selectUserPointsRanking(EpdcAppPointsRankingFormDTO formDto);
/**
* 积分排行接口0 周排行1 月排行 - 产生积分记录的总人数
*
* @param formDto
* param pageIndex 必选 页码
* param pageSize 必选 页容量
* param rankingType 必选 排名方式0-1-
* @return: int
* @Author: zy
* @Date: 2020-05-13
*/
int selectCountPointsRanking(EpdcAppPointsRankingFormDTO formDto);
}

4
esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/service/PointsLogsService.java

@ -159,9 +159,9 @@ public interface PointsLogsService extends BaseService<PointsLogsEntity> {
* param pageIndex 必选 页码
* param pageSize 必选 页容量
* param rankingType 必选 排名方式0-1-
* @return: com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>>
* @return: com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO>
* @Author: zy
* @Date: 2020-04-30
*/
List<EpdcAppPointsRankingResultDTO> listPointsRanking(EpdcAppPointsRankingFormDTO formDto);
EpdcAppPointsRankingResultDTO listPointsRanking(EpdcAppPointsRankingFormDTO formDto);
}

34
esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/java/com/elink/esua/epdc/service/impl/PointsLogsServiceImpl.java

@ -48,6 +48,7 @@ import com.elink.esua.epdc.redis.PointsLogsRedis;
import com.elink.esua.epdc.service.PointsBehaviorService;
import com.elink.esua.epdc.service.PointsLogsService;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.Rank;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -232,9 +233,38 @@ public class PointsLogsServiceImpl extends BaseServiceImpl<PointsLogsDao, Points
}
@Override
public List<EpdcAppPointsRankingResultDTO> listPointsRanking(EpdcAppPointsRankingFormDTO formDto) {
public EpdcAppPointsRankingResultDTO listPointsRanking(EpdcAppPointsRankingFormDTO formDto) {
int pageIndex = (formDto.getPageIndex() - NumConstant.ONE) * formDto.getPageSize();
formDto.setPageIndex(pageIndex);
return baseDao.selectListPointsRanking(formDto);
EpdcAppPointsRankingResultDTO rangking = new EpdcAppPointsRankingResultDTO();
rangking.setPointsRankingTopTen(baseDao.selectListPointsRanking(formDto));
// 判断当前用户是否产生过积分记录
EpdcAppPointsRankingUserDTO userRang = baseDao.selectUserPointsRanking(formDto);
// 用户产生过积分记录,返回积分排名
if (userRang != null) {
rangking.setPointsRankingUser(userRang);
} else {
// 未产生过积分排名 总排名+1
rangking.setPointsRankingUser(this.noPointsRecordIsUserRanking(formDto));
}
return rangking;
}
/**
* 查询积分排行接口0 周排行1 月排行如果没有当前登录用户的积分记录返回 处理(总排名+1) 过的排名信息
* @param formDto
* @return com.elink.esua.epdc.dto.result.EpdcAppPointsRankingUserDTO
* @Author zhangyong
* @Date 13:35 2020-05-13
**/
private EpdcAppPointsRankingUserDTO noPointsRecordIsUserRanking(EpdcAppPointsRankingFormDTO formDto){
EpdcAppPointsRankingUserDTO userRang = new EpdcAppPointsRankingUserDTO();
int pointCountRaning = baseDao.selectCountPointsRanking(formDto);
userRang.setUserId(formDto.getUserId());
userRang.setNickName(formDto.getNickName());
userRang.setPoints(NumConstant.ZERO);
userRang.setRank(pointCountRaning + NumConstant.ONE);
return userRang;
}
}

53
esua-epdc/epdc-module/epdc-points/epdc-points-server/src/main/resources/mapper/PointsLogsDao.xml

@ -79,7 +79,7 @@
and BEHAVIOR_CODE = #{behaviorCode} order by OPERATION_TIME desc limit 1
</select>
<select id="selectListPointsRanking" resultType="com.elink.esua.epdc.dto.result.EpdcAppPointsRankingResultDTO">
<select id="selectListPointsRanking" resultType="com.elink.esua.epdc.dto.result.EpdcAppPointsRankingTopTenDTO">
SELECT
tab.USER_ID userId,
(
@ -128,4 +128,55 @@
ORDER BY
l.CREATED_TIME DESC
</select>
<select id="selectUserPointsRanking" resultType="com.elink.esua.epdc.dto.result.EpdcAppPointsRankingUserDTO">
SELECT
userRanking.rank,
userRanking.userId,
userRanking.nickName,
userRanking.points
FROM(
SELECT
(@i:=@i+1) rank,
tab.USER_ID userId,
(SELECT NICKNAME FROM epdc_points_logs WHERE tab.USER_ID = USER_ID ORDER BY CREATED_TIME DESC limit 0,1) nickName,
tab.points
FROM(
SELECT
USER_ID,
(SUM(case when OPERATION_TYPE = 1 then IFNULL(points,0) else 0 end) - SUM(case when OPERATION_TYPE = 0 then IFNULL(points,0) else 0 end)) points
FROM epdc_points_logs
WHERE DEL_FLAG = 0
<if test="rankingType != null and rankingType == 0">
AND YEARWEEK(date_format(OPERATION_TIME,'%Y-%m-%d')) = YEARWEEK(now())
</if>
<if test="rankingType != null and rankingType == 1">
AND DATE_FORMAT( OPERATION_TIME, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' )
</if>
GROUP BY USER_ID
ORDER BY (SUM(case when OPERATION_TYPE = 1 then IFNULL(points,0) else 0 end) - SUM(case when OPERATION_TYPE = 0 then IFNULL(points,0) else 0 end)) DESC
) tab ,(select @i:=0) t1
) userRanking
WHERE userRanking.userId = #{userId}
</select>
<select id="selectCountPointsRanking" resultType="int">
SELECT
COUNT(1)
FROM(
SELECT
USER_ID,
SUM(case when OPERATION_TYPE = 0 then IFNULL(points,0) else 0 end) totalPointsDeducted,
SUM(case when OPERATION_TYPE = 1 then IFNULL(points,0) else 0 end) totalPointsAdd
FROM epdc_points_logs
WHERE DEL_FLAG = 0
<if test="rankingType != null and rankingType == 0">
AND YEARWEEK(date_format(OPERATION_TIME,'%Y-%m-%d')) = YEARWEEK(now())
</if>
<if test="rankingType != null and rankingType == 1">
AND DATE_FORMAT( OPERATION_TIME, '%Y%m' ) = DATE_FORMAT( CURDATE() , '%Y%m' )
</if>
GROUP BY USER_ID
) tab
</select>
</mapper>

Loading…
Cancel
Save