全量提交

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 */ /** 明细负责人项目sys_oa_project.functionary */
private List<SysOaProjectVo> responsibleProjects; private List<SysOaProjectVo> responsibleProjects;
/** 明细:延期项目(从 responsibleProjects 中筛选出延期的) */
private List<SysOaProjectVo> postponedProjects;
/** 明细项目进度步骤oa_project_schedule_step */ /** 明细项目进度步骤oa_project_schedule_step */
private List<OaProjectScheduleStepVo> scheduleStepDetails; private List<OaProjectScheduleStepVo> scheduleStepDetails;
/** 明细本人负责的进度步骤node_header=本人) */ /** 明细本人负责的进度步骤node_header=本人) */
private List<OaProjectScheduleStepVo> myScheduleStepDetails; private List<OaProjectScheduleStepVo> myScheduleStepDetails;
/** 明细:延期进度步骤(从 myScheduleStepDetails 中筛选出延期的) */
private List<OaProjectScheduleStepVo> delayedScheduleStepDetails;
/** 明细报工oa_project_report */ /** 明细报工oa_project_report */
private List<OaProjectReportVo> projectReportDetails; private List<OaProjectReportVo> projectReportDetails;
/** 明细任务sys_oa_task含 task_item 子项) */ /** 明细任务sys_oa_task含 task_item 子项) */
private List<SysOaTaskVo> taskDetails; private List<SysOaTaskVo> taskDetails;
/** 明细:延期任务(从 taskDetails 中筛选出延期的) */
private List<SysOaTaskVo> delayedTaskDetails;
} }

View File

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

View File

@@ -59,6 +59,12 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
List<SysOaProjectVo> responsibleProjects = performanceReportMapper.selectResponsibleProjects(vo.getNickName()); List<SysOaProjectVo> responsibleProjects = performanceReportMapper.selectResponsibleProjects(vo.getNickName());
vo.setResponsibleProjects(responsibleProjects); 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) 项目进度步骤(按负责项目汇总出所有步骤;另给出本人负责步骤) // 4) 项目进度步骤(按负责项目汇总出所有步骤;另给出本人负责步骤)
List<OaProjectScheduleStepVo> scheduleSteps = buildScheduleStepsByProjects(responsibleProjects, startDate, endDate); List<OaProjectScheduleStepVo> scheduleSteps = buildScheduleStepsByProjects(responsibleProjects, startDate, endDate);
vo.setScheduleStepDetails(scheduleSteps); vo.setScheduleStepDetails(scheduleSteps);
@@ -68,6 +74,25 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
.collect(Collectors.toList()); .collect(Collectors.toList());
vo.setMyScheduleStepDetails(mySteps); 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 // 5) 报工明细oa_project_report
OaProjectReportBo reportBo = new OaProjectReportBo(); OaProjectReportBo reportBo = new OaProjectReportBo();
reportBo.setUserId(userId); reportBo.setUserId(userId);
@@ -80,8 +105,26 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
List<SysOaTaskVo> taskDetails = sysOaTaskMapper.selectPerformanceTaskList(userId, startDate, endDate); List<SysOaTaskVo> taskDetails = sysOaTaskMapper.selectPerformanceTaskList(userId, startDate, endDate);
vo.setTaskDetails(taskDetails); 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) 汇总 // 7) 汇总
vo.setSummary(buildSummary(attendanceDetails, leaveDetails, responsibleProjects, mySteps, projectReports, taskDetails)); vo.setSummary(buildSummary(attendanceDetails, leaveDetails, responsibleProjects, mySteps, delayedSteps, projectReports, taskDetails, delayedTasks));
return vo; return vo;
} }
@@ -192,8 +235,10 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
List<HrmLeaveRequestVo> leaveDetails, List<HrmLeaveRequestVo> leaveDetails,
List<SysOaProjectVo> responsibleProjects, List<SysOaProjectVo> responsibleProjects,
List<OaProjectScheduleStepVo> mySteps, List<OaProjectScheduleStepVo> mySteps,
List<OaProjectScheduleStepVo> delayedSteps,
List<OaProjectReportVo> projectReports, List<OaProjectReportVo> projectReports,
List<SysOaTaskVo> tasks) { List<SysOaTaskVo> tasks,
List<SysOaTaskVo> delayedTasks) {
MonthlyPerformanceSummaryVo s = new MonthlyPerformanceSummaryVo(); MonthlyPerformanceSummaryVo s = new MonthlyPerformanceSummaryVo();
// 考勤 // 考勤
@@ -227,6 +272,22 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
// 项目 // 项目
s.setResponsibleProjectCount(responsibleProjects == null ? 0L : (long) responsibleProjects.size()); 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()); s.setMyScheduleStepCount(mySteps == null ? 0L : (long) mySteps.size());
@@ -239,6 +300,8 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
} }
} }
s.setMyScheduleStepCompletedCount(myCompleted); s.setMyScheduleStepCompletedCount(myCompleted);
// 延期进度步骤统计
s.setDelayedScheduleStepCount(delayedSteps == null ? 0L : (long) delayedSteps.size());
// 报工 // 报工
s.setProjectReportCount(projectReports == null ? 0L : (long) projectReports.size()); s.setProjectReportCount(projectReports == null ? 0L : (long) projectReports.size());
@@ -259,6 +322,8 @@ public class PerformanceReportServiceImpl implements IPerformanceReportService {
} }
s.setTaskCompletedCount(taskCompleted); s.setTaskCompletedCount(taskCompleted);
s.setTaskItemCount(taskItemCount); s.setTaskItemCount(taskItemCount);
// 延期任务统计
s.setDelayedTaskCount(delayedTasks == null ? 0L : (long) delayedTasks.size());
return s; return s;
} }
} }

View File

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