diff --git a/backend/src/main/java/com/designhub/service/AnalyticsService.java b/backend/src/main/java/com/designhub/service/AnalyticsService.java index 6ad702a..9880c24 100644 --- a/backend/src/main/java/com/designhub/service/AnalyticsService.java +++ b/backend/src/main/java/com/designhub/service/AnalyticsService.java @@ -2052,6 +2052,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(); @@ -2061,6 +2072,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 f6f2ab6..8c6eb4b 100644 --- a/backend/src/main/java/com/designhub/vo/DimensionAnalysisVO.java +++ b/backend/src/main/java/com/designhub/vo/DimensionAnalysisVO.java @@ -98,7 +98,9 @@ public class DimensionAnalysisVO { public static class ReceivingDeptAnalysis { private Long deptId; private String deptName; + private Integer memberCount; // 部门总人数 private Integer totalTasks; // 总接单数(主任务+子任务) + private BigDecimal avgTasksPerMember; // 人均任务数 private Integer completedTasks; // 已完成任务数 private Integer inProgressTasks; // 进行中任务数 private Integer pendingTasks; // 待接单任务数 diff --git a/frontend/src/views/Analytics.vue b/frontend/src/views/Analytics.vue index fbae3ea..c2eb749 100644 --- a/frontend/src/views/Analytics.vue +++ b/frontend/src/views/Analytics.vue @@ -499,7 +499,7 @@ :columns="receivingDeptColumns" :data-source="dimensionData.receivingDeptAnalysis" :pagination="{ pageSize: 10 }" - :scroll="{ x: 900 }" + :scroll="{ x: 1000 }" row-key="deptId" size="middle" class="dark-table" @@ -508,6 +508,9 @@ +