-- ==========================================
-- 完整的数据库补充脚本（整合所有历史变更 + 数据类型修正）
-- ==========================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ==========================================
-- 第一部分：为已有表添加缺失字段
-- ==========================================

-- 1. 为 sv_member 表添加缺失字段（对应 202604.sql）
ALTER TABLE `sv_member`
    ADD COLUMN `avatar_modify_count` int(11) DEFAULT '0' COMMENT '头像修改次数(本年)' AFTER `deleted`,
ADD COLUMN `avatar_modify_year` int(11) DEFAULT NULL COMMENT '头像修改统计年份' AFTER `avatar_modify_count`;

-- 2. 为 sv_venue 表添加缺失字段（包含 202312.sql 的字段）
ALTER TABLE `sv_venue`
    ADD COLUMN `limit_day` int(11) DEFAULT NULL COMMENT '每天预约限制' AFTER `deleted`,
ADD COLUMN `limit_week` int(11) DEFAULT NULL COMMENT '每周预约限制' AFTER `limit_day`,
ADD COLUMN `limit_no_day` int(11) DEFAULT NULL COMMENT '每天预约限制' AFTER `limit_week`,
ADD COLUMN `limit_no_week` int(11) DEFAULT NULL COMMENT '每周预约限制' AFTER `limit_no_day`,
ADD COLUMN `copy_week` int(11) DEFAULT NULL COMMENT '复制周几' AFTER `limit_no_week`,
ADD COLUMN `copy_time` time DEFAULT NULL COMMENT '复制时间' AFTER `copy_week`,
ADD COLUMN `copy_target` int(11) DEFAULT NULL COMMENT '向后复制多少' AFTER `copy_time`,
ADD COLUMN `copy_control` tinyint(4) DEFAULT '0' COMMENT '复制开关 1-关闭,不复制 0-开启,复制' AFTER `copy_target`,
ADD COLUMN `pay_style` tinyint(4) DEFAULT '0' COMMENT '计费方式 0-按次收费、1-按时收费' AFTER `copy_control`,
ADD COLUMN `time_pay_hour` int(11) DEFAULT NULL COMMENT '按次收费几小时内免费' AFTER `pay_style`;

-- 3. 为 sv_venue_lesson 表添加缺失字段
ALTER TABLE `sv_venue_lesson`
    ADD COLUMN `order_limit` int(11) DEFAULT NULL COMMENT '可取消预约时间(小时)' AFTER `deleted`;


-- ==========================================
-- 第二部分：创建缺失的新表（数据类型已修正）
-- ==========================================

