Skip to content

CRM 回款,主要指的是在销售过程中,企业与客户签订销售【合同】后,从客户那里实际收到的款项的记录。 目前有两种回款链路,因此表关系如下图所示: 【合同】=>【回款】 【合同】=>【回款计划】=>【回款】 alt text

1.回款

CREATE TABLE `crm_receivable` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '回款编号',
  
  `customer_id` bigint NOT NULL COMMENT '客户ID',
  `contract_id` bigint NOT NULL COMMENT '合同ID',
  
  `plan_id` bigint DEFAULT NULL COMMENT '回款计划ID',
  
  `owner_user_id` bigint DEFAULT NULL COMMENT '负责人的用户编号',
  
  `audit_status` tinyint NOT NULL COMMENT '审批状态',
  `process_instance_id` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '工作流编号',

  `price` decimal(24,6) NOT NULL COMMENT '回款金额',
  
  `return_time` datetime DEFAULT NULL COMMENT '回款日期',
  `return_type` int DEFAULT NULL COMMENT '回款方式',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CRM 回款管理';

① no 字段:回款编号,系统自动生成的,目前格式是 {prefix}{yyyyMMdd}{6 位自增}。具体可见 ErpNoRedisDAO 类。

② customer_id 和 contract_id 字段:客户编号和合同编号,对应 crm_customer 表和 crm_contract 表的 id 字段,必填。

③ plan_id 字段:回款计划编号,对应 crm_receivable_plan 表的 id 字段,选填。只有在【合同】=>【回款计划】=>【回款】的情况下,才会有值。

④ owner_user_id 字段:回款的负责人编号,和线索类似。不重复赘述,详细可见 《【通用】数据权限》 文档。

⑤ process_instance_id 字段:工作流编号,用于和 BPM 工作流 打通审批。提交审批后,会自动创建一个工作流实例,并记录到该字段。

audit_status 字段:审批结果,目前由 CrmAuditStatusEnum 枚举,目前有 5 个状态:未提交、审批中、审批通过、审批不通过、已取消。

⑥ price 字段:回款金额。一个合同可能有多次回款,它总的回款金额不能超过合同金额。

⑦ return_time、return_type、remark 字段:回款日期、回款方式、备注。就是信息字段,没什么特殊逻辑。

2.回款计划

CREATE TABLE `crm_receivable_plan` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
  
  `period` bigint NOT NULL COMMENT '期数',
  
  `customer_id` bigint NOT NULL COMMENT '客户编号',
  `contract_id` bigint NOT NULL COMMENT '合同编号',
  
  `owner_user_id` bigint DEFAULT NULL COMMENT '负责人编号',
  
  `receivable_id` bigint DEFAULT NULL COMMENT '回款编号',
  
  `return_time` datetime DEFAULT NULL COMMENT '计划回款日期',
  `return_type` tinyint DEFAULT NULL COMMENT '计划还款方式',
  `price` decimal(24,6) NOT NULL COMMENT '计划回款金额',
  `remind_days` bigint DEFAULT NULL COMMENT '提前几天提醒',
  `remind_time` datetime DEFAULT NULL COMMENT '提醒日期',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CRM 回款计划';

由于 crm_receivable_plan 是 crm_receivable 的计划(草稿),所以结构上非常相似。

① period 字段:期数,比如第一期、第二期、第三期等。目前是基于 contract_id 在 crm_receivable_plan 表中的最大期数加 1。

② customer_id 和 contract_id 字段:客户编号和合同编号,对应 crm_customer 表和 crm_contract 表的 id 字段,必填。

③ owner_user_id 字段:回款计划的负责人编号,和线索类似。不重复赘述,详细可见 《【通用】数据权限》 文档。

④ receivable_id 字段:回款编号,对应 crm_receivable 表的 id 字段,选填。

只有在【合同】=>【回款计划】=>【回款】的情况下,才会有值。即基于【回款计划】创建【回款】时,会将【回款】的 id 字段记录到这里。

⑤ return_time、return_type、price、remind_days、remind_time、remark 字段:回款日期、回款方式、回款金额、提醒天数、提醒日期、备注。就是信息字段,没什么特殊逻辑。

不过 remind_time 字段,有点特殊,它是 return_time 字段减去 remind_days 字段的日期,后续用于提醒,如下图所示: