08-回款管理API接口.md 25 KB

回款管理模块 - API接口文档

模块: 08-回款管理
版本: v1.0
日期: 2025-10-03
关联文档:

  • 需求文档: docs/08-回款管理模块需求.md
  • 原型图: yuanxing/08-回款管理原型图.md
  • 数据库: sql/crm/08-crm_payment.sql

📋 目录


1. 回款计划接口

1.1 查询回款计划列表(分页)

接口地址: GET /crm/payment/plan/list

接口描述: 分页查询回款计划列表,支持多条件筛选

权限标识: crm:payment:plan:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | pageNum | Integer | 否 | 页码,默认1 | | pageSize | Integer | 否 | 每页条数,默认10 | | planNo | String | 否 | 计划编号(模糊查询) | | contractId | Long | 否 | 合同ID | | contractNo | String | 否 | 合同编号(模糊查询) | | customerId | Long | 否 | 客户ID | | customerName | String | 否 | 客户名称(模糊查询) | | status | String | 否 | 状态 | | isOverdue | Integer | 否 | 是否逾期(0否 1是) | | ownerUserId | Long | 否 | 负责人ID | | planDateBegin | String | 否 | 计划回款日期开始 | | planDateEnd | String | 否 | 计划回款日期结束 | | beginTime | String | 否 | 创建开始时间 | | endTime | String | 否 | 创建结束时间 |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "rows": [
    {
      "id": 1,
      "planNo": "PLAN20250115001",
      "contractId": 1,
      "contractNo": "CON20250115001",
      "customerId": 1,
      "customerName": "华为技术有限公司",
      "period": 1,
      "planAmount": 40500.00,
      "planDate": "2025-01-22",
      "planPercent": 30.00,
      "receivedAmount": 40500.00,
      "unreceivedAmount": 0.00,
      "status": "finished",
      "isOverdue": 0,
      "overduedays": 0,
      "remindDays": 7,
      "remindStatus": "reminded",
      "lastRemindTime": "2025-01-15 09:00:00",
      "ownerUserId": 1,
      "ownerUserName": "张三",
      "createTime": "2025-01-15 10:00:00",
      "remark": "首期款30%"
    }
  ],
  "total": 156
}

1.2 查询回款计划详情

接口地址: GET /crm/payment/plan/{id}

接口描述: 根据ID查询回款计划详细信息

权限标识: crm:payment:plan:query

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 回款计划ID |

返回示例: 同1.1列表返回的单条数据,包含完整字段


1.3 新增回款计划

接口地址: POST /crm/payment/plan

接口描述: 新增回款计划信息

权限标识: crm:payment:plan:add

请求体:

{
  "planNo": "PLAN20250115001",
  "contractId": 1,
  "customerId": 1,
  "period": 1,
  "planAmount": 40500.00,
  "planDate": "2025-01-22",
  "planPercent": 30.00,
  "remindDays": 7,
  "ownerUserId": 1,
  "remark": "首期款30%"
}

请求参数说明: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | planNo | String | 是 | 计划编号,唯一,格式:PLAN+yyyyMMdd+4位流水号 | | contractId | Long | 是 | 合同ID | | customerId | Long | 是 | 客户ID | | period | Integer | 是 | 期数,必须大于0 | | planAmount | BigDecimal | 是 | 计划回款金额,保留2位小数 | | planDate | String | 是 | 计划回款日期 yyyy-MM-dd | | planPercent | BigDecimal | 否 | 计划比例(百分比) | | remindDays | Integer | 否 | 提前提醒天数,默认7天 | | ownerUserId | Long | 否 | 负责人ID,默认当前用户 | | remark | String | 否 | 备注,最大500字符 |

校验规则:

  • 计划编号必须唯一
  • 计划金额必须大于0
  • 合同ID必须存在
  • 期数不能重复(同一合同)

