添加了小程序端查询主管和员工业绩排名的功能
This commit is contained in:
@ -624,4 +624,163 @@ public class UserPerformanceSummaryController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序端经理查询主管绩效排名
|
||||||
|
* @param userPerformanceSummaryRankQueryRequest 绩效排名查询请求体
|
||||||
|
* @return 用户绩效汇总列表
|
||||||
|
*/
|
||||||
|
@PostMapping("rank/supervisor")
|
||||||
|
@Operation(summary = "小程序端经理查询主管绩效排名", description = "参数:绩效排名查询请求体,权限:管理员,方法名:miniListSupervisorPerformanceSummaryRankingsByPage")
|
||||||
|
@RequiresPermission(mustRole = UserConstant.MANAGER_ROLE)
|
||||||
|
public BaseResponse<List<SupervisorPerformanceSummaryVO>> miniListSupervisorPerformanceSummaryRankingsByPage(@Valid @RequestBody UserPerformanceSummaryRankQueryRequest userPerformanceSummaryRankQueryRequest) {
|
||||||
|
String startTimeStr = userPerformanceSummaryRankQueryRequest.getStartDate();
|
||||||
|
String endTimeStr = userPerformanceSummaryRankQueryRequest.getEndDate();
|
||||||
|
DateTime startDate = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss");
|
||||||
|
DateTime endDate = DateUtil.parse(endTimeStr, "yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
QueryWrapper<EmployeePromotionRecords> empQueryWrapper = new QueryWrapper<>();
|
||||||
|
empQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate);
|
||||||
|
empQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate);
|
||||||
|
List<EmployeePromotionRecords> employeePromotionRecordsList = employeePromotionRecordsService.list(empQueryWrapper);
|
||||||
|
// 封装Map集合(键:主管id, 值:推广数量)
|
||||||
|
Map<Long, Integer> supervisorCntMap = new HashMap<>();
|
||||||
|
for (EmployeePromotionRecords employeePromotionRecords : employeePromotionRecordsList) {
|
||||||
|
Long firstUserId = employeePromotionRecords.getFirstUserId();
|
||||||
|
supervisorCntMap.merge(firstUserId, 1, Integer::sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 封装Map集合(键:主管id, 值:下单数量)
|
||||||
|
Map<Long, Integer> supervisorOrderCntMap = new HashMap<>();
|
||||||
|
// 封装Map集合(键:主管id, 值:下单金额)
|
||||||
|
Map<Long, BigDecimal> supervisorOrderAmountMap = new HashMap<>();
|
||||||
|
// 封装Map集合(键:主管id, 值:净成交金额)
|
||||||
|
Map<Long, BigDecimal> supervisorNetSalesAmountMap = new HashMap<>();
|
||||||
|
QueryWrapper<CoursePromotionCommissionPending> coursePromotionQueryWrapper = new QueryWrapper<>();
|
||||||
|
coursePromotionQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate);
|
||||||
|
coursePromotionQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate);
|
||||||
|
List<CoursePromotionCommissionPending> coursePromotionCommissionPendingList = coursePromotionCommissionPendingService.list(coursePromotionQueryWrapper);
|
||||||
|
for (CoursePromotionCommissionPending coursePromotionCommissionPending : coursePromotionCommissionPendingList) {
|
||||||
|
Long firstUserId = coursePromotionCommissionPending.getFirstUserId();
|
||||||
|
BigDecimal totalAmount = coursePromotionCommissionPending.getTotalAmount();
|
||||||
|
DateTime updateDate = DateUtil.date(coursePromotionCommissionPending.getUpdateTime());
|
||||||
|
String commissionStatus = coursePromotionCommissionPending.getCommissionStatus();
|
||||||
|
CommissionStatusEnum commissionStatusEnum = CommissionStatusEnum.getEnumByValue(commissionStatus);
|
||||||
|
supervisorOrderCntMap.merge(firstUserId, 1, Integer::sum);
|
||||||
|
supervisorOrderAmountMap.merge(firstUserId, totalAmount, BigDecimal::add);
|
||||||
|
|
||||||
|
if (!(CommissionStatusEnum.COMPLETED.equals(commissionStatusEnum) && updateDate.isAfterOrEquals(startDate) && updateDate.isBeforeOrEquals(endDate))) {
|
||||||
|
totalAmount = totalAmount.multiply(SystemConstant.FEE_RATE);
|
||||||
|
}
|
||||||
|
supervisorNetSalesAmountMap.merge(firstUserId, totalAmount, BigDecimal::add);
|
||||||
|
}
|
||||||
|
List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserRoleEnum.SUPERVISOR, userInfoService);
|
||||||
|
List<UserPerformanceSummary> userPerformanceSummaryList = commonService.findByFieldInTargetField(userInfoList, userPerformanceSummaryService, UserInfo::getId, UserPerformanceSummary::getUserId);
|
||||||
|
|
||||||
|
// 封装Map集合(键:主管id, 用户信息)
|
||||||
|
Map<Long, UserInfo> userInfoMap = new HashMap<>();
|
||||||
|
for (UserInfo userInfo : userInfoList) {
|
||||||
|
userInfoMap.put(userInfo.getId(), userInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 封装主管绩效排名列表
|
||||||
|
List<SupervisorPerformanceSummaryVO> supervisorPerformanceSummaryVOS = new ArrayList<>();
|
||||||
|
for (UserPerformanceSummary userPerformanceSummary : userPerformanceSummaryList) {
|
||||||
|
Long userId = userPerformanceSummary.getUserId();
|
||||||
|
UserInfo userInfo = userInfoMap.get(userId);
|
||||||
|
SupervisorPerformanceSummaryVO supervisorPerformanceSummaryVO = SupervisorPerformanceSummaryVO.builder()
|
||||||
|
.nickName(userInfo.getNickName())
|
||||||
|
.phoneNumber(userInfo.getPhoneNumber())
|
||||||
|
.empCount(userPerformanceSummary.getEmpCount())
|
||||||
|
.orderCount(supervisorOrderCntMap.get(userId))
|
||||||
|
.totalAmount(supervisorOrderAmountMap.get(userId))
|
||||||
|
.netAmount(supervisorNetSalesAmountMap.get(userId))
|
||||||
|
.promoCount(supervisorCntMap.get(userId))
|
||||||
|
.build();
|
||||||
|
supervisorPerformanceSummaryVOS.add(supervisorPerformanceSummaryVO);
|
||||||
|
}
|
||||||
|
return ResultUtils.success(supervisorPerformanceSummaryVOS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小程序端主管查询员工绩效排名
|
||||||
|
* @param userPerformanceSummaryRankQueryRequest 绩效排名查询请求体
|
||||||
|
* @return 用户绩效汇总列表
|
||||||
|
*/
|
||||||
|
@PostMapping("rank/staff")
|
||||||
|
@Operation(summary = "小程序端主管查询员工绩效排名", description = "参数:绩效排名查询请求体,权限:管理员,方法名:miniListStaffUserPerformanceSummaryRankingsByPage")
|
||||||
|
@RequiresPermission(mustRole = UserConstant.SUPERVISOR_ROLE)
|
||||||
|
public BaseResponse<List<SupervisorPerformanceSummaryVO>> miniListStaffUserPerformanceSummaryRankingsByPage(@Valid @RequestBody UserPerformanceSummaryRankQueryRequest userPerformanceSummaryRankQueryRequest) {
|
||||||
|
String startTimeStr = userPerformanceSummaryRankQueryRequest.getStartDate();
|
||||||
|
String endTimeStr = userPerformanceSummaryRankQueryRequest.getEndDate();
|
||||||
|
DateTime startDate = DateUtil.parse(startTimeStr, "yyyy-MM-dd HH:mm:ss");
|
||||||
|
DateTime endDate = DateUtil.parse(endTimeStr, "yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
QueryWrapper<EmployeePromotionRecords> empQueryWrapper = new QueryWrapper<>();
|
||||||
|
empQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate);
|
||||||
|
empQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate);
|
||||||
|
List<EmployeePromotionRecords> employeePromotionRecordsList = employeePromotionRecordsService.list(empQueryWrapper);
|
||||||
|
// 封装Map集合(键:员工id, 值:推广数量)
|
||||||
|
Map<Long, Integer> staffCntMap = new HashMap<>();
|
||||||
|
for (EmployeePromotionRecords employeePromotionRecords : employeePromotionRecordsList) {
|
||||||
|
Long secondUserId = employeePromotionRecords.getSecondUserId();
|
||||||
|
staffCntMap.merge(secondUserId, 1, Integer::sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 封装Map集合(键:员工id, 值:下单数量)
|
||||||
|
Map<Long, Integer> staffOrderCntMap = new HashMap<>();
|
||||||
|
// 封装Map集合(键:员工id, 值:下单金额)
|
||||||
|
Map<Long, BigDecimal> staffOrderAmountMap = new HashMap<>();
|
||||||
|
// 封装Map集合(键:员工id, 值:净成交金额)
|
||||||
|
Map<Long, BigDecimal> staffNetSalesAmountMap = new HashMap<>();
|
||||||
|
QueryWrapper<CoursePromotionCommissionPending> coursePromotionQueryWrapper = new QueryWrapper<>();
|
||||||
|
coursePromotionQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate);
|
||||||
|
coursePromotionQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate);
|
||||||
|
List<CoursePromotionCommissionPending> coursePromotionCommissionPendingList = coursePromotionCommissionPendingService.list(coursePromotionQueryWrapper);
|
||||||
|
for (CoursePromotionCommissionPending coursePromotionCommissionPending : coursePromotionCommissionPendingList) {
|
||||||
|
Long secondUserId = coursePromotionCommissionPending.getSecondUserId();
|
||||||
|
BigDecimal totalAmount = coursePromotionCommissionPending.getTotalAmount();
|
||||||
|
DateTime updateDate = DateUtil.date(coursePromotionCommissionPending.getUpdateTime());
|
||||||
|
String commissionStatus = coursePromotionCommissionPending.getCommissionStatus();
|
||||||
|
CommissionStatusEnum commissionStatusEnum = CommissionStatusEnum.getEnumByValue(commissionStatus);
|
||||||
|
staffOrderCntMap.merge(secondUserId, 1, Integer::sum);
|
||||||
|
staffOrderAmountMap.merge(secondUserId, totalAmount, BigDecimal::add);
|
||||||
|
|
||||||
|
if (!(CommissionStatusEnum.COMPLETED.equals(commissionStatusEnum) && updateDate.isAfterOrEquals(startDate) && updateDate.isBeforeOrEquals(endDate))) {
|
||||||
|
totalAmount = totalAmount.multiply(SystemConstant.FEE_RATE);
|
||||||
|
}
|
||||||
|
staffNetSalesAmountMap.merge(secondUserId, totalAmount, BigDecimal::add);
|
||||||
|
}
|
||||||
|
List<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserRoleEnum.STAFF, userInfoService);
|
||||||
|
List<UserPerformanceSummary> userPerformanceSummaryList = commonService.findByFieldInTargetField(userInfoList, userPerformanceSummaryService, UserInfo::getId, UserPerformanceSummary::getUserId);
|
||||||
|
|
||||||
|
// 封装Map集合(键:主管id, 用户信息)
|
||||||
|
Map<Long, UserInfo> userInfoMap = new HashMap<>();
|
||||||
|
for (UserInfo userInfo : userInfoList) {
|
||||||
|
userInfoMap.put(userInfo.getId(), userInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 封装主管绩效排名列表
|
||||||
|
List<SupervisorPerformanceSummaryVO> supervisorPerformanceSummaryVOS = new ArrayList<>();
|
||||||
|
for (UserPerformanceSummary userPerformanceSummary : userPerformanceSummaryList) {
|
||||||
|
Long userId = userPerformanceSummary.getUserId();
|
||||||
|
UserInfo userInfo = userInfoMap.get(userId);
|
||||||
|
SupervisorPerformanceSummaryVO supervisorPerformanceSummaryVO = SupervisorPerformanceSummaryVO.builder()
|
||||||
|
.nickName(userInfo.getNickName())
|
||||||
|
.phoneNumber(userInfo.getPhoneNumber())
|
||||||
|
.empCount(userPerformanceSummary.getEmpCount())
|
||||||
|
.orderCount(staffOrderCntMap.get(userId))
|
||||||
|
.totalAmount(staffOrderAmountMap.get(userId))
|
||||||
|
.netAmount(staffNetSalesAmountMap.get(userId))
|
||||||
|
.promoCount(staffCntMap.get(userId))
|
||||||
|
.build();
|
||||||
|
supervisorPerformanceSummaryVOS.add(supervisorPerformanceSummaryVO);
|
||||||
|
}
|
||||||
|
return ResultUtils.success(supervisorPerformanceSummaryVOS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user