-- ========================================== -- 完整的数据库补充脚本(整合所有历史变更 + 数据类型修正) -- ========================================== 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='健康证';