From 455802ee9f3fe3573656242bada7b792abc42700 Mon Sep 17 00:00:00 2001 From: chen-xin-zhi <3588068430@qq.com> Date: Sun, 13 Jul 2025 17:58:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E7=AB=AF=E6=9F=A5=E8=AF=A2=E4=B8=BB=E7=AE=A1=E5=92=8C?= =?UTF-8?q?=E5=91=98=E5=B7=A5=E4=B8=9A=E7=BB=A9=E6=8E=92=E5=90=8D=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserPerformanceSummaryController.java | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/src/main/java/com/greenorange/promotion/controller/userInfo/UserPerformanceSummaryController.java b/src/main/java/com/greenorange/promotion/controller/userInfo/UserPerformanceSummaryController.java index 9afa8cc..3b6a60d 100644 --- a/src/main/java/com/greenorange/promotion/controller/userInfo/UserPerformanceSummaryController.java +++ b/src/main/java/com/greenorange/promotion/controller/userInfo/UserPerformanceSummaryController.java @@ -624,4 +624,163 @@ public class UserPerformanceSummaryController { } + + + /** + * 小程序端经理查询主管绩效排名 + * @param userPerformanceSummaryRankQueryRequest 绩效排名查询请求体 + * @return 用户绩效汇总列表 + */ + @PostMapping("rank/supervisor") + @Operation(summary = "小程序端经理查询主管绩效排名", description = "参数:绩效排名查询请求体,权限:管理员,方法名:miniListSupervisorPerformanceSummaryRankingsByPage") + @RequiresPermission(mustRole = UserConstant.MANAGER_ROLE) + public BaseResponse> 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 empQueryWrapper = new QueryWrapper<>(); + empQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate); + empQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate); + List employeePromotionRecordsList = employeePromotionRecordsService.list(empQueryWrapper); + // 封装Map集合(键:主管id, 值:推广数量) + Map supervisorCntMap = new HashMap<>(); + for (EmployeePromotionRecords employeePromotionRecords : employeePromotionRecordsList) { + Long firstUserId = employeePromotionRecords.getFirstUserId(); + supervisorCntMap.merge(firstUserId, 1, Integer::sum); + } + + // 封装Map集合(键:主管id, 值:下单数量) + Map supervisorOrderCntMap = new HashMap<>(); + // 封装Map集合(键:主管id, 值:下单金额) + Map supervisorOrderAmountMap = new HashMap<>(); + // 封装Map集合(键:主管id, 值:净成交金额) + Map supervisorNetSalesAmountMap = new HashMap<>(); + QueryWrapper coursePromotionQueryWrapper = new QueryWrapper<>(); + coursePromotionQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate); + coursePromotionQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate); + List 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 userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserRoleEnum.SUPERVISOR, userInfoService); + List userPerformanceSummaryList = commonService.findByFieldInTargetField(userInfoList, userPerformanceSummaryService, UserInfo::getId, UserPerformanceSummary::getUserId); + + // 封装Map集合(键:主管id, 用户信息) + Map userInfoMap = new HashMap<>(); + for (UserInfo userInfo : userInfoList) { + userInfoMap.put(userInfo.getId(), userInfo); + } + + // 封装主管绩效排名列表 + List 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> 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 empQueryWrapper = new QueryWrapper<>(); + empQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate); + empQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate); + List employeePromotionRecordsList = employeePromotionRecordsService.list(empQueryWrapper); + // 封装Map集合(键:员工id, 值:推广数量) + Map staffCntMap = new HashMap<>(); + for (EmployeePromotionRecords employeePromotionRecords : employeePromotionRecordsList) { + Long secondUserId = employeePromotionRecords.getSecondUserId(); + staffCntMap.merge(secondUserId, 1, Integer::sum); + } + + // 封装Map集合(键:员工id, 值:下单数量) + Map staffOrderCntMap = new HashMap<>(); + // 封装Map集合(键:员工id, 值:下单金额) + Map staffOrderAmountMap = new HashMap<>(); + // 封装Map集合(键:员工id, 值:净成交金额) + Map staffNetSalesAmountMap = new HashMap<>(); + QueryWrapper coursePromotionQueryWrapper = new QueryWrapper<>(); + coursePromotionQueryWrapper.ge(StringUtils.isNotBlank(startTimeStr), "createTime", startDate); + coursePromotionQueryWrapper.le(StringUtils.isNotBlank(endTimeStr), "createTime", endDate); + List 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 userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserRoleEnum.STAFF, userInfoService); + List userPerformanceSummaryList = commonService.findByFieldInTargetField(userInfoList, userPerformanceSummaryService, UserInfo::getId, UserPerformanceSummary::getUserId); + + // 封装Map集合(键:主管id, 用户信息) + Map userInfoMap = new HashMap<>(); + for (UserInfo userInfo : userInfoList) { + userInfoMap.put(userInfo.getId(), userInfo); + } + + // 封装主管绩效排名列表 + List 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); + } + + } \ No newline at end of file