目标需求:后台管理系统的初始化管理员由于需绑定地区编码,传统手动创建用户由于关联表格较多,一次创建需花费较多时间,如若在后台创建初始化服务存在一定的风险,择优选择数据库脚本自动生成
用户表:t_admin_user
CREATE TABLE `t_admin_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`areaid` int(11) NOT NULL,
`pid` int(11) DEFAULT NULL COMMENT '上级',
`account` varchar(64) NOT NULL COMMENT '账号',
`password` varchar(32) NOT NULL COMMENT '密码',
`display_name` varchar(128) DEFAULT NULL COMMENT '展示名',
`perf_score` int(11) NOT NULL COMMENT '考核分数',
`qrcode_id` varchar(32) DEFAULT NULL,
`email` varchar(128) NOT NULL COMMENT '邮箱',
`user_auth_type` int(4) DEFAULT NULL COMMENT '用户类型:1-超管,',
`mobile` varchar(32) NOT NULL COMMENT '手机号码',
`address` varchar(128) DEFAULT NULL COMMENT '地址',
`company` varchar(128) DEFAULT NULL COMMENT '单位',
`is_logined` int(11) DEFAULT '2' COMMENT '是否登陆过系统:1-登录过,2-从未登录',
`mobile_type` varchar(512) DEFAULT NULL COMMENT '手机类型',
`direct_county` int(11) DEFAULT '2' COMMENT '是否为县直属:1-是,2-不是',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`qq` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_t_user_account` (`account`)
) ENGINE=InnoDB AUTO_INCREMENT=1000000607 DEFAULT CHARSET=utf8 COMMENT='用户表';
角色表:t_admin_role
CREATE TABLE `t_admin_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`areaid` int(11) NOT NULL,
`role_name` varchar(32) NOT NULL COMMENT '角色名称',
`role_desc` varchar(256) DEFAULT NULL COMMENT '角色描述',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=500033 DEFAULT CHARSET=utf8 COMMENT='角色表';
用户角色关联表:t_admin_user_role
CREATE TABLE `t_admin_user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`areaid` int(11) NOT NULL,
`admin_user_id` int(11) NOT NULL COMMENT '用户id',
`admin_role_id` int(11) NOT NULL COMMENT '角色id',
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=200331 DEFAULT CHARSET=utf8;
存储过程:
DROP PROCEDURE IF EXISTS SysCreate;
DELIMITER //
CREATE PROCEDURE SysCreate (IN adminUserId INT,IN account VARCHAR(64),IN areaid INT,OUT result INT)
BEGIN
DECLARE hasRow,maxId INT;
DECLARE roleId INT DEFAULT 1;
DECLARE EXIT HANDLER FOR SQLEXCEPTION -- 捕捉错误,如果是sql错误就执行里面的
BEGIN
-- ERROR
SET result = -1; -- 返回值-1,说明sql错误
SELECT result;
rollback; -- 回滚数据
END;
START TRANSACTION; -- 开始事务
SELECT COUNT(*) INTO hasRow FROM t_admin_user t WHERE t.id = adminUserId OR t.account = account;
IF hasRow > 0 THEN
SET result = 0; -- 返回值0,说明sql错误
ELSE
INSERT INTO t_admin_user(id,areaid,pid,account,password,perf_score,email,user_auth_type,mobile,direct_county) VALUES(adminUserId,areaid,0,account,'123',10,'123@123.com',1,'13333333',2);
select max(id) INTO maxId from t_admin_role;
IF maxId IS NOT NULL THEN
SET roleId = maxId + 5;
END IF;
INSERT INTO t_admin_role(id,areaid,role_name,role_desc,create_time) VALUES(roleId,areaid,'超级管理员','超级管理员',NULL);
INSERT INTO t_admin_user_role(id,areaid,admin_user_id,admin_role_id,create_time) VALUES (NULL,areaid,adminUserId,roleId,NULL);
-- FOR
SET result = 1; -- 返回值1,说明sql正常
END IF;
COMMIT; -- 提交
SELECT result;
END //
CALL SysCreate(110000,'admin_xx',350524,@result);