package gen import ( "fmt" "git.qianqiusoft.com/qianqiusoft/light-apiengine/engine" "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils" "github.com/gin-gonic/gin" "github.com/xormplus/xorm" "regexp" "time" ) // SystemController operations for System type DomainController struct { apiengine *engine.ApiEngine } func NewDomainController(e *engine.ApiEngine) *DomainController { controller := &DomainController{e} return controller } // AddDomain // @Title AddDomain // @Description 添加域 // @Param false "域" // @Success 200 {object} sysReturn // @Failure 403 :id is empty // @router /add_domain [post,get,put] func (c *DomainController) AddDomain(ctx *gin.Context) { // var paramObj0 sysmodel.SysDomain ctx.BindJSON(¶mObj0) //1、测试连接串 //db, err := xorm.NewEngine("mysql", paramObj0.DataSource) //if err == nil { // engine.initOrmEngine(db, "mysql") // c.BusinessOrmEngine[v.Domain] = db //} var db *xorm.Engine var err error dbname := paramObj0.DataSource reg := regexp.MustCompile("(.*)/(.*)(\\?.*)") strings := reg.FindStringSubmatch(dbname) if len(strings) > 3 { dbname = strings[2] db, err = xorm.NewEngine("mysql", strings[1]+"/") if err != nil { ctx.JSON(500, sysmodel.SysReturn{500, "连接数据库错误:" + err.Error(), nil}) return } db.ShowSQL(true) _, err = db.Sql("CREATE DATABASE IF NOT EXISTS `" + dbname + "` default charset utf8 COLLATE utf8_general_ci").Execute() if err != nil { fmt.Println("create database error", err) ctx.JSON(500, sysmodel.SysReturn{500, "create database error " + err.Error(), nil}) return } else { fmt.Println("create database success:", dbname) } //创建数据库后,重新连接,避免出现 No database selected 错误 db, err = xorm.NewEngine("mysql", strings[0]) err = c.InitDomainDb(db, paramObj0) if err != nil { ctx.JSON(500, sysmodel.SysReturn{500, "init domain db error: " + err.Error(), nil}) return } c.apiengine.BusinessOrmEngine[paramObj0.Domain] = db } tk, _ := ctx.Get("token") user := tk.(*entitys.Token) paramObj0.Id = sysutils.NewUUID() paramObj0.CreateBy = user.UserId paramObj0.LastUpdateBy = user.UserId paramObj0.CreateTime = sysmodel.NowLocal() paramObj0.LastUpdateTime = time.Now().UnixNano() paramObj0.DelFlag = 0 paramMap, err := sysutils.BeanToMap(¶mObj0) if err != nil { ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil}) return } _, err = c.apiengine.PlatformOrmEngine.SqlMapClient("insert_sys_domain", paramMap).Execute() if err == nil { ctx.JSON(200, sysmodel.SysReturn{200, "", paramObj0.Id}) } else { ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil}) } } func (c *DomainController) InitDomainDb(db *xorm.Engine, domain sysmodel.SysDomain) error { users := sysmodel.SysUser{ Id: sysutils.NewUUID(), Name: "管理员", LoginId: domain.Domain, Domain: domain.Domain, Password: sysutils.HashPassword("123456", ""), CreateTime: time.Now(), } roles := []sysmodel.SysRole{ { Id: "487c50a4-caad-4557-80c8-aca81af9f371", Name: "管理员", CreateTime: time.Now(), }, } userRoles := []sysmodel.SysUserRole{ { Id: "587c50a4-caad-4557-80c8-aca81af9f370", RoleId: "387c50a4-caad-4557-80c8-aca81af9f371", UserId: users.Id, CreateTime: time.Now(), }, } //for _, model := range sysmodel.ModelNameList { // fmt.Println(model) //} //创建表 //config.AppConfig.SyncDb = true //sysmodel.SyncDb(db) //config.AppConfig.SyncDb = false _, err := db.Sql("CREATE TABLE IF NOT EXISTS `sys_attachment` (`id` VARCHAR(36) PRIMARY KEY NOT NULL, `name` VARCHAR(36) NOT NULL, `size` INT NOT NULL, `ext` VARCHAR(36) NOT NULL, `hash` VARCHAR(255) NOT NULL, `url` VARCHAR(200) NOT NULL, `create_by` VARCHAR(36) NOT NULL, `create_time` DATETIME NOT NULL, `del_flag` INT NOT NULL)").Execute() if err != nil { return err } _, err = db.Sql("CREATE TABLE IF NOT EXISTS `sys_org` (`id` VARCHAR(36) PRIMARY KEY NOT NULL, `parent` VARCHAR(36) NULL, `inheritance` VARCHAR(500) NULL, `name` VARCHAR(36) NOT NULL, `full_name` VARCHAR(36) NOT NULL, `leader` VARCHAR(36) NOT NULL, `type` INT NOT NULL, `order` INT NOT NULL, `status` INT NOT NULL, `domain` VARCHAR(36) NOT NULL, `create_by` VARCHAR(36) NOT NULL, `create_time` DATETIME NOT NULL, `last_update_by` VARCHAR(36) NOT NULL, `last_update_time` BIGINT(20) NOT NULL, `del_flag` INT NOT NULL)").Execute() if err != nil { return err } _, err = db.Sql("CREATE TABLE IF NOT EXISTS `sys_permission` (`id` VARCHAR(36) PRIMARY KEY NOT NULL, `perms` VARCHAR(100) NOT NULL, `domain` VARCHAR(255) NOT NULL, `create_by` VARCHAR(36) NOT NULL, `create_time` DATETIME NOT NULL, `last_update_by` VARCHAR(36) NOT NULL, `last_update_time` BIGINT(20) NOT NULL, `del_flag` INT NOT NULL)").Execute() if err != nil { return err } _, err = db.Sql("CREATE TABLE IF NOT EXISTS `sys_role_menu` (`id` VARCHAR(36) PRIMARY KEY NOT NULL, `role_id` VARCHAR(36) NOT NULL, `menu_id` VARCHAR(36) NOT NULL, `domain` VARCHAR(255) NOT NULL, `create_by` VARCHAR(36) NOT NULL, `create_time` DATETIME NOT NULL, `last_update_by` VARCHAR(36) NOT NULL, `last_update_time` BIGINT(20) NOT NULL, `del_flag` INT NOT NULL)").Execute() if err != nil { return err } _, err = db.Sql("CREATE TABLE IF NOT EXISTS `sys_role` (`id` VARCHAR(36) PRIMARY KEY NOT NULL, `name` VARCHAR(36) NOT NULL, `code` VARCHAR(36) NOT NULL, `remark` VARCHAR(100) NOT NULL, `status` INT NOT NULL, `domain` VARCHAR(50) NOT NULL, `create_by` VARCHAR(36) NOT NULL, `create_time` DATETIME NOT NULL, `last_update_by` VARCHAR(36) NOT NULL, `last_update_time` BIGINT(20) NOT NULL, `del_flag` INT NOT NULL)").Execute() if err != nil { return err } _, err = db.Sql("CREATE TABLE IF NOT EXISTS `sys_user_role` (`id` VARCHAR(36) PRIMARY KEY NOT NULL, `user_id` VARCHAR(36) NOT NULL, `role_id` VARCHAR(36) NOT NULL, `domain` VARCHAR(50) NOT NULL, `create_by` VARCHAR(36) NOT NULL, `create_time` DATETIME NOT NULL, `last_update_by` VARCHAR(36) NOT NULL, `last_update_time` BIGINT(20) NOT NULL, `del_flag` INT NOT NULL)").Execute() if err != nil { return err } //平台插入管理员 _, err = c.apiengine.PlatformOrmEngine.Insert(users) if err != nil { return err } //域插入角色 _, err = db.Insert(roles) if err != nil { return err } _, err = db.Insert(userRoles) if err != nil { return err } return nil }