业务规则:

  • 自动计算未回款金额:planAmount - receivedAmount
  • 默认状态为pending(待回款)
  • 自动验证计划总金额是否超过合同金额

返回示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "planNo": "PLAN20250115001"
  }
}

1.4 修改回款计划

接口地址: PUT /crm/payment/plan

接口描述: 修改回款计划信息

权限标识: crm:payment:plan:edit

请求体: 同新增接口,但需要传入id

业务规则:

  • 只有待回款状态的计划才能修改
  • 如果有关联回款记录,不允许修改金额

返回示例:

{
  "code": 200,
  "msg": "操作成功"
}

1.5 删除回款计划

接口地址: DELETE /crm/payment/plan/{ids}

接口描述: 删除回款计划(支持批量)

权限标识: crm:payment:plan:remove

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | ids | Long[] | 是 | 回款计划ID数组 |

业务规则:

  • 有关联回款记录的计划不允许删除
  • 已完成的计划不允许删除

返回示例:

{
  "code": 200,
  "msg": "操作成功"
}

1.6 查询合同回款计划

接口地址: GET /crm/payment/plan/contract/{contractId}

接口描述: 查询指定合同的所有回款计划

权限标识: crm:payment:plan:query

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | contractId | Long | 是 | 合同ID |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": [
    {
      "id": 1,
      "period": 1,
      "planAmount": 40500.00,
      "planDate": "2025-01-22",
      "planPercent": 30.00,
      "receivedAmount": 40500.00,
      "status": "finished"
    },
    {
      "id": 2,
      "period": 2,
      "planAmount": 81000.00,
      "planDate": "2025-02-15",
      "planPercent": 60.00,
      "receivedAmount": 0.00,
      "status": "pending"
    }
  ]
}

1.7 批量生成回款计划

接口地址: POST /crm/payment/plan/batchGenerate

接口描述: 根据合同自动生成回款计划

权限标识: crm:payment:plan:add

请求体:

{
  "contractId": 1,
  "plans": [
    {
      "period": 1,
      "planPercent": 30.00,
      "planDate": "2025-01-22",
      "remark": "首期款"
    },
    {
      "period": 2,
      "planPercent": 60.00,
      "planDate": "2025-02-15",
      "remark": "二期款"
    },
    {
      "period": 3,
      "planPercent": 10.00,
      "planDate": "2025-03-01",
      "remark": "尾款"
    }
  ]
}

请求参数说明: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | contractId | Long | 是 | 合同ID | | plans | Array | 是 | 计划列表,至少1个 |

业务规则:

  • 自动根据合同金额计算每期金额
  • 验证总比例是否为100%
  • 自动生成计划编号

返回示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "count": 3
  }
}

1.8 导出回款计划

接口地址: POST /crm/payment/plan/export

接口描述: 导出回款计划数据到Excel

权限标识: crm:payment:plan:export

请求体: 查询参数同1.1列表查询接口

返回: Excel文件流


2. 回款记录接口

2.1 查询回款记录列表(分页)

接口地址: GET /crm/payment/list

接口描述: 分页查询回款记录列表,支持多条件筛选

