fix: 一级需求部门排名统计显示所有部门(包括没有发起任务的)
This commit is contained in:
parent
2457f13d43
commit
cb5ad8955c
@ -2452,13 +2452,24 @@ public class AnalyticsService {
|
||||
|
||||
/**
|
||||
* 获取一级需求部门排名
|
||||
* 显示所有一级需求部门(包括没有发起过任务的部门)
|
||||
*/
|
||||
public List<PrimaryDeptRankingVO> getPrimaryDeptRanking(LocalDateTime startTime, LocalDateTime endTime) {
|
||||
log.info("获取一级需求部门排名: startTime={}, endTime={}", startTime, endTime);
|
||||
|
||||
List<PrimaryDeptRankingVO> result = new java.util.ArrayList<>();
|
||||
|
||||
// 查询所有一级需求部门的任务
|
||||
// 1. 获取所有一级需求部门
|
||||
List<Department> allPrimaryDepts = departmentMapper.selectList(
|
||||
new LambdaQueryWrapper<Department>()
|
||||
.eq(Department::getDeptType, "primary_demand")
|
||||
.eq(Department::getStatus, 1)
|
||||
.eq(Department::getDeleted, 0)
|
||||
);
|
||||
|
||||
log.info("找到 {} 个一级需求部门", allPrimaryDepts.size());
|
||||
|
||||
// 2. 查询时间范围内的一级需求任务
|
||||
LambdaQueryWrapper<Task> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Task::getIsPrimaryTask, 1)
|
||||
.ge(Task::getCreateTime, startTime)
|
||||
@ -2467,52 +2478,47 @@ public class AnalyticsService {
|
||||
|
||||
List<Task> allTasks = taskMapper.selectList(queryWrapper);
|
||||
|
||||
// 按一级部门分组
|
||||
// 3. 按一级部门分组
|
||||
java.util.Map<Long, List<Task>> tasksByDept = allTasks.stream()
|
||||
.filter(t -> t.getPrimaryPublisherDeptId() != null)
|
||||
.collect(java.util.stream.Collectors.groupingBy(Task::getPrimaryPublisherDeptId));
|
||||
|
||||
for (java.util.Map.Entry<Long, List<Task>> entry : tasksByDept.entrySet()) {
|
||||
Long deptId = entry.getKey();
|
||||
List<Task> deptTasks = entry.getValue();
|
||||
// 4. 为每个一级需求部门创建统计数据
|
||||
for (Department dept : allPrimaryDepts) {
|
||||
Long deptId = dept.getId();
|
||||
List<Task> deptTasks = tasksByDept.getOrDefault(deptId, new java.util.ArrayList<>());
|
||||
|
||||
PrimaryDeptRankingVO vo = new PrimaryDeptRankingVO();
|
||||
vo.setDeptId(deptId);
|
||||
vo.setDeptName(dept.getDeptName());
|
||||
|
||||
// 获取部门名称和上级部门名称
|
||||
Department dept = departmentMapper.selectById(deptId);
|
||||
vo.setDeptName(dept != null ? dept.getDeptName() : "未知部门");
|
||||
// 获取一级部门和二级部门名称(向上查找部门层级)
|
||||
List<Department> hierarchy = new java.util.ArrayList<>();
|
||||
Department current = dept;
|
||||
while (current != null && current.getParentId() != null && current.getParentId() > 0) {
|
||||
Department parent = departmentMapper.selectById(current.getParentId());
|
||||
if (parent != null) {
|
||||
hierarchy.add(0, parent); // 插入到列表开头
|
||||
}
|
||||
current = parent;
|
||||
}
|
||||
|
||||
// 获取一级部门和二级部门名称
|
||||
if (dept != null) {
|
||||
// 向上查找部门层级
|
||||
List<Department> hierarchy = new java.util.ArrayList<>();
|
||||
Department current = dept;
|
||||
while (current != null && current.getParentId() != null && current.getParentId() > 0) {
|
||||
Department parent = departmentMapper.selectById(current.getParentId());
|
||||
if (parent != null) {
|
||||
hierarchy.add(0, parent); // 插入到列表开头
|
||||
}
|
||||
current = parent;
|
||||
}
|
||||
|
||||
// hierarchy 现在从根部门到当前部门的父部门
|
||||
// 一级部门是 hierarchy[0],二级部门是 hierarchy[1](如果存在)
|
||||
if (hierarchy.size() >= 1) {
|
||||
vo.setFirstLevelDeptName(hierarchy.get(0).getDeptName());
|
||||
}
|
||||
if (hierarchy.size() >= 2) {
|
||||
vo.setSecondLevelDeptName(hierarchy.get(1).getDeptName());
|
||||
}
|
||||
// hierarchy 现在从根部门到当前部门的父部门
|
||||
// 一级部门是 hierarchy[0],二级部门是 hierarchy[1](如果存在)
|
||||
if (hierarchy.size() >= 1) {
|
||||
vo.setFirstLevelDeptName(hierarchy.get(0).getDeptName());
|
||||
}
|
||||
if (hierarchy.size() >= 2) {
|
||||
vo.setSecondLevelDeptName(hierarchy.get(1).getDeptName());
|
||||
}
|
||||
|
||||
vo.setTaskCount(deptTasks.size());
|
||||
|
||||
// 计算审核通过率
|
||||
long approvedCount = deptTasks.stream()
|
||||
.filter(t -> !"rejected_by_demand".equals(t.getApprovalStatus()) && !"draft".equals(t.getStatus()))
|
||||
.count();
|
||||
if (deptTasks.size() > 0) {
|
||||
long approvedCount = deptTasks.stream()
|
||||
.filter(t -> !"rejected_by_demand".equals(t.getApprovalStatus()) && !"draft".equals(t.getStatus()))
|
||||
.count();
|
||||
vo.setApprovalRate(BigDecimal.valueOf(approvedCount * 100.0 / deptTasks.size())
|
||||
.setScale(2, RoundingMode.HALF_UP));
|
||||
} else {
|
||||
@ -2550,6 +2556,7 @@ public class AnalyticsService {
|
||||
result.get(i).setRank(i + 1);
|
||||
}
|
||||
|
||||
log.info("一级需求部门排名统计完成,共 {} 个部门", result.size());
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user