From 301f497527edcc8a594dbc8fe79a91ab8eeec079 Mon Sep 17 00:00:00 2001
From: liuhongfeng <291117974@qq.com>
Date: Sat, 28 Oct 2023 00:37:47 +0800
Subject: [PATCH 1/5] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91?=
 =?UTF-8?q?=E5=9B=9E=E6=AC=BE=E8=AE=A1=E5=88=92-=E5=AE=A1=E6=89=B9?=
 =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E7=B1=BB=20=E3=80=90=E6=96=B0=E5=A2=9E?=
 =?UTF-8?q?=E3=80=91=E5=9B=9E=E6=AC=BE=E8=AE=A1=E5=88=92-=E5=9B=9E?=
 =?UTF-8?q?=E6=AC=BE=E6=96=B9=E5=BC=8F=E6=9E=9A=E4=B8=BE=E7=B1=BB=20?=
 =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91=E5=9B=9E=E6=AC=BE=E8=AE=A1?=
 =?UTF-8?q?=E5=88=92-=E6=9E=9A=E4=B8=BE=E7=B1=BB=E6=A0=A1=E9=AA=8C=20?=
 =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91=E5=9B=9E=E6=AC=BE=E8=AE=A1?=
 =?UTF-8?q?=E5=88=92-=E9=94=99=E8=AF=AF=E7=A0=81=E8=B0=83=E6=95=B4=20?=
 =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91=E4=BF=AE=E6=94=B9=E5=9B=9E?=
 =?UTF-8?q?=E6=AC=BE=E8=AE=A1=E5=88=92-=E5=88=9B=E5=BB=BA=E9=80=BB?=
 =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=90=88=E5=90=8C=E6=95=B0?=
 =?UTF-8?q?=E6=8D=AE=E7=9A=84=E6=A0=A1=E9=AA=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../module/crm/enums/AuditStatusEnum.java     | 61 +++++++++++++++++++
 .../module/crm/enums/ErrorCodeConstants.java  |  7 ++-
 .../module/crm/enums/ReturnTypeEnum.java      |  8 +++
 .../admin/receivable/vo/ReceivableBaseVO.java |  5 +-
 .../receivable/ReceivableServiceImpl.java     | 26 ++++++++
 5 files changed, 102 insertions(+), 5 deletions(-)
 create mode 100644 yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java
 create mode 100644 yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ReturnTypeEnum.java

diff --git a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java
new file mode 100644
index 000000000..ce04c18a1
--- /dev/null
+++ b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java
@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.crm.enums;
+
+import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
+
+import java.util.Arrays;
+
+/**
+ * 流程审批状态枚举类
+ * 0 未审核 1 审核通过 2 审核拒绝 3 审核中 4 已撤回
+ * @author 赤焰
+ */
+public enum AuditStatusEnum implements IntArrayValuable {
+    /**
+     * 未审批
+     */
+    AUDIT_NEW(0, "未审批"),
+    /**
+     * 审核通过
+     */
+	AUDIT_FINISH(0, "审核通过"),
+    /**
+     * 审核拒绝
+     */
+	AUDIT_REJECT(2, "审核拒绝"),
+    /**
+     * 审核中
+     */
+    AUDIT_DOING(3, "审核中"),
+	/**
+	 * 已撤回
+	 */
+	AUDIT_RETURN(4, "已撤回");
+
+    private final Integer value;
+    private final String desc;
+
+    public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AuditStatusEnum::getValue).toArray();
+
+    /**
+     *
+     * @param value
+     * @param desc
+     */
+    AuditStatusEnum(Integer value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    public Integer getValue() {
+        return value;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    @Override
+    public int[] array() {
+        return ARRAYS;
+    }
+}
diff --git a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
index 07d9b6d6a..ea0f2d51f 100644
--- a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
+++ b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
@@ -21,9 +21,10 @@ public interface ErrorCodeConstants {
     // ========== 联系人管理 1-020-003-000 ==========
     ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "联系人不存在");
 
-    // TODO @liuhongfeng:错误码分段;
-    ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_030_000_001, "回款管理不存在");
+    // ========== 回款管理 1-020-004-000 ==========
+    ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_020_004_000, "回款管理不存在");
 
-    ErrorCode RECEIVABLE_PLAN_NOT_EXISTS = new ErrorCode(1_040_000_001, "回款计划不存在");
+    // ========== 合同管理 1-020-005-000 ==========
+    ErrorCode RECEIVABLE_PLAN_NOT_EXISTS = new ErrorCode(1_020_005_000, "回款计划不存在");
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ReturnTypeEnum.java b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ReturnTypeEnum.java
new file mode 100644
index 000000000..d9ca477be
--- /dev/null
+++ b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ReturnTypeEnum.java
@@ -0,0 +1,8 @@
+package cn.iocoder.yudao.module.crm.enums;
+
+/**
+ * @author 赤焰
+ */
+
+public enum ReturnTypeEnum {
+}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
index bb0bc5745..8aa43e50b 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
@@ -1,5 +1,7 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -33,9 +35,8 @@ public class ReceivableBaseVO {
     @Schema(description = "合同ID", example = "30305")
     private Long contractId;
 
-    // TODO @liuhongfeng:这个字段,可以写个枚举,然后 InEnum 去校验下;
-    // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的
     @Schema(description = "审批状态", example = "1")
+    @InEnum(AuditStatusEnum.class)
     private Integer checkStatus;
 
     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
index 94b25f6ed..39de05fe1 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
@@ -2,14 +2,19 @@ package cn.iocoder.yudao.module.crm.service.receivable;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableCreateReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableExportReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableUpdateReqVO;
 import cn.iocoder.yudao.module.crm.convert.receivable.ReceivableConvert;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper;
+import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum;
+import cn.iocoder.yudao.module.crm.service.contract.ContractService;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -18,6 +23,7 @@ import java.util.Collection;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTRACT_NOT_EXISTS;
 import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.RECEIVABLE_NOT_EXISTS;
 
 /**
@@ -31,6 +37,8 @@ public class ReceivableServiceImpl implements ReceivableService {
 
     @Resource
     private ReceivableMapper receivableMapper;
+    @Resource
+    private ContractService contractService;
 
     @Override
     public Long createReceivable(ReceivableCreateReqVO createReqVO) {
@@ -38,11 +46,29 @@ public class ReceivableServiceImpl implements ReceivableService {
         // TODO @liuhongfeng:其它类似 customerId、contractId 也需要去校验;
         // 插入
         ReceivableDO receivable = ReceivableConvert.INSTANCE.convert(createReqVO);
+
+        receivable.setCheckStatus(AuditStatusEnum.AUDIT_NEW.getValue());
+        //校验
+        checkReceivable(receivable);
+
         receivableMapper.insert(receivable);
         // 返回
         return receivable.getId();
     }
 
+    private void checkReceivable(ReceivableDO receivable) {
+
+        if(ObjectUtil.isNull(receivable.getContractId())){
+            throw exception(CONTRACT_NOT_EXISTS);
+        }
+
+        ContractDO contract = contractService.getContract(receivable.getContractId());
+        if(ObjectUtil.isNull(contract)){
+            throw exception(CONTRACT_NOT_EXISTS);
+        }
+
+    }
+
     @Override
     public void updateReceivable(ReceivableUpdateReqVO updateReqVO) {
         // 校验存在

From 677e8ab2fc0c50185425ba24b90d0049099ab027 Mon Sep 17 00:00:00 2001
From: liuhongfeng <291117974@qq.com>
Date: Sun, 29 Oct 2023 18:00:34 +0800
Subject: [PATCH 2/5] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91?=
 =?UTF-8?q?=E5=9B=9E=E6=AC=BE=E8=AE=A1=E5=88=92-=E4=BF=AE=E6=94=B9?=
 =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=20=E3=80=90=E4=BF=AE?=
 =?UTF-8?q?=E6=94=B9=E3=80=91=E4=BF=AE=E6=94=B9=E5=9B=9E=E6=AC=BE=E8=AE=A1?=
 =?UTF-8?q?=E5=88=92-=E5=88=9B=E5=BB=BA=E9=80=BB=E8=BE=91=EF=BC=8C?=
 =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=A2=E6=88=B7=E7=9A=84=E6=95=B0=E6=8D=AE?=
 =?UTF-8?q?=E6=A0=A1=E9=AA=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../module/crm/enums/AuditStatusEnum.java     |  2 +-
 .../receivable/vo/ReceivablePlanBaseVO.java   |  2 +-
 .../receivable/vo/ReceivablePlanExcelVO.java  |  2 +-
 .../vo/ReceivablePlanExportReqVO.java         |  2 +-
 .../vo/ReceivablePlanPageReqVO.java           |  2 +-
 .../receivable/ReceivablePlanDO.java          |  2 +-
 .../receivable/ReceivablePlanServiceImpl.java | 39 +++++++++++++++++--
 .../receivable/ReceivableServiceImpl.java     | 21 ++++++++--
 8 files changed, 59 insertions(+), 13 deletions(-)

diff --git a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java
index ce04c18a1..6cc1012b6 100644
--- a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java
+++ b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/AuditStatusEnum.java
@@ -17,7 +17,7 @@ public enum AuditStatusEnum implements IntArrayValuable {
     /**
      * 审核通过
      */
-	AUDIT_FINISH(0, "审核通过"),
+	AUDIT_FINISH(1, "审核通过"),
     /**
      * 审核拒绝
      */
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
index 59f333e4b..53572e2c4 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
@@ -31,7 +31,7 @@ public class ReceivablePlanBaseVO {
     // TODO @liuhongfeng:这个字段,可以写个枚举,然后 InEnum 去校验下;
     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的
     @Schema(description = "审批状态", example = "1")
-    private String checkStatus;
+    private Integer checkStatus;
 
     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面;
     @Schema(description = "工作流编号", example = "8909")
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
index e12d5a1df..d08cfc6a7 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
@@ -37,7 +37,7 @@ public class ReceivablePlanExcelVO {
 
     @ExcelProperty(value = "审批状态", converter = DictConvert.class)
     @DictFormat("crm_receivable_check_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
-    private String checkStatus;
+    private Integer checkStatus;
 
     //@ExcelProperty("工作流编号")
     //private Long processInstanceId;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
index ca5d3f553..e68427d29 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
@@ -20,7 +20,7 @@ public class ReceivablePlanExportReqVO {
     private Integer status;
 
     @Schema(description = "审批状态", example = "1")
-    private String checkStatus;
+    private Integer checkStatus;
 
     @Schema(description = "计划回款日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
index 2d0e7d5ae..acd4d5aa4 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
@@ -26,7 +26,7 @@ public class ReceivablePlanPageReqVO extends PageParam {
     private Integer status;
 
     @Schema(description = "审批状态", example = "1")
-    private String checkStatus;
+    private Integer checkStatus;
 
     @Schema(description = "计划回款日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
index 4447df053..0c6f6e033 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
@@ -49,7 +49,7 @@ public class ReceivablePlanDO extends BaseDO {
      *
      * 枚举 {@link TODO crm_receivable_check_status 对应的类}
      */
-    private String checkStatus;
+    private Integer checkStatus;
     /**
      * 工作流编号
      */
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImpl.java
index c0b236ac0..f8493a1ec 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImpl.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImpl.java
@@ -10,8 +10,14 @@ import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlan
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanPageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanUpdateReqVO;
 import cn.iocoder.yudao.module.crm.convert.receivable.ReceivablePlanConvert;
+import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivablePlanMapper;
+import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum;
+import cn.iocoder.yudao.module.crm.service.contract.ContractService;
+import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -20,7 +26,7 @@ import java.util.Collection;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.RECEIVABLE_PLAN_NOT_EXISTS;
+import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
 
 /**
  * 回款计划 Service 实现类
@@ -33,20 +39,47 @@ public class ReceivablePlanServiceImpl implements ReceivablePlanService {
 
     @Resource
     private ReceivablePlanMapper receivablePlanMapper;
+    @Resource
+    private ContractService contractService;
+    @Resource
+    private CrmCustomerService crmCustomerService;
 
     @Override
     public Long createReceivablePlan(ReceivablePlanCreateReqVO createReqVO) {
         // 插入
         ReceivablePlanDO receivablePlan = ReceivablePlanConvert.INSTANCE.convert(createReqVO);
-        // TODO @liuhongfeng:空格要注释;if (ObjectUtil.isNull(receivablePlan.getStatus())) {
-        if(ObjectUtil.isNull(receivablePlan.getStatus())){
+        if (ObjectUtil.isNull(receivablePlan.getStatus())){
             receivablePlan.setStatus(CommonStatusEnum.ENABLE.getStatus());
         }
+        if (ObjectUtil.isNull(receivablePlan.getCheckStatus())){
+            receivablePlan.setCheckStatus(AuditStatusEnum.AUDIT_NEW.getValue());
+        }
+
+        checkReceivablePlan(receivablePlan);
+
         receivablePlanMapper.insert(receivablePlan);
         // 返回
         return receivablePlan.getId();
     }
 
+    private void checkReceivablePlan(ReceivablePlanDO receivablePlan) {
+
+        if(ObjectUtil.isNull(receivablePlan.getContractId())){
+            throw exception(CONTRACT_NOT_EXISTS);
+        }
+
+        ContractDO contract = contractService.getContract(receivablePlan.getContractId());
+        if(ObjectUtil.isNull(contract)){
+            throw exception(CONTRACT_NOT_EXISTS);
+        }
+
+        CrmCustomerDO customer = crmCustomerService.getCustomer(receivablePlan.getCustomerId());
+        if(ObjectUtil.isNull(customer)){
+            throw exception(CUSTOMER_NOT_EXISTS);
+        }
+
+    }
+
     @Override
     public void updateReceivablePlan(ReceivablePlanUpdateReqVO updateReqVO) {
         // 校验存在
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
index 39de05fe1..cf216d4d2 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableCreateReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableExportReqVO;
@@ -11,10 +12,12 @@ import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePage
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableUpdateReqVO;
 import cn.iocoder.yudao.module.crm.convert.receivable.ReceivableConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper;
 import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum;
 import cn.iocoder.yudao.module.crm.service.contract.ContractService;
+import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
@@ -23,8 +26,7 @@ import java.util.Collection;
 import java.util.List;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTRACT_NOT_EXISTS;
-import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.RECEIVABLE_NOT_EXISTS;
+import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
 
 /**
  * 回款管理 Service 实现类
@@ -39,15 +41,21 @@ public class ReceivableServiceImpl implements ReceivableService {
     private ReceivableMapper receivableMapper;
     @Resource
     private ContractService contractService;
+    @Resource
+    private CrmCustomerService crmCustomerService;
 
     @Override
     public Long createReceivable(ReceivableCreateReqVO createReqVO) {
         // TODO @liuhongfeng:planId 是否存在,是否合法,需要去校验;
-        // TODO @liuhongfeng:其它类似 customerId、contractId 也需要去校验;
         // 插入
         ReceivableDO receivable = ReceivableConvert.INSTANCE.convert(createReqVO);
+        if (ObjectUtil.isNull(receivable.getStatus())){
+            receivable.setStatus(CommonStatusEnum.ENABLE.getStatus());
+        }
+        if (ObjectUtil.isNull(receivable.getCheckStatus())){
+            receivable.setCheckStatus(AuditStatusEnum.AUDIT_NEW.getValue());
+        }
 
-        receivable.setCheckStatus(AuditStatusEnum.AUDIT_NEW.getValue());
         //校验
         checkReceivable(receivable);
 
@@ -67,6 +75,11 @@ public class ReceivableServiceImpl implements ReceivableService {
             throw exception(CONTRACT_NOT_EXISTS);
         }
 
+        CrmCustomerDO customer = crmCustomerService.getCustomer(receivable.getCustomerId());
+        if(ObjectUtil.isNull(customer)){
+            throw exception(CUSTOMER_NOT_EXISTS);
+        }
+
     }
 
     @Override

From 921c2ab7571b3dc84cb1dff808a1f469d35178b4 Mon Sep 17 00:00:00 2001
From: liuhongfeng <291117974@qq.com>
Date: Mon, 30 Oct 2023 21:33:28 +0800
Subject: [PATCH 3/5] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91?=
 =?UTF-8?q?=E8=B4=9F=E8=B4=A3=E4=BA=BA=20=E3=80=90=E4=BF=AE=E6=94=B9?=
 =?UTF-8?q?=E3=80=91=E8=A7=84=E8=8C=83=E5=91=BD=E5=90=8D=EF=BC=9A=E6=9C=9F?=
 =?UTF-8?q?=E6=95=B0=EF=BC=9AindexNo-=E3=80=8Bperiod?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 sql/mysql/crm.sql                                |  2 +-
 .../receivable/vo/ReceivablePlanBaseVO.java      |  2 +-
 .../receivable/vo/ReceivablePlanExcelVO.java     |  8 ++------
 .../receivable/vo/ReceivablePlanExportReqVO.java |  5 ++---
 .../receivable/vo/ReceivablePlanPageReqVO.java   |  2 +-
 .../dataobject/receivable/ReceivablePlanDO.java  |  8 +++-----
 .../mysql/receivable/ReceivablePlanMapper.java   |  4 ++--
 .../ReceivablePlanServiceImplTest.java           | 16 ++++++++--------
 8 files changed, 20 insertions(+), 27 deletions(-)

diff --git a/sql/mysql/crm.sql b/sql/mysql/crm.sql
index de7922d24..8c662c238 100644
--- a/sql/mysql/crm.sql
+++ b/sql/mysql/crm.sql
@@ -41,7 +41,7 @@ CREATE TABLE `crm_receivable`  (
 DROP TABLE IF EXISTS `crm_receivable_plan`;
 CREATE TABLE `crm_receivable_plan`  (
     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
-    `index_no` bigint(20) NULL DEFAULT NULL COMMENT '期数',
+    `period` tinyint(4) DEFAULT NULL COMMENT '期数',
     `receivable_id` bigint(20) NULL DEFAULT NULL COMMENT '回款ID',
     `status` tinyint(4) NOT NULL COMMENT '完成状态',
     `check_status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批状态',
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
index 53572e2c4..b5ba20296 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
@@ -18,7 +18,7 @@ public class ReceivablePlanBaseVO {
 
     // TODO 芋艿:这个字段,在想想命名;
     @Schema(description = "期数")
-    private Long indexNo;
+    private Integer period;
 
     // TODO @liuhongfeng:中英文之间,有个空格,这样更干净;
     @Schema(description = "回款ID", example = "19852")
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
index d08cfc6a7..0a3b2b7f8 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
@@ -1,13 +1,9 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
-import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
+
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
 
 import com.alibaba.excel.annotation.ExcelProperty;
 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
@@ -26,7 +22,7 @@ public class ReceivablePlanExcelVO {
     private Long id;
 
     @ExcelProperty("期数")
-    private Long indexNo;
+    private Integer period;
 
     @ExcelProperty("回款ID")
     private Long receivableId;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
index e68427d29..a9b505fe2 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
@@ -1,9 +1,8 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
 import lombok.*;
-import java.util.*;
 import io.swagger.v3.oas.annotations.media.Schema;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
+
 import java.time.LocalDateTime;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -14,7 +13,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 public class ReceivablePlanExportReqVO {
 
     @Schema(description = "期数")
-    private Long indexNo;
+    private Integer period;
 
     @Schema(description = "完成状态", example = "2")
     private Integer status;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
index acd4d5aa4..37c0446c3 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
@@ -20,7 +20,7 @@ public class ReceivablePlanPageReqVO extends PageParam {
     // TODO 芋艿:筛选字段,需要去掉几个,在想想;
 
     @Schema(description = "期数")
-    private Long indexNo;
+    private Integer period;
 
     @Schema(description = "完成状态", example = "2")
     private Integer status;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
index 0c6f6e033..56ef67962 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
@@ -1,12 +1,10 @@
 package cn.iocoder.yudao.module.crm.dal.dataobject.receivable;
 
 import lombok.*;
-import java.util.*;
+
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
+
 import com.baomidou.mybatisplus.annotation.*;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 
@@ -33,7 +31,7 @@ public class ReceivablePlanDO extends BaseDO {
     /**
      * 期数
      */
-    private Long indexNo;
+    private Integer period;
     /**
      * 回款ID
      */
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
index ac35133a7..3251c6787 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
@@ -19,7 +19,7 @@ public interface ReceivablePlanMapper extends BaseMapperX<ReceivablePlanDO> {
 
     default PageResult<ReceivablePlanDO> selectPage(ReceivablePlanPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<ReceivablePlanDO>()
-                .eqIfPresent(ReceivablePlanDO::getIndexNo, reqVO.getIndexNo())
+                .eqIfPresent(ReceivablePlanDO::getPeriod, reqVO.getPeriod())
                 .eqIfPresent(ReceivablePlanDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(ReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus())
                 .betweenIfPresent(ReceivablePlanDO::getReturnTime, reqVO.getReturnTime())
@@ -35,7 +35,7 @@ public interface ReceivablePlanMapper extends BaseMapperX<ReceivablePlanDO> {
 
     default List<ReceivablePlanDO> selectList(ReceivablePlanExportReqVO reqVO) {
         return selectList(new LambdaQueryWrapperX<ReceivablePlanDO>()
-                .eqIfPresent(ReceivablePlanDO::getIndexNo, reqVO.getIndexNo())
+                .eqIfPresent(ReceivablePlanDO::getPeriod, reqVO.getPeriod())
                 .eqIfPresent(ReceivablePlanDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(ReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus())
                 .betweenIfPresent(ReceivablePlanDO::getReturnTime, reqVO.getReturnTime())
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
index 3739481c0..4f9fb8d26 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
@@ -107,7 +107,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
     public void testGetReceivablePlanPage() {
        // mock 数据
        ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class, o -> { // 等会查询到
-           o.setIndexNo(null);
+           o.setPeriod(null);
            o.setStatus(null);
            o.setCheckStatus(null);
            o.setReturnTime(null);
@@ -120,8 +120,8 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
            o.setCreateTime(null);
        });
        receivablePlanMapper.insert(dbReceivablePlan);
-       // 测试 indexNo 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setIndexNo(null)));
+       // 测试 Period 不匹配
+       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null)));
        // 测试 status 不匹配
        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null)));
        // 测试 checkStatus 不匹配
@@ -144,7 +144,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null)));
        // 准备参数
        ReceivablePlanPageReqVO reqVO = new ReceivablePlanPageReqVO();
-       reqVO.setIndexNo(null);
+       reqVO.setPeriod(null);
        reqVO.setStatus(null);
        reqVO.setCheckStatus(null);
        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
@@ -169,7 +169,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
     public void testGetReceivablePlanList() {
        // mock 数据
        ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class, o -> { // 等会查询到
-           o.setIndexNo(null);
+           o.setPeriod(null);
            o.setStatus(null);
            o.setCheckStatus(null);
            o.setReturnTime(null);
@@ -182,8 +182,8 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
            o.setCreateTime(null);
        });
        receivablePlanMapper.insert(dbReceivablePlan);
-       // 测试 indexNo 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setIndexNo(null)));
+       // 测试 Period 不匹配
+       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null)));
        // 测试 status 不匹配
        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null)));
        // 测试 checkStatus 不匹配
@@ -206,7 +206,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null)));
        // 准备参数
        ReceivablePlanExportReqVO reqVO = new ReceivablePlanExportReqVO();
