全量提交

This commit is contained in:
2026-02-28 19:47:28 +08:00
parent c727e3498d
commit 7ca8a3521f
4 changed files with 87 additions and 5 deletions

View File

@@ -32,17 +32,26 @@ public class MonthlyPerformanceReportVo {
/** 明细负责人项目sys_oa_project.functionary */
private List<SysOaProjectVo> responsibleProjects;
/** 明细:延期项目(从 responsibleProjects 中筛选出延期的) */
private List<SysOaProjectVo> postponedProjects;
/** 明细项目进度步骤oa_project_schedule_step */
private List<OaProjectScheduleStepVo> scheduleStepDetails;
/** 明细本人负责的进度步骤node_header=本人) */
private List<OaProjectScheduleStepVo> myScheduleStepDetails;
/** 明细:延期进度步骤(从 myScheduleStepDetails 中筛选出延期的) */
private List<OaProjectScheduleStepVo> delayedScheduleStepDetails;
/** 明细报工oa_project_report */
private List<OaProjectReportVo> projectReportDetails;
/** 明细任务sys_oa_task含 task_item 子项) */
private List<SysOaTaskVo> taskDetails;
/** 明细:延期任务(从 taskDetails 中筛选出延期的) */
private List<SysOaTaskVo> delayedTaskDetails;
}

View File