-- 4. 创建 sv_disclaimers (免责声明表) - 对应 202404.sql
DROP TABLE IF EXISTS `sv_disclaimers`;
CREATE TABLE `sv_disclaimers` (
                                  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
                                  `platform_id` int(11) NOT NULL COMMENT '平台来源ID',
                                  `description` longtext CHARACTER SET utf8mb4 NOT NULL COMMENT '免责声明内容',
                                  `created_id` int(10) unsigned DEFAULT '0' COMMENT '创建者编号',
                                  `modified_id` int(10) unsigned DEFAULT '0' COMMENT '修改者编号',
                                  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                  `deleted` int(3) unsigned DEFAULT '0' COMMENT '删除标识位: 0正常 1删除',
                                  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='免责声明';

-- 5. 创建 sv_health_doc (健康文档表)
DROP TABLE IF EXISTS `sv_health_doc`;
CREATE TABLE `sv_health_doc` (
                                 `id` int(11) NOT NULL AUTO_INCREMENT,
                                 `member_id` int(11) NOT NULL COMMENT '用户ID',
                                 `doc_name` varchar(100) NOT NULL COMMENT '文档名称',
                                 `doc_type` varchar(50) NOT NULL COMMENT '文档类型',
                                 `file_type` varchar(20) NOT NULL COMMENT '文件类型',
                                 `doc_path` varchar(200) NOT NULL COMMENT '文档路径',
                                 `doc_date` date NOT NULL COMMENT '文档日期',
                                 `platform_id` int(11) NOT NULL COMMENT '平台来源ID',
                                 `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                 `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                 `deleted` tinyint(3) unsigned DEFAULT '0' COMMENT '删除标识位: 0正常 1删除',
                                 PRIMARY KEY (`id`),
                                 KEY `idx_member_id` (`member_id`,`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康文档';

-- 6. 创建 sv_member_lesson_ticket_invite (门票邀请表) - 使用历史脚本的表名
DROP TABLE IF EXISTS `sv_member_lesson_ticket_invite`;
CREATE TABLE `sv_member_lesson_ticket_invite` (
                                                  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
                                                  `owner_id` int(11) NOT NULL DEFAULT '1' COMMENT '场馆类型',
                                                  `member_id` int(11) NOT NULL,
                                                  `member_name` varchar(50) DEFAULT NULL COMMENT '被邀请用户姓名',
                                                  `mobile` varchar(11) DEFAULT NULL COMMENT '手机号',
                                                  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态：0-未选中 1-已选中',
                                                  `platform_id` int(11) NOT NULL COMMENT '平台来源ID',
                                                  `created_id` int(10) unsigned DEFAULT '0' COMMENT '创建者编号',
                                                  `modified_id` int(10) unsigned DEFAULT '0' COMMENT '修改者编号',
                                                  `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                                  `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                                  `deleted` tinyint(3) unsigned DEFAULT '0' COMMENT '删除标识位: 0正常 1删除',
                                                  PRIMARY KEY (`id`),
                                                  KEY `lesson_id` (`deleted`,`status`),
                                                  KEY `idx_owner_id` (`owner_id`,`deleted`),
                                                  KEY `idx_member_id` (`member_id`,`deleted`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='场馆课程预订信息';

-- 7. 创建 sv_member_enter_status (用户入场状态表) - 对应 202312.sql
DROP TABLE IF EXISTS `sv_member_enter_status`;
CREATE TABLE `sv_member_enter_status` (
                                          `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
                                          `member_id` int(11) NOT NULL COMMENT '客户ID',
                                          `venue_id` int(11) NOT NULL COMMENT '场馆ID',
                                          `status` int(11) NOT NULL COMMENT '状态 0-场外 1-场内',
                                          `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                          `modified_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                          PRIMARY KEY (`id`),
                                          KEY `idx_member_venue` (`member_id`, `venue_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1231 DEFAULT CHARSET=utf8mb4 COMMENT='用户在场馆的状态';

-- 8. 创建 sv_barcode (二维码表) - 整合 202312.sql 的 order_sn 字段
DROP TABLE IF EXISTS `sv_barcode`;
CREATE TABLE `sv_barcode` (
                              `id` int(11) NOT NULL AUTO_INCREMENT,
                              `barcode` varchar(50) NOT NULL COMMENT '二维码',
                              `order_sn` varchar(200) DEFAULT NULL COMMENT '订单号',
                              `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0-未使用 1-已使用',
                              `member_id` int(11) NOT NULL COMMENT '用户ID',
                              `venue_id` int(11) NOT NULL COMMENT '场馆ID',
                              `enter` tinyint(4) DEFAULT NULL COMMENT '入场标识',
                              `created_id` int(10) DEFAULT '0' COMMENT '创建者编号',
                              `modified_id` int(10) DEFAULT '0' COMMENT '修改者编号',
                              `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                              `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                              PRIMARY KEY (`id`),
                              UNIQUE KEY `uk_barcode` (`barcode`),
                              KEY `idx_order_sn` (`order_sn`),
                              KEY `idx_member_id` (`member_id`),
                              KEY `idx_venue_id` (`venue_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二维码';

-- 9. 创建 sv_barcode_enter_log (二维码进出记录表)
DROP TABLE IF EXISTS `sv_barcode_enter_log`;
CREATE TABLE `sv_barcode_enter_log` (
                                        `id` int(11) NOT NULL AUTO_INCREMENT,
                                        `barcode` varchar(50) NOT NULL COMMENT '二维码',
                                        `venue_id` int(11) NOT NULL COMMENT '场馆ID',
                                        `type` tinyint(4) NOT NULL COMMENT '类型: 0-入场 1-出场',
                                        `platform_id` int(11) NOT NULL COMMENT '平台来源ID',
                                        `created_id` int(10) DEFAULT '0' COMMENT '创建者编号',
                                        `modified_id` int(10) DEFAULT '0' COMMENT '修改者编号',
                                        `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                        `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                        PRIMARY KEY (`id`),
                                        KEY `idx_barcode` (`barcode`),
                                        KEY `idx_venue_id` (`venue_id`),
                                        KEY `idx_created_time` (`created_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二维码进出记录';

-- 10. 创建 sv_barcode_offline (二维码离线表)
DROP TABLE IF EXISTS `sv_barcode_offline`;
CREATE TABLE `sv_barcode_offline` (
                                      `id` int(11) NOT NULL AUTO_INCREMENT,
                                      `barcode` varchar(50) NOT NULL COMMENT '二维码',
                                      `start_time` datetime NOT NULL COMMENT '开始时间',
                                      `end_time` datetime NOT NULL COMMENT '结束时间',
                                      `venue_id` int(11) NOT NULL COMMENT '场馆ID',
                                      `device_name` varchar(100) DEFAULT NULL COMMENT '设备名称',
                                      `created_id` int(10) DEFAULT '0' COMMENT '创建者编号',
                                      `modified_id` int(10) DEFAULT '0' COMMENT '修改者编号',
                                      `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                      `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                      PRIMARY KEY (`id`),
                                      KEY `idx_barcode` (`barcode`),
                                      KEY `idx_venue_id` (`venue_id`),
                                      KEY `idx_time` (`start_time`,`end_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二维码离线记录';

-- 11. 创建 sv_barcode_order_time (二维码订单时间表) - ⭐ 数据类型已修正为 DECIMAL
DROP TABLE IF EXISTS `sv_barcode_order_time`;
CREATE TABLE `sv_barcode_order_time` (
                                         `id` int(11) NOT NULL AUTO_INCREMENT,
                                         `member_id` int(11) NOT NULL COMMENT '用户ID',
                                         `venue_id` int(11) NOT NULL COMMENT '场馆ID',
                                         `order_sn` varchar(200) DEFAULT NULL COMMENT '退款订单号',
                                         `order_add_sn` varchar(30) DEFAULT NULL COMMENT '追加付款订单号',
                                         `order_start` datetime NOT NULL COMMENT '订单开始时间',
                                         `order_end` datetime NOT NULL COMMENT '订单结束时间',
                                         `status` int(11) DEFAULT NULL COMMENT '0-有效 1-失效',
                                         `paying` int(11) DEFAULT NULL COMMENT '支付状态: 0-不需要退款 1-待结算/需要退款 2-已补交费用',
                                         `pay_money` decimal(10,2) DEFAULT NULL COMMENT '当前退款金额',
                                         `sum_pay_money` decimal(10,2) DEFAULT NULL COMMENT '总退款金额',
                                         `last_enter` datetime DEFAULT NULL COMMENT '最后入场时间',
                                         `last_out` datetime DEFAULT NULL COMMENT '最后出场时间',
                                         `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                         `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                         PRIMARY KEY (`id`),
                                         UNIQUE KEY `uk_order_sn` (`order_sn`),
                                         KEY `idx_member_id` (`member_id`),
                                         KEY `idx_venue_id` (`venue_id`),
                                         KEY `idx_order_time` (`order_start`,`order_end`),
                                         KEY `idx_status` (`status`,`paying`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='二维码订单时间';

-- 12. 创建 sv_wx_config (微信配置表)
DROP TABLE IF EXISTS `sv_wx_config`;
CREATE TABLE `sv_wx_config` (
                                `id` int(11) NOT NULL AUTO_INCREMENT,
                                `wx_open_id` varchar(100) NOT NULL COMMENT '微信OpenID',
                                `venue_id` int(11) NOT NULL COMMENT '场馆ID',
                                `created_id` int(10) DEFAULT '0' COMMENT '创建者编号',
                                `modified_id` int(10) DEFAULT '0' COMMENT '修改者编号',
                                `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
                                `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
                                PRIMARY KEY (`id`),
                                UNIQUE KEY `uk_wx_open_id` (`wx_open_id`),
                                KEY `idx_venue_id` (`venue_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='微信配置';


SET FOREIGN_KEY_CHECKS = 1;

-- ==========================================
-- 第三部分：验证脚本执行结果
-- ==========================================

-- 验证字段是否添加成功
SELECT
    TABLE_NAME,
    COLUMN_NAME,
    COLUMN_TYPE,
    COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME IN ('sv_member', 'sv_venue', 'sv_venue_lesson')
  AND COLUMN_NAME IN (
                      'avatar_modify_count', 'avatar_modify_year',
                      'limit_day', 'limit_week', 'limit_no_day', 'limit_no_week',
                      'copy_week', 'copy_time', 'copy_target', 'copy_control',
                      'pay_style', 'time_pay_hour', 'order_limit'
    )
ORDER BY TABLE_NAME, ORDINAL_POSITION;

-- 验证新表是否创建成功
SELECT
    TABLE_NAME,
    TABLE_COMMENT,
    CREATE_TIME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME IN (
                     'sv_disclaimers', 'sv_health_doc', 'sv_member_lesson_ticket_invite',
                     'sv_member_enter_status', 'sv_barcode', 'sv_barcode_enter_log',
                     'sv_barcode_offline', 'sv_barcode_order_time', 'sv_wx_config'
    )
ORDER BY TABLE_NAME;

-- 特别验证 sv_barcode_order_time 的字段类型是否正确
SELECT
    COLUMN_NAME,
    COLUMN_TYPE,
    COLUMN_COMMENT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
  AND TABLE_NAME = 'sv_barcode_order_time'
  AND COLUMN_NAME IN ('pay_money', 'sum_pay_money')
ORDER BY ORDINAL_POSITION;

CREATE TABLE IF NOT EXISTS `sv_health_docs` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
    `member_id` int(11) NOT NULL COMMENT '会员编号',
    `doc_name` varchar(100) DEFAULT NULL COMMENT '文档名称',
    `doc_type` char(10) DEFAULT NULL COMMENT '文档类型',
    `file_type` varchar(20) DEFAULT NULL COMMENT '文件类型',
    `doc_path` varchar(255) DEFAULT NULL COMMENT '文档路径',
    `doc_date` date DEFAULT NULL COMMENT '文档日期',
    `platform_id` int(11) NOT NULL COMMENT '平台编号',
    `created_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
    `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态 0-未删除 1-已删除',
    PRIMARY KEY (`id`),
    KEY `idx_member_id` (`member_id`),
    KEY `idx_platform_id` (`platform_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='健康证';