权限标识: crm:payment:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | pageNum | Integer | 否 | 页码,默认1 | | pageSize | Integer | 否 | 每页条数,默认10 | | paymentNo | String | 否 | 回款编号(模糊查询) | | contractId | Long | 否 | 合同ID | | contractNo | String | 否 | 合同编号(模糊查询) | | customerId | Long | 否 | 客户ID | | customerName | String | 否 | 客户名称(模糊查询) | | planId | Long | 否 | 回款计划ID | | paymentMethod | String | 否 | 付款方式 | | status | String | 否 | 回款状态 | | ownerUserId | Long | 否 | 负责人ID | | confirmBy | Long | 否 | 确认人ID | | paymentDateBegin | String | 否 | 回款日期开始 | | paymentDateEnd | String | 否 | 回款日期结束 | | beginTime | String | 否 | 创建开始时间 | | endTime | String | 否 | 创建结束时间 |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "rows": [
    {
      "id": 1,
      "paymentNo": "PAY20250120001",
      "contractId": 1,
      "contractNo": "CON20250115001",
      "customerId": 1,
      "customerName": "华为技术有限公司",
      "planId": 1,
      "planNo": "PLAN20250115001",
      "period": 1,
      "amount": 40500.00,
      "paymentDate": "2025-01-20",
      "paymentMethod": "bank",
      "paymentAccount": "6222 **** **** 1234",
      "voucherNo": "20250120123456",
      "voucherFile": "/upload/payment/voucher1.pdf",
      "status": "confirmed",
      "confirmBy": 2,
      "confirmByName": "李四",
      "confirmTime": "2025-01-20 14:30:00",
      "ownerUserId": 1,
      "ownerUserName": "张三",
      "bankName": "中国工商银行",
      "bankAccount": "1234567890",
      "createTime": "2025-01-20 10:00:00",
      "remark": "首期款已到账"
    }
  ],
  "total": 234
}

2.2 查询回款记录详情

接口地址: GET /crm/payment/{id}

接口描述: 根据ID查询回款记录详细信息

权限标识: crm:payment:query

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 回款记录ID |

返回示例: 同2.1列表返回的单条数据,包含完整字段


2.3 新增回款记录

接口地址: POST /crm/payment

接口描述: 新增回款记录信息

权限标识: crm:payment:add

请求体:

{
  "paymentNo": "PAY20250120001",
  "contractId": 1,
  "customerId": 1,
  "planId": 1,
  "amount": 40500.00,
  "paymentDate": "2025-01-20",
  "paymentMethod": "bank",
  "paymentAccount": "6222 **** **** 1234",
  "voucherNo": "20250120123456",
  "bankName": "中国工商银行",
  "bankAccount": "1234567890",
  "ownerUserId": 1,
  "remark": "首期款已到账"
}

请求参数说明: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | paymentNo | String | 是 | 回款编号,唯一,格式:PAY+yyyyMMdd+4位流水号 | | contractId | Long | 是 | 合同ID | | customerId | Long | 是 | 客户ID | | planId | Long | 否 | 回款计划ID | | amount | BigDecimal | 是 | 回款金额,保留2位小数 | | paymentDate | String | 是 | 回款日期 yyyy-MM-dd | | paymentMethod | String | 是 | 付款方式:bank/cash/check/alipay/wechat/other | | paymentAccount | String | 否 | 付款账户,最大100字符 | | voucherNo | String | 否 | 凭证号,最大100字符 | | voucherFile | String | 否 | 凭证文件路径 | | bankName | String | 否 | 收款银行,最大100字符 | | bankAccount | String | 否 | 收款账号,最大100字符 | | ownerUserId | Long | 否 | 负责人ID,默认当前用户 | | remark | String | 否 | 备注,最大500字符 |

校验规则:

  • 回款编号必须唯一
  • 回款金额必须大于0
  • 合同ID必须存在
  • 回款日期不能超过当前日期

业务规则:

  • 默认状态为pending(待确认)
  • 如果关联了回款计划,自动更新计划的receivedAmount
  • 自动更新合同的receivedAmount和unreceivedAmount

返回示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": 1,
    "paymentNo": "PAY20250120001"
  }
}

2.4 修改回款记录

接口地址: PUT /crm/payment

接口描述: 修改回款记录信息

权限标识: crm:payment:edit

请求体: 同新增接口,但需要传入id

业务规则:

  • 只有待确认状态的回款记录才能修改
  • 已确认的记录只能修改备注和凭证

返回示例:

{
  "code": 200,
  "msg": "操作成功"
}

2.5 删除回款记录

接口地址: DELETE /crm/payment/{ids}

接口描述: 删除回款记录(支持批量)

权限标识: crm:payment:remove

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | ids | Long[] | 是 | 回款记录ID数组 |

