feat: 需求部门分析增加部门人数和人均任务数字段
This commit is contained in:
parent
6fb03d14b9
commit
403c5af7a0
@ -2140,6 +2140,17 @@ public class AnalyticsService {
|
||||
Map<Long, String> deptNames = departments.stream()
|
||||
.collect(Collectors.toMap(d -> d.getId(), d -> d.getDeptName(), (a, b) -> a));
|
||||
|
||||
// 🔥 获取每个部门的人数
|
||||
Map<Long, Integer> deptMemberCounts = new HashMap<>();
|
||||
for (Long deptId : tasksByDept.keySet()) {
|
||||
// 查询该部门及其子部门的所有用户数量
|
||||
List<Long> deptAndChildIds = getDeptAndChildIds(deptId);
|
||||
Long memberCount = userMapper.selectCount(new LambdaQueryWrapper<User>()
|
||||
.in(User::getDeptId, deptAndChildIds)
|
||||
.eq(User::getStatus, 1)); // 只统计启用状态的用户
|
||||
deptMemberCounts.put(deptId, memberCount.intValue());
|
||||
}
|
||||
|
||||
for (Map.Entry<Long, List<Task>> entry : tasksByDept.entrySet()) {
|
||||
Long deptId = entry.getKey();
|
||||
List<Task> 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();
|
||||
|
||||
@ -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; // 完成率
|
||||
|
||||
@ -448,6 +448,8 @@ export interface DeptAnalysis {
|
||||
completionRate: number;
|
||||
totalQuantity: number;
|
||||
avgCompletionHours?: number;
|
||||
memberCount?: number; // 部门人数
|
||||
avgTasksPerMember?: number; // 人均任务数
|
||||
}
|
||||
|
||||
export interface PlatformAnalysis {
|
||||
|
||||
@ -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 @@
|
||||
<template v-if="column.key === 'totalScore'">
|
||||
<span class="score-value">{{ formatScore(record.totalScore) }}</span>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'avgTasksPerMember'">
|
||||
<span class="score-value">{{ formatScore(record.avgTasksPerMember) }}</span>
|
||||
</template>
|
||||
<template v-else-if="column.key === 'completionRate'">
|
||||
<span :class="record.completionRate >= 80 ? 'text-success' : record.completionRate >= 50 ? 'text-warning' : 'text-danger'">
|
||||
{{ formatScore(record.completionRate) }}%
|
||||
@ -985,7 +988,9 @@ const receivingDeptColumns = [
|
||||
|
||||
const demandDeptColumns = [
|
||||
{ title: '部门名称', dataIndex: 'deptName', key: 'deptName', ellipsis: true },
|
||||
{ title: '部门人数', dataIndex: 'memberCount', key: 'memberCount', align: 'center', width: 80 },
|
||||
{ title: '任务数', dataIndex: 'totalTasks', key: 'totalTasks', align: 'center', width: 80 },
|
||||
{ title: '人均任务', key: 'avgTasksPerMember', align: 'center', width: 90 },
|
||||
{ title: '总数量', dataIndex: 'totalQuantity', key: 'totalQuantity', align: 'center', width: 80 },
|
||||
{ title: '已完成', dataIndex: 'completedTasks', key: 'completedTasks', align: 'center', width: 80 },
|
||||
{ title: '待处理', dataIndex: 'pendingTasks', key: 'pendingTasks', align: 'center', width: 80 },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user