From c475223c0de84fb51c5e4fb141672be3efa87562 Mon Sep 17 00:00:00 2001 From: xs Date: Thu, 4 Dec 2025 14:10:05 +0800 Subject: [PATCH] =?UTF-8?q?1.0.47=E5=90=8E=E7=AB=AF=EF=BC=9A=20=20=20=20fe?= =?UTF-8?q?at(budget):=E9=A1=B9=E7=9B=AE=E9=A2=84=E7=AE=97=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ErpBudgetInfoController.java | 11 ++++ .../dromara/oa/erp/domain/ErpBudgetInfo.java | 2 +- .../oa/erp/domain/bo/ErpBudgetInfoBo.java | 2 +- .../oa/erp/domain/vo/ErpBudgetInfoVo.java | 2 +- .../oa/erp/service/IErpBudgetInfoService.java | 8 +++ .../impl/ErpBudgetInfoServiceImpl.java | 66 ++++++++++++++++--- 6 files changed, 80 insertions(+), 11 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java index 6a94e7e6..5b3c352a 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpBudgetInfoController.java @@ -101,6 +101,17 @@ public class ErpBudgetInfoController extends BaseController { return toAjax(erpBudgetInfoService.updateByBo(bo)); } + /** + * 变更项目预算 + */ + @SaCheckPermission("oa:erp/budgetInfo:change") + @Log(title = "项目预算", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/change") + public R change(@Validated(AddGroup.class) @RequestBody ErpBudgetInfoBo bo) { + return toAjax(erpBudgetInfoService.changeByBo(bo)); + } + /** * 删除项目预算 * diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java index 80be3a8d..3ebdb88b 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInfo.java @@ -42,7 +42,7 @@ public class ErpBudgetInfo extends TenantEntity { /** * 版本,新版本+1 */ - private Long budgetVersion; + private Integer budgetVersion; /** * 冗余,项目类别(1销售 2研发 3预投) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java index e3fbcdaf..3b99509b 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInfoBo.java @@ -44,7 +44,7 @@ public class ErpBudgetInfoBo extends BaseEntity { /** * 版本,新版本+1 */ - private Long budgetVersion; + private Integer budgetVersion; /** * 冗余,项目类别(1销售 2研发 3预投) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java index 42bc357f..4839c374 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInfoVo.java @@ -51,7 +51,7 @@ public class ErpBudgetInfoVo implements Serializable { * 版本,新版本+1 */ @ExcelProperty(value = "版本,新版本+1") - private Long budgetVersion; + private Integer budgetVersion; /** * 冗余,项目类别(1销售 2研发 3预投) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java index 52b8152f..30fea8ba 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpBudgetInfoService.java @@ -58,6 +58,14 @@ public interface IErpBudgetInfoService { */ Boolean updateByBo(ErpBudgetInfoBo bo); + /** + * 变更项目预算 + * + * @param bo 项目预算 + * @return 是否修改成功 + */ + Boolean changeByBo(ErpBudgetInfoBo bo); + /** * 校验并批量删除项目预算信息 * diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java index bae87a5a..7100a615 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpBudgetInfoServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.oa.erp.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -157,7 +158,8 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService List queryBudgetCosts(BaseMapper mapper, Class entityClass, Long budgetId) { MPJLambdaWrapper wrapper = JoinWrappers.lambda(entityClass) .selectAll(entityClass) - .eq("budget_id", budgetId); // 直接使用字段名 + .eq("budget_id", budgetId) + .orderByAsc("sort_order"); // 直接使用字段名 return mapper.selectList(wrapper); } @@ -268,7 +270,6 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService 0; if (add.getProjectCategory().equals(ProjectCategoryEnum.MARKET.getCode()) @@ -331,6 +332,55 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ErpBudgetInfo::getProjectId, bo.getProjectId()) + .orderByDesc(ErpBudgetInfo::getBudgetVersion); + + List allBudgets = baseMapper.selectList(queryWrapper); + + if (allBudgets.isEmpty()) { + throw new RuntimeException("项目不存在"); + } + + // 2.判断此变更项目预算的状态 + ErpBudgetInfo currentEffectiveBudget = allBudgets.stream() + .filter(b -> currentBudgetVersion.equals(b.getBudgetVersion())) + .findFirst() + .orElse(null); + + if (currentEffectiveBudget == null || !currentEffectiveBudget.getBudgetStatus().equals(FlowConfigEnum.BUDGET.getCompletedBusinessStatus())) { + throw new RuntimeException("项目不存在可用的预算进行变更"); + } + + // 3. 获取最新版本号(包括所有状态的预算) + Integer latestVersion = allBudgets.stream() + .map(ErpBudgetInfo::getBudgetVersion) + .max(Integer::compareTo) + .orElse(0); + + if (latestVersion.compareTo(currentBudgetVersion) > 0) { + throw new RuntimeException("已经有正在变更的项目预算,版本号:" + latestVersion); + } + + bo.setBudgetVersion(currentBudgetVersion+1); + + return insertByBo(bo); + } + + /** * 保存前的数据校验 */ @@ -694,19 +744,19 @@ public class ErpBudgetInfoServiceImpl extends AbstractWorkflowService ids, Boolean isValid) { if (isValid) { - ids.forEach(id->{ + ids.forEach(id -> { ErpBudgetInfo erpBudgetInfo = baseMapper.selectById(id); - if(!erpBudgetInfo.getBudgetStatus().equals(OAStatusEnum.DRAFT.getStatus()) - || !erpBudgetInfo.getFlowStatus().equals(BusinessStatusEnum.DRAFT.getStatus())){ + if (!erpBudgetInfo.getBudgetStatus().equals(OAStatusEnum.DRAFT.getStatus()) + || !erpBudgetInfo.getFlowStatus().equals(BusinessStatusEnum.DRAFT.getStatus())) { throw new ServiceException("此项目预算已进入审批,不能删除!"); } LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); // luw.set(ObjectUtil.isNull(config.getPrefix()), SysOssConfig::getPrefix, ""); - luw.set(ErpBudgetInfo::getBudgetVersion,null); - luw.set(ErpBudgetInfo::getDelFlag,"1"); + luw.set(ErpBudgetInfo::getBudgetVersion, null); + luw.set(ErpBudgetInfo::getDelFlag, "1"); luw.set(ErpBudgetInfo::getUpdateBy, LoginHelper.getUserId()); - luw.set(ErpBudgetInfo::getUpdateTime,new Date()); + luw.set(ErpBudgetInfo::getUpdateTime, new Date()); luw.eq(ErpBudgetInfo::getBudgetId, erpBudgetInfo.getBudgetId()); boolean flag = baseMapper.update(null, luw) > 0;