feat(oa): 添加项目延期功能
- 在 SysOaProject 实体类中新增 originalFinishTime 和 postponeCount 字段- 在 SysOaProjectBo 和 SysOaProjectVo 中同步添加延期相关字段 - 新增 postponeProject 接口方法及其实现,支持-项目延期逻辑 控制器中增加 /postpone 接口用于处理项目延期请求 - Mapper XML 文件中查询语句加入延期相关字段 - 增加延期次数自增、延期时间更新等业务逻辑校验
This commit is contained in:
@@ -8,6 +8,8 @@ import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
|
||||
import com.ruoyi.common.core.AjaxResult;
|
||||
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;
|
||||
@@ -260,5 +262,22 @@ public class SysOaProjectController extends BaseController {
|
||||
beginTimeStart, beginTimeEnd, profitType,signingCompany, pageQuery);
|
||||
}
|
||||
|
||||
//项目id 延期日期 延期次数加一 修改finish_time
|
||||
/**
|
||||
* 项目延期接口
|
||||
* 前端通过@RequestParam传参:项目ID(projectId)、延期后结束日期(tempTime)
|
||||
*/
|
||||
@Log(title = "项目延期", businessType = BusinessType.UPDATE)
|
||||
@PutMapping("/postpone")
|
||||
public R<Void> postpone(@RequestParam Long projectId,
|
||||
// 加@DateTimeFormat确保前端字符串日期能正确转为Date(格式可根据前端调整)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @RequestParam Date tempTime) {
|
||||
// 1. 构建BO(将RequestParam参数封装为BO,传给Service层)
|
||||
SysOaProject bo = new SysOaProject();
|
||||
bo.setProjectId(projectId); // 项目ID
|
||||
bo.setFinishTime(tempTime); // 延期后结束日期(对应前端tempTime)
|
||||
// 2. 调用Service层执行延期逻辑,通过toAjax统一返回结果(若依框架常用方式)
|
||||
return toAjax(iSysOaProjectService.postponeProject(bo));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -155,4 +155,9 @@ public class SysOaProject extends BaseEntity {
|
||||
private String projectCode;
|
||||
//签约公司
|
||||
private Integer signingCompany;
|
||||
|
||||
//初始结束时间
|
||||
private Date originalFinishTime;
|
||||
//延期次数
|
||||
private Integer postponeCount;
|
||||
}
|
||||
|
||||
@@ -191,5 +191,10 @@ public class SysOaProjectBo extends BaseEntity {
|
||||
private String status;
|
||||
//签约公司
|
||||
private Integer signingCompany;
|
||||
|
||||
//初始结束时间
|
||||
private Date originalFinishTime;
|
||||
//延期次数
|
||||
private Integer postponeCount;
|
||||
}
|
||||
|
||||
|
||||
@@ -258,4 +258,8 @@ public class SysOaProjectVo {
|
||||
//签约公司
|
||||
private Integer signingCompany;
|
||||
|
||||
//初始结束时间
|
||||
private Date originalFinishTime;
|
||||
//延期次数
|
||||
private Integer postponeCount;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -304,6 +304,8 @@
|
||||
p.postpone_time,
|
||||
p.color,
|
||||
p.signing_company,
|
||||
p.postpone_count,
|
||||
p.original_finish_time,
|
||||
TIMESTAMPDIFF(DAY, NOW(), p.postpone_time) AS remainTime
|
||||
FROM sys_oa_project p
|
||||
|
||||
@@ -583,6 +585,8 @@
|
||||
sop.update_time,
|
||||
sop.project_code,
|
||||
sop.signing_company,
|
||||
sop.original_finish_time,
|
||||
sop.postpone_count,
|
||||
is_postpone,
|
||||
postpone_reason,
|
||||
postpone_time,
|
||||
|
||||
Reference in New Issue
Block a user