ソースを参照

'添加域、自动创建表插入基础数据'

huangyh 6 年 前
コミット
44baf717df

+ 180 - 0
controllers/gen/SysDomain.go

@@ -0,0 +1,180 @@
+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(&paramObj0)
+
+	//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(&paramObj0)
+	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
+
+}

+ 103 - 1
controllers/partial/SystemController.go

@@ -492,7 +492,7 @@ func System_AddMenu(c *entitys.CtrlContext) {
 	paramObj0.Domain = user.Domain
 	paramObj0.CreateBy = user.UserId
 	paramObj0.LastUpdateBy = user.UserId
-	paramObj0.CreateTime = time.Now()
+	paramObj0.CreateTime = models.NowLocal()
 	paramObj0.LastUpdateTime = time.Now().UnixNano()
 	paramObj0.DelFlag = 0
 
@@ -667,6 +667,108 @@ func System_GetOrgByUserid(c *entitys.CtrlContext) {
 	}
 }
 
+// _AddDomain
+// @Title _AddDomain
+// @Description 添加域
+// @Param	      false  "域"
+// @Success 200 {object} Account
+// @Failure 403 :id is empty
+func System_AddDomain(c *entitys.CtrlContext) {
+	var paramObj0 models.SysDomain
+	c.Ctx.BindJSON(&paramObj0)
+
+	////1、测试连接串
+	//db, err := xorm.NewEngine("mysql", paramObj0.DataSource)
+	//if err == nil {
+	//	//engine.initOrmEngine(db, "mysql")
+	//	//c.BusinessOrmEngine[v.Domain] = db
+	//}
+
+	tk, _ := c.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(&paramObj0)
+	if err != nil {
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
+		return
+	}
+
+	_, err = c.Db.SqlMapClient("insert_sys_domain", paramMap).Execute()
+	if err == nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", paramObj0.Id})
+	} else {
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
+	}
+}
+
+// _DelDomain
+// @Title _DelDomain
+// @Description 删除域
+// @Param	id    string  false  "域ID"
+// @Success 200 {object} Account
+// @Failure 403 :id is empty
+func System_DelDomain(c *entitys.CtrlContext) {
+	type Param struct {
+		Id string `json:"id"`
+	}
+	var params []Param
+	c.Ctx.BindJSON(&params)
+	ids := []string{}
+	for _, param := range params {
+		ids = append(ids, param.Id)
+	}
+
+	_, err := c.Db.Table(new(models.SysDomain)).In("id", ids).Update(map[string]interface{}{"del_flag": 1})
+	if err != nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
+		return
+	}
+
+	ret := __none_func_system__()
+	if ret {
+		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
+	} else {
+		c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
+	}
+}
+
+// _UpdateDomain
+// @Title _UpdateDomain
+// @Description 修改域
+// @Param	      false  "域"
+// @Success 200 {object} Account
+// @Failure 403 :id is empty
+func System_UpdateDomain(c *entitys.CtrlContext) {
+	var paramObj0 models.SysDomain
+	c.Ctx.BindJSON(&paramObj0)
+
+	tk, _ := c.Ctx.Get("token")
+	user := tk.(*entitys.Token)
+
+	paramObj0.LastUpdateTime = time.Now().UnixNano()
+	paramObj0.LastUpdateBy = user.UserId
+
+	paramMap, err := sysutils.BeanToMap(&paramObj0)
+	if err != nil {
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
+		return
+	}
+	_, err = c.Db.SqlMapClient("update_sys_domain", paramMap).Execute()
+
+	if err == nil {
+		c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
+	} else {
+		c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
+	}
+}
+
 func __none_func_system__(params ...interface{}) bool {
 	return true
 }

+ 8 - 8
engine/system_init.go

@@ -39,7 +39,7 @@ func initPlatformDbData(db *xorm.Engine) {
 			Name:           "智慧蜂云",
 			Domain:         "ccbeetech.com",
 			DataSource:     "root:qian@123@tcp(localhost:3306)/ssm-ccbeetech?charset=utf8&loc=Local",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 	}
