diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java index a617d3f..0a46926 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java @@ -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 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)); + } } \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java index 9aa8b3e..abce066 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaProject.java @@ -155,4 +155,9 @@ public class SysOaProject extends BaseEntity { private String projectCode; //签约公司 private Integer signingCompany; + + //初始结束时间 + private Date originalFinishTime; + //延期次数 + private Integer postponeCount; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java index 25bd5e7..85af36c 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java @@ -191,5 +191,10 @@ public class SysOaProjectBo extends BaseEntity { private String status; //签约公司 private Integer signingCompany; + + //初始结束时间 + private Date originalFinishTime; + //延期次数 + private Integer postponeCount; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java index 4b2f14f..94eef42 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java @@ -258,4 +258,8 @@ public class SysOaProjectVo { //签约公司 private Integer signingCompany; + //初始结束时间 + private Date originalFinishTime; + //延期次数 + private Integer postponeCount; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java index 2beeb98..ed524cb 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java @@ -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 getProjectData(String month); List getProjectActivities(); + + Boolean postponeProject(SysOaProject bo); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java index 1edcdc1..ec9a3ce 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java @@ -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 buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) { QueryWrapper 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 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; + } + } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml index 892dc85..58b2908 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml @@ -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,