From d5fe12ebd6c20374dadaf5d15966e4bcfa9bfd7d Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sat, 26 Sep 2026 13:54:45 +0800 Subject: [PATCH] fix(crm): 校验回款计划关联合同 --- yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java | 2 +- yudao-module-crm/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImplTest.java | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 yudao-module-crm/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImplTest.java diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java index 5005508..1c4b04c 100644 --- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java +++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java @@ -116,7 +116,7 @@ public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService { } // 校验合同存在 if (reqVO.getContractId() != null) { - CrmContractDO contract = contractService.getContract(reqVO.getContractId()); + CrmContractDO contract = contractService.validateContract(reqVO.getContractId()); reqVO.setCustomerId(contract.getCustomerId()); } } diff --git a/yudao-module-crm/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImplTest.java b/yudao-module-crm/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImplTest.java new file mode 100644 index 0000000..90e9c53 --- /dev/null +++ b/yudao-module-crm/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImplTest.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.crm.service.receivable; + +import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; +import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceivablePlanSaveReqVO; +import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; +import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; +import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivablePlanMapper; +import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; +import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import java.util.Objects; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTRACT_NOT_EXISTS; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.*; + +public class CrmReceivablePlanServiceImplTest extends BaseMockitoUnitTest { + + @InjectMocks + private CrmReceivablePlanServiceImpl receivablePlanService; + @Mock + private CrmReceivablePlanMapper receivablePlanMapper; + @Mock + private CrmContractService contractService; + @Mock + private CrmPermissionService permissionService; + @Mock + private AdminUserApi adminUserApi; + + @Test + public void testCreateReceivablePlan_contractNotExists() { + // 准备参数 + CrmReceivablePlanSaveReqVO reqVO = new CrmReceivablePlanSaveReqVO().setContractId(9L); + // mock 合同不存在 + when(contractService.validateContract(9L)).thenThrow(exception(CONTRACT_NOT_EXISTS)); + + // 调用,并断言异常 + assertServiceException(() -> receivablePlanService.createReceivablePlan(reqVO), CONTRACT_NOT_EXISTS); + // 断言未写入回款计划和数据权限 + verifyNoInteractions(receivablePlanMapper, permissionService); + } + + @Test + public void testCreateReceivablePlan_useContractCustomerId() { + // 准备参数:入参的客户编号应以合同为准 + CrmReceivablePlanSaveReqVO reqVO = new CrmReceivablePlanSaveReqVO() + .setContractId(9L).setCustomerId(999L); + // mock 合同 + when(contractService.validateContract(9L)).thenReturn(new CrmContractDO().setId(9L).setCustomerId(20L)); + + // 调用 + receivablePlanService.createReceivablePlan(reqVO); + // 断言 + verify(receivablePlanMapper).insert(argThat((CrmReceivablePlanDO row) -> + Objects.equals(row.getCustomerId(), 20L) && Objects.equals(row.getPeriod(), 1))); + } +} -- libgit2 0.21.4