@@ -18,10 +18,13 @@ public class MonthlyPerformanceSummaryVo {
/** 项目 */
private Long responsibleProjectCount;
private Long postponedProjectCount; // 延期项目数量
private Long totalPostponeCount; // 总延期次数
/** 进度步骤(当前人作为步骤负责人 node_header */
private Long myScheduleStepCount;
private Long myScheduleStepCompletedCount;
private Long delayedScheduleStepCount; // 延期进度步骤数量
/** 报工 */
private Long projectReportCount;
@@ -30,6 +33,7 @@ public class MonthlyPerformanceSummaryVo {
private Long taskCount;
private Long taskCompletedCount;
private Long taskItemCount;
private Long delayedTaskCount; // 延期任务数量
}

View File

@@ -59,6 +59,12 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
List<SysOaProjectVo> responsibleProjects = performanceReportMapper.selectResponsibleProjects(vo.getNickName());
vo.setResponsibleProjects(responsibleProjects);
// 3.1) 延期项目(筛选出延期的项目)
List<SysOaProjectVo> postponedProjects = responsibleProjects.stream()
.filter(p -> p.getIsPostpone() != null && p.getIsPostpone() > 0)
.collect(Collectors.toList());
vo.setPostponedProjects(postponedProjects);
// 4) 项目进度步骤(按负责项目汇总出所有步骤;另给出本人负责步骤)
List<OaProjectScheduleStepVo> scheduleSteps = buildScheduleStepsByProjects(responsibleProjects, startDate, endDate);
vo.setScheduleStepDetails(scheduleSteps);
@@ -68,6 +74,25 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
.collect(Collectors.toList());
vo.setMyScheduleStepDetails(mySteps);
// 4.1) 延期进度步骤(未完成 && planEnd < 当前时间)
// 注意mySteps 已经是在查询时间范围内的步骤,所以不需要再限制 planEnd 的范围
Date now = new Date();
List<OaProjectScheduleStepVo> delayedSteps = mySteps.stream()
.filter(s -> {
// 未完成status != 1
if (s.getStatus() == null || s.getStatus() == 1) {
return false;
}
// 有预计结束时间
if (s.getPlanEnd() == null) {
return false;
}
// 预计结束时间已过期(当前时间已超过计划结束时间)
return s.getPlanEnd().before(now) || s.getPlanEnd().equals(now);
})
.collect(Collectors.toList());
vo.setDelayedScheduleStepDetails(delayedSteps);
// 5) 报工明细oa_project_report
OaProjectReportBo reportBo = new OaProjectReportBo();
reportBo.setUserId(userId);
@@ -80,8 +105,26 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
List<SysOaTaskVo> taskDetails = sysOaTaskMapper.selectPerformanceTaskList(userId, startDate, endDate);
vo.setTaskDetails(taskDetails);
// 6.1) 延期任务(未完成 && finishTime < 当前时间)
// 注意taskDetails 已经是在查询时间范围内的任务,所以不需要再限制 finishTime 的范围
List<SysOaTaskVo> delayedTasks = taskDetails.stream()
.filter(t -> {
// 未完成completedTime == null
if (t.getCompletedTime() != null) {
return false;
}
// 有预计结束时间
if (t.getFinishTime() == null) {
return false;
}
// 预计结束时间已过期(当前时间已超过预计结束时间)
return t.getFinishTime().before(now) || t.getFinishTime().equals(now);
})
.collect(Collectors.toList());
vo.setDelayedTaskDetails(delayedTasks);
// 7) 汇总
vo.setSummary(buildSummary(attendanceDetails, leaveDetails, responsibleProjects, mySteps, projectReports, taskDetails));
vo.setSummary(buildSummary(attendanceDetails, leaveDetails, responsibleProjects, mySteps, delayedSteps, projectReports, taskDetails, delayedTasks));
return vo;
}
@@ -192,8 +235,10 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
List<HrmLeaveRequestVo> leaveDetails,
List<SysOaProjectVo> responsibleProjects,
List<OaProjectScheduleStepVo> mySteps,
List<OaProjectScheduleStepVo> delayedSteps,
List<OaProjectReportVo> projectReports,
List<SysOaTaskVo> tasks) {
List<SysOaTaskVo> tasks,
List<SysOaTaskVo> delayedTasks) {
MonthlyPerformanceSummaryVo s = new MonthlyPerformanceSummaryVo();
// 考勤
@@ -227,6 +272,22 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
// 项目
s.setResponsibleProjectCount(responsibleProjects == null ? 0L : (long) responsibleProjects.size());
// 延期项目统计
long postponedCount = 0;
long totalPostponeCount = 0;
if (responsibleProjects != null) {
for (SysOaProjectVo p : responsibleProjects) {
if (p.getIsPostpone() != null && p.getIsPostpone() > 0) {
postponedCount++;
if (p.getPostponeCount() != null) {
totalPostponeCount += p.getPostponeCount();
}
}
}
}
s.setPostponedProjectCount(postponedCount);
s.setTotalPostponeCount(totalPostponeCount);
// 进度步骤(本人负责)
s.setMyScheduleStepCount(mySteps == null ? 0L : (long) mySteps.size());
@@ -239,6 +300,8 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
}
}
s.setMyScheduleStepCompletedCount(myCompleted);
// 延期进度步骤统计
s.setDelayedScheduleStepCount(delayedSteps == null ? 0L : (long) delayedSteps.size());
// 报工
s.setProjectReportCount(projectReports == null ? 0L : (long) projectReports.size());
@@ -259,6 +322,8 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
}
s.setTaskCompletedCount(taskCompleted);
s.setTaskItemCount(taskItemCount);
// 延期任务统计
s.setDelayedTaskCount(delayedTasks == null ? 0L : (long) delayedTasks.size());
return s;
}
}

View File

@@ -41,6 +41,7 @@
functionary AS functionary,
begin_time AS beginTime,
finish_time AS finishTime,
original_finish_time AS originalFinishTime,
introduction AS introduction,
project_grade AS projectGrade,
project_status AS projectStatus,
@@ -52,10 +53,13 @@
create_by AS createBy,
create_time AS createTime,
update_by AS updateBy,
update_time AS updateTime
update_time AS updateTime,
is_postpone AS isPostpone,
postpone_reason AS postponeReason,
postpone_time AS postponeTime,
postpone_count AS postponeCount
FROM sys_oa_project
WHERE del_flag = 0
AND functionary IS NOT NULL
WHERE functionary IS NOT NULL
AND functionary LIKE CONCAT('%', #{nickName}, '%')
ORDER BY update_time DESC, create_time DESC
</select>