-- ---------------------------- -- 用户模块:会员主表扩充 + 4 张明细表 -- -- 目标库 hugray-account(库名含连字符,任何引用都必须用反引号)。 -- 与 hugray_account_20261009.sql 的区别:该脚本是首建,用 DROP + CREATE; -- 本脚本是扩充,account_user 里已有数据,故一律用 ALTER,绝不 DROP。 -- -- 【幂等说明】 -- MySQL 的 ALTER TABLE 不支持 ADD COLUMN / ADD INDEX IF NOT EXISTS, -- 重复执行会因 Duplicate column name / Duplicate key name 中断。 -- 这里用两个临时存储过程做存在性判断,脚本可安全重复执行, -- 末尾会把过程删掉,不在库里留痕。 -- -- 【枚举取值】本模块所有枚举均直接存值,不建 sys_dict_type: -- 系统等级 system_level :C < L1 < L2 < L3 < L4(从低到高) -- 主体类型 subject_type :1个人 2个体工商户 3企业 -- 认证状态 auth_status :0未认证 1审核中 2已认证 3认证失败 -- 账户状态 status :0正常 1禁用 2注销中 3已注销 -- 是否默认 is_default :0否 1是 -- 前端在页面内维护同名常量,不入字典表。 -- ---------------------------- USE `hugray-account`; -- ---------- 幂等辅助过程 ---------- DROP PROCEDURE IF EXISTS `hugray_add_column`; DROP PROCEDURE IF EXISTS `hugray_add_index`; DELIMITER $$ CREATE PROCEDURE `hugray_add_column`(IN p_table VARCHAR(64), IN p_column VARCHAR(64), IN p_definition TEXT) BEGIN IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table AND COLUMN_NAME = p_column) THEN SET @ddl = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN `', p_column, '` ', p_definition); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END$$ CREATE PROCEDURE `hugray_add_index`(IN p_table VARCHAR(64), IN p_index VARCHAR(64), IN p_columns TEXT) BEGIN IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = p_table AND INDEX_NAME = p_index) THEN SET @ddl = CONCAT('ALTER TABLE `', p_table, '` ADD INDEX `', p_index, '` (', p_columns, ')'); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END$$ DELIMITER ; -- ---------- 1. account_user 扩充:用户画像 ---------- CALL `hugray_add_column`('account_user', 'system_level', "varchar(8) DEFAULT 'C' COMMENT '系统等级(C auth_status='1' 审核中 -- 审核通过 -> auth_status='2' 已认证,并把申请资料 upsert 进 account_certification -- 审核驳回 -> auth_status='3' 认证失败 CREATE TABLE IF NOT EXISTS `account_certification_apply` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键,同时作为申请号', `user_id` bigint(20) NOT NULL COMMENT '会员ID(account_user.user_id)', `subject_type` char(1) DEFAULT NULL COMMENT '主体类型(1个人 2个体工商户 3企业),提交时快照', `real_name` varchar(64) DEFAULT NULL COMMENT '用户名称', `id_card` varchar(32) DEFAULT NULL COMMENT '用户身份证号', `company_name` varchar(128) DEFAULT NULL COMMENT '企业名称', `credit_code` varchar(32) DEFAULT NULL COMMENT '统一社会信用代码', `legal_person` varchar(64) DEFAULT NULL COMMENT '企业法人', `registered_region` varchar(128) DEFAULT NULL COMMENT '企业注册地区', `company_address` varchar(255) DEFAULT NULL COMMENT '企业地址', `register_date` date DEFAULT NULL COMMENT '注册日期', `license_valid_period` varchar(32) DEFAULT NULL COMMENT '营业执照有效期间', `license_image` varchar(500) DEFAULT NULL COMMENT '营业执照图片', `audit_status` char(1) DEFAULT '0' COMMENT '审核状态(0待审核 1已通过 2已驳回)', `audit_by` varchar(64) DEFAULT '' COMMENT '审核人', `audit_time` datetime DEFAULT NULL COMMENT '审核时间', `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核意见(驳回原因)', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '提交时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_cert_apply_user_id` (`user_id`), KEY `idx_cert_apply_audit_status` (`audit_status`), KEY `idx_cert_apply_create_time` (`create_time`) ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COMMENT='会员主体认证申请审核表'; -- ---------- 10. account_cancel_apply:会员注销申请审核(1:N) ---------- -- -- 与 account_certification_apply 结构一致,理由也一致:申请表把资料整份冗余快照下来, -- 不引用 account_user / account_certification——会员的档案随时会变,而审核记录要能独立复现 -- "当时申请的是谁、什么主体"。两张表刻意保持同构,审核页才有同一套列与筛选口径。 -- -- 账户状态与 account_user.status 的联动(由服务层保证,不在本脚本): -- 提交申请 -> status='2' 注销中(能提交申请说明账号可用,不会是禁用态) -- 审核通过 -> status='3' 已注销 -- 审核驳回 -> status='0' 正常(放回可用状态;否则会员永久卡在"注销中") CREATE TABLE IF NOT EXISTS `account_cancel_apply` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键,同时作为申请号', `user_id` bigint(20) NOT NULL COMMENT '会员ID(account_user.user_id)', `subject_type` char(1) DEFAULT NULL COMMENT '主体类型(1个人 2个体工商户 3企业),提交时快照', `real_name` varchar(64) DEFAULT NULL COMMENT '用户名称', `id_card` varchar(32) DEFAULT NULL COMMENT '用户身份证号', `company_name` varchar(128) DEFAULT NULL COMMENT '企业名称', `credit_code` varchar(32) DEFAULT NULL COMMENT '统一社会信用代码', `legal_person` varchar(64) DEFAULT NULL COMMENT '企业法人', `registered_region` varchar(128) DEFAULT NULL COMMENT '企业注册地区', `company_address` varchar(255) DEFAULT NULL COMMENT '企业地址', `register_date` date DEFAULT NULL COMMENT '注册日期', `license_valid_period` varchar(32) DEFAULT NULL COMMENT '营业执照有效期间', `license_image` varchar(500) DEFAULT NULL COMMENT '营业执照图片', `audit_status` char(1) DEFAULT '0' COMMENT '审核状态(0待审核 1已通过 2已驳回)', `audit_by` varchar(64) DEFAULT '' COMMENT '审核人', `audit_time` datetime DEFAULT NULL COMMENT '审核时间', `audit_remark` varchar(500) DEFAULT NULL COMMENT '审核意见(驳回原因)', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '提交时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_cancel_apply_user_id` (`user_id`), KEY `idx_cancel_apply_audit_status` (`audit_status`), KEY `idx_cancel_apply_create_time` (`create_time`) ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COMMENT='会员注销申请审核表'; -- ---------- 11. 清理辅助过程 ---------- DROP PROCEDURE IF EXISTS `hugray_add_column`; DROP PROCEDURE IF EXISTS `hugray_add_index`; -- ---------- 12. 结果核对 ---------- SELECT `TABLE_NAME`, `TABLE_COMMENT` FROM INFORMATION_SCHEMA.TABLES WHERE `TABLE_SCHEMA` = DATABASE() ORDER BY `TABLE_NAME`; SELECT `COLUMN_NAME`, `COLUMN_TYPE`, `COLUMN_DEFAULT`, `COLUMN_COMMENT` FROM INFORMATION_SCHEMA.COLUMNS WHERE `TABLE_SCHEMA` = DATABASE() AND `TABLE_NAME` = 'account_user' ORDER BY `ORDINAL_POSITION`;