全量提交
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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; // 延期任务数量
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user