-- ============================================================ -- 功能:登记收款时选择核销账单,审核通过后一并核销 -- 日期:2026-10-08 -- 说明: -- 1) 新增收款核销计划表 ctr_receipt_writeoff_plan:登记时落 PENDING 计划, -- 审核通过事务内逐张执行 ar_bill 核销并回写 EFFECTIVE/核销单ID,取消收款单则置 CANCELLED; -- 联动核销单后续在余额核销页被反核销则置 REVERSED,并回退收款单 allocated/unallocated(不动余额/额度)。 -- 2) ar_balance_writeoff 增加 receipt_id:审核联动生成的核销单可溯源到收款单; -- 手工余额核销保持为空。 -- ============================================================ -- 1. 收款核销计划表 CREATE TABLE IF NOT EXISTS `ctr_receipt_writeoff_plan` ( `plan_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '计划ID', `receipt_id` bigint(20) NOT NULL COMMENT '收款单ID(ctr_customer_receipt.id)', `ar_bill_id` bigint(20) NOT NULL COMMENT '应收账单ID', `bill_no` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账单号快照', `customer_id` bigint(20) NOT NULL COMMENT '客户ID', `currency` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'CNY' COMMENT '账单币种(当前仅支持CNY)', `writeoff_amount` decimal(18,2) NOT NULL DEFAULT '0.00' COMMENT '本次核销金额(本位币CNY;当前仅支持人民币账单)', `status` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING待执行/EFFECTIVE已核销/CANCELLED已作废/REVERSED已反核销', `writeoff_id` bigint(20) DEFAULT NULL COMMENT '审核后生成的余额核销单ID(ar_balance_writeoff.writeoff_id)', `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注', `create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `del_flag` char(1) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '删除标志(0存在 1删除)', PRIMARY KEY (`plan_id`), KEY `idx_crwp_receipt` (`receipt_id`,`status`), KEY `idx_crwp_bill` (`ar_bill_id`), KEY `idx_crwp_customer` (`customer_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='收款单核销账单计划'; -- 2. 余额核销单关联收款单 ALTER TABLE `ar_balance_writeoff` ADD COLUMN `receipt_id` bigint(20) DEFAULT NULL COMMENT '关联收款单ID(收款审核联动核销时写入)' AFTER `customer_id`, ADD KEY `idx_abw_receipt` (`receipt_id`);