业务规则:

  • 只能删除待确认状态的回款记录
  • 删除时自动更新关联的计划和合同金额

返回示例:

{
  "code": 200,
  "msg": "操作成功"
}

2.6 确认回款

接口地址: PUT /crm/payment/confirm

接口描述: 确认回款到账

权限标识: crm:payment:confirm

请求体:

{
  "id": 1,
  "remark": "已核实到账"
}

请求参数说明: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 回款记录ID | | remark | String | 否 | 确认说明 |

业务规则:

  • 只有待确认状态的回款记录才能确认
  • 确认后状态变为confirmed
  • 记录确认人和确认时间
  • 如果关联了回款计划,自动更新计划状态

返回示例:

{
  "code": 200,
  "msg": "操作成功"
}

2.7 批量确认回款

接口地址: PUT /crm/payment/batchConfirm

接口描述: 批量确认回款到账

权限标识: crm:payment:confirm

请求体:

{
  "ids": [1, 2, 3],
  "remark": "批量确认"
}

返回示例:

{
  "code": 200,
  "msg": "操作成功"
}

2.8 作废回款

接口地址: PUT /crm/payment/invalid

接口描述: 作废回款记录

权限标识: crm:payment:invalid

请求体:

{
  "id": 1,
  "invalidReason": "客户退款",
  "remark": ""
}

请求参数说明: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 回款记录ID | | invalidReason | String | 是 | 作废原因,最大500字符 | | remark | String | 否 | 备注 |

业务规则:

  • 状态变更为invalid
  • 记录作废原因和作废时间
  • 自动更新关联的计划和合同金额

返回示例:

{
  "code": 200,
  "msg": "操作成功"
}

2.9 上传回款凭证

接口地址: POST /crm/payment/uploadVoucher

接口描述: 上传回款凭证文件

权限标识: crm:payment:edit

请求参数: multipart/form-data | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | id | Long | 是 | 回款记录ID | | file | File | 是 | 凭证文件(PDF/图片) |

业务规则:

  • 支持PDF、JPG、PNG格式
  • 文件大小不超过5MB
  • 更新voucherFile字段

返回示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "fileUrl": "/upload/payment/voucher1.pdf"
  }
}

2.10 查询合同回款记录

接口地址: GET /crm/payment/contract/{contractId}

接口描述: 查询指定合同的所有回款记录

权限标识: crm:payment:query

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | contractId | Long | 是 | 合同ID |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": [
    {
      "id": 1,
      "paymentNo": "PAY20250120001",
      "amount": 40500.00,
      "paymentDate": "2025-01-20",
      "paymentMethod": "bank",
      "status": "confirmed"
    }
  ]
}

2.11 导出回款记录

接口地址: POST /crm/payment/export

接口描述: 导出回款记录数据到Excel

权限标识: crm:payment:export

请求体: 查询参数同2.1列表查询接口

返回: Excel文件流


3. 统计分析接口

3.1 回款统计概览

接口地址: GET /crm/payment/statistics/overview

接口描述: 获取回款统计概览数据

权限标识: crm:payment:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | ownerUserId | Long | 否 | 负责人ID,不传则查询当前用户 | | beginTime | String | 否 | 开始时间 | | endTime | String | 否 | 结束时间 |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "planTotalCount": 156,
    "planPendingCount": 68,
    "planFinishedCount": 78,
    "planOverdueCount": 12,
    "planTotalAmount": 8750000.00,
    "planReceivedAmount": 4350000.00,
    "planUnreceivedAmount": 4400000.00,
    "paymentTotalCount": 234,
    "paymentPendingCount": 18,
    "paymentConfirmedCount": 208,
    "paymentInvalidCount": 8,
    "paymentTotalAmount": 4350000.00,
    "paymentAvgAmount": 18589.74,
    "receivedRate": 49.71
  }
}

3.2 回款趋势分析

