feat: 新增退款管理模块 — 完整的退款审批流程、佣金回扣和资产重置
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m8s

新增退款申请全生命周期管理:创建/列表/详情/审批通过/拒绝/退回/重新提交
审批通过后异步执行佣金全额回扣(扣减各代理佣金钱包)和资产重置(套餐失效+停机+世代重置)
新增 tb_refund_request 表(迁移 000093)、RefundRequest Model、8 个 DTO
新增 Store/Service/Handler/路由注册,仅平台用户可访问
This commit is contained in:
2026-03-28 17:57:52 +08:00
parent 5e64c64ce3
commit 02b10f87cf
18 changed files with 1345 additions and 26 deletions

View File

@@ -0,0 +1,59 @@
-- 创建退款申请表
CREATE TABLE IF NOT EXISTS tb_refund_request (
id BIGSERIAL PRIMARY KEY,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP WITH TIME ZONE,
creator BIGINT NOT NULL DEFAULT 0,
updater BIGINT NOT NULL DEFAULT 0,
-- 退款单基础信息
refund_no VARCHAR(50) NOT NULL,
order_id BIGINT NOT NULL,
package_usage_id BIGINT,
shop_id BIGINT,
-- 金额信息
actual_received_amount BIGINT NOT NULL,
requested_refund_amount BIGINT NOT NULL,
approved_refund_amount BIGINT,
-- 退款原因和状态
refund_reason TEXT,
status INT NOT NULL DEFAULT 1,
-- 审批信息
processor_id BIGINT,
processed_at TIMESTAMP WITH TIME ZONE,
reject_reason TEXT,
remark TEXT,
-- 后处理标记
commission_deducted BOOLEAN NOT NULL DEFAULT FALSE,
asset_reset BOOLEAN NOT NULL DEFAULT FALSE
);
-- 索引
CREATE UNIQUE INDEX idx_refund_request_refund_no ON tb_refund_request (refund_no) WHERE deleted_at IS NULL;
CREATE INDEX idx_refund_request_order_id ON tb_refund_request (order_id);
CREATE INDEX idx_refund_request_shop_id ON tb_refund_request (shop_id);
CREATE INDEX idx_refund_request_status ON tb_refund_request (status);
CREATE INDEX idx_refund_request_deleted_at ON tb_refund_request (deleted_at);
-- 字段注释
COMMENT ON TABLE tb_refund_request IS '退款申请表';
COMMENT ON COLUMN tb_refund_request.refund_no IS '退款单号RF+日期时间+6位随机数';
COMMENT ON COLUMN tb_refund_request.order_id IS '关联订单ID';
COMMENT ON COLUMN tb_refund_request.package_usage_id IS '关联套餐使用记录ID可选';
COMMENT ON COLUMN tb_refund_request.shop_id IS '店铺ID从订单获取用于数据权限过滤';
COMMENT ON COLUMN tb_refund_request.actual_received_amount IS '实收金额(分)';
COMMENT ON COLUMN tb_refund_request.requested_refund_amount IS '申请退款金额(分)';
COMMENT ON COLUMN tb_refund_request.approved_refund_amount IS '审批实际退款金额(分)';
COMMENT ON COLUMN tb_refund_request.refund_reason IS '退款原因';
COMMENT ON COLUMN tb_refund_request.status IS '状态 1-待审批 2-已通过 3-已拒绝 4-已退回';
COMMENT ON COLUMN tb_refund_request.processor_id IS '审批人ID';
COMMENT ON COLUMN tb_refund_request.processed_at IS '审批时间';
COMMENT ON COLUMN tb_refund_request.reject_reason IS '拒绝原因';
COMMENT ON COLUMN tb_refund_request.remark IS '审批备注';
COMMENT ON COLUMN tb_refund_request.commission_deducted IS '佣金是否已回扣';
COMMENT ON COLUMN tb_refund_request.asset_reset IS '资产是否已重置(套餐停用+停机+世代重置)';