-- 退款收回代理佣金功能 - 数据库迁移SQL -- 说明:此功能使用现有的 status 字段来标记撤销状态 -- -- 状态字段含义(根据代码和模型注释): -- agent_commission.status: 1=已发放,2=已冻结,3=已取消(撤销) -- agent_rebate.status: 1=已发放,2=已冻结,3=已取消(撤销) -- agent_freeze_task.status: 1=待解冻,2=已解冻,3=已取消(撤销) -- -- 注意:如果数据库中这三个表的 status 字段含义不同(例如:1=待解冻,2=已解冻,3=已取消), -- 需要确认是否有冲突。当前实现使用 status=3 表示已撤销。 -- 如果 status=3 与其他业务冲突,请使用方案2添加新字段。 -- 检查字段是否存在(可选,用于验证) SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ( 'agent_commission', 'agent_rebate', 'agent_freeze_task' ) AND COLUMN_NAME = 'status'; -- ========== 方案1:使用现有 status 字段(当前实现,推荐) ========== -- 如果 status=3 的含义是"已取消",可以直接使用,无需修改数据库 -- 代码中已实现:撤销时将 status 设置为 3 -- 注意:需要确认数据库中这三个表的 status 字段实际含义是否与代码一致 -- ========== 方案2:添加新字段(如果 status=3 与其他业务冲突) ========== -- 如果 status 字段的含义不同(例如:1=待解冻,2=已解冻,3=已取消,但3不是用于撤销), -- 可以使用以下SQL添加新字段: -- -- ALTER TABLE `agent_commission` -- ADD COLUMN `cancel_status` TINYINT DEFAULT 0 COMMENT '撤销状态:0=正常,1=已撤销' AFTER `status`; -- -- ALTER TABLE `agent_rebate` -- ADD COLUMN `cancel_status` TINYINT DEFAULT 0 COMMENT '撤销状态:0=正常,1=已撤销' AFTER `status`; -- -- ALTER TABLE `agent_freeze_task` -- ADD COLUMN `cancel_status` TINYINT DEFAULT 0 COMMENT '撤销状态:0=正常,1=已撤销' AFTER `status`; -- -- 如果使用方案2,需要修改代码: -- 1. 在 CancelAgentCommission 方法中,使用 cancel_status 字段而不是 status 字段 -- 2. 查询时使用 cancel_status = 1 来筛选已撤销的记录 -- 当前实现不需要修改数据库结构,使用现有的 status 字段即可 -- 如果后续需要查询已撤销的记录,可以使用: SELECT * FROM agent_commission WHERE status = 3 AND del_state = 0; SELECT * FROM agent_rebate WHERE status = 3 AND del_state = 0; SELECT * FROM agent_freeze_task WHERE status = 3 AND del_state = 0; -- 如果需要添加索引优化查询(可选): CREATE INDEX `idx_order_id_status` ON `agent_commission` ( `order_id`, `status`, `del_state` ); CREATE INDEX `idx_order_id_status` ON `agent_rebate` ( `order_id`, `status`, `del_state` ); CREATE INDEX `idx_order_id_status` ON `agent_freeze_task` ( `order_id`, `status`, `del_state` );