hejianhao
2026-08-28 16a57a8fc6868cea9171a1119698572407a2fc03
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
SET @db_name = DATABASE();
 
CREATE TABLE IF NOT EXISTS `tcm_member_purchase_order` (
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `order_no` VARCHAR(32) NOT NULL COMMENT '订单编号',
  `app_user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
  `user_nickname` VARCHAR(64) DEFAULT NULL COMMENT '用户昵称快照',
  `user_phone` VARCHAR(20) DEFAULT NULL COMMENT '用户手机号快照',
  `member_type` VARCHAR(32) NOT NULL COMMENT '会员类型:MONTH_CARD月卡 QUARTER_CARD季卡',
  `member_days` INT NOT NULL COMMENT '会员时长天数快照',
  `order_amount` DECIMAL(10,2) NOT NULL COMMENT '订单金额快照',
  `payment_method` VARCHAR(32) NOT NULL COMMENT '付款方式:WECHAT微信 ALIPAY支付宝',
  `refund_amount` DECIMAL(10,2) DEFAULT NULL COMMENT '退款金额',
  `refund_remark` VARCHAR(255) DEFAULT NULL COMMENT '退款备注',
  `status` VARCHAR(32) NOT NULL COMMENT '订单状态:WAITING_PAYMENT待支付 PAID已支付 REFUNDED已退款 CANCELLED已取消',
  `paid_at` DATETIME DEFAULT NULL COMMENT '支付时间',
  `refunded_at` DATETIME DEFAULT NULL COMMENT '退款时间',
  `cancelled_at` DATETIME DEFAULT NULL COMMENT '取消时间',
  `deleted` TINYINT(1) NOT NULL DEFAULT 0,
  `created_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '创建人',
  `updated_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '更新人',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_member_purchase_order_no` (`order_no`),
  KEY `idx_member_purchase_order_user` (`app_user_id`),
  KEY `idx_member_purchase_order_status` (`status`),
  KEY `idx_member_purchase_order_member_type` (`member_type`),
  KEY `idx_member_purchase_order_payment_method` (`payment_method`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员购买订单表';
 
SET @table_exists = (
  SELECT COUNT(1)
  FROM information_schema.TABLES
  WHERE TABLE_SCHEMA = @db_name
    AND TABLE_NAME = 'tcm_member_purchase_order'
);
 
SET @sql_assert_table = IF(
  @table_exists = 0,
  'SELECT ''skip: tcm_member_purchase_order not exists''',
  'SELECT 1'
);
PREPARE stmt_assert_table FROM @sql_assert_table;
EXECUTE stmt_assert_table;
DEALLOCATE PREPARE stmt_assert_table;
 
SET @has_refund_amount = (
  SELECT COUNT(1)
  FROM information_schema.COLUMNS
  WHERE TABLE_SCHEMA = @db_name
    AND TABLE_NAME = 'tcm_member_purchase_order'
    AND COLUMN_NAME = 'refund_amount'
);
SET @sql_add_refund_amount = IF(
  @table_exists = 1 AND @has_refund_amount = 0,
  'ALTER TABLE `tcm_member_purchase_order` ADD COLUMN `refund_amount` DECIMAL(10,2) DEFAULT NULL COMMENT ''退款金额'' AFTER `payment_method`',
  'SELECT 1'
);
PREPARE stmt_add_refund_amount FROM @sql_add_refund_amount;
EXECUTE stmt_add_refund_amount;
DEALLOCATE PREPARE stmt_add_refund_amount;
 
SET @has_refund_remark = (
  SELECT COUNT(1)
  FROM information_schema.COLUMNS
  WHERE TABLE_SCHEMA = @db_name
    AND TABLE_NAME = 'tcm_member_purchase_order'
    AND COLUMN_NAME = 'refund_remark'
);
SET @sql_add_refund_remark = IF(
  @table_exists = 1 AND @has_refund_remark = 0,
  'ALTER TABLE `tcm_member_purchase_order` ADD COLUMN `refund_remark` VARCHAR(255) DEFAULT NULL COMMENT ''退款备注'' AFTER `refund_amount`',
  'SELECT 1'
);
PREPARE stmt_add_refund_remark FROM @sql_add_refund_remark;
EXECUTE stmt_add_refund_remark;
DEALLOCATE PREPARE stmt_add_refund_remark;
 
SET @sql_modify_status = IF(
  @table_exists = 1,
  'ALTER TABLE `tcm_member_purchase_order` MODIFY COLUMN `status` VARCHAR(32) NOT NULL COMMENT ''订单状态:WAITING_PAYMENT待支付 PAID已支付 REFUNDED已退款 CANCELLED已取消''',
  'SELECT 1'
);
PREPARE stmt_modify_status FROM @sql_modify_status;
EXECUTE stmt_modify_status;
DEALLOCATE PREPARE stmt_modify_status;
 
SET @has_payment_method_index = (
  SELECT COUNT(1)
  FROM information_schema.STATISTICS
  WHERE TABLE_SCHEMA = @db_name
    AND TABLE_NAME = 'tcm_member_purchase_order'
    AND INDEX_NAME = 'idx_member_purchase_order_payment_method'
);
SET @sql_add_payment_method_index = IF(
  @table_exists = 1 AND @has_payment_method_index = 0,
  'ALTER TABLE `tcm_member_purchase_order` ADD INDEX `idx_member_purchase_order_payment_method` (`payment_method`)',
  'SELECT 1'
);
PREPARE stmt_add_payment_method_index FROM @sql_add_payment_method_index;
EXECUTE stmt_add_payment_method_index;
DEALLOCATE PREPARE stmt_add_payment_method_index;
 
SET @sql_fill_refund_amount = IF(
  @table_exists = 1,
  'UPDATE `tcm_member_purchase_order`
   SET `refund_amount` = `order_amount`
   WHERE `status` = ''REFUNDED'' AND `refund_amount` IS NULL',
  'SELECT 1'
);
PREPARE stmt_fill_refund_amount FROM @sql_fill_refund_amount;
EXECUTE stmt_fill_refund_amount;
DEALLOCATE PREPARE stmt_fill_refund_amount;