@@ -88,7 +88,7 @@ func initPlatformDbData(db *xorm.Engine) {
 		{
 			Id:             "387c50a4-caad-4557-80c8-aca81af9f370",
 			Name:           "系统管理",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 		{
@@ -97,7 +97,7 @@ func initPlatformDbData(db *xorm.Engine) {
 			Parent:         "387c50a4-caad-4557-80c8-aca81af9f370",
 			Url:            "/sys/user",
 			Component:      "system/user",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 		{
@@ -106,7 +106,7 @@ func initPlatformDbData(db *xorm.Engine) {
 			Parent:         "387c50a4-caad-4557-80c8-aca81af9f370",
 			Url:            "/sys/org",
 			Component:      "system/org",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 		{
@@ -115,7 +115,7 @@ func initPlatformDbData(db *xorm.Engine) {
 			Parent:         "387c50a4-caad-4557-80c8-aca81af9f370",
 			Url:            "/sys/role",
 			Component:      "system/role",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 		{
@@ -124,7 +124,7 @@ func initPlatformDbData(db *xorm.Engine) {
 			Parent:         "387c50a4-caad-4557-80c8-aca81af9f370",
 			Url:            "/sys/menu",
 			Component:      "system/menu",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 		{
@@ -133,7 +133,7 @@ func initPlatformDbData(db *xorm.Engine) {
 			Parent:         "387c50a4-caad-4557-80c8-aca81af9f370",
 			Url:            "/sys/dict",
 			Component:      "system/dic",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 		{
@@ -142,7 +142,7 @@ func initPlatformDbData(db *xorm.Engine) {
 			Parent:         "387c50a4-caad-4557-80c8-aca81af9f370",
 			Url:            "/sys/log",
 			Component:      "system/log",
-			CreateTime:     time.Now(),
+			CreateTime:     models.NowLocal(),
 			LastUpdateTime: time.Now().UnixNano(),
 		},
 	}

+ 23 - 2
light-apiengine.xml

@@ -200,6 +200,27 @@
                     <failure ref="$sys_return"></failure>
                 </return>
             </api>
+            <!--<api name="add_domain" desc="添加域" method="post,get,put">-->
+                <!--<param name=""  ref="$sys_domain" desc="域"/>-->
+                <!--<return>-->
+                    <!--<success ref="$sys_return"></success>-->
+                    <!--<failure ref="$sys_return"></failure>-->
+                <!--</return>-->
+            <!--</api>-->
+            <api name="del_domain" desc="删除域" method="post,get,put">
+                <param name="id" type="string" desc="域ID"/>
+                <return>
+                    <success ref="$sys_return"></success>
+                    <failure ref="$sys_return"></failure>
+                </return>
+            </api>
+            <api name="update_domain" desc="修改域" method="post,get,put">
+                <param name=""  ref="$sys_domain" desc="域"/>
+                <return>
+                    <success ref="$sys_return"></success>
+                    <failure ref="$sys_return"></failure>
+                </return>
+            </api>
         </controller>
         <controller name="api" desc="api接口">
             <api name="api_doc" method="get" desc="api文档">
@@ -393,7 +414,7 @@
             <column isNull="false" name="order_num" caption="排序" type="int32"/>
             <column isNull="false" name="domain" caption="域" type="string" size="50" dbtype="varchar(50)"/>
             <column isNull="false" name="create_by" caption="创建人" type="string" size="36" dbtype="varchar(36)"/>
-            <column isNull="false" name="create_time" caption="创建时间" type="datetime" />
+            <column isNull="false" name="create_time" caption="创建时间" type="local_time" />
             <column isNull="false" name="last_update_by" caption="最后更新人" type="string" size="36" dbtype="varchar(36)"/>
             <column isNull="false" name="last_update_time" caption="最后更新时间" type="int64" />
             <column isNull="false" name="del_flag" caption="是否删除 1:删除   0:正常" type="int32"/>
@@ -474,7 +495,7 @@
             <column name="status" caption="状态 0:禁用   1:正常" type="int32"/>
             <column isNull="false" name="domain" caption="域" type="string" size="50" dbtype="varchar(36)"/>
             <column isNull="false" name="create_by" caption="创建人" type="string" size="36" dbtype="varchar(36)"/>
-            <column isNull="false" name="create_time" caption="创建时间" type="datetime" />
+            <column isNull="false" name="create_time" caption="创建时间" type="local_time" />
             <column isNull="false" name="last_update_by" caption="最后更新人" type="string" size="36" dbtype="varchar(36)"/>
             <column isNull="false" name="last_update_time" caption="最后更新时间" type="int64" />
             <column isNull="false" name="del_flag" caption="是否删除 1:删除   0:正常" type="int32"/>

+ 24 - 0
routers/sys_domain.go

@@ -0,0 +1,24 @@
+package routers
+
+import (
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/controllers/gen"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/engine"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/middleware"
+)
+
+func init() {
+	addRegisterHandler(registerDomainRouter)
+}
+
+func registerDomainRouter(e *engine.ApiEngine) {
+	api := e.GinEngine.Group("/api")
+	v1 := api.Group("/v1/system")
+	_router["system"] = v1
+	v1.Use(middleware.LoginWare())
+
+	ctrler := gen.NewDomainController(e)
+
+	v1.GET("/add_domain", ctrler.AddDomain)
+	v1.POST("/add_domain", ctrler.AddDomain)
+
+}