diff --git a/backend/src/main/java/com/designhub/service/AnalyticsService.java b/backend/src/main/java/com/designhub/service/AnalyticsService.java index 61d0d81..c6824b1 100644 --- a/backend/src/main/java/com/designhub/service/AnalyticsService.java +++ b/backend/src/main/java/com/designhub/service/AnalyticsService.java @@ -594,19 +594,42 @@ public class AnalyticsService { int designerWithData = 0; for (User designer : designers) { - // 获取该设计师的任务 + // 获取该设计师的主任务 List designerTasks = tasks.stream() .filter(t -> designer.getId().equals(t.getReceiverId())) .collect(Collectors.toList()); - int receivedCount = designerTasks.size(); - int completedCount = (int) designerTasks.stream() + // 获取该设计师的子任务(流水线任务中的子任务) + List designerTaskItems = taskItemMapper.selectList( + new LambdaQueryWrapper() + .eq(TaskItem::getReceiverId, designer.getId()) + .ge(TaskItem::getCreateTime, startTime) + .le(TaskItem::getCreateTime, endTime) + ); + + // 主任务统计 + int mainReceivedCount = designerTasks.size(); + int mainCompletedCount = (int) designerTasks.stream() .filter(t -> "completed".equals(t.getStatus())) .count(); - int inProgressCount = (int) designerTasks.stream() + int mainInProgressCount = (int) designerTasks.stream() .filter(t -> "in_progress".equals(t.getStatus())) .count(); + // 子任务统计 + int subReceivedCount = designerTaskItems.size(); + int subCompletedCount = (int) designerTaskItems.stream() + .filter(t -> "completed".equals(t.getStatus())) + .count(); + int subInProgressCount = (int) designerTaskItems.stream() + .filter(t -> "in_progress".equals(t.getStatus())) + .count(); + + // 合计(主任务 + 子任务) + int receivedCount = mainReceivedCount + subReceivedCount; + int completedCount = mainCompletedCount + subCompletedCount; + int inProgressCount = mainInProgressCount + subInProgressCount; + // 计算准时完成数 int onTimeCount = 0; int overdueCount = 0; @@ -729,6 +752,16 @@ public class AnalyticsService { } } + // 计算子任务的获得积分 + for (TaskItem item : designerTaskItems) { + if ("completed".equals(item.getStatus()) && item.getCompleteTime() != null + && !item.getCompleteTime().isBefore(startTime) + && !item.getCompleteTime().isAfter(endTime)) { + BigDecimal itemScore = item.getTotalScore() != null ? item.getTotalScore() : BigDecimal.ZERO; + totalScore = totalScore.add(itemScore); + } + } + // 计算子任务的延误扣分(与getDesignerDeductionDetails保持一致) try { // 查询已完成的子任务(按完成时间查询)