接口地址: GET /crm/payment/statistics/trend

接口描述: 分析回款金额趋势

权限标识: crm:payment:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | type | String | 否 | 统计类型:month/quarter/year,默认month | | beginTime | String | 否 | 开始时间 | | endTime | String | 否 | 结束时间 |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": [
    {
      "period": "2025-01",
      "planCount": 45,
      "planAmount": 2580000.00,
      "paymentCount": 38,
      "paymentAmount": 1850000.00,
      "receivedRate": 71.71
    }
  ]
}

3.3 逾期回款统计

接口地址: GET /crm/payment/statistics/overdue

接口描述: 统计逾期回款情况

权限标识: crm:payment:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | ownerUserId | Long | 否 | 负责人ID |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "totalCount": 12,
    "totalAmount": 850000.00,
    "avgOverdueDays": 15.5,
    "list": [
      {
        "id": 5,
        "planNo": "PLAN20241215001",
        "contractNo": "CON20241201001",
        "customerName": "XX科技有限公司",
        "planAmount": 120000.00,
        "planDate": "2025-01-05",
        "overdueDays": 18,
        "ownerUserName": "张三"
      }
    ]
  }
}

3.4 回款方式统计

接口地址: GET /crm/payment/statistics/method

接口描述: 按付款方式统计回款分布

权限标识: crm:payment:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | beginTime | String | 否 | 开始时间 | | endTime | String | 否 | 结束时间 |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": [
    {
      "paymentMethod": "bank",
      "methodName": "银行转账",
      "count": 180,
      "amount": 3850000.00,
      "percent": 88.51
    },
    {
      "paymentMethod": "alipay",
      "methodName": "支付宝",
      "count": 35,
      "amount": 350000.00,
      "percent": 8.05
    }
  ]
}

3.5 负责人回款统计

接口地址: GET /crm/payment/statistics/owner

接口描述: 按负责人统计回款情况

权限标识: crm:payment:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | beginTime | String | 否 | 开始时间 | | endTime | String | 否 | 结束时间 |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": [
    {
      "ownerUserId": 1,
      "ownerUserName": "张三",
      "planCount": 45,
      "planAmount": 2850000.00,
      "paymentCount": 38,
      "paymentAmount": 1950000.00,
      "receivedRate": 68.42
    }
  ]
}

3.6 待回款提醒

接口地址: GET /crm/payment/statistics/reminder

接口描述: 查询即将到期的回款计划

权限标识: crm:payment:list

请求参数: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | days | Integer | 否 | 提前天数,默认7天 |

返回示例:

{
  "code": 200,
  "msg": "查询成功",
  "data": [
    {
      "id": 8,
      "planNo": "PLAN20250115003",
      "contractNo": "CON20250115001",
      "customerName": "华为技术有限公司",
      "planAmount": 13500.00,
      "planDate": "2025-03-01",
      "remainDays": 5,
      "ownerUserName": "张三"
    }
  ]
}

4. 数据模型

4.1 PaymentPlanBo(回款计划业务对象)

public class CrmPaymentPlanBo extends BaseEntity {
    /** 主键ID */
    @NotNull(message = "主键不能为空", groups = { EditGroup.class })
    private Long id;

