diff --git a/src/main/java/com/greenorange/promotion/constant/CommonConstant.java b/src/main/java/com/greenorange/promotion/constant/CommonConstant.java index 3f1fb6a..3df8e00 100644 --- a/src/main/java/com/greenorange/promotion/constant/CommonConstant.java +++ b/src/main/java/com/greenorange/promotion/constant/CommonConstant.java @@ -13,6 +13,6 @@ public interface CommonConstant { /** * 降序 */ - String SORT_ORDER_DESC = " descend"; + String SORT_ORDER_DESC = "descend"; } \ No newline at end of file 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 f014cac..1366fdd 100644 --- a/src/main/java/com/greenorange/promotion/controller/userInfo/UserPerformanceSummaryController.java +++ b/src/main/java/com/greenorange/promotion/controller/userInfo/UserPerformanceSummaryController.java @@ -327,10 +327,10 @@ public class UserPerformanceSummaryController { .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)) + .orderCount(supervisorOrderCntMap.get(userId) == null ? 0 : supervisorOrderCntMap.get(userId)) + .totalAmount(supervisorOrderAmountMap.get(userId) == null ? BigDecimal.ZERO : supervisorOrderAmountMap.get(userId)) + .netAmount(supervisorNetSalesAmountMap.get(userId) == null ? BigDecimal.ZERO : supervisorNetSalesAmountMap.get(userId)) + .promoCount(supervisorCntMap.get(userId) == null ? 0 : supervisorCntMap.get(userId)) .build(); supervisorPerformanceSummaryVOS.add(supervisorPerformanceSummaryVO); } @@ -415,10 +415,10 @@ public class UserPerformanceSummaryController { .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)) + .orderCount(staffOrderCntMap.get(userId) == null ? 0 : staffOrderCntMap.get(userId)) + .totalAmount(staffOrderAmountMap.get(userId) == null ? BigDecimal.ZERO : staffOrderAmountMap.get(userId)) + .netAmount(staffNetSalesAmountMap.get(userId) == null ? BigDecimal.ZERO : staffNetSalesAmountMap.get(userId)) + .promoCount(staffCntMap.get(userId) == null ? 0 : staffCntMap.get(userId)) .build(); supervisorPerformanceSummaryVOS.add(supervisorPerformanceSummaryVO); } @@ -538,12 +538,12 @@ public class UserPerformanceSummaryController { /** - * 小程序端查询主管绩效汇总 + * 小程序端经理查询主管绩效汇总 * @param miniUserPerformanceSummaryQueryRequest 主管绩效汇总查询请求体 * @return 用户绩效汇总列表 */ @PostMapping("query/supervisor") - @Operation(summary = "小程序端用户根据主管id查询员工绩效汇总", description = "参数:主管绩效汇总查询请求体,权限:管理员,方法名:miniListPerformanceSummary") + @Operation(summary = "小程序端经理查询主管绩效汇总", description = "参数:主管绩效汇总查询请求体,权限:管理员,方法名:miniListPerformanceSummary") @RequiresPermission(mustRole = UserConstant.MANAGER_ROLE) public BaseResponse> miniListPerformanceSummary(@Valid @RequestBody MiniUserPerformanceSummaryQueryRequest miniUserPerformanceSummaryQueryRequest) { String nickName = miniUserPerformanceSummaryQueryRequest.getNickName(); @@ -746,10 +746,10 @@ public class UserPerformanceSummaryController { .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)) + .orderCount(supervisorOrderCntMap.get(userId) == null ? 0 : supervisorOrderCntMap.get(userId)) + .totalAmount(supervisorOrderAmountMap.get(userId) == null ? BigDecimal.ZERO : supervisorOrderAmountMap.get(userId)) + .netAmount(supervisorNetSalesAmountMap.get(userId) == null ? BigDecimal.ZERO : supervisorNetSalesAmountMap.get(userId)) + .promoCount(supervisorCntMap.get(userId) == null ? 0 : supervisorCntMap.get(userId)) .build(); supervisorPerformanceSummaryVOS.add(supervisorPerformanceSummaryVO); } @@ -762,15 +762,17 @@ public class UserPerformanceSummaryController { /** * 小程序端主管查询员工绩效排名 - * @param userPerformanceSummaryRankQueryRequest 绩效排名查询请求体 + * @param miniUserPerformanceSummaryRankQueryRequest 绩效排名查询请求体 * @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(); + public BaseResponse> miniListStaffUserPerformanceSummaryRankingsByPage(@Valid @RequestBody MiniUserPerformanceSummaryRankQueryRequest miniUserPerformanceSummaryRankQueryRequest) { + String startTimeStr = miniUserPerformanceSummaryRankQueryRequest.getStartDate(); + String endTimeStr = miniUserPerformanceSummaryRankQueryRequest.getEndDate(); + String nickName = miniUserPerformanceSummaryRankQueryRequest.getNickName(); + String phoneNumber = miniUserPerformanceSummaryRankQueryRequest.getPhoneNumber(); DateTime startDate = null; DateTime endDate = null; boolean isAddDate = true; @@ -818,7 +820,11 @@ public class UserPerformanceSummaryController { } staffNetSalesAmountMap.merge(secondUserId, totalAmount, BigDecimal::add); } - List userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.STAFF_ROLE, userInfoService); + LambdaQueryWrapper userInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + userInfoLambdaQueryWrapper.eq(StringUtils.isNotBlank(nickName), UserInfo::getNickName, nickName) + .eq(StringUtils.isNotBlank(phoneNumber), UserInfo::getPhoneNumber, phoneNumber) + .eq(UserInfo::getUserRole, UserConstant.STAFF_ROLE); + List userInfoList = userInfoService.list(userInfoLambdaQueryWrapper); List userPerformanceSummaryList = commonService.findByFieldInTargetField(userInfoList, userPerformanceSummaryService, UserInfo::getId, UserPerformanceSummary::getUserId); // 封装Map集合(键:主管id, 用户信息) @@ -827,7 +833,7 @@ public class UserPerformanceSummaryController { userInfoMap.put(userInfo.getId(), userInfo); } - // 封装主管绩效排名列表 + // 封装员工绩效排名列表 List supervisorPerformanceSummaryVOS = new ArrayList<>(); for (UserPerformanceSummary userPerformanceSummary : userPerformanceSummaryList) { Long userId = userPerformanceSummary.getUserId(); @@ -836,13 +842,15 @@ public class UserPerformanceSummaryController { .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)) + .orderCount(staffOrderCntMap.get(userId) == null ? 0 : staffOrderCntMap.get(userId)) + .totalAmount(staffOrderAmountMap.get(userId) == null ? BigDecimal.ZERO : staffOrderAmountMap.get(userId)) + .netAmount(staffNetSalesAmountMap.get(userId) == null ? BigDecimal.ZERO : staffNetSalesAmountMap.get(userId)) + .promoCount(staffCntMap.get(userId) == null ? 0 : staffCntMap.get(userId)) .build(); supervisorPerformanceSummaryVOS.add(supervisorPerformanceSummaryVO); } + userPerformanceSummaryService.sortPerformanceRankingList(supervisorPerformanceSummaryVOS, miniUserPerformanceSummaryRankQueryRequest); + return ResultUtils.success(supervisorPerformanceSummaryVOS); } diff --git a/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserPerformanceSummaryServiceImpl.java b/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserPerformanceSummaryServiceImpl.java index 80ea43d..5623d5f 100644 --- a/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserPerformanceSummaryServiceImpl.java +++ b/src/main/java/com/greenorange/promotion/service/userInfo/impl/UserPerformanceSummaryServiceImpl.java @@ -183,31 +183,26 @@ public class UserPerformanceSummaryServiceImpl extends ServiceImpl supervisorPerformanceSummaryVOS, MiniUserPerformanceSummaryRankQueryRequest request) { + /** + * 将集合根据不同属性进行排序 + */ + public void sortPerformanceRankingList(List supervisorPerformanceSummaryVOS, MiniUserPerformanceSummaryRankQueryRequest miniUserPerformanceSummaryRankQueryRequest) { if (supervisorPerformanceSummaryVOS == null || supervisorPerformanceSummaryVOS.isEmpty()) { return; // 如果列表为空,不进行排序 } - String sortField = request.getSortField(); - String sortOrder = request.getSortOrder(); - - // 检查 sortField 是否有效,如果无效则不进行排序 - if (!SqlUtils.validSortField(sortField)) { - System.out.println("Invalid sort field: " + sortField); - return; // 如果 sortField 无效,不进行排序 - } - + // 创建一个 Comparator,根据 sortField 和 sortOrder 排序 + String sortField = miniUserPerformanceSummaryRankQueryRequest.getSortField(); + String sortOrder = miniUserPerformanceSummaryRankQueryRequest.getSortOrder(); Comparator comparator = getComparatorForSortField(sortField); if (comparator == null) { - return; // 如果没有匹配的字段,跳过排序 + return; // 如果没有有效的排序字段,跳过排序 } - // 判断排序方向 + // 判断排序顺序(升序或降序) if (CommonConstant.SORT_ORDER_DESC.equalsIgnoreCase(sortOrder)) { - comparator = comparator.reversed(); // 降序 + comparator = comparator.reversed(); // 如果是降序,反转 comparator } // 执行排序 @@ -215,21 +210,17 @@ public class UserPerformanceSummaryServiceImpl extends ServiceImpl getComparatorForSortField(String sortField) { - // 定义一个Map,将字段名与其对应的比较器关联起来 - Map> comparatorMap = Map.of( - "empCount", Comparator.comparing(SupervisorPerformanceSummaryVO::getEmpCount, Comparator.nullsLast(Comparator.naturalOrder())), - "promoCount", Comparator.comparing(SupervisorPerformanceSummaryVO::getPromoCount, Comparator.nullsLast(Comparator.naturalOrder())), - "orderCount", Comparator.comparing(SupervisorPerformanceSummaryVO::getOrderCount, Comparator.nullsLast(Comparator.naturalOrder())), - "totalAmount", Comparator.comparing(SupervisorPerformanceSummaryVO::getTotalAmount, Comparator.nullsLast(Comparator.naturalOrder())), - "netAmount", Comparator.comparing(SupervisorPerformanceSummaryVO::getNetAmount, Comparator.nullsLast(Comparator.naturalOrder())) - ); - // 返回对应字段的比较器,如果没有匹配的字段,则返回null - return comparatorMap.get(sortField); + // 根据 sortField 返回对应的 Comparator + private static Comparator getComparatorForSortField(String sortField) { + return switch (sortField) { + case "empCount" -> Comparator.comparing(SupervisorPerformanceSummaryVO::getEmpCount); + case "promoCount" -> Comparator.comparing(SupervisorPerformanceSummaryVO::getPromoCount); + case "orderCount" -> Comparator.comparing(SupervisorPerformanceSummaryVO::getOrderCount); + case "totalAmount" -> Comparator.comparing(SupervisorPerformanceSummaryVO::getTotalAmount); + case "netAmount" -> Comparator.comparing(SupervisorPerformanceSummaryVO::getNetAmount); + default -> null; // 无效的排序字段 + }; }