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 cad3be8..fadea2d 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 @@ -122,16 +122,29 @@ public class OaProjectScheduleStepServiceImpl implements IOaProjectScheduleStepS */ @Override public Boolean updateByBo(OaProjectScheduleStepBo bo) { - - // 除了做更新还需要编辑文件权限将涉及到的所有文件 都涉及到userId + // 1. 转换实体并校验 OaProjectScheduleStep update = BeanUtil.toBean(bo, OaProjectScheduleStep.class); validEntityBeforeSave(update); - //查询end_time结束时间是不是空 如果是空则证明是第一次修改需要给end_time赋值也就是新的结束时间原来结束时间不变 - OaProjectScheduleStep oaProjectScheduleStep = baseMapper.selectOne(new LambdaQueryWrapper().eq(OaProjectScheduleStep::getTrackId, update.getTrackId())); - if (oaProjectScheduleStep.getEndTime() == null) { + + // 2. 查询原数据(先判断 trackId 是否存在) + Long trackId = update.getTrackId(); + if (trackId == null) { + throw new IllegalArgumentException("更新主键 trackId 不能为空"); + } + OaProjectScheduleStep original = baseMapper.selectById(trackId); // 推荐用 selectById 更简洁 + if (original == null) { + // 处理查询不到的情况(例如抛异常或返回失败) + throw new RuntimeException("未找到 ID 为 " + trackId + " 的项目进度步骤记录"); + } + + // 3. 处理结束时间逻辑(此时 original 一定非 null,可安全调用方法) + if (original.getEndTime() == null) { + // 首次修改:设置结束时间和原始结束时间 update.setEndTime(bo.getEndTime()); update.setOriginalEndTime(bo.getEndTime()); } + + // 4. 执行更新 return baseMapper.updateById(update) > 0; }