Files
qitongxue-api/sql/member_orders_refund2.sql
2026-09-29 15:48:13 +08:00

62 lines
3.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================================
-- 真退款链路:退款单状态与金额落库(幂等,可重复执行)
--
-- 本迁移与 internal/logic/migrate.go 的 migrateColumns() 内容一致:
-- 服务端启动时 Migrate() 会自动加列(项目约定:升级只需重启服务)。
-- 本文件供运维在无法重启 / 需要手工核对时使用。
--
-- 新增列:
-- member_orders.refund_no 商户退款单号(唯一;失败重发换新号)
-- member_orders.refund_status 退款状态:0未退款 1退款中 2退款成功 3退款失败
-- member_orders.refund_amount 退款金额(分,全额退款 = paid_price_cents)
-- member_orders.refund_reason 退款原因(后台登记,iOS/手工退款必填)
-- member_orders.refund_finished_at 退款确认完成时间(回调 / 查单轮询 / 手工登记)
-- ============================================================================
SET @db := DATABASE();
SET @sql := (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `member_orders` ADD COLUMN `refund_no` varchar(40) NOT NULL DEFAULT '''' COMMENT ''商户退款单号''',
'SELECT ''member_orders.refund_no already exists'' AS msg')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'member_orders' AND COLUMN_NAME = 'refund_no'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `member_orders` ADD COLUMN `refund_status` tinyint NOT NULL DEFAULT 0 COMMENT ''退款状态:0未退款 1退款中 2退款成功 3退款失败''',
'SELECT ''member_orders.refund_status already exists'' AS msg')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'member_orders' AND COLUMN_NAME = 'refund_status'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `member_orders` ADD COLUMN `refund_amount` bigint NOT NULL DEFAULT 0 COMMENT ''退款金额(分)''',
'SELECT ''member_orders.refund_amount already exists'' AS msg')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'member_orders' AND COLUMN_NAME = 'refund_amount'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `member_orders` ADD COLUMN `refund_reason` varchar(255) NOT NULL DEFAULT '''' COMMENT ''退款原因''',
'SELECT ''member_orders.refund_reason already exists'' AS msg')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'member_orders' AND COLUMN_NAME = 'refund_reason'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @sql := (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `member_orders` ADD COLUMN `refund_finished_at` datetime DEFAULT NULL COMMENT ''退款确认完成时间''',
'SELECT ''member_orders.refund_finished_at already exists'' AS msg')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'member_orders' AND COLUMN_NAME = 'refund_finished_at'
);
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;