    /** 计划编号 */
    @NotBlank(message = "计划编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String planNo;

    /** 合同ID */
    @NotNull(message = "合同ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long contractId;

    /** 客户ID */
    @NotNull(message = "客户ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long customerId;

    /** 期数 */
    @NotNull(message = "期数不能为空", groups = { AddGroup.class, EditGroup.class })
    @Min(value = 1, message = "期数必须大于0")
    private Integer period;

    /** 计划回款金额 */
    @NotNull(message = "计划回款金额不能为空", groups = { AddGroup.class, EditGroup.class })
    @Min(value = 0, message = "计划回款金额必须大于0")
    private BigDecimal planAmount;

    /** 计划回款日期 */
    @NotBlank(message = "计划回款日期不能为空", groups = { AddGroup.class, EditGroup.class })
    private String planDate;

    /** 计划比例 */
    private BigDecimal planPercent;

    /** 提前提醒天数 */
    private Integer remindDays;

    /** 负责人ID */
    private Long ownerUserId;

    /** 备注 */
    private String remark;
}

4.2 PaymentBo(回款记录业务对象)

public class CrmPaymentBo extends BaseEntity {
    /** 主键ID */
    @NotNull(message = "主键不能为空", groups = { EditGroup.class })
    private Long id;

    /** 回款编号 */
    @NotBlank(message = "回款编号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String paymentNo;

    /** 合同ID */
    @NotNull(message = "合同ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long contractId;

    /** 客户ID */
    @NotNull(message = "客户ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long customerId;

    /** 回款计划ID */
    private Long planId;

    /** 回款金额 */
    @NotNull(message = "回款金额不能为空", groups = { AddGroup.class, EditGroup.class })
    @Min(value = 0, message = "回款金额必须大于0")
    private BigDecimal amount;

    /** 回款日期 */
    @NotBlank(message = "回款日期不能为空", groups = { AddGroup.class, EditGroup.class })
    private String paymentDate;

    /** 付款方式 */
    @NotBlank(message = "付款方式不能为空", groups = { AddGroup.class, EditGroup.class })
    private String paymentMethod;

    /** 付款账户 */
    private String paymentAccount;

    /** 凭证号 */
    private String voucherNo;

    /** 凭证文件 */
    private String voucherFile;

    /** 收款银行 */
    private String bankName;

    /** 收款账号 */
    private String bankAccount;

    /** 负责人ID */
    private Long ownerUserId;

    /** 备注 */
    private String remark;
}

5. 数据字典

5.1 回款计划状态 (crm_payment_plan_status)

字典值 字典标签 说明
pending 待回款 等待回款
partial 部分回款 部分到账
finished 已完成 全部到账
overdue 已逾期 超过计划日期

5.2 回款状态 (crm_payment_status)

字典值 字典标签 说明
pending 待确认 等待财务确认
confirmed 已确认 已确认到账
invalid 已作废 回款作废

5.3 付款方式 (crm_payment_method)

字典值 字典标签 说明
bank 银行转账 银行转账
cash 现金 现金支付
check 支票 支票支付
alipay 支付宝 支付宝转账
wechat 微信 微信转账
other 其他 其他方式

6. 权限标识汇总

权限标识 说明
crm:payment:plan:list 回款计划列表查询
crm:payment:plan:query 回款计划详情查询
crm:payment:plan:add 回款计划新增
crm:payment:plan:edit 回款计划修改
crm:payment:plan:remove 回款计划删除
crm:payment:plan:export 回款计划导出
crm:payment:list 回款记录列表查询
crm:payment:query 回款记录详情查询
crm:payment:add 回款记录新增
crm:payment:edit 回款记录修改
crm:payment:remove 回款记录删除
crm:payment:export 回款记录导出
crm:payment:confirm 回款确认
crm:payment:invalid 回款作废

7. 注意事项

  1. 计划编号唯一性: 同一租户下计划编号必须唯一
  2. 回款编号唯一性: 同一租户下回款编号必须唯一
  3. 金额一致性: 回款记录金额更新时,自动更新计划和合同的相关金额
  4. 逾期判断: 定时任务定期检查逾期的回款计划
  5. 提醒机制: 定时任务定期检查即将到期的回款计划,发送提醒通知
  6. 状态流转: 计划状态自动判断(待回款->部分回款->已完成/已逾期)
  7. 确认机制: 回款记录需要财务人员确认后才生效
  8. 凭证管理: 回款记录需要上传回款凭证
  9. 数据权限: 需要根据负责人字段实现数据权限控制
  10. 关联关系: 回款记录可以关联回款计划,也可以独立存在

文档结束