-       reqVO.setIndexNo(null);
+       reqVO.setPeriod(null);
        reqVO.setStatus(null);
        reqVO.setCheckStatus(null);
        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));

From f1f180ff77963f837acac390e94690cefcd05f95 Mon Sep 17 00:00:00 2001
From: liuhongfeng <291117974@qq.com>
Date: Tue, 31 Oct 2023 00:35:41 +0800
Subject: [PATCH 4/5] =?UTF-8?q?=E3=80=90=E6=96=B0=E5=A2=9E=E3=80=91?=
 =?UTF-8?q?=E5=AD=97=E5=85=B8=E5=BD=92=E7=B1=BB=20=E3=80=90=E4=BF=AE?=
 =?UTF-8?q?=E6=94=B9=E3=80=91=E8=A7=84=E8=8C=83=E5=AE=9E=E4=BD=93=E5=91=BD?=
 =?UTF-8?q?=E5=90=8D=E5=92=8C=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B=E4=BF=AE?=
 =?UTF-8?q?=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../module/crm/enums/DictTypeConstants.java   |  1 +
 .../admin/receivable/vo/ReceivableBaseVO.java | 33 ++++---------------
 .../receivable/vo/ReceivableExcelVO.java      | 20 ++++-------
 .../receivable/vo/ReceivableExportReqVO.java  | 21 +++---------
 .../receivable/vo/ReceivablePageReqVO.java    | 24 ++------------
 .../receivable/vo/ReceivablePlanBaseVO.java   | 30 ++++++-----------
 .../receivable/vo/ReceivablePlanExcelVO.java  | 13 ++++----
 .../vo/ReceivablePlanExportReqVO.java         |  6 ++--
 .../vo/ReceivablePlanPageReqVO.java           | 15 ++-------
 .../dataobject/receivable/ReceivableDO.java   | 17 +++++-----
 .../receivable/ReceivablePlanDO.java          | 12 +++----
 .../mysql/receivable/ReceivableMapper.java    | 10 ------
 .../receivable/ReceivablePlanMapper.java      |  3 --
 .../receivable/ReceivableServiceImpl.java     |  9 ++++-
 .../ReceivablePlanServiceImplTest.java        |  3 --
 .../receivable/ReceivableServiceImplTest.java | 10 ------
 16 files changed, 64 insertions(+), 163 deletions(-)

