From 996528861bcaab3d1a33aa48304d8a4807cd1e2e Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Thu, 13 Nov 2025 15:12:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(oa/erp):=20=E6=96=B0=E5=A2=9E=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=AE=A1=E5=88=92=E5=8F=98=E6=9B=B4=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在ErpProjectChangeController中新增根据项目计划ID查询变更记录的接口 - 实现service层queryByProjectPlanId方法,支持通过项目计划ID关联查询项目变更记录 - 优化项目变更提交逻辑,增加项目存在性校验 - 调整projectChangeSubmitAndFlowStart方法返回值类型为Boolean - 完善变更记录查询功能,支持关联预算和进度子表数据 --- .../ErpProjectChangeController.java | 12 ++++ .../erp/service/IErpProjectChangeService.java | 10 ++- .../impl/ErpProjectChangeServiceImpl.java | 67 +++++++++++++++++++ 3 files changed, 88 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectChangeController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectChangeController.java index bc271e1e..19341cc9 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectChangeController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpProjectChangeController.java @@ -136,4 +136,16 @@ public class ErpProjectChangeController extends BaseController { return toAjax(erpProjectChangeService.projectChangeSubmitAndFlowStart(bo)); } + /** + * 查询指定项目计划的所有变更记录 + * + * @param projectPlanId 项目计划ID + */ + @SaCheckPermission("oa/erp:erpProjectChange:query") + @GetMapping("/queryByProjectPlanId/{projectPlanId}") + public R> queryByProjectPlanId(@NotNull(message = "项目计划ID不能为空") + @PathVariable("projectPlanId") Long projectPlanId) { + return R.ok(erpProjectChangeService.queryByProjectPlanId(projectPlanId)); + } + } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectChangeService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectChangeService.java index d51736a7..98850d9c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectChangeService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectChangeService.java @@ -81,5 +81,13 @@ public interface IErpProjectChangeService { * @param bo 项目变更申请 * @return 是否成功 */ - ErpProjectChangeVo projectChangeSubmitAndFlowStart(ErpProjectChangeBo bo); + Boolean projectChangeSubmitAndFlowStart(ErpProjectChangeBo bo); + + /** + * 查询指定项目计划的所有变更记录 + * + * @param projectPlanId 项目计划 ID + * @return 变更记录列表 + */ + List queryByProjectPlanId(Long projectPlanId); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectChangeServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectChangeServiceImpl.java index 26560545..b29a493b 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectChangeServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectChangeServiceImpl.java @@ -189,6 +189,18 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService { // 权限校验:只有项目经理才能提交 validateProjectManager(bo.getProjectManagerId()); + Long projectId = bo.getProjectId(); + ErpProjectInfo projectInfo = projectInfoMapper.selectById(projectId); + if (projectInfo == null) { + throw new ServiceException("项目不存在"); + } + // 验证项目状态 +/* + if (!OAStatusEnum.COMPLETED.getStatus().equals(projectInfo.getProjectStatus())) { + throw new ServiceException("项目未审批通过"); + } +*/ + ErpProjectChange add = MapstructUtils.convert(bo, ErpProjectChange.class); validEntityBeforeSave(add); @@ -558,6 +570,61 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService { //TODO 做一些数据校验,如唯一约束 } + /** + * 查询指定项目计划的所有变更记录 + * 注意:ErpProjectChange 绑定的是 project_id 而非 project_plan_id + * 需要先通过项目计划查询出项目ID,再查询该项目的所有变更记录 + * + * @param projectPlanId 项目计划 ID + * @return 变更记录列表 + */ + @Override + public List queryByProjectPlanId(Long projectPlanId) { + if (projectPlanId == null) { + return new ArrayList<>(); + } + + // 第一步:通过项目计划ID查询项目计划信息,获取项目ID + ErpProjectPlan projectPlan = projectPlanMapper.selectById(projectPlanId); + if (projectPlan == null || projectPlan.getProjectId() == null) { + return new ArrayList<>(); + } + + Long projectId = projectPlan.getProjectId(); + + // 第二步:通过项目ID查询该项目的所有变更记录 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(ErpProjectChange.class) + .eq(ErpProjectChange::getProjectId, projectId) + .eq(ErpProjectChange::getDelFlag, "0") + .orderByDesc(ErpProjectChange::getCreateTime); + + List list = baseMapper.selectList(lqw); + + // 第三步:转换为VO并关联子表数据 + List voList = new ArrayList<>(); + for (ErpProjectChange entity : list) { + ErpProjectChangeVo vo = MapstructUtils.convert(entity, ErpProjectChangeVo.class); + + // 关联子表数据 + vo.setBudgetList(changeBudgetMapper.selectList( + Wrappers.lambdaQuery(ErpProjectChangeBudget.class) + .eq(ErpProjectChangeBudget::getProjectChangeId, entity.getProjectChangeId()) + .eq(ErpProjectChangeBudget::getDelFlag, "0") + )); + + vo.setProgressList(changeProgressMapper.selectList( + Wrappers.lambdaQuery(ErpProjectChangeProgress.class) + .eq(ErpProjectChangeProgress::getProjectChangeId, entity.getProjectChangeId()) + .eq(ErpProjectChangeProgress::getDelFlag, "0") + .orderByAsc(ErpProjectChangeProgress::getSortOrder) + )); + + voList.add(vo); + } + + return voList; + } + /** * 项目变更流程监听器 *