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)