修复了用户绩效汇总模块的全部bug

This commit is contained in:
2025-07-15 00:25:24 +08:00
parent 3a27a4d091
commit 02ad26dcdd
3 changed files with 53 additions and 54 deletions

View File

@ -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<List<UserPerformanceSummaryDetailVO>> 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<List<SupervisorPerformanceSummaryVO>> miniListStaffUserPerformanceSummaryRankingsByPage(@Valid @RequestBody UserPerformanceSummaryRankQueryRequest userPerformanceSummaryRankQueryRequest) {
String startTimeStr = userPerformanceSummaryRankQueryRequest.getStartDate();
String endTimeStr = userPerformanceSummaryRankQueryRequest.getEndDate();
public BaseResponse<List<SupervisorPerformanceSummaryVO>> 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<UserInfo> userInfoList = commonService.findByFieldEqTargetField(UserInfo::getUserRole, UserConstant.STAFF_ROLE, userInfoService);
LambdaQueryWrapper<UserInfo> 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<UserInfo> userInfoList = userInfoService.list(userInfoLambdaQueryWrapper);
List<UserPerformanceSummary> userPerformanceSummaryList = commonService.findByFieldInTargetField(userInfoList, userPerformanceSummaryService, UserInfo::getId, UserPerformanceSummary::getUserId);
// 封装Map集合主管id, 用户信息)
@ -827,7 +833,7 @@ public class UserPerformanceSummaryController {
userInfoMap.put(userInfo.getId(), userInfo);
}
// 封装主管绩效排名列表
// 封装员工绩效排名列表
List<SupervisorPerformanceSummaryVO> 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);
}

View File

@ -183,31 +183,26 @@ public class UserPerformanceSummaryServiceImpl extends ServiceImpl<UserPerforman
}
public void sortPerformanceRankingList(List<SupervisorPerformanceSummaryVO> supervisorPerformanceSummaryVOS, MiniUserPerformanceSummaryRankQueryRequest request) {
/**
* 将集合根据不同属性进行排序
*/
public void sortPerformanceRankingList(List<SupervisorPerformanceSummaryVO> 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<SupervisorPerformanceSummaryVO> 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<UserPerforman
}
/**
* 根据 sortField 获取对应的 Comparator
*/
private Comparator<SupervisorPerformanceSummaryVO> getComparatorForSortField(String sortField) {
// 定义一个Map将字段名与其对应的比较器关联起来
Map<String, Comparator<SupervisorPerformanceSummaryVO>> 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<SupervisorPerformanceSummaryVO> 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; // 无效的排序字段
};
}