feat(oa): 添加项目延期功能
- 在 SysOaProject 实体类中新增 originalFinishTime 和 postponeCount 字段- 在 SysOaProjectBo 和 SysOaProjectVo 中同步添加延期相关字段 - 新增 postponeProject 接口方法及其实现,支持-项目延期逻辑 控制器中增加 /postpone 接口用于处理项目延期请求 - Mapper XML 文件中查询语句加入延期相关字段 - 增加延期次数自增、延期时间更新等业务逻辑校验
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.ruoyi.oa.service;
|
||||
|
||||
import com.ruoyi.oa.domain.SysOaProject;
|
||||
import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo;
|
||||
import com.ruoyi.oa.domain.dto.ProjectActivityDTO;
|
||||
import com.ruoyi.oa.domain.dto.ProjectDataDTO;
|
||||
@@ -98,4 +99,6 @@ public interface ISysOaProjectService {
|
||||
|
||||
List<ProjectDataDTO> getProjectData(String month);
|
||||
List<ProjectActivityDTO> getProjectActivities();
|
||||
|
||||
Boolean postponeProject(SysOaProject bo);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,9 @@ package com.ruoyi.oa.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.ruoyi.common.core.domain.model.LoginBody;
|
||||
import com.ruoyi.common.helper.LoginHelper;
|
||||
import com.ruoyi.common.utils.DateUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
@@ -460,6 +463,8 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
|
||||
return baseMapper.getProjectActivities();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private QueryWrapper<SysOaProject> buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) {
|
||||
QueryWrapper<SysOaProject> lqw = Wrappers.query();
|
||||
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName());
|
||||
@@ -484,4 +489,37 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
|
||||
|
||||
return DateUtils.parseDate(DateUtils.parseDateToStr(format, time));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean postponeProject(SysOaProject bo) {
|
||||
// 1. 基础参数校验
|
||||
if (bo.getProjectId() == null || bo.getFinishTime() == null) {
|
||||
throw new RuntimeException("项目ID和延期日期不能为空"); // 也可返回false,根据业务选择
|
||||
}
|
||||
|
||||
// 2. 查询项目是否存在
|
||||
SysOaProject project = baseMapper.selectById(bo.getProjectId());
|
||||
if (project == null) {
|
||||
throw new RuntimeException("项目不存在,无法延期");
|
||||
}
|
||||
|
||||
// 3. 校验延期日期合理性(延期日期不能早于当前结束日期)
|
||||
if (project.getFinishTime() != null && bo.getFinishTime().before(project.getFinishTime())) {
|
||||
throw new RuntimeException("延期日期不能早于当前结束日期(当前结束日期:" + project.getFinishTime() + ")");
|
||||
}
|
||||
|
||||
// 4. 构建更新条件,执行延期操作
|
||||
LambdaUpdateWrapper<SysOaProject> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(SysOaProject::getProjectId, bo.getProjectId()) // 锁定指定项目
|
||||
.set(SysOaProject::getFinishTime, bo.getFinishTime()) // 延期日期赋值给finish_time
|
||||
.set(SysOaProject::getPostponeTime, bo.getFinishTime()) // 同步更新“延期至日期”
|
||||
.set(SysOaProject::getIsPostpone, 1) // 标记为已延期(1=是)
|
||||
.setSql("postpone_count = postpone_count + 1") // 延期次数+1
|
||||
.set(SysOaProject::getUpdateTime, new Date()) // 更新时间
|
||||
.set(SysOaProject::getUpdateBy, LoginHelper.getLoginUser()); // 获取当前操作用户
|
||||
|
||||
// 5. 执行更新,返回操作结果(更新行数>0则视为成功)
|
||||
return baseMapper.update(null, updateWrapper) > 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user