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 19341cc9..4e837709 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 @@ -148,4 +148,16 @@ public class ErpProjectChangeController extends BaseController { return R.ok(erpProjectChangeService.queryByProjectPlanId(projectPlanId)); } + /** + * 查询指定项目的所有历史变更记录 + * + * @param projectId 项目ID + */ + @SaCheckPermission("oa/erp:erpProjectChange:query") + @GetMapping("/queryHistoryByProjectId/{projectId}") + public R> queryHistoryByProjectId(@NotNull(message = "项目ID不能为空") + @PathVariable("projectId") Long projectId) { + return R.ok(erpProjectChangeService.queryHistoryByProjectId(projectId)); + } + } 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 98850d9c..6b8e38fa 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 @@ -90,4 +90,13 @@ public interface IErpProjectChangeService { * @return 变更记录列表 */ List queryByProjectPlanId(Long projectPlanId); + + /** + * 查询指定项目的所有历史变更记录(包含预算、进度子表数据) + * 取消了暂存状态的数据,只显示历史及当前的审批流转/可用状态记录 + * + * @param projectId 项目 ID + * @return 历史变更记录列表 + */ + List queryHistoryByProjectId(Long projectId); } 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 eba56a61..77e5c1fe 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 @@ -318,6 +318,21 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService { throw new ServiceException("项目信息不存在"); } + // 查询项目的有效预算 + ErpBudgetInfo budgetInfo = budgetInfoMapper.selectOne( + Wrappers.lambdaQuery() + .eq(ErpBudgetInfo::getProjectId, projectId) + .eq(ErpBudgetInfo::getBudgetStatus, "3") // 可用状态 + .orderByDesc(ErpBudgetInfo::getBudgetVersion) + .last("limit 1") + ); + + // 使用预算表中的合同额和合同净额作为当前合同额和当前合同净额 + if (budgetInfo != null) { + vo.setContractAmount(budgetInfo.getContractAmount()); + vo.setContractNetAmount(budgetInfo.getNetContractAmount()); + } + // 检查是否有未完成的变更(状态1或2) List existingChanges = baseMapper.selectList( Wrappers.lambdaQuery() @@ -434,15 +449,6 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService { vo.setProgressList(progressList); // 查询项目预算明细,转换为预算变更明细 - // 首先查询项目的有效预算 - ErpBudgetInfo budgetInfo = budgetInfoMapper.selectOne( - Wrappers.lambdaQuery() - .eq(ErpBudgetInfo::getProjectId, projectId) - .eq(ErpBudgetInfo::getBudgetStatus, "3") // 可用状态 - .orderByDesc(ErpBudgetInfo::getBudgetVersion) - .last("limit 1") - ); - List budgetList = new ArrayList<>(); if (budgetInfo != null) { // 查询预算明细 @@ -661,6 +667,60 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService { return voList; } + /** + * 查询指定项目的所有历史变更记录(包含预算、进度子表数据) + * 取消了暂存状态的数据,只显示历史及当前的审批流转/可用状态记录 + * + * @param projectId 项目 ID + * @return 历史变更记录列表 + */ + @Override + public List queryHistoryByProjectId(Long projectId) { + if (projectId == null) { + return new ArrayList<>(); + } + + // 查询该项目的所有非草稿的变更记录(按照变更次数/创建时间正序,便于组装历史变更轴) + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(ErpProjectChange.class) + .eq(ErpProjectChange::getProjectId, projectId) + .eq(ErpProjectChange::getDelFlag, "0") + .ne(ErpProjectChange::getProjectChangeStatus, "1") // 排除暂存状态 + .orderByAsc(ErpProjectChange::getChangeNumber) // 升序排列,第1次在前面 + .orderByAsc(ErpProjectChange::getCreateTime); + + List list = baseMapper.selectList(lqw); + + // 转换为VO并关联子表数据 + List voList = new ArrayList<>(); + for (ErpProjectChange entity : list) { + // 这里我们需要查询到发起人名字之类的信息所以使用 selectCustomErpProjectChangeVoById 更加完整 + ErpProjectChangeVo vo = baseMapper.selectCustomErpProjectChangeVoById(entity.getProjectChangeId()); + if(vo == null) { + continue; + } + + // 关联子表数据 + vo.setBudgetList(changeBudgetMapper.selectList( + Wrappers.lambdaQuery(ErpProjectChangeBudget.class) + .eq(ErpProjectChangeBudget::getProjectChangeId, vo.getProjectChangeId()) + .eq(ErpProjectChangeBudget::getDelFlag, "0") + .orderByAsc(ErpProjectChangeBudget::getSortOrder) + )); + + vo.setProgressList(changeProgressMapper.selectList( + Wrappers.lambdaQuery(ErpProjectChangeProgress.class) + .eq(ErpProjectChangeProgress::getProjectChangeId, vo.getProjectChangeId()) + .eq(ErpProjectChangeProgress::getDelFlag, "0") + .orderByAsc(ErpProjectChangeProgress::getSortOrder) + )); + + voList.add(vo); + } + + return voList; + } + + /** * 项目变更流程监听器 *