From bc349d2e8bdb8b38c23fc1e950eb0461bf08c2d9 Mon Sep 17 00:00:00 2001 From: dadiyang Date: Tue, 22 Sep 2026 00:10:08 +0800 Subject: [PATCH] fix(crm):合同金额负值校验+无明细合同金额按传入值落库(A24) --- yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java | 2 ++ yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java | 4 ++++ 2 files changed, 6 insertions(+), 0 deletions(-) diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java index 47491ee..96bf0ae 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/contract/CrmContractSaveReqVO.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.crm.framework.operatelog.core.CrmCustomerParseFun import cn.iocoder.yudao.module.crm.framework.operatelog.core.SysAdminUserParseFunction; import com.mzt.logapi.starter.annotation.DiffLogField; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; @@ -67,6 +68,7 @@ public class CrmContractSaveReqVO { @Schema(description = "合同金额", example = "5617") @DiffLogField(name = "合同金额") + @DecimalMin(value = "0", message = "合同金额不能小于 0") private BigDecimal totalPrice; @Schema(description = "客户签约人编号", example = "18546") diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java index d25d7c0..e11fd49 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java @@ -217,6 +217,10 @@ public class CrmContractServiceImpl implements CrmContractService { private void calculateTotalPrice(CrmContractDO contract, List contractProducts) { contract.setTotalProductPrice(getSumValue(contractProducts, CrmContractProductDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO)); + // 无产品明细的合同,合同金额以传入值为准(支持手工填写合同金额),不做重算覆盖 + if (CollUtil.isEmpty(contractProducts)) { + return; + } BigDecimal discountPrice = MoneyUtils.priceMultiplyPercent(contract.getTotalProductPrice(), contract.getDiscountPercent()); contract.setTotalPrice(contract.getTotalProductPrice().subtract(discountPrice)); } -- libgit2 0.21.4