feat: 接单部门分析增加部门人数和人均任务数字段
This commit is contained in:
parent
403c5af7a0
commit
fceb14e00c
@ -2052,6 +2052,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();
|
||||
@ -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();
|
||||
|
||||
@ -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; // 待接单任务数
|
||||
|
||||
@ -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 @@
|
||||
<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) }}%
|
||||
@ -977,7 +980,9 @@ const brandColumns = [
|
||||
|
||||
const receivingDeptColumns = [
|
||||
{ title: '部门名称', dataIndex: 'deptName', key: 'deptName', ellipsis: true },
|
||||
{ title: '部门人数', dataIndex: 'memberCount', key: 'memberCount', align: 'center', width: 80 },
|
||||
{ title: '任务数', dataIndex: 'totalTasks', key: 'totalTasks', align: 'center', width: 70 },
|
||||
{ title: '人均任务', key: 'avgTasksPerMember', align: 'center', width: 80 },
|
||||
{ title: '总数量', dataIndex: 'totalQuantity', key: 'totalQuantity', align: 'center', width: 70 },
|
||||
{ title: '已完成', dataIndex: 'completedTasks', key: 'completedTasks', align: 'center', width: 70 },
|
||||
{ title: '进行中', dataIndex: 'inProgressTasks', key: 'inProgressTasks', align: 'center', width: 70 },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user