From b80af05d958b16ee71f168376f2d9164c6805d8d Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 22 May 2026 16:35:18 +0800 Subject: [PATCH] =?UTF-8?q?1.1.52=20=E5=90=88=E5=90=8C=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E6=97=B6=E9=80=89=E6=8B=A9=E5=B7=B2=E6=9C=89=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E9=A1=B9=E7=9B=AE=E9=87=91=E9=A2=9D=EF=BC=8C?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E5=8F=98=E4=B8=BA=E9=A1=B9=E7=9B=AE=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=90=88=E5=90=8C=E7=9A=84=E6=80=BB=E9=87=91=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IErpProjectContractsService.java | 5 +++ .../impl/ErpContractOrderServiceImpl.java | 6 +++ .../impl/ErpProjectContractsServiceImpl.java | 37 +++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectContractsService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectContractsService.java index 0e9ce200..9f67e216 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectContractsService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpProjectContractsService.java @@ -66,4 +66,9 @@ public interface IErpProjectContractsService { * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 按项目关联合同总价回写项目主表 amount + */ + void syncProjectAmountByLinkedContracts(Long projectId); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java index ff7e6df5..2bf3542a 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java @@ -33,6 +33,7 @@ import org.dromara.oa.crm.domain.vo.CrmCustomerInfoVo; import org.dromara.oa.crm.service.ICrmCustomerInfoService; import org.dromara.oa.erp.service.IErpContractChangeService; import org.dromara.oa.erp.service.IErpContractOrderService; +import org.dromara.oa.erp.service.IErpProjectContractsService; import org.dromara.oa.erp.service.IErpProjectInfoService; import org.dromara.oa.erp.service.IErpProjectTypeService; import org.dromara.oa.erp.domain.vo.ErpProjectTypeVo; @@ -78,6 +79,7 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { private final ErpContractInfoMapper contractInfoMapper; private final ErpContractMaterialMapper contractMaterialMapper; private final ErpProjectContractsMapper projectContractsMapper; + private final IErpProjectContractsService projectContractsService; private final IErpContractChangeService erpContractChangeService; private final IErpProjectInfoService projectInfoService; @@ -424,6 +426,10 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { } else { projectContractsMapper.insertOrUpdate(projectContracts); } + if ("0".equals(projectContractsBo.getProjectSource())) { + // 选择已有项目:关联当前合同后,项目金额更新为项目关联合同总价之和 + projectContractsService.syncProjectAmountByLinkedContracts(projectContractsBo.getProjectId()); + } } // 删除在旧列表中但不在新列表中的关联 diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java index 9eea9bd0..d276a8d0 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpProjectContractsServiceImpl.java @@ -13,11 +13,19 @@ import org.springframework.stereotype.Service; import org.dromara.oa.erp.domain.bo.ErpProjectContractsBo; import org.dromara.oa.erp.domain.vo.ErpProjectContractsVo; import org.dromara.oa.erp.domain.ErpProjectContracts; +import org.dromara.oa.erp.domain.ErpProjectInfo; import org.dromara.oa.erp.mapper.ErpProjectContractsMapper; +import org.dromara.oa.erp.mapper.ErpProjectInfoMapper; import org.dromara.oa.erp.service.IErpProjectContractsService; +import cn.hutool.core.collection.CollUtil; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Collection; /** @@ -31,6 +39,7 @@ import java.util.Collection; public class ErpProjectContractsServiceImpl implements IErpProjectContractsService { private final ErpProjectContractsMapper baseMapper; + private final ErpProjectInfoMapper projectInfoMapper; /** * 查询项目关联合同 @@ -69,6 +78,34 @@ public class ErpProjectContractsServiceImpl implements IErpProjectContractsServi return baseMapper.selectCustomErpProjectContractsVoList(lqw); } + public BigDecimal sumProjectLinkedContractTotalPrice(Long projectId) { + MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpProjectContracts.class); + lqw.eq(ErpProjectContracts::getProjectId, projectId); + lqw.eq("t.del_flag", "0"); + List links = baseMapper.selectCustomErpProjectContractsVoList(lqw); + if (CollUtil.isEmpty(links)) { + return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP); + } + return links.stream() + .map(ErpProjectContractsVo::getTotalPrice) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(2, RoundingMode.HALF_UP); + } + + @Override + public void syncProjectAmountByLinkedContracts(Long projectId) { + BigDecimal totalAmount = sumProjectLinkedContractTotalPrice(projectId); + ErpProjectInfo updateProject = new ErpProjectInfo(); + updateProject.setProjectId(projectId); + updateProject.setAmount(totalAmount); + projectInfoMapper.updateById(updateProject); + } + + /** + * 已有项目:列表展示金额为项目关联合同总价之和 + */ + private MPJLambdaWrapper buildQueryWrapper(ErpProjectContractsBo bo) { Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpProjectContracts.class)