diff --git a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/DictTypeConstants.java b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/DictTypeConstants.java
index 0e412ee9b..71f550775 100644
--- a/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/DictTypeConstants.java
+++ b/yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/DictTypeConstants.java
@@ -11,5 +11,6 @@ public interface DictTypeConstants {
     String CRM_CUSTOMER_INDUSTRY = "crm_customer_industry"; // CRM 客户所属行业
     String CRM_CUSTOMER_LEVEL = "crm_customer_level"; // CRM 客户等级
     String CRM_CUSTOMER_SOURCE = "crm_customer_source"; // CRM 客户来源
+    String CRM_RECEIVABLE_CHECK_STATUS = "crm_receivable_check_status"; // CRM 审批状态
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
index 8aa43e50b..1e7e7bd68 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
@@ -19,30 +19,22 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 public class ReceivableBaseVO {
 
-    // TODO @liuhongfeng:部分缺少 example 的字段,要补充下;
-    // TODO @liuhongfeng:部分字段,需要必传,要写 requiredMode = Schema.RequiredMode.REQUIRED,以及对应的 validator 非空校验
-
-    @Schema(description = "回款编号")
+    @Schema(description = "回款编号",requiredMode = Schema.RequiredMode.REQUIRED, example = "31177")
     private String no;
 
-    // TODO @liuhongfeng:中英文之间,有个空格,这样更干净;
-    @Schema(description = "回款计划ID", example = "31177")
+    @Schema(description = "回款计划", example = "31177")
     private Long planId;
 
-    @Schema(description = "客户ID", example = "4963")
+    @Schema(description = "客户名称", example = "4963")
     private Long customerId;
 
-    @Schema(description = "合同ID", example = "30305")
+    @Schema(description = "合同名称", example = "30305")
     private Long contractId;
 
     @Schema(description = "审批状态", example = "1")
     @InEnum(AuditStatusEnum.class)
     private Integer checkStatus;
 
-    // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面;
-    @Schema(description = "工作流编号", example = "16568")
-    private Long processInstanceId;
-
     @Schema(description = "回款日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime returnTime;
@@ -50,9 +42,8 @@ public class ReceivableBaseVO {
     @Schema(description = "回款方式", example = "2")
     private String returnType;
 
-    // TODO @liuhongfeng:使用 Int 哈,分;
     @Schema(description = "回款金额", example = "31859")
-    private BigDecimal price;
+    private Integer price;
 
     @Schema(description = "负责人", example = "22202")
     private Long ownerUserId;
@@ -63,19 +54,7 @@ public class ReceivableBaseVO {
     @Schema(description = "显示顺序")
     private Integer sort;
 
-    // TODO @芋艿:这个字段在看看;dataScope、dataScopeDeptIds
-    @Schema(description = "数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)")
-    private Integer dataScope;
-
-    @Schema(description = "数据范围(指定部门数组)")
-    private String dataScopeDeptIds;
-
-    // TODO @liuhongfeng:这个字段,这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面;
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "状态不能为空")
-    private Integer status;
-
-    @Schema(description = "备注", example = "随便")
+    @Schema(description = "备注", example = "备注")
     private String remark;
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExcelVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExcelVO.java
index b525341d3..a88fa9fd9 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExcelVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExcelVO.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
+import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.util.*;
@@ -30,14 +31,14 @@ public class ReceivableExcelVO {
     @ExcelProperty("回款计划ID")
     private Long planId;
 
-    @ExcelProperty("客户ID")
+    @ExcelProperty("客户名称")
     private Long customerId;
 
-    @ExcelProperty("合同ID")
+    @ExcelProperty("合同名称")
     private Long contractId;
 
     @ExcelProperty(value = "审批状态", converter = DictConvert.class)
-    @DictFormat("crm_receivable_check_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
+    @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_RECEIVABLE_CHECK_STATUS)
     private Integer checkStatus;
 
     @ExcelProperty("工作流编号")
@@ -50,7 +51,7 @@ public class ReceivableExcelVO {
     private String returnType;
 
     @ExcelProperty("回款金额")
-    private BigDecimal price;
+    private Integer price;
 
     @ExcelProperty("负责人")
     private Long ownerUserId;
@@ -58,17 +59,8 @@ public class ReceivableExcelVO {
     @ExcelProperty("批次")
     private Long batchId;
 
-    //@ExcelProperty("显示顺序")
-    //private Integer sort;
-
-    //@ExcelProperty("数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)")
-    //private Integer dataScope;
-
-    //@ExcelProperty("数据范围(指定部门数组)")
-    //private String dataScopeDeptIds;
-
     @ExcelProperty(value = "状态", converter = DictConvert.class)
-    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
+    @DictFormat(DictTypeConstants.COMMON_STATUS)
     private Integer status;
 
     @ExcelProperty("备注")
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExportReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExportReqVO.java
index 4a9a033f3..f07e4ddf8 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExportReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExportReqVO.java
@@ -4,7 +4,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -19,21 +18,18 @@ public class ReceivableExportReqVO {
     @Schema(description = "回款编号")
     private String no;
 
-    @Schema(description = "回款计划ID", example = "31177")
+    @Schema(description = "回款计划", example = "31177")
     private Long planId;
 
-    @Schema(description = "客户ID", example = "4963")
+    @Schema(description = "客户名称", example = "4963")
     private Long customerId;
 
-    @Schema(description = "合同ID", example = "30305")
+    @Schema(description = "合同名称", example = "30305")
     private Long contractId;
 
     @Schema(description = "审批状态", example = "1")
     private Integer checkStatus;
 
-    @Schema(description = "工作流编号", example = "16568")
-    private Long processInstanceId;
-
     @Schema(description = "回款日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] returnTime;
@@ -42,7 +38,7 @@ public class ReceivableExportReqVO {
     private String returnType;
 
     @Schema(description = "回款金额", example = "31859")
-    private BigDecimal price;
+    private Integer price;
 
     @Schema(description = "负责人", example = "22202")
     private Long ownerUserId;
@@ -50,15 +46,6 @@ public class ReceivableExportReqVO {
     @Schema(description = "批次", example = "2539")
     private Long batchId;
 
-    @Schema(description = "显示顺序")
-    private Integer sort;
-
-    @Schema(description = "数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)")
-    private Integer dataScope;
-
-    @Schema(description = "数据范围(指定部门数组)")
-    private String dataScopeDeptIds;
-
     @Schema(description = "状态", example = "1")
     private Integer status;
 
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePageReqVO.java
index ba4775535..53cdc4949 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePageReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePageReqVO.java
@@ -18,25 +18,21 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class ReceivablePageReqVO extends PageParam {
 
-    // TODO @liuhongfeng:目前就使用 no 检索即可;
     @Schema(description = "回款编号")
     private String no;
 
     @Schema(description = "回款计划ID", example = "31177")
     private Long planId;
 
-    @Schema(description = "客户ID", example = "4963")
+    @Schema(description = "客户名称", example = "4963")
     private Long customerId;
 
-    @Schema(description = "合同ID", example = "30305")
+    @Schema(description = "合同名称", example = "30305")
     private Long contractId;
 
     @Schema(description = "审批状态", example = "1")
     private Integer checkStatus;
 
-    @Schema(description = "工作流编号", example = "16568")
-    private Long processInstanceId;
-
     @Schema(description = "回款日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] returnTime;
@@ -45,29 +41,15 @@ public class ReceivablePageReqVO extends PageParam {
     private String returnType;
 
     @Schema(description = "回款金额", example = "31859")
-    private BigDecimal price;
+    private Integer price;
 
     @Schema(description = "负责人", example = "22202")
     private Long ownerUserId;
 
-    @Schema(description = "批次", example = "2539")
-    private Long batchId;
-
-    @Schema(description = "显示顺序")
-    private Integer sort;
-
-    @Schema(description = "数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)")
-    private Integer dataScope;
-
-    @Schema(description = "数据范围(指定部门数组)")
-    private String dataScopeDeptIds;
 
     @Schema(description = "状态", example = "1")
     private Integer status;
 
-    @Schema(description = "备注", example = "随便")
-    private String remark;
-
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
index b5ba20296..2bd05a64a 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
@@ -1,10 +1,11 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -16,57 +17,46 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 public class ReceivablePlanBaseVO {
 
-    // TODO 芋艿:这个字段,在想想命名;
-    @Schema(description = "期数")
+    @Schema(description = "期数", example = "1")
     private Integer period;
 
-    // TODO @liuhongfeng:中英文之间,有个空格,这样更干净;
-    @Schema(description = "回款ID", example = "19852")
+    @Schema(description = "回款计划", example = "19852")
     private Long receivableId;
 
     @Schema(description = "完成状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
-    //@NotNull(message = "完成状态不能为空")
     private Integer status;
 
-    // TODO @liuhongfeng:这个字段,可以写个枚举,然后 InEnum 去校验下;
-    // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的
     @Schema(description = "审批状态", example = "1")
+    @InEnum(AuditStatusEnum.class)
     private Integer checkStatus;
 
-    // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面;
-    @Schema(description = "工作流编号", example = "8909")
-    private Long processInstanceId;
-
-    // TODO @liuhongfeng:使用 Int 哈,分;
     @Schema(description = "计划回款金额", example = "29675")
-    private BigDecimal price;
+    private Integer price;
 
     @Schema(description = "计划回款日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime returnTime;
 
-    // TODO @liuhongfeng:这个字段,Integer
     @Schema(description = "提前几天提醒")
-    private Long remindDays;
+    private Integer remindDays;
 
     @Schema(description = "提醒日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime remindTime;
 
-    @Schema(description = "客户ID", example = "18026")
+    @Schema(description = "客户名称", example = "18026")
     private Long customerId;
 
-    @Schema(description = "合同ID", example = "3473")
+    @Schema(description = "合同名称", example = "3473")
     private Long contractId;
 
-    // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面;
     @Schema(description = "负责人", example = "17828")
     private Long ownerUserId;
 
     @Schema(description = "显示顺序")
     private Integer sort;
 
-    @Schema(description = "备注", example = "随便")
+    @Schema(description = "备注", example = "备注")
     private String remark;
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
index e6646aa2d..2ff3fd0d3 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
+import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 import lombok.*;
 
 import java.math.BigDecimal;
@@ -27,25 +28,25 @@ public class ReceivablePlanExcelVO {
     @ExcelProperty("回款ID")
     private Long receivableId;
 
-    @ExcelProperty(value = "完成状态", converter = DictConvert.class)
-    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat(DictTypeConstants.COMMON_STATUS)
     private Integer status;
 
     @ExcelProperty(value = "审批状态", converter = DictConvert.class)
-    @DictFormat("crm_receivable_check_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
+    @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_RECEIVABLE_CHECK_STATUS)
     private Integer checkStatus;
 
     //@ExcelProperty("工作流编号")
     //private Long processInstanceId;
 
     @ExcelProperty("计划回款金额")
-    private BigDecimal price;
+    private Integer price;
 
     @ExcelProperty("计划回款日期")
     private LocalDateTime returnTime;
 
     @ExcelProperty("提前几天提醒")
-    private Long remindDays;
+    private Integer remindDays;
 
     @ExcelProperty("提醒日期")
     private LocalDateTime remindTime;
@@ -53,7 +54,7 @@ public class ReceivablePlanExcelVO {
     @ExcelProperty("客户ID")
     private Long customerId;
 
-    @ExcelProperty("合同ID")
+    @ExcelProperty("合同名称")
     private Long contractId;
 
     @ExcelProperty("负责人")
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
index 694deb8fc..803e1ed03 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
@@ -26,16 +26,16 @@ public class ReceivablePlanExportReqVO {
     private LocalDateTime[] returnTime;
 
     @Schema(description = "提前几天提醒")
-    private Long remindDays;
+    private Integer remindDays;
 
     @Schema(description = "提醒日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] remindTime;
 
-    @Schema(description = "客户ID", example = "18026")
+    @Schema(description = "客户名称", example = "18026")
     private Long customerId;
 
-    @Schema(description = "合同ID", example = "3473")
+    @Schema(description = "合同名称", example = "3473")
     private Long contractId;
 
     @Schema(description = "负责人", example = "17828")
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
index c445bee50..c92b4e891 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
@@ -17,11 +17,6 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class ReceivablePlanPageReqVO extends PageParam {
 
-    // TODO 芋艿:筛选字段,需要去掉几个,在想想;
-
-    @Schema(description = "期数")
-    private Integer period;
-
     @Schema(description = "完成状态", example = "2")
     private Integer status;
 
@@ -32,25 +27,19 @@ public class ReceivablePlanPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] returnTime;
 
-    @Schema(description = "提前几天提醒")
-    private Long remindDays;
-
     @Schema(description = "提醒日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] remindTime;
 
-    @Schema(description = "客户ID", example = "18026")
+    @Schema(description = "客户名称", example = "18026")
     private Long customerId;
 
-    @Schema(description = "合同ID", example = "3473")
+    @Schema(description = "合同名称", example = "3473")
     private Long contractId;
 
     @Schema(description = "负责人", example = "17828")
     private Long ownerUserId;
 
-    @Schema(description = "备注", example = "随便")
-    private String remark;
-
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivableDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivableDO.java
index d80f76a91..0cf2423de 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivableDO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivableDO.java
@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.*;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 /**
@@ -34,27 +33,26 @@ public class ReceivableDO extends BaseDO {
      */
     private String no;
     /**
-     * 回款计划ID
+     * 回款计划
      *
-     * TODO @liuhongfeng:这个字段,后续要写下关联的实体哈
+     * 对应实体 {@link cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO}
      */
     private Long planId;
     /**
      * 客户ID
      *
-     * TODO @liuhongfeng:这个字段,后续要写下关联的实体哈
+     * 对应实体 {@link cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO}
      */
     private Long customerId;
     /**
      * 合同ID
      *
-     * TODO @liuhongfeng:这个字段,后续要写下关联的实体哈
+     * 对应实体 {@link cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO}
      */
     private Long contractId;
     /**
      * 审批状态
-     *
-     * 枚举 {@link TODO crm_receivable_check_status 对应的类}
+     * 对应字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants#CRM_RECEIVABLE_CHECK_STATUS}
      */
     private Integer checkStatus;
     /**
@@ -74,7 +72,7 @@ public class ReceivableDO extends BaseDO {
     /**
      * 回款金额
      */
-    private BigDecimal price;
+    private Integer price;
     /**
      * 负责人
      */
@@ -99,7 +97,8 @@ public class ReceivableDO extends BaseDO {
     /**
      * 状态
      *
-     * 枚举 {@link TODO common_status 对应的类}
+     * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum}
+     *
      */
     private Integer status;
     /**
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
index 56ef67962..caaee7211 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
@@ -37,15 +37,15 @@ public class ReceivablePlanDO extends BaseDO {
      */
     private Long receivableId;
     /**
-     * 完成状态
+     * 状态
+     *
+     * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum}
      *
-     * 枚举 {@link TODO common_status 对应的类}
      */
     private Integer status;
     /**
      * 审批状态
-     *
-     * 枚举 {@link TODO crm_receivable_check_status 对应的类}
+     * 对应字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants#CRM_RECEIVABLE_CHECK_STATUS}
      */
     private Integer checkStatus;
     /**
@@ -55,7 +55,7 @@ public class ReceivablePlanDO extends BaseDO {
     /**
      * 计划回款金额
      */
-    private BigDecimal price;
+    private Integer price;
     /**
      * 计划回款日期
      */
@@ -63,7 +63,7 @@ public class ReceivablePlanDO extends BaseDO {
     /**
      * 提前几天提醒
      */
-    private Long remindDays;
+    private Integer remindDays;
     /**
      * 提醒日期
      */
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java
index 08031772c..0ef7165f4 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java
@@ -24,17 +24,11 @@ public interface ReceivableMapper extends BaseMapperX<ReceivableDO> {
                 .eqIfPresent(ReceivableDO::getCustomerId, reqVO.getCustomerId())
                 .eqIfPresent(ReceivableDO::getContractId, reqVO.getContractId())
                 .eqIfPresent(ReceivableDO::getCheckStatus, reqVO.getCheckStatus())
-                .eqIfPresent(ReceivableDO::getProcessInstanceId, reqVO.getProcessInstanceId())
                 .betweenIfPresent(ReceivableDO::getReturnTime, reqVO.getReturnTime())
                 .eqIfPresent(ReceivableDO::getReturnType, reqVO.getReturnType())
                 .eqIfPresent(ReceivableDO::getPrice, reqVO.getPrice())
                 .eqIfPresent(ReceivableDO::getOwnerUserId, reqVO.getOwnerUserId())
-                .eqIfPresent(ReceivableDO::getBatchId, reqVO.getBatchId())
-                .eqIfPresent(ReceivableDO::getSort, reqVO.getSort())
-                .eqIfPresent(ReceivableDO::getDataScope, reqVO.getDataScope())
-                .eqIfPresent(ReceivableDO::getDataScopeDeptIds, reqVO.getDataScopeDeptIds())
                 .eqIfPresent(ReceivableDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(ReceivableDO::getRemark, reqVO.getRemark())
                 .betweenIfPresent(ReceivableDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(ReceivableDO::getId));
     }
@@ -46,15 +40,11 @@ public interface ReceivableMapper extends BaseMapperX<ReceivableDO> {
                 .eqIfPresent(ReceivableDO::getCustomerId, reqVO.getCustomerId())
                 .eqIfPresent(ReceivableDO::getContractId, reqVO.getContractId())
                 .eqIfPresent(ReceivableDO::getCheckStatus, reqVO.getCheckStatus())
-                .eqIfPresent(ReceivableDO::getProcessInstanceId, reqVO.getProcessInstanceId())
                 .betweenIfPresent(ReceivableDO::getReturnTime, reqVO.getReturnTime())
                 .eqIfPresent(ReceivableDO::getReturnType, reqVO.getReturnType())
                 .eqIfPresent(ReceivableDO::getPrice, reqVO.getPrice())
                 .eqIfPresent(ReceivableDO::getOwnerUserId, reqVO.getOwnerUserId())
                 .eqIfPresent(ReceivableDO::getBatchId, reqVO.getBatchId())
-                .eqIfPresent(ReceivableDO::getSort, reqVO.getSort())
-                .eqIfPresent(ReceivableDO::getDataScope, reqVO.getDataScope())
-                .eqIfPresent(ReceivableDO::getDataScopeDeptIds, reqVO.getDataScopeDeptIds())
                 .eqIfPresent(ReceivableDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(ReceivableDO::getRemark, reqVO.getRemark())
                 .betweenIfPresent(ReceivableDO::getCreateTime, reqVO.getCreateTime())
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
index 3251c6787..516f20c0c 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
@@ -19,16 +19,13 @@ public interface ReceivablePlanMapper extends BaseMapperX<ReceivablePlanDO> {
 
     default PageResult<ReceivablePlanDO> selectPage(ReceivablePlanPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<ReceivablePlanDO>()
-                .eqIfPresent(ReceivablePlanDO::getPeriod, reqVO.getPeriod())
                 .eqIfPresent(ReceivablePlanDO::getStatus, reqVO.getStatus())
                 .eqIfPresent(ReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus())
                 .betweenIfPresent(ReceivablePlanDO::getReturnTime, reqVO.getReturnTime())
-                .eqIfPresent(ReceivablePlanDO::getRemindDays, reqVO.getRemindDays())
                 .betweenIfPresent(ReceivablePlanDO::getRemindTime, reqVO.getRemindTime())
                 .eqIfPresent(ReceivablePlanDO::getCustomerId, reqVO.getCustomerId())
                 .eqIfPresent(ReceivablePlanDO::getContractId, reqVO.getContractId())
                 .eqIfPresent(ReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId())
-                .eqIfPresent(ReceivablePlanDO::getRemark, reqVO.getRemark())
                 .betweenIfPresent(ReceivablePlanDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(ReceivablePlanDO::getId));
     }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
index cf216d4d2..d3c7a16ef 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
@@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.crm.convert.receivable.ReceivableConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper;
 import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum;
 import cn.iocoder.yudao.module.crm.service.contract.ContractService;
@@ -43,10 +44,11 @@ public class ReceivableServiceImpl implements ReceivableService {
     private ContractService contractService;
     @Resource
     private CrmCustomerService crmCustomerService;
+    @Resource
+    private ReceivablePlanService receivablePlanService;
 
     @Override
     public Long createReceivable(ReceivableCreateReqVO createReqVO) {
-        // TODO @liuhongfeng:planId 是否存在,是否合法,需要去校验;
         // 插入
         ReceivableDO receivable = ReceivableConvert.INSTANCE.convert(createReqVO);
         if (ObjectUtil.isNull(receivable.getStatus())){
@@ -80,6 +82,11 @@ public class ReceivableServiceImpl implements ReceivableService {
             throw exception(CUSTOMER_NOT_EXISTS);
         }
 
+        ReceivablePlanDO receivablePlan = receivablePlanService.getReceivablePlan(receivable.getPlanId());
+        if(ObjectUtil.isNull(receivablePlan)){
+            throw exception(RECEIVABLE_PLAN_NOT_EXISTS);
+        }
+
     }
 
     @Override
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
index 4f9fb8d26..952514ecb 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
@@ -144,16 +144,13 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null)));
        // 准备参数
        ReceivablePlanPageReqVO reqVO = new ReceivablePlanPageReqVO();
-       reqVO.setPeriod(null);
        reqVO.setStatus(null);
        reqVO.setCheckStatus(null);
        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
-       reqVO.setRemindDays(null);
        reqVO.setRemindTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
        reqVO.setCustomerId(null);
        reqVO.setContractId(null);
        reqVO.setOwnerUserId(null);
-       reqVO.setRemark(null);
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
 
        // 调用
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImplTest.java b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImplTest.java
index b8d4018b4..906fdb436 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImplTest.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImplTest.java
@@ -167,17 +167,11 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
        reqVO.setCustomerId(null);
        reqVO.setContractId(null);
        reqVO.setCheckStatus(null);
-       reqVO.setProcessInstanceId(null);
        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
        reqVO.setReturnType(null);
        reqVO.setPrice(null);
        reqVO.setOwnerUserId(null);
-       reqVO.setBatchId(null);
-       reqVO.setSort(null);
-       reqVO.setDataScope(null);
-       reqVO.setDataScopeDeptIds(null);
        reqVO.setStatus(null);
-       reqVO.setRemark(null);
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
 
        // 调用
@@ -253,15 +247,11 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
        reqVO.setCustomerId(null);
        reqVO.setContractId(null);
        reqVO.setCheckStatus(null);
-       reqVO.setProcessInstanceId(null);
        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
        reqVO.setReturnType(null);
        reqVO.setPrice(null);
        reqVO.setOwnerUserId(null);
        reqVO.setBatchId(null);
-       reqVO.setSort(null);
-       reqVO.setDataScope(null);
-       reqVO.setDataScopeDeptIds(null);
        reqVO.setStatus(null);
        reqVO.setRemark(null);
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));

From 95e9dc81c9c397078a8684dfbddc6599436f76fa Mon Sep 17 00:00:00 2001
From: liuhongfeng <291117974@qq.com>
Date: Tue, 31 Oct 2023 01:09:40 +0800
Subject: [PATCH 5/5] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91?=
 =?UTF-8?q?=E5=9B=9E=E6=AC=BE=E8=AE=A1=E5=88=92=E5=92=8C=E5=9B=9E=E6=AC=BE?=
 =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=BB=9F=E4=B8=80=E5=B8=A6=E4=B8=8ACrm?=
 =?UTF-8?q?=E5=89=8D=E7=BC=80=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=92=8C=E5=85=B6?=
 =?UTF-8?q?=E4=BB=96=E6=A8=A1=E5=9D=97=E5=86=B2=E7=AA=81=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ...ller.java => CrmReceivableController.java} |  40 +++---
 ....java => CrmReceivablePlanController.java} |  40 +++---
 ...leBaseVO.java => CrmReceivableBaseVO.java} |   7 +-
 ...qVO.java => CrmReceivableCreateReqVO.java} |   4 +-
 ...ExcelVO.java => CrmReceivableExcelVO.java} |   8 +-
 ...qVO.java => CrmReceivableExportReqVO.java} |   4 +-
 ...ReqVO.java => CrmReceivablePageReqVO.java} |   3 +-
 ...seVO.java => CrmReceivablePlanBaseVO.java} |   2 +-
 ...java => CrmReceivablePlanCreateReqVO.java} |   4 +-
 ...lVO.java => CrmReceivablePlanExcelVO.java} |   3 +-
 ...java => CrmReceivablePlanExportReqVO.java} |   4 +-
 ...O.java => CrmReceivablePlanPageReqVO.java} |   2 +-
 ...spVO.java => CrmReceivablePlanRespVO.java} |   2 +-
 ...java => CrmReceivablePlanUpdateReqVO.java} |   4 +-
 ...leRespVO.java => CrmReceivableRespVO.java} |   2 +-
 ...qVO.java => CrmReceivableUpdateReqVO.java} |   4 +-
 .../receivable/CrmReceivableConvert.java      |  34 +++++
 .../receivable/CrmReceivablePlanConvert.java  |  34 +++++
 .../convert/receivable/ReceivableConvert.java |  34 -----
 .../receivable/ReceivablePlanConvert.java     |  34 -----
 ...ReceivableDO.java => CrmReceivableDO.java} |   4 +-
 ...lePlanDO.java => CrmReceivablePlanDO.java} |   3 +-
 .../mysql/receivable/CrmReceivableMapper.java |  54 ++++++++
 .../receivable/CrmReceivablePlanMapper.java   |  49 +++++++
 .../mysql/receivable/ReceivableMapper.java    |  54 --------
 .../receivable/ReceivablePlanMapper.java      |  49 -------
 ...ice.java => CrmReceivablePlanService.java} |  16 +--
 ...java => CrmReceivablePlanServiceImpl.java} |  53 ++++----
 ...Service.java => CrmReceivableService.java} |  16 +--
 ...mpl.java => CrmReceivableServiceImpl.java} |  59 ++++----
 ...ableMapper.xml => CrmReceivableMapper.xml} |   2 +-
 ...Mapper.xml => CrmReceivablePlanMapper.xml} |   2 +-
 ... CrmCrmReceivablePlanServiceImplTest.java} | 102 +++++++-------
 ...a => CrmCrmReceivableServiceImplTest.java} | 126 +++++++++---------
 34 files changed, 423 insertions(+), 435 deletions(-)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/{ReceivableController.java => CrmReceivableController.java} (64%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/{ReceivablePlanController.java => CrmReceivablePlanController.java} (62%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivableBaseVO.java => CrmReceivableBaseVO.java} (91%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivableCreateReqVO.java => CrmReceivableCreateReqVO.java} (69%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivableExcelVO.java => CrmReceivableExcelVO.java} (89%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivableExportReqVO.java => CrmReceivableExportReqVO.java} (94%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePageReqVO.java => CrmReceivablePageReqVO.java} (95%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePlanBaseVO.java => CrmReceivablePlanBaseVO.java} (98%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePlanCreateReqVO.java => CrmReceivablePlanCreateReqVO.java} (68%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePlanExcelVO.java => CrmReceivablePlanExcelVO.java} (96%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePlanExportReqVO.java => CrmReceivablePlanExportReqVO.java} (93%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePlanPageReqVO.java => CrmReceivablePlanPageReqVO.java} (96%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePlanRespVO.java => CrmReceivablePlanRespVO.java} (88%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivablePlanUpdateReqVO.java => CrmReceivablePlanUpdateReqVO.java} (84%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivableRespVO.java => CrmReceivableRespVO.java} (89%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/{ReceivableUpdateReqVO.java => CrmReceivableUpdateReqVO.java} (85%)
 create mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivableConvert.java
 create mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivablePlanConvert.java
 delete mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivableConvert.java
 delete mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivablePlanConvert.java
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/{ReceivableDO.java => CrmReceivableDO.java} (94%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/{ReceivablePlanDO.java => CrmReceivablePlanDO.java} (95%)
 create mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
 create mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java
 delete mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java
 delete mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/{ReceivablePlanService.java => CrmReceivablePlanService.java} (64%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/{ReceivablePlanServiceImpl.java => CrmReceivablePlanServiceImpl.java} (63%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/{ReceivableService.java => CrmReceivableService.java} (67%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/{ReceivableServiceImpl.java => CrmReceivableServiceImpl.java} (62%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/{ReceivableMapper.xml => CrmReceivableMapper.xml} (95%)
 rename yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/{ReceivablePlanMapper.xml => CrmReceivablePlanMapper.xml} (95%)
 rename yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/{ReceivablePlanServiceImplTest.java => CrmCrmReceivablePlanServiceImplTest.java} (58%)
 rename yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/{ReceivableServiceImplTest.java => CrmCrmReceivableServiceImplTest.java} (57%)

diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/ReceivableController.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
similarity index 64%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/ReceivableController.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
index c88f31f6d..4f7d9e674 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/ReceivableController.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivableController.java
@@ -5,9 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-import cn.iocoder.yudao.module.crm.convert.receivable.ReceivableConvert;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
-import cn.iocoder.yudao.module.crm.service.receivable.ReceivableService;
+import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivableConvert;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
+import cn.iocoder.yudao.module.crm.service.receivable.CrmReceivableService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -28,23 +28,23 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E
 @RestController
 @RequestMapping("/crm/receivable")
 @Validated
-public class ReceivableController {
+public class CrmReceivableController {
 
     @Resource
-    private ReceivableService receivableService;
+    private CrmReceivableService crmReceivableService;
 
     @PostMapping("/create")
     @Operation(summary = "创建回款管理")
     @PreAuthorize("@ss.hasPermission('crm:receivable:create')")
-    public CommonResult<Long> createReceivable(@Valid @RequestBody ReceivableCreateReqVO createReqVO) {
-        return success(receivableService.createReceivable(createReqVO));
+    public CommonResult<Long> createReceivable(@Valid @RequestBody CrmReceivableCreateReqVO createReqVO) {
+        return success(crmReceivableService.createReceivable(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新回款管理")
     @PreAuthorize("@ss.hasPermission('crm:receivable:update')")
-    public CommonResult<Boolean> updateReceivable(@Valid @RequestBody ReceivableUpdateReqVO updateReqVO) {
-        receivableService.updateReceivable(updateReqVO);
+    public CommonResult<Boolean> updateReceivable(@Valid @RequestBody CrmReceivableUpdateReqVO updateReqVO) {
+        crmReceivableService.updateReceivable(updateReqVO);
         return success(true);
     }
 
@@ -53,7 +53,7 @@ public class ReceivableController {
     @Parameter(name = "id", description = "编号", required = true)
     @PreAuthorize("@ss.hasPermission('crm:receivable:delete')")
     public CommonResult<Boolean> deleteReceivable(@RequestParam("id") Long id) {
-        receivableService.deleteReceivable(id);
+        crmReceivableService.deleteReceivable(id);
         return success(true);
     }
 
@@ -61,29 +61,29 @@ public class ReceivableController {
     @Operation(summary = "获得回款管理")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('crm:receivable:query')")
-    public CommonResult<ReceivableRespVO> getReceivable(@RequestParam("id") Long id) {
-        ReceivableDO receivable = receivableService.getReceivable(id);
-        return success(ReceivableConvert.INSTANCE.convert(receivable));
+    public CommonResult<CrmReceivableRespVO> getReceivable(@RequestParam("id") Long id) {
+        CrmReceivableDO receivable = crmReceivableService.getReceivable(id);
+        return success(CrmReceivableConvert.INSTANCE.convert(receivable));
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得回款管理分页")
     @PreAuthorize("@ss.hasPermission('crm:receivable:query')")
-    public CommonResult<PageResult<ReceivableRespVO>> getReceivablePage(@Valid ReceivablePageReqVO pageVO) {
-        PageResult<ReceivableDO> pageResult = receivableService.getReceivablePage(pageVO);
-        return success(ReceivableConvert.INSTANCE.convertPage(pageResult));
+    public CommonResult<PageResult<CrmReceivableRespVO>> getReceivablePage(@Valid CrmReceivablePageReqVO pageVO) {
+        PageResult<CrmReceivableDO> pageResult = crmReceivableService.getReceivablePage(pageVO);
+        return success(CrmReceivableConvert.INSTANCE.convertPage(pageResult));
     }
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出回款管理 Excel")
     @PreAuthorize("@ss.hasPermission('crm:receivable:export')")
     @OperateLog(type = EXPORT)
-    public void exportReceivableExcel(@Valid ReceivableExportReqVO exportReqVO,
+    public void exportReceivableExcel(@Valid CrmReceivableExportReqVO exportReqVO,
               HttpServletResponse response) throws IOException {
-        List<ReceivableDO> list = receivableService.getReceivableList(exportReqVO);
+        List<CrmReceivableDO> list = crmReceivableService.getReceivableList(exportReqVO);
         // 导出 Excel
-        List<ReceivableExcelVO> datas = ReceivableConvert.INSTANCE.convertList02(list);
-        ExcelUtils.write(response, "回款管理.xls", "数据", ReceivableExcelVO.class, datas);
+        List<CrmReceivableExcelVO> datas = CrmReceivableConvert.INSTANCE.convertList02(list);
+        ExcelUtils.write(response, "回款管理.xls", "数据", CrmReceivableExcelVO.class, datas);
     }
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/ReceivablePlanController.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivablePlanController.java
similarity index 62%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/ReceivablePlanController.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivablePlanController.java
index 0c33eb25a..afba2b721 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/ReceivablePlanController.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/CrmReceivablePlanController.java
@@ -5,9 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-import cn.iocoder.yudao.module.crm.convert.receivable.ReceivablePlanConvert;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
-import cn.iocoder.yudao.module.crm.service.receivable.ReceivablePlanService;
+import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivablePlanConvert;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
+import cn.iocoder.yudao.module.crm.service.receivable.CrmReceivablePlanService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -28,23 +28,23 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E
 @RestController
 @RequestMapping("/crm/receivable-plan")
 @Validated
-public class ReceivablePlanController {
+public class CrmReceivablePlanController {
 
     @Resource
-    private ReceivablePlanService receivablePlanService;
+    private CrmReceivablePlanService crmReceivablePlanService;
 
     @PostMapping("/create")
     @Operation(summary = "创建回款计划")
     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:create')")
-    public CommonResult<Long> createReceivablePlan(@Valid @RequestBody ReceivablePlanCreateReqVO createReqVO) {
-        return success(receivablePlanService.createReceivablePlan(createReqVO));
+    public CommonResult<Long> createReceivablePlan(@Valid @RequestBody CrmReceivablePlanCreateReqVO createReqVO) {
+        return success(crmReceivablePlanService.createReceivablePlan(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新回款计划")
     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:update')")
-    public CommonResult<Boolean> updateReceivablePlan(@Valid @RequestBody ReceivablePlanUpdateReqVO updateReqVO) {
-        receivablePlanService.updateReceivablePlan(updateReqVO);
+    public CommonResult<Boolean> updateReceivablePlan(@Valid @RequestBody CrmReceivablePlanUpdateReqVO updateReqVO) {
+        crmReceivablePlanService.updateReceivablePlan(updateReqVO);
         return success(true);
     }
 
@@ -53,7 +53,7 @@ public class ReceivablePlanController {
     @Parameter(name = "id", description = "编号", required = true)
     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:delete')")
     public CommonResult<Boolean> deleteReceivablePlan(@RequestParam("id") Long id) {
-        receivablePlanService.deleteReceivablePlan(id);
+        crmReceivablePlanService.deleteReceivablePlan(id);
         return success(true);
     }
 
@@ -61,29 +61,29 @@ public class ReceivablePlanController {
     @Operation(summary = "获得回款计划")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:query')")
-    public CommonResult<ReceivablePlanRespVO> getReceivablePlan(@RequestParam("id") Long id) {
-        ReceivablePlanDO receivablePlan = receivablePlanService.getReceivablePlan(id);
-        return success(ReceivablePlanConvert.INSTANCE.convert(receivablePlan));
+    public CommonResult<CrmReceivablePlanRespVO> getReceivablePlan(@RequestParam("id") Long id) {
+        CrmReceivablePlanDO receivablePlan = crmReceivablePlanService.getReceivablePlan(id);
+        return success(CrmReceivablePlanConvert.INSTANCE.convert(receivablePlan));
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得回款计划分页")
     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:query')")
-    public CommonResult<PageResult<ReceivablePlanRespVO>> getReceivablePlanPage(@Valid ReceivablePlanPageReqVO pageVO) {
-        PageResult<ReceivablePlanDO> pageResult = receivablePlanService.getReceivablePlanPage(pageVO);
-        return success(ReceivablePlanConvert.INSTANCE.convertPage(pageResult));
+    public CommonResult<PageResult<CrmReceivablePlanRespVO>> getReceivablePlanPage(@Valid CrmReceivablePlanPageReqVO pageVO) {
+        PageResult<CrmReceivablePlanDO> pageResult = crmReceivablePlanService.getReceivablePlanPage(pageVO);
+        return success(CrmReceivablePlanConvert.INSTANCE.convertPage(pageResult));
     }
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出回款计划 Excel")
     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:export')")
     @OperateLog(type = EXPORT)
-    public void exportReceivablePlanExcel(@Valid ReceivablePlanExportReqVO exportReqVO,
+    public void exportReceivablePlanExcel(@Valid CrmReceivablePlanExportReqVO exportReqVO,
               HttpServletResponse response) throws IOException {
-        List<ReceivablePlanDO> list = receivablePlanService.getReceivablePlanList(exportReqVO);
+        List<CrmReceivablePlanDO> list = crmReceivablePlanService.getReceivablePlanList(exportReqVO);
         // 导出 Excel
-        List<ReceivablePlanExcelVO> datas = ReceivablePlanConvert.INSTANCE.convertList02(list);
-        ExcelUtils.write(response, "回款计划.xls", "数据", ReceivablePlanExcelVO.class, datas);
+        List<CrmReceivablePlanExcelVO> datas = CrmReceivablePlanConvert.INSTANCE.convertList02(list);
+        ExcelUtils.write(response, "回款计划.xls", "数据", CrmReceivablePlanExcelVO.class, datas);
     }
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableBaseVO.java
similarity index 91%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableBaseVO.java
index 1e7e7bd68..24b1d57e4 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableBaseVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableBaseVO.java
@@ -6,8 +6,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -17,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
  * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
  */
 @Data
-public class ReceivableBaseVO {
+public class CrmReceivableBaseVO {
 
     @Schema(description = "回款编号",requiredMode = Schema.RequiredMode.REQUIRED, example = "31177")
     private String no;
@@ -57,4 +55,7 @@ public class ReceivableBaseVO {
     @Schema(description = "备注", example = "备注")
     private String remark;
 
+    @Schema(description = "完成状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    private Integer status;
+
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableCreateReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableCreateReqVO.java
similarity index 69%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableCreateReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableCreateReqVO.java
index d38d0bd5f..a2d43d8c1 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableCreateReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableCreateReqVO.java
@@ -1,14 +1,12 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
 import lombok.*;
-import java.util.*;
 import io.swagger.v3.oas.annotations.media.Schema;
-import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - CRM 回款创建 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivableCreateReqVO extends ReceivableBaseVO {
+public class CrmReceivableCreateReqVO extends CrmReceivableBaseVO {
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExcelVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableExcelVO.java
similarity index 89%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExcelVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableExcelVO.java
index a88fa9fd9..1bd461499 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExcelVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableExcelVO.java
@@ -1,12 +1,8 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
 import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
-import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
+
 import java.time.LocalDateTime;
 
 import com.alibaba.excel.annotation.ExcelProperty;
@@ -20,7 +16,7 @@ import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  * @author 赤焰
  */
 @Data
-public class ReceivableExcelVO {
+public class CrmReceivableExcelVO {
 
     @ExcelProperty("ID")
     private Long id;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExportReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableExportReqVO.java
similarity index 94%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExportReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableExportReqVO.java
index f07e4ddf8..b674bbc2b 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableExportReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableExportReqVO.java
@@ -11,9 +11,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 /**
  * @author 赤焰
  */
-@Schema(description = "管理后台 - CRM 回款 Excel 导出 Request VO,参数和 ReceivablePageReqVO 是一致的")
+@Schema(description = "管理后台 - CRM 回款 Excel 导出 Request VO,参数和 CrmReceivablePageReqVO 是一致的")
 @Data
-public class ReceivableExportReqVO {
+public class CrmReceivableExportReqVO {
 
     @Schema(description = "回款编号")
     private String no;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePageReqVO.java
similarity index 95%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePageReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePageReqVO.java
index 53cdc4949..3a90ed809 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePageReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePageReqVO.java
@@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -16,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivablePageReqVO extends PageParam {
+public class CrmReceivablePageReqVO extends PageParam {
 
     @Schema(description = "回款编号")
     private String no;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanBaseVO.java
similarity index 98%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanBaseVO.java
index 2bd05a64a..49d00892e 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanBaseVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanBaseVO.java
@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
  * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
  */
 @Data
-public class ReceivablePlanBaseVO {
+public class CrmReceivablePlanBaseVO {
 
     @Schema(description = "期数", example = "1")
     private Integer period;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanCreateReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanCreateReqVO.java
similarity index 68%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanCreateReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanCreateReqVO.java
index d03e76eb0..cebfd28cb 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanCreateReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanCreateReqVO.java
@@ -1,14 +1,12 @@
 package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
 import lombok.*;
-import java.util.*;
 import io.swagger.v3.oas.annotations.media.Schema;
-import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - CRM 回款计划创建 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivablePlanCreateReqVO extends ReceivablePlanBaseVO {
+public class CrmReceivablePlanCreateReqVO extends CrmReceivablePlanBaseVO {
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanExcelVO.java
similarity index 96%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanExcelVO.java
index 2ff3fd0d3..a7246e252 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExcelVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanExcelVO.java
@@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 import cn.iocoder.yudao.module.system.enums.DictTypeConstants;
 import lombok.*;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import com.alibaba.excel.annotation.ExcelProperty;
@@ -17,7 +16,7 @@ import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
  * @author 芋道源码
  */
 @Data
-public class ReceivablePlanExcelVO {
+public class CrmReceivablePlanExcelVO {
 
     @ExcelProperty("ID")
     private Long id;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanExportReqVO.java
similarity index 93%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanExportReqVO.java
index 803e1ed03..8002d41af 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanExportReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanExportReqVO.java
@@ -8,9 +8,9 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
-@Schema(description = "管理后台 - CRM 回款计划 Excel 导出 Request VO,参数和 ReceivablePlanPageReqVO 是一致的")
+@Schema(description = "管理后台 - CRM 回款计划 Excel 导出 Request VO,参数和 CrmReceivablePlanPageReqVO 是一致的")
 @Data
-public class ReceivablePlanExportReqVO {
+public class CrmReceivablePlanExportReqVO {
 
     @Schema(description = "期数")
     private Integer period;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanPageReqVO.java
similarity index 96%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanPageReqVO.java
index c92b4e891..10e26207a 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanPageReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanPageReqVO.java
@@ -15,7 +15,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivablePlanPageReqVO extends PageParam {
+public class CrmReceivablePlanPageReqVO extends PageParam {
 
     @Schema(description = "完成状态", example = "2")
     private Integer status;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanRespVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanRespVO.java
similarity index 88%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanRespVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanRespVO.java
index ce49d5977..243e7f782 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanRespVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanRespVO.java
@@ -8,7 +8,7 @@ import java.time.LocalDateTime;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivablePlanRespVO extends ReceivablePlanBaseVO {
+public class CrmReceivablePlanRespVO extends CrmReceivablePlanBaseVO {
 
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25153")
     private Long id;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanUpdateReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanUpdateReqVO.java
similarity index 84%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanUpdateReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanUpdateReqVO.java
index 1f539537d..5471cfba3 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivablePlanUpdateReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivablePlanUpdateReqVO.java
@@ -2,14 +2,14 @@ package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
+
 import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - CRM 回款计划更新 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivablePlanUpdateReqVO extends ReceivablePlanBaseVO {
+public class CrmReceivablePlanUpdateReqVO extends CrmReceivablePlanBaseVO {
 
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25153")
     @NotNull(message = "ID不能为空")
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableRespVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableRespVO.java
similarity index 89%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableRespVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableRespVO.java
index 1646cd5a8..00d984da5 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableRespVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableRespVO.java
@@ -8,7 +8,7 @@ import java.time.LocalDateTime;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivableRespVO extends ReceivableBaseVO {
+public class CrmReceivableRespVO extends CrmReceivableBaseVO {
 
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25787")
     private Long id;
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableUpdateReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableUpdateReqVO.java
similarity index 85%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableUpdateReqVO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableUpdateReqVO.java
index 008c06b63..d6241f258 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/ReceivableUpdateReqVO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/receivable/vo/CrmReceivableUpdateReqVO.java
@@ -2,14 +2,14 @@ package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
+
 import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - CRM 回款更新 Request VO")
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class ReceivableUpdateReqVO extends ReceivableBaseVO {
+public class CrmReceivableUpdateReqVO extends CrmReceivableBaseVO {
 
     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25787")
     @NotNull(message = "ID不能为空")
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivableConvert.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivableConvert.java
new file mode 100644
index 000000000..23345fbe6
--- /dev/null
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivableConvert.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.crm.convert.receivable;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
+
+/**
+ * 回款管理 Convert
+ *
+ * @author 赤焰
+ */
+@Mapper
+public interface CrmReceivableConvert {
+
+    CrmReceivableConvert INSTANCE = Mappers.getMapper(CrmReceivableConvert.class);
+
+    CrmReceivableDO convert(CrmReceivableCreateReqVO bean);
+
+    CrmReceivableDO convert(CrmReceivableUpdateReqVO bean);
+
+    CrmReceivableRespVO convert(CrmReceivableDO bean);
+
+    List<CrmReceivableRespVO> convertList(List<CrmReceivableDO> list);
+
+    PageResult<CrmReceivableRespVO> convertPage(PageResult<CrmReceivableDO> page);
+
+    List<CrmReceivableExcelVO> convertList02(List<CrmReceivableDO> list);
+
+}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivablePlanConvert.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivablePlanConvert.java
new file mode 100644
index 000000000..4b2d65c60
--- /dev/null
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/CrmReceivablePlanConvert.java
@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.crm.convert.receivable;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
+
+/**
+ * 回款计划 Convert
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface CrmReceivablePlanConvert {
+
+    CrmReceivablePlanConvert INSTANCE = Mappers.getMapper(CrmReceivablePlanConvert.class);
+
+    CrmReceivablePlanDO convert(CrmReceivablePlanCreateReqVO bean);
+
+    CrmReceivablePlanDO convert(CrmReceivablePlanUpdateReqVO bean);
+
+    CrmReceivablePlanRespVO convert(CrmReceivablePlanDO bean);
+
+    List<CrmReceivablePlanRespVO> convertList(List<CrmReceivablePlanDO> list);
+
+    PageResult<CrmReceivablePlanRespVO> convertPage(PageResult<CrmReceivablePlanDO> page);
+
+    List<CrmReceivablePlanExcelVO> convertList02(List<CrmReceivablePlanDO> list);
+
+}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivableConvert.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivableConvert.java
deleted file mode 100644
index 7f14aaddd..000000000
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivableConvert.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.crm.convert.receivable;
-
-import java.util.*;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
-
-/**
- * 回款管理 Convert
- *
- * @author 赤焰
- */
-@Mapper
-public interface ReceivableConvert {
-
-    ReceivableConvert INSTANCE = Mappers.getMapper(ReceivableConvert.class);
-
-    ReceivableDO convert(ReceivableCreateReqVO bean);
-
-    ReceivableDO convert(ReceivableUpdateReqVO bean);
-
-    ReceivableRespVO convert(ReceivableDO bean);
-
-    List<ReceivableRespVO> convertList(List<ReceivableDO> list);
-
-    PageResult<ReceivableRespVO> convertPage(PageResult<ReceivableDO> page);
-
-    List<ReceivableExcelVO> convertList02(List<ReceivableDO> list);
-
-}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivablePlanConvert.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivablePlanConvert.java
deleted file mode 100644
index 81ec646f3..000000000
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/receivable/ReceivablePlanConvert.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package cn.iocoder.yudao.module.crm.convert.receivable;
-
-import java.util.*;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.factory.Mappers;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
-
-/**
- * 回款计划 Convert
- *
- * @author 芋道源码
- */
-@Mapper
-public interface ReceivablePlanConvert {
-
-    ReceivablePlanConvert INSTANCE = Mappers.getMapper(ReceivablePlanConvert.class);
-
-    ReceivablePlanDO convert(ReceivablePlanCreateReqVO bean);
-
-    ReceivablePlanDO convert(ReceivablePlanUpdateReqVO bean);
-
-    ReceivablePlanRespVO convert(ReceivablePlanDO bean);
-
-    List<ReceivablePlanRespVO> convertList(List<ReceivablePlanDO> list);
-
-    PageResult<ReceivablePlanRespVO> convertPage(PageResult<ReceivablePlanDO> page);
-
-    List<ReceivablePlanExcelVO> convertList02(List<ReceivablePlanDO> list);
-
-}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivableDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/CrmReceivableDO.java
similarity index 94%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivableDO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/CrmReceivableDO.java
index 0cf2423de..b74507dd1 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivableDO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/CrmReceivableDO.java
@@ -21,7 +21,7 @@ import java.time.LocalDateTime;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class ReceivableDO extends BaseDO {
+public class CrmReceivableDO extends BaseDO {
 
     /**
      * ID
@@ -35,7 +35,7 @@ public class ReceivableDO extends BaseDO {
     /**
      * 回款计划
      *
-     * 对应实体 {@link cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO}
+     * 对应实体 {@link CrmReceivablePlanDO}
      */
     private Long planId;
     /**
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/CrmReceivablePlanDO.java
similarity index 95%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/CrmReceivablePlanDO.java
index caaee7211..4274250e8 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/ReceivablePlanDO.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/receivable/CrmReceivablePlanDO.java
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.crm.dal.dataobject.receivable;
 
 import lombok.*;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 import com.baomidou.mybatisplus.annotation.*;
@@ -21,7 +20,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class ReceivablePlanDO extends BaseDO {
+public class CrmReceivablePlanDO extends BaseDO {
 
     /**
      * ID
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
new file mode 100644
index 000000000..716704fb8
--- /dev/null
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.crm.dal.mysql.receivable;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
+
+/**
+ * 回款管理 Mapper
+ *
+ * @author 赤焰
+ */
+@Mapper
+public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> {
+
+    default PageResult<CrmReceivableDO> selectPage(CrmReceivablePageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<CrmReceivableDO>()
+                .eqIfPresent(CrmReceivableDO::getNo, reqVO.getNo())
+                .eqIfPresent(CrmReceivableDO::getPlanId, reqVO.getPlanId())
+                .eqIfPresent(CrmReceivableDO::getCustomerId, reqVO.getCustomerId())
+                .eqIfPresent(CrmReceivableDO::getContractId, reqVO.getContractId())
+                .eqIfPresent(CrmReceivableDO::getCheckStatus, reqVO.getCheckStatus())
+                .betweenIfPresent(CrmReceivableDO::getReturnTime, reqVO.getReturnTime())
+                .eqIfPresent(CrmReceivableDO::getReturnType, reqVO.getReturnType())
+                .eqIfPresent(CrmReceivableDO::getPrice, reqVO.getPrice())
+                .eqIfPresent(CrmReceivableDO::getOwnerUserId, reqVO.getOwnerUserId())
+                .eqIfPresent(CrmReceivableDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(CrmReceivableDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(CrmReceivableDO::getId));
+    }
+
+    default List<CrmReceivableDO> selectList(CrmReceivableExportReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<CrmReceivableDO>()
+                .eqIfPresent(CrmReceivableDO::getNo, reqVO.getNo())
+                .eqIfPresent(CrmReceivableDO::getPlanId, reqVO.getPlanId())
+                .eqIfPresent(CrmReceivableDO::getCustomerId, reqVO.getCustomerId())
+                .eqIfPresent(CrmReceivableDO::getContractId, reqVO.getContractId())
+                .eqIfPresent(CrmReceivableDO::getCheckStatus, reqVO.getCheckStatus())
+                .betweenIfPresent(CrmReceivableDO::getReturnTime, reqVO.getReturnTime())
+                .eqIfPresent(CrmReceivableDO::getReturnType, reqVO.getReturnType())
+                .eqIfPresent(CrmReceivableDO::getPrice, reqVO.getPrice())
+                .eqIfPresent(CrmReceivableDO::getOwnerUserId, reqVO.getOwnerUserId())
+                .eqIfPresent(CrmReceivableDO::getBatchId, reqVO.getBatchId())
+                .eqIfPresent(CrmReceivableDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(CrmReceivableDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(CrmReceivableDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(CrmReceivableDO::getId));
+    }
+
+}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java
new file mode 100644
index 000000000..62b2c0c54
--- /dev/null
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java
@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.crm.dal.mysql.receivable;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
+
+/**
+ * 回款计划 Mapper
+ *
+ * @author 芋道源码
+ */
+@Mapper
+public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO> {
+
+    default PageResult<CrmReceivablePlanDO> selectPage(CrmReceivablePlanPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<CrmReceivablePlanDO>()
+                .eqIfPresent(CrmReceivablePlanDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(CrmReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus())
+                .betweenIfPresent(CrmReceivablePlanDO::getReturnTime, reqVO.getReturnTime())
+                .betweenIfPresent(CrmReceivablePlanDO::getRemindTime, reqVO.getRemindTime())
+                .eqIfPresent(CrmReceivablePlanDO::getCustomerId, reqVO.getCustomerId())
+                .eqIfPresent(CrmReceivablePlanDO::getContractId, reqVO.getContractId())
+                .eqIfPresent(CrmReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId())
+                .betweenIfPresent(CrmReceivablePlanDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(CrmReceivablePlanDO::getId));
+    }
+
+    default List<CrmReceivablePlanDO> selectList(CrmReceivablePlanExportReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<CrmReceivablePlanDO>()
+                .eqIfPresent(CrmReceivablePlanDO::getPeriod, reqVO.getPeriod())
+                .eqIfPresent(CrmReceivablePlanDO::getStatus, reqVO.getStatus())
+                .eqIfPresent(CrmReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus())
+                .betweenIfPresent(CrmReceivablePlanDO::getReturnTime, reqVO.getReturnTime())
+                .eqIfPresent(CrmReceivablePlanDO::getRemindDays, reqVO.getRemindDays())
+                .betweenIfPresent(CrmReceivablePlanDO::getRemindTime, reqVO.getRemindTime())
+                .eqIfPresent(CrmReceivablePlanDO::getCustomerId, reqVO.getCustomerId())
+                .eqIfPresent(CrmReceivablePlanDO::getContractId, reqVO.getContractId())
+                .eqIfPresent(CrmReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId())
+                .eqIfPresent(CrmReceivablePlanDO::getRemark, reqVO.getRemark())
+                .betweenIfPresent(CrmReceivablePlanDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(CrmReceivablePlanDO::getId));
+    }
+
+}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java
deleted file mode 100644
index 0ef7165f4..000000000
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivableMapper.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package cn.iocoder.yudao.module.crm.dal.mysql.receivable;
-
-import java.util.*;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
-import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-
-/**
- * 回款管理 Mapper
- *
- * @author 赤焰
- */
-@Mapper
-public interface ReceivableMapper extends BaseMapperX<ReceivableDO> {
-
-    default PageResult<ReceivableDO> selectPage(ReceivablePageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<ReceivableDO>()
-                .eqIfPresent(ReceivableDO::getNo, reqVO.getNo())
-                .eqIfPresent(ReceivableDO::getPlanId, reqVO.getPlanId())
-                .eqIfPresent(ReceivableDO::getCustomerId, reqVO.getCustomerId())
-                .eqIfPresent(ReceivableDO::getContractId, reqVO.getContractId())
-                .eqIfPresent(ReceivableDO::getCheckStatus, reqVO.getCheckStatus())
-                .betweenIfPresent(ReceivableDO::getReturnTime, reqVO.getReturnTime())
-                .eqIfPresent(ReceivableDO::getReturnType, reqVO.getReturnType())
-                .eqIfPresent(ReceivableDO::getPrice, reqVO.getPrice())
-                .eqIfPresent(ReceivableDO::getOwnerUserId, reqVO.getOwnerUserId())
-                .eqIfPresent(ReceivableDO::getStatus, reqVO.getStatus())
-                .betweenIfPresent(ReceivableDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(ReceivableDO::getId));
-    }
-
-    default List<ReceivableDO> selectList(ReceivableExportReqVO reqVO) {
-        return selectList(new LambdaQueryWrapperX<ReceivableDO>()
-                .eqIfPresent(ReceivableDO::getNo, reqVO.getNo())
-                .eqIfPresent(ReceivableDO::getPlanId, reqVO.getPlanId())
-                .eqIfPresent(ReceivableDO::getCustomerId, reqVO.getCustomerId())
-                .eqIfPresent(ReceivableDO::getContractId, reqVO.getContractId())
-                .eqIfPresent(ReceivableDO::getCheckStatus, reqVO.getCheckStatus())
-                .betweenIfPresent(ReceivableDO::getReturnTime, reqVO.getReturnTime())
-                .eqIfPresent(ReceivableDO::getReturnType, reqVO.getReturnType())
-                .eqIfPresent(ReceivableDO::getPrice, reqVO.getPrice())
-                .eqIfPresent(ReceivableDO::getOwnerUserId, reqVO.getOwnerUserId())
-                .eqIfPresent(ReceivableDO::getBatchId, reqVO.getBatchId())
-                .eqIfPresent(ReceivableDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(ReceivableDO::getRemark, reqVO.getRemark())
-                .betweenIfPresent(ReceivableDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(ReceivableDO::getId));
-    }
-
-}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
deleted file mode 100644
index 516f20c0c..000000000
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/ReceivablePlanMapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package cn.iocoder.yudao.module.crm.dal.mysql.receivable;
-
-import java.util.*;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
-import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-
-/**
- * 回款计划 Mapper
- *
- * @author 芋道源码
- */
-@Mapper
-public interface ReceivablePlanMapper extends BaseMapperX<ReceivablePlanDO> {
-
-    default PageResult<ReceivablePlanDO> selectPage(ReceivablePlanPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<ReceivablePlanDO>()
-                .eqIfPresent(ReceivablePlanDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(ReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus())
-                .betweenIfPresent(ReceivablePlanDO::getReturnTime, reqVO.getReturnTime())
-                .betweenIfPresent(ReceivablePlanDO::getRemindTime, reqVO.getRemindTime())
-                .eqIfPresent(ReceivablePlanDO::getCustomerId, reqVO.getCustomerId())
-                .eqIfPresent(ReceivablePlanDO::getContractId, reqVO.getContractId())
-                .eqIfPresent(ReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId())
-                .betweenIfPresent(ReceivablePlanDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(ReceivablePlanDO::getId));
-    }
-
-    default List<ReceivablePlanDO> selectList(ReceivablePlanExportReqVO reqVO) {
-        return selectList(new LambdaQueryWrapperX<ReceivablePlanDO>()
-                .eqIfPresent(ReceivablePlanDO::getPeriod, reqVO.getPeriod())
-                .eqIfPresent(ReceivablePlanDO::getStatus, reqVO.getStatus())
-                .eqIfPresent(ReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus())
-                .betweenIfPresent(ReceivablePlanDO::getReturnTime, reqVO.getReturnTime())
-                .eqIfPresent(ReceivablePlanDO::getRemindDays, reqVO.getRemindDays())
-                .betweenIfPresent(ReceivablePlanDO::getRemindTime, reqVO.getRemindTime())
-                .eqIfPresent(ReceivablePlanDO::getCustomerId, reqVO.getCustomerId())
-                .eqIfPresent(ReceivablePlanDO::getContractId, reqVO.getContractId())
-                .eqIfPresent(ReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId())
-                .eqIfPresent(ReceivablePlanDO::getRemark, reqVO.getRemark())
-                .betweenIfPresent(ReceivablePlanDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(ReceivablePlanDO::getId));
-    }
-
-}
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanService.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanService.java
similarity index 64%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanService.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanService.java
index 163ebc26a..b8c472fa3 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanService.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanService.java
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.crm.service.receivable;
 import java.util.*;
 import javax.validation.*;
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 
 /**
@@ -11,7 +11,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
  *
  * @author 芋道源码
  */
-public interface ReceivablePlanService {
+public interface CrmReceivablePlanService {
 
     /**
      * 创建回款计划
@@ -19,14 +19,14 @@ public interface ReceivablePlanService {
      * @param createReqVO 创建信息
      * @return 编号
      */
-    Long createReceivablePlan(@Valid ReceivablePlanCreateReqVO createReqVO);
+    Long createReceivablePlan(@Valid CrmReceivablePlanCreateReqVO createReqVO);
 
     /**
      * 更新回款计划
      *
      * @param updateReqVO 更新信息
      */
-    void updateReceivablePlan(@Valid ReceivablePlanUpdateReqVO updateReqVO);
+    void updateReceivablePlan(@Valid CrmReceivablePlanUpdateReqVO updateReqVO);
 
     /**
      * 删除回款计划
@@ -41,7 +41,7 @@ public interface ReceivablePlanService {
      * @param id 编号
      * @return 回款计划
      */
-    ReceivablePlanDO getReceivablePlan(Long id);
+    CrmReceivablePlanDO getReceivablePlan(Long id);
 
     /**
      * 获得回款计划列表
@@ -49,7 +49,7 @@ public interface ReceivablePlanService {
      * @param ids 编号
      * @return 回款计划列表
      */
-    List<ReceivablePlanDO> getReceivablePlanList(Collection<Long> ids);
+    List<CrmReceivablePlanDO> getReceivablePlanList(Collection<Long> ids);
 
     /**
      * 获得回款计划分页
@@ -57,7 +57,7 @@ public interface ReceivablePlanService {
      * @param pageReqVO 分页查询
      * @return 回款计划分页
      */
-    PageResult<ReceivablePlanDO> getReceivablePlanPage(ReceivablePlanPageReqVO pageReqVO);
+    PageResult<CrmReceivablePlanDO> getReceivablePlanPage(CrmReceivablePlanPageReqVO pageReqVO);
 
     /**
      * 获得回款计划列表, 用于 Excel 导出
@@ -65,6 +65,6 @@ public interface ReceivablePlanService {
      * @param exportReqVO 查询条件
      * @return 回款计划列表
      */
-    List<ReceivablePlanDO> getReceivablePlanList(ReceivablePlanExportReqVO exportReqVO);
+    List<CrmReceivablePlanDO> getReceivablePlanList(CrmReceivablePlanExportReqVO exportReqVO);
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java
similarity index 63%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImpl.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java
index f8493a1ec..b3497b686 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImpl.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java
@@ -5,16 +5,15 @@ import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanCreateReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanExportReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanPageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanUpdateReqVO;
-import cn.iocoder.yudao.module.crm.convert.receivable.ReceivablePlanConvert;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanCreateReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanExportReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanPageReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanUpdateReqVO;
+import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivablePlanConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
-import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivablePlanMapper;
+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.enums.AuditStatusEnum;
 import cn.iocoder.yudao.module.crm.service.contract.ContractService;
 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
@@ -35,19 +34,19 @@ import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
  */
 @Service
 @Validated
-public class ReceivablePlanServiceImpl implements ReceivablePlanService {
+public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService {
 
     @Resource
-    private ReceivablePlanMapper receivablePlanMapper;
+    private CrmReceivablePlanMapper crmReceivablePlanMapper;
     @Resource
     private ContractService contractService;
     @Resource
     private CrmCustomerService crmCustomerService;
 
     @Override
-    public Long createReceivablePlan(ReceivablePlanCreateReqVO createReqVO) {
+    public Long createReceivablePlan(CrmReceivablePlanCreateReqVO createReqVO) {
         // 插入
-        ReceivablePlanDO receivablePlan = ReceivablePlanConvert.INSTANCE.convert(createReqVO);
+        CrmReceivablePlanDO receivablePlan = CrmReceivablePlanConvert.INSTANCE.convert(createReqVO);
         if (ObjectUtil.isNull(receivablePlan.getStatus())){
             receivablePlan.setStatus(CommonStatusEnum.ENABLE.getStatus());
         }
@@ -57,12 +56,12 @@ public class ReceivablePlanServiceImpl implements ReceivablePlanService {
 
         checkReceivablePlan(receivablePlan);
 
-        receivablePlanMapper.insert(receivablePlan);
+        crmReceivablePlanMapper.insert(receivablePlan);
         // 返回
         return receivablePlan.getId();
     }
 
-    private void checkReceivablePlan(ReceivablePlanDO receivablePlan) {
+    private void checkReceivablePlan(CrmReceivablePlanDO receivablePlan) {
 
         if(ObjectUtil.isNull(receivablePlan.getContractId())){
             throw exception(CONTRACT_NOT_EXISTS);
@@ -81,13 +80,13 @@ public class ReceivablePlanServiceImpl implements ReceivablePlanService {
     }
 
     @Override
-    public void updateReceivablePlan(ReceivablePlanUpdateReqVO updateReqVO) {
+    public void updateReceivablePlan(CrmReceivablePlanUpdateReqVO updateReqVO) {
         // 校验存在
         validateReceivablePlanExists(updateReqVO.getId());
 
         // 更新
-        ReceivablePlanDO updateObj = ReceivablePlanConvert.INSTANCE.convert(updateReqVO);
-        receivablePlanMapper.updateById(updateObj);
+        CrmReceivablePlanDO updateObj = CrmReceivablePlanConvert.INSTANCE.convert(updateReqVO);
+        crmReceivablePlanMapper.updateById(updateObj);
     }
 
     @Override
@@ -95,36 +94,36 @@ public class ReceivablePlanServiceImpl implements ReceivablePlanService {
         // 校验存在
         validateReceivablePlanExists(id);
         // 删除
-        receivablePlanMapper.deleteById(id);
+        crmReceivablePlanMapper.deleteById(id);
     }
 
     private void validateReceivablePlanExists(Long id) {
-        if (receivablePlanMapper.selectById(id) == null) {
+        if (crmReceivablePlanMapper.selectById(id) == null) {
             throw exception(RECEIVABLE_PLAN_NOT_EXISTS);
         }
     }
 
     @Override
-    public ReceivablePlanDO getReceivablePlan(Long id) {
-        return receivablePlanMapper.selectById(id);
+    public CrmReceivablePlanDO getReceivablePlan(Long id) {
+        return crmReceivablePlanMapper.selectById(id);
     }
 
     @Override
-    public List<ReceivablePlanDO> getReceivablePlanList(Collection<Long> ids) {
+    public List<CrmReceivablePlanDO> getReceivablePlanList(Collection<Long> ids) {
         if (CollUtil.isEmpty(ids)) {
             return ListUtil.empty();
         }
-        return receivablePlanMapper.selectBatchIds(ids);
+        return crmReceivablePlanMapper.selectBatchIds(ids);
     }
 
     @Override
-    public PageResult<ReceivablePlanDO> getReceivablePlanPage(ReceivablePlanPageReqVO pageReqVO) {
-        return receivablePlanMapper.selectPage(pageReqVO);
+    public PageResult<CrmReceivablePlanDO> getReceivablePlanPage(CrmReceivablePlanPageReqVO pageReqVO) {
+        return crmReceivablePlanMapper.selectPage(pageReqVO);
     }
 
     @Override
-    public List<ReceivablePlanDO> getReceivablePlanList(ReceivablePlanExportReqVO exportReqVO) {
-        return receivablePlanMapper.selectList(exportReqVO);
+    public List<CrmReceivablePlanDO> getReceivablePlanList(CrmReceivablePlanExportReqVO exportReqVO) {
+        return crmReceivablePlanMapper.selectList(exportReqVO);
     }
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableService.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableService.java
similarity index 67%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableService.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableService.java
index a673ec99e..8875faaa9 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableService.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableService.java
@@ -4,7 +4,7 @@ import java.util.*;
 import javax.validation.*;
 
 import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 
 /**
@@ -12,7 +12,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
  *
  * @author 赤焰
  */
-public interface ReceivableService {
+public interface CrmReceivableService {
 
     /**
      * 创建回款管理
@@ -20,14 +20,14 @@ public interface ReceivableService {
      * @param createReqVO 创建信息
      * @return 编号
      */
-    Long createReceivable(@Valid ReceivableCreateReqVO createReqVO);
+    Long createReceivable(@Valid CrmReceivableCreateReqVO createReqVO);
 
     /**
      * 更新回款管理
      *
      * @param updateReqVO 更新信息
      */
-    void updateReceivable(@Valid ReceivableUpdateReqVO updateReqVO);
+    void updateReceivable(@Valid CrmReceivableUpdateReqVO updateReqVO);
 
     /**
      * 删除回款管理
@@ -42,7 +42,7 @@ public interface ReceivableService {
      * @param id 编号
      * @return 回款管理
      */
-    ReceivableDO getReceivable(Long id);
+    CrmReceivableDO getReceivable(Long id);
 
     /**
      * 获得回款管理列表
@@ -50,7 +50,7 @@ public interface ReceivableService {
      * @param ids 编号
      * @return 回款管理列表
      */
-    List<ReceivableDO> getReceivableList(Collection<Long> ids);
+    List<CrmReceivableDO> getReceivableList(Collection<Long> ids);
 
     /**
      * 获得回款管理分页
@@ -58,7 +58,7 @@ public interface ReceivableService {
      * @param pageReqVO 分页查询
      * @return 回款管理分页
      */
-    PageResult<ReceivableDO> getReceivablePage(ReceivablePageReqVO pageReqVO);
+    PageResult<CrmReceivableDO> getReceivablePage(CrmReceivablePageReqVO pageReqVO);
 
     /**
      * 获得回款管理列表, 用于 Excel 导出
@@ -66,6 +66,6 @@ public interface ReceivableService {
      * @param exportReqVO 查询条件
      * @return 回款管理列表
      */
-    List<ReceivableDO> getReceivableList(ReceivableExportReqVO exportReqVO);
+    List<CrmReceivableDO> getReceivableList(CrmReceivableExportReqVO exportReqVO);
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
similarity index 62%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
rename to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
index d3c7a16ef..ff751bc51 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImpl.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivableServiceImpl.java
@@ -3,19 +3,18 @@ package cn.iocoder.yudao.module.crm.service.receivable;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableCreateReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableExportReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableUpdateReqVO;
-import cn.iocoder.yudao.module.crm.convert.receivable.ReceivableConvert;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableCreateReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableExportReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePageReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableUpdateReqVO;
+import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivableConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
-import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
+import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivableMapper;
 import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum;
 import cn.iocoder.yudao.module.crm.service.contract.ContractService;
 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
@@ -36,21 +35,21 @@ import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
  */
 @Service
 @Validated
-public class ReceivableServiceImpl implements ReceivableService {
+public class CrmReceivableServiceImpl implements CrmReceivableService {
 
     @Resource
-    private ReceivableMapper receivableMapper;
+    private CrmReceivableMapper crmReceivableMapper;
     @Resource
     private ContractService contractService;
     @Resource
     private CrmCustomerService crmCustomerService;
     @Resource
-    private ReceivablePlanService receivablePlanService;
+    private CrmReceivablePlanService crmReceivablePlanService;
 
     @Override
-    public Long createReceivable(ReceivableCreateReqVO createReqVO) {
+    public Long createReceivable(CrmReceivableCreateReqVO createReqVO) {
         // 插入
-        ReceivableDO receivable = ReceivableConvert.INSTANCE.convert(createReqVO);
+        CrmReceivableDO receivable = CrmReceivableConvert.INSTANCE.convert(createReqVO);
         if (ObjectUtil.isNull(receivable.getStatus())){
             receivable.setStatus(CommonStatusEnum.ENABLE.getStatus());
         }
@@ -61,12 +60,12 @@ public class ReceivableServiceImpl implements ReceivableService {
         //校验
         checkReceivable(receivable);
 
-        receivableMapper.insert(receivable);
+        crmReceivableMapper.insert(receivable);
         // 返回
         return receivable.getId();
     }
 
-    private void checkReceivable(ReceivableDO receivable) {
+    private void checkReceivable(CrmReceivableDO receivable) {
 
         if(ObjectUtil.isNull(receivable.getContractId())){
             throw exception(CONTRACT_NOT_EXISTS);
@@ -82,7 +81,7 @@ public class ReceivableServiceImpl implements ReceivableService {
             throw exception(CUSTOMER_NOT_EXISTS);
         }
 
-        ReceivablePlanDO receivablePlan = receivablePlanService.getReceivablePlan(receivable.getPlanId());
+        CrmReceivablePlanDO receivablePlan = crmReceivablePlanService.getReceivablePlan(receivable.getPlanId());
         if(ObjectUtil.isNull(receivablePlan)){
             throw exception(RECEIVABLE_PLAN_NOT_EXISTS);
         }
@@ -90,13 +89,13 @@ public class ReceivableServiceImpl implements ReceivableService {
     }
 
     @Override
-    public void updateReceivable(ReceivableUpdateReqVO updateReqVO) {
+    public void updateReceivable(CrmReceivableUpdateReqVO updateReqVO) {
         // 校验存在
         validateReceivableExists(updateReqVO.getId());
 
         // 更新
-        ReceivableDO updateObj = ReceivableConvert.INSTANCE.convert(updateReqVO);
-        receivableMapper.updateById(updateObj);
+        CrmReceivableDO updateObj = CrmReceivableConvert.INSTANCE.convert(updateReqVO);
+        crmReceivableMapper.updateById(updateObj);
     }
 
     @Override
@@ -104,36 +103,36 @@ public class ReceivableServiceImpl implements ReceivableService {
         // 校验存在
         validateReceivableExists(id);
         // 删除
-        receivableMapper.deleteById(id);
+        crmReceivableMapper.deleteById(id);
     }
 
     private void validateReceivableExists(Long id) {
-        if (receivableMapper.selectById(id) == null) {
+        if (crmReceivableMapper.selectById(id) == null) {
             throw exception(RECEIVABLE_NOT_EXISTS);
         }
     }
 
     @Override
-    public ReceivableDO getReceivable(Long id) {
-        return receivableMapper.selectById(id);
+    public CrmReceivableDO getReceivable(Long id) {
+        return crmReceivableMapper.selectById(id);
     }
 
     @Override
-    public List<ReceivableDO> getReceivableList(Collection<Long> ids) {
+    public List<CrmReceivableDO> getReceivableList(Collection<Long> ids) {
         if (CollUtil.isEmpty(ids)) {
             return ListUtil.empty();
         }
-        return receivableMapper.selectBatchIds(ids);
+        return crmReceivableMapper.selectBatchIds(ids);
     }
 
     @Override
-    public PageResult<ReceivableDO> getReceivablePage(ReceivablePageReqVO pageReqVO) {
-        return receivableMapper.selectPage(pageReqVO);
+    public PageResult<CrmReceivableDO> getReceivablePage(CrmReceivablePageReqVO pageReqVO) {
+        return crmReceivableMapper.selectPage(pageReqVO);
     }
 
     @Override
-    public List<ReceivableDO> getReceivableList(ReceivableExportReqVO exportReqVO) {
-        return receivableMapper.selectList(exportReqVO);
+    public List<CrmReceivableDO> getReceivableList(CrmReceivableExportReqVO exportReqVO) {
+        return crmReceivableMapper.selectList(exportReqVO);
     }
 
 }
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/ReceivableMapper.xml b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/CrmReceivableMapper.xml
similarity index 95%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/ReceivableMapper.xml
rename to yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/CrmReceivableMapper.xml
index b87beb08f..b2ab2042e 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/ReceivableMapper.xml
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/CrmReceivableMapper.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper">
+<mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivableMapper">
 
     <!--
         一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/ReceivablePlanMapper.xml b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/CrmReceivablePlanMapper.xml
similarity index 95%
rename from yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/ReceivablePlanMapper.xml
rename to yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/CrmReceivablePlanMapper.xml
index f0e4c2e84..3b18148de 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/ReceivablePlanMapper.xml
+++ b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/mapper/receivable/CrmReceivablePlanMapper.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivablePlanMapper">
+<mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivablePlanMapper">
 
     <!--
         一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmCrmReceivablePlanServiceImplTest.java
similarity index 58%
rename from yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
rename to yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmCrmReceivablePlanServiceImplTest.java
index 952514ecb..09993f899 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivablePlanServiceImplTest.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmCrmReceivablePlanServiceImplTest.java
@@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.crm.service.receivable;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanCreateReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanExportReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanPageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanUpdateReqVO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO;
-import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivablePlanMapper;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanCreateReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanExportReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanPageReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanUpdateReqVO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO;
+import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivablePlanMapper;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.Import;
@@ -26,54 +26,54 @@ import static org.junit.jupiter.api.Assertions.*;
 
 // TODO 芋艿:后续,需要补充测试用例
 /**
- * {@link ReceivablePlanServiceImpl} 的单元测试类
+ * {@link CrmReceivablePlanServiceImpl} 的单元测试类
  *
  * @author 芋道源码
  */
-@Import(ReceivablePlanServiceImpl.class)
-public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
+@Import(CrmReceivablePlanServiceImpl.class)
+public class CrmCrmReceivablePlanServiceImplTest extends BaseDbUnitTest {
 
     @Resource
-    private ReceivablePlanServiceImpl receivablePlanService;
+    private CrmReceivablePlanServiceImpl receivablePlanService;
 
     @Resource
-    private ReceivablePlanMapper receivablePlanMapper;
+    private CrmReceivablePlanMapper crmReceivablePlanMapper;
 
     @Test
     public void testCreateReceivablePlan_success() {
         // 准备参数
-        ReceivablePlanCreateReqVO reqVO = randomPojo(ReceivablePlanCreateReqVO.class);
+        CrmReceivablePlanCreateReqVO reqVO = randomPojo(CrmReceivablePlanCreateReqVO.class);
 
         // 调用
         Long receivablePlanId = receivablePlanService.createReceivablePlan(reqVO);
         // 断言
         assertNotNull(receivablePlanId);
         // 校验记录的属性是否正确
-        ReceivablePlanDO receivablePlan = receivablePlanMapper.selectById(receivablePlanId);
+        CrmReceivablePlanDO receivablePlan = crmReceivablePlanMapper.selectById(receivablePlanId);
         assertPojoEquals(reqVO, receivablePlan);
     }
 
     @Test
     public void testUpdateReceivablePlan_success() {
         // mock 数据
-        ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class);
-        receivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据
+        CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class);
+        crmReceivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据
         // 准备参数
-        ReceivablePlanUpdateReqVO reqVO = randomPojo(ReceivablePlanUpdateReqVO.class, o -> {
+        CrmReceivablePlanUpdateReqVO reqVO = randomPojo(CrmReceivablePlanUpdateReqVO.class, o -> {
             o.setId(dbReceivablePlan.getId()); // 设置更新的 ID
         });
 
         // 调用
         receivablePlanService.updateReceivablePlan(reqVO);
         // 校验是否更新正确
-        ReceivablePlanDO receivablePlan = receivablePlanMapper.selectById(reqVO.getId()); // 获取最新的
+        CrmReceivablePlanDO receivablePlan = crmReceivablePlanMapper.selectById(reqVO.getId()); // 获取最新的
         assertPojoEquals(reqVO, receivablePlan);
     }
 
     @Test
     public void testUpdateReceivablePlan_notExists() {
         // 准备参数
-        ReceivablePlanUpdateReqVO reqVO = randomPojo(ReceivablePlanUpdateReqVO.class);
+        CrmReceivablePlanUpdateReqVO reqVO = randomPojo(CrmReceivablePlanUpdateReqVO.class);
 
         // 调用, 并断言异常
         assertServiceException(() -> receivablePlanService.updateReceivablePlan(reqVO), RECEIVABLE_PLAN_NOT_EXISTS);
@@ -82,15 +82,15 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
     @Test
     public void testDeleteReceivablePlan_success() {
         // mock 数据
-        ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class);
-        receivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据
+        CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class);
+        crmReceivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据
         // 准备参数
         Long id = dbReceivablePlan.getId();
 
         // 调用
         receivablePlanService.deleteReceivablePlan(id);
        // 校验数据不存在了
-       assertNull(receivablePlanMapper.selectById(id));
+       assertNull(crmReceivablePlanMapper.selectById(id));
     }
 
     @Test
@@ -106,7 +106,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
     public void testGetReceivablePlanPage() {
        // mock 数据
-       ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class, o -> { // 等会查询到
+       CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class, o -> { // 等会查询到
            o.setPeriod(null);
            o.setStatus(null);
            o.setCheckStatus(null);
@@ -119,31 +119,31 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
            o.setRemark(null);
            o.setCreateTime(null);
        });
-       receivablePlanMapper.insert(dbReceivablePlan);
+       crmReceivablePlanMapper.insert(dbReceivablePlan);
        // 测试 Period 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null)));
        // 测试 status 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null)));
        // 测试 checkStatus 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null)));
        // 测试 returnTime 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null)));
        // 测试 remindDays 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null)));
        // 测试 remindTime 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null)));
        // 测试 customerId 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null)));
        // 测试 contractId 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null)));
        // 测试 ownerUserId 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null)));
        // 测试 remark 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null)));
        // 测试 createTime 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null)));
        // 准备参数
-       ReceivablePlanPageReqVO reqVO = new ReceivablePlanPageReqVO();
+       CrmReceivablePlanPageReqVO reqVO = new CrmReceivablePlanPageReqVO();
        reqVO.setStatus(null);
        reqVO.setCheckStatus(null);
        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
@@ -154,7 +154,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
 
        // 调用
-       PageResult<ReceivablePlanDO> pageResult = receivablePlanService.getReceivablePlanPage(reqVO);
+       PageResult<CrmReceivablePlanDO> pageResult = receivablePlanService.getReceivablePlanPage(reqVO);
        // 断言
        assertEquals(1, pageResult.getTotal());
        assertEquals(1, pageResult.getList().size());
@@ -165,7 +165,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
     public void testGetReceivablePlanList() {
        // mock 数据
-       ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class, o -> { // 等会查询到
+       CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class, o -> { // 等会查询到
            o.setPeriod(null);
            o.setStatus(null);
            o.setCheckStatus(null);
@@ -178,31 +178,31 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
            o.setRemark(null);
            o.setCreateTime(null);
        });
-       receivablePlanMapper.insert(dbReceivablePlan);
+       crmReceivablePlanMapper.insert(dbReceivablePlan);
        // 测试 Period 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null)));
        // 测试 status 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null)));
        // 测试 checkStatus 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null)));
        // 测试 returnTime 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null)));
        // 测试 remindDays 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null)));
        // 测试 remindTime 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null)));
        // 测试 customerId 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null)));
        // 测试 contractId 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null)));
        // 测试 ownerUserId 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null)));
        // 测试 remark 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null)));
        // 测试 createTime 不匹配
-       receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null)));
+       crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null)));
        // 准备参数
-       ReceivablePlanExportReqVO reqVO = new ReceivablePlanExportReqVO();
+       CrmReceivablePlanExportReqVO reqVO = new CrmReceivablePlanExportReqVO();
        reqVO.setPeriod(null);
        reqVO.setStatus(null);
        reqVO.setCheckStatus(null);
@@ -216,7 +216,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest {
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
 
        // 调用
-       List<ReceivablePlanDO> list = receivablePlanService.getReceivablePlanList(reqVO);
+       List<CrmReceivablePlanDO> list = receivablePlanService.getReceivablePlanList(reqVO);
        // 断言
        assertEquals(1, list.size());
        assertPojoEquals(dbReceivablePlan, list.get(0));
diff --git a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImplTest.java b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmCrmReceivableServiceImplTest.java
similarity index 57%
rename from yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImplTest.java
rename to yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmCrmReceivableServiceImplTest.java
index 906fdb436..6d65231b1 100644
--- a/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/ReceivableServiceImplTest.java
+++ b/yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/receivable/CrmCrmReceivableServiceImplTest.java
@@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.crm.service.receivable;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableCreateReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableExportReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePageReqVO;
-import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableUpdateReqVO;
-import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO;
-import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableCreateReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableExportReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePageReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableUpdateReqVO;
+import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO;
+import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivableMapper;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.annotation.Import;
@@ -26,54 +26,54 @@ import static org.junit.jupiter.api.Assertions.*;
 
 // TODO 芋艿:等实现完,在校验下;
 /**
- * {@link ReceivableServiceImpl} 的单元测试类
+ * {@link CrmReceivableServiceImpl} 的单元测试类
  *
  * @author 赤焰
  */
-@Import(ReceivableServiceImpl.class)
-public class ReceivableServiceImplTest extends BaseDbUnitTest {
+@Import(CrmReceivableServiceImpl.class)
+public class CrmCrmReceivableServiceImplTest extends BaseDbUnitTest {
 
     @Resource
-    private ReceivableServiceImpl receivableService;
+    private CrmReceivableServiceImpl receivableService;
 
     @Resource
-    private ReceivableMapper receivableMapper;
+    private CrmReceivableMapper crmReceivableMapper;
 
     @Test
     public void testCreateReceivable_success() {
         // 准备参数
-        ReceivableCreateReqVO reqVO = randomPojo(ReceivableCreateReqVO.class);
+        CrmReceivableCreateReqVO reqVO = randomPojo(CrmReceivableCreateReqVO.class);
 
         // 调用
         Long receivableId = receivableService.createReceivable(reqVO);
         // 断言
         assertNotNull(receivableId);
         // 校验记录的属性是否正确
-        ReceivableDO receivable = receivableMapper.selectById(receivableId);
+        CrmReceivableDO receivable = crmReceivableMapper.selectById(receivableId);
         assertPojoEquals(reqVO, receivable);
     }
 
     @Test
     public void testUpdateReceivable_success() {
         // mock 数据
-        ReceivableDO dbReceivable = randomPojo(ReceivableDO.class);
-        receivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据
+        CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class);
+        crmReceivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据
         // 准备参数
-        ReceivableUpdateReqVO reqVO = randomPojo(ReceivableUpdateReqVO.class, o -> {
+        CrmReceivableUpdateReqVO reqVO = randomPojo(CrmReceivableUpdateReqVO.class, o -> {
             o.setId(dbReceivable.getId()); // 设置更新的 ID
         });
 
         // 调用
         receivableService.updateReceivable(reqVO);
         // 校验是否更新正确
-        ReceivableDO receivable = receivableMapper.selectById(reqVO.getId()); // 获取最新的
+        CrmReceivableDO receivable = crmReceivableMapper.selectById(reqVO.getId()); // 获取最新的
         assertPojoEquals(reqVO, receivable);
     }
 
     @Test
     public void testUpdateReceivable_notExists() {
         // 准备参数
-        ReceivableUpdateReqVO reqVO = randomPojo(ReceivableUpdateReqVO.class);
+        CrmReceivableUpdateReqVO reqVO = randomPojo(CrmReceivableUpdateReqVO.class);
 
         // 调用, 并断言异常
         assertServiceException(() -> receivableService.updateReceivable(reqVO), RECEIVABLE_NOT_EXISTS);
@@ -82,15 +82,15 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
     @Test
     public void testDeleteReceivable_success() {
         // mock 数据
-        ReceivableDO dbReceivable = randomPojo(ReceivableDO.class);
-        receivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据
+        CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class);
+        crmReceivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据
         // 准备参数
         Long id = dbReceivable.getId();
 
         // 调用
         receivableService.deleteReceivable(id);
        // 校验数据不存在了
-       assertNull(receivableMapper.selectById(id));
+       assertNull(crmReceivableMapper.selectById(id));
     }
 
     @Test
@@ -106,7 +106,7 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
     public void testGetReceivablePage() {
        // mock 数据
-       ReceivableDO dbReceivable = randomPojo(ReceivableDO.class, o -> { // 等会查询到
+       CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class, o -> { // 等会查询到
            o.setNo(null);
            o.setPlanId(null);
            o.setCustomerId(null);
@@ -125,43 +125,43 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
            o.setRemark(null);
            o.setCreateTime(null);
        });
-       receivableMapper.insert(dbReceivable);
+       crmReceivableMapper.insert(dbReceivable);
        // 测试 no 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null)));
        // 测试 planId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null)));
        // 测试 customerId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null)));
        // 测试 contractId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null)));
        // 测试 checkStatus 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null)));
        // 测试 processInstanceId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null)));
        // 测试 returnTime 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null)));
        // 测试 returnType 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null)));
        // 测试 price 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null)));
        // 测试 ownerUserId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null)));
        // 测试 batchId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null)));
        // 测试 sort 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null)));
        // 测试 dataScope 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null)));
        // 测试 dataScopeDeptIds 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null)));
        // 测试 status 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null)));
        // 测试 remark 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null)));
        // 测试 createTime 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null)));
        // 准备参数
-       ReceivablePageReqVO reqVO = new ReceivablePageReqVO();
+       CrmReceivablePageReqVO reqVO = new CrmReceivablePageReqVO();
        reqVO.setNo(null);
        reqVO.setPlanId(null);
        reqVO.setCustomerId(null);
@@ -175,7 +175,7 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
 
        // 调用
-       PageResult<ReceivableDO> pageResult = receivableService.getReceivablePage(reqVO);
+       PageResult<CrmReceivableDO> pageResult = receivableService.getReceivablePage(reqVO);
        // 断言
        assertEquals(1, pageResult.getTotal());
        assertEquals(1, pageResult.getList().size());
@@ -186,7 +186,7 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
     public void testGetReceivableList() {
        // mock 数据
-       ReceivableDO dbReceivable = randomPojo(ReceivableDO.class, o -> { // 等会查询到
+       CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class, o -> { // 等会查询到
            o.setNo(null);
            o.setPlanId(null);
            o.setCustomerId(null);
@@ -205,43 +205,43 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
            o.setRemark(null);
            o.setCreateTime(null);
        });
-       receivableMapper.insert(dbReceivable);
+       crmReceivableMapper.insert(dbReceivable);
        // 测试 no 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null)));
        // 测试 planId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null)));
        // 测试 customerId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null)));
        // 测试 contractId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null)));
        // 测试 checkStatus 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null)));
        // 测试 processInstanceId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null)));
        // 测试 returnTime 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null)));
        // 测试 returnType 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null)));
        // 测试 price 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null)));
        // 测试 ownerUserId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null)));
        // 测试 batchId 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null)));
        // 测试 sort 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null)));
        // 测试 dataScope 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null)));
        // 测试 dataScopeDeptIds 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null)));
        // 测试 status 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null)));
        // 测试 remark 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null)));
        // 测试 createTime 不匹配
-       receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null)));
+       crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null)));
        // 准备参数
-       ReceivableExportReqVO reqVO = new ReceivableExportReqVO();
+       CrmReceivableExportReqVO reqVO = new CrmReceivableExportReqVO();
        reqVO.setNo(null);
        reqVO.setPlanId(null);
        reqVO.setCustomerId(null);
@@ -257,7 +257,7 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest {
        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
 
        // 调用
-       List<ReceivableDO> list = receivableService.getReceivableList(reqVO);
+       List<CrmReceivableDO> list = receivableService.getReceivableList(reqVO);
        // 断言
        assertEquals(1, list.size());
        assertPojoEquals(dbReceivable, list.get(0));