diff --git a/backend/src/main/java/com/designhub/service/AnalyticsService.java b/backend/src/main/java/com/designhub/service/AnalyticsService.java index 2f1879d..6ad702a 100644 --- a/backend/src/main/java/com/designhub/service/AnalyticsService.java +++ b/backend/src/main/java/com/designhub/service/AnalyticsService.java @@ -2140,6 +2140,17 @@ public class AnalyticsService { Map deptNames = departments.stream() .collect(Collectors.toMap(d -> d.getId(), d -> d.getDeptName(), (a, b) -> a)); + // 🔥 获取每个部门的人数 + Map deptMemberCounts = new HashMap<>(); + for (Long deptId : tasksByDept.keySet()) { + // 查询该部门及其子部门的所有用户数量 + List deptAndChildIds = getDeptAndChildIds(deptId); + Long memberCount = userMapper.selectCount(new LambdaQueryWrapper() + .in(User::getDeptId, deptAndChildIds) + .eq(User::getStatus, 1)); // 只统计启用状态的用户 + deptMemberCounts.put(deptId, memberCount.intValue()); + } + for (Map.Entry> entry : tasksByDept.entrySet()) { Long deptId = entry.getKey(); List deptTasks = entry.getValue(); @@ -2149,6 +2160,18 @@ public class AnalyticsService { analysis.setDeptName(deptNames.getOrDefault(deptId, "未知部门")); analysis.setTotalTasks(deptTasks.size()); + // 🔥 设置部门人数 + int memberCount = deptMemberCounts.getOrDefault(deptId, 0); + analysis.setMemberCount(memberCount); + + // 🔥 计算人均任务数 + if (memberCount > 0) { + analysis.setAvgTasksPerMember(BigDecimal.valueOf((double) deptTasks.size() / memberCount) + .setScale(2, RoundingMode.HALF_UP)); + } else { + analysis.setAvgTasksPerMember(BigDecimal.ZERO); + } + long completedCount = deptTasks.stream() .filter(t -> "completed".equals(t.getStatus())) .count(); diff --git a/backend/src/main/java/com/designhub/vo/DimensionAnalysisVO.java b/backend/src/main/java/com/designhub/vo/DimensionAnalysisVO.java index 6e4c266..f6f2ab6 100644 --- a/backend/src/main/java/com/designhub/vo/DimensionAnalysisVO.java +++ b/backend/src/main/java/com/designhub/vo/DimensionAnalysisVO.java @@ -130,8 +130,10 @@ public class DimensionAnalysisVO { private Integer inProgressTasks; // 进行中任务数 private Integer pendingTasks; // 待接单任务数 private Integer totalQuantity; // 总数量 - private Integer publisherCount; // 发布人数量 + private Integer memberCount; // 部门总人数 + private Integer publisherCount; // 发布人数量(有发布任务的人) private Integer activePublisherCount; // 活跃发布人数量 + private BigDecimal avgTasksPerMember; // 人均任务数 private BigDecimal totalScore; // 消耗总积分 private BigDecimal avgScore; // 平均积分 private BigDecimal completionRate; // 完成率 diff --git a/frontend/src/api/analytics.ts b/frontend/src/api/analytics.ts index 10b5e71..dffa7a9 100644 --- a/frontend/src/api/analytics.ts +++ b/frontend/src/api/analytics.ts @@ -448,6 +448,8 @@ export interface DeptAnalysis { completionRate: number; totalQuantity: number; avgCompletionHours?: number; + memberCount?: number; // 部门人数 + avgTasksPerMember?: number; // 人均任务数 } export interface PlatformAnalysis { diff --git a/frontend/src/views/Analytics.vue b/frontend/src/views/Analytics.vue index c9998fc..fbae3ea 100644 --- a/frontend/src/views/Analytics.vue +++ b/frontend/src/views/Analytics.vue @@ -529,7 +529,7 @@ :columns="demandDeptColumns" :data-source="dimensionData.demandDeptAnalysis" :pagination="{ pageSize: 10 }" - :scroll="{ x: 800 }" + :scroll="{ x: 900 }" row-key="deptId" size="middle" class="dark-table" @@ -538,6 +538,9 @@ +