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; + } + /** * 项目变更流程监听器 *