From 1bbbba050c2ddc479b69ffa35f56da50048bbe51 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 11 Dec 2025 15:29:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(oa):=20=E4=BC=98=E5=8C=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=BF=9B=E5=BA=A6=E7=BB=9F=E8=AE=A1=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=B9=B6=E5=AE=8C=E5=96=84VO=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除XML中冗余的关联查询与计算逻辑 - 新增三个统计字段:totalCount、unFinishCount、delayCount - 通过子查询方式实现更准确的进度统计 - 在Java实体类中添加对应的统计属性 - 修复OaProjectScheduleStepServiceImpl中的空指针判断逻辑 --- .../oa/domain/vo/OaProjectScheduleVo.java | 10 ++++++ .../oa/mapper/OaProjectScheduleMapper.java | 2 ++ .../OaProjectScheduleStepServiceImpl.java | 2 +- .../mapper/oa/OaProjectScheduleMapper.xml | 35 +++++++------------ 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java index 3ca0cd0..756cba9 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProjectScheduleVo.java @@ -95,4 +95,14 @@ public class OaProjectScheduleVo { //进度负责人 private String steward; + + + //"总数量" + private Long totalCount; + + //"未完成数量" + private Long unFinishCount; + + //"延迟数量" + private Long delayCount; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleMapper.java index 7d0c2a3..c73c1b1 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaProjectScheduleMapper.java @@ -8,6 +8,8 @@ import com.ruoyi.oa.domain.vo.OaProjectScheduleVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Param; +import java.util.Map; + /** * 项目进度Mapper接口 * diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java index 104cab6..95424a2 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaProjectScheduleStepServiceImpl.java @@ -191,7 +191,7 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS } // 3. 处理结束时间逻辑(此时 original 一定非 null,可安全调用方法) - if (original.getEndTime() == null) { + if (original.getEndTime() == null && bo.getEndTime() != null) { // 首次修改:设置结束时间和原始结束时间 update.setEndTime(bo.getEndTime()); update.setOriginalEndTime(bo.getEndTime()); diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml index c829933..4e8dc54 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProjectScheduleMapper.xml @@ -27,13 +27,11 @@ ops.project_id, ops.template_id, ops.current_step, - opss.step_name AS currentStepName, ops.start_time, ops.end_time, ops.status, ops.steward, ops.remark, - /* ======================== 项目信息 ==================== */ op.project_id AS opProjectId, op.project_name, @@ -51,31 +49,22 @@ op.project_code, op.pre_pay, op.is_top AS isTop, - opss.plan_end, - opss.header, - DATEDIFF(DATE(opss.plan_end), CURDATE()) AS remainTime, - ROUND( - ( - (ops.current_step - CASE WHEN opss.status = 0 THEN 1 ELSE 0 END) - / NULLIF(maxs.max_order, 0) - ) * 100, - 2 - ) AS schedulePercentage - + (SELECT COUNT(*) FROM oa_project_schedule_step opss + WHERE opss.schedule_id = ops.schedule_id AND opss.del_flag = '0') AS totalCount, + (SELECT COUNT(*) FROM oa_project_schedule_step opss + WHERE opss.schedule_id = ops.schedule_id AND opss.del_flag = '0' AND opss.status IN (0,1)) AS unFinishCount, + (SELECT COUNT(*) FROM oa_project_schedule_step opss + WHERE opss.schedule_id = ops.schedule_id AND opss.del_flag = '0' + AND ( + opss.use_flag = 0 + OR (opss.original_end_time IS NOT NULL AND opss.end_time IS NOT NULL AND opss.end_time > opss.original_end_time) + OR (opss.status = 0 AND opss.original_end_time IS NOT NULL AND CURDATE() > DATE(opss.original_end_time)) + ) + ) AS delayCount FROM oa_project_schedule AS ops LEFT JOIN sys_oa_project AS op ON ops.project_id = op.project_id - LEFT JOIN oa_project_schedule_step AS opss - ON ops.schedule_id = opss.schedule_id - AND opss.step_order = ops.current_step - AND opss.use_flag = '1' - LEFT JOIN (SELECT schedule_id, - MAX(step_order) AS max_order - FROM oa_project_schedule_step - WHERE use_flag = '1' - GROUP BY schedule_id) AS maxs ON maxs.schedule_id = ops.schedule_id ${ew.getCustomSqlSegment} -