SysDomain.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package gen
  2. import (
  3. "fmt"
  4. "git.qianqiusoft.com/qianqiusoft/light-apiengine/engine"
  5. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  6. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  7. sysutils "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  8. "github.com/gin-gonic/gin"
  9. "github.com/xormplus/xorm"
  10. "regexp"
  11. "time"
  12. )
  13. // SystemController operations for System
  14. type DomainController struct {
  15. apiengine *engine.ApiEngine
  16. }
  17. func NewDomainController(e *engine.ApiEngine) *DomainController {
  18. controller := &DomainController{e}
  19. return controller
  20. }
  21. // AddDomain
  22. // @Title AddDomain
  23. // @Description 添加域
  24. // @Param false "域"
  25. // @Success 200 {object} sysReturn
  26. // @Failure 403 :id is empty
  27. // @router /add_domain [post,get,put]
  28. func (c *DomainController) AddDomain(ctx *gin.Context) {
  29. //
  30. var paramObj0 sysmodel.SysDomain
  31. ctx.BindJSON(&paramObj0)
  32. //1、测试连接串
  33. //db, err := xorm.NewEngine("mysql", paramObj0.DataSource)
  34. //if err == nil {
  35. // engine.initOrmEngine(db, "mysql")
  36. // c.BusinessOrmEngine[v.Domain] = db
  37. //}
  38. var db *xorm.Engine
  39. var err error
  40. dbname := paramObj0.DataSource
  41. reg := regexp.MustCompile("(.*)/(.*)(\\?.*)")
  42. strings := reg.FindStringSubmatch(dbname)
  43. if len(strings) > 3 {
  44. dbname = strings[2]
  45. db, err = xorm.NewEngine("mysql", strings[1]+"/")
  46. if err != nil {
  47. ctx.JSON(500, sysmodel.SysReturn{500, "连接数据库错误:" + err.Error(), nil})
  48. return
  49. }
  50. db.ShowSQL(true)
  51. _, err = db.Sql("CREATE DATABASE IF NOT EXISTS `" + dbname + "` default charset utf8 COLLATE utf8_general_ci").Execute()
  52. if err != nil {
  53. fmt.Println("create database error", err)
  54. ctx.JSON(500, sysmodel.SysReturn{500, "create database error " + err.Error(), nil})
  55. return
  56. } else {
  57. fmt.Println("create database success:", dbname)
  58. }
  59. //创建数据库后,重新连接,避免出现 No database selected 错误
  60. db, err = xorm.NewEngine("mysql", strings[0])
  61. err = c.InitDomainDb(db, paramObj0)
  62. if err != nil {
  63. ctx.JSON(500, sysmodel.SysReturn{500, "init domain db error: " + err.Error(), nil})
  64. return
  65. }
  66. c.apiengine.BusinessOrmEngine[paramObj0.Domain] = db
  67. }
  68. tk, _ := ctx.Get("token")
  69. user := tk.(*entitys.Token)
  70. paramObj0.Id = sysutils.NewUUID()
  71. paramObj0.CreateBy = user.UserId
  72. paramObj0.LastUpdateBy = user.UserId
  73. paramObj0.CreateTime = sysmodel.NowLocal()
  74. paramObj0.LastUpdateTime = time.Now().UnixNano()
  75. paramObj0.DelFlag = 0
  76. paramMap, err := sysutils.BeanToMap(&paramObj0)
  77. if err != nil {
  78. ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
  79. return
  80. }
  81. _, err = c.apiengine.PlatformOrmEngine.SqlMapClient("insert_sys_domain", paramMap).Execute()
  82. if err == nil {
  83. ctx.JSON(200, sysmodel.SysReturn{200, "", paramObj0.Id})
  84. } else {
  85. ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
  86. }
  87. }
  88. func (c *DomainController) InitDomainDb(db *xorm.Engine, domain sysmodel.SysDomain) error {
  89. users := sysmodel.SysUser{
  90. Id: sysutils.NewUUID(),
  91. Name: "管理员",
  92. LoginId: domain.Domain,
  93. Domain: domain.Domain,
  94. Password: sysutils.HashPassword("123456", ""),
  95. CreateTime: time.Now(),
  96. }
  97. roles := []sysmodel.SysRole{
  98. {
  99. Id: "487c50a4-caad-4557-80c8-aca81af9f371",
  100. Name: "管理员",
  101. CreateTime: time.Now(),
  102. },
  103. }
  104. userRoles := []sysmodel.SysUserRole{
  105. {
  106. Id: "587c50a4-caad-4557-80c8-aca81af9f370",
  107. RoleId: "387c50a4-caad-4557-80c8-aca81af9f371",
  108. UserId: users.Id,
  109. CreateTime: time.Now(),
  110. },
  111. }
  112. //for _, model := range sysmodel.ModelNameList {
  113. // fmt.Println(model)
  114. //}
  115. //创建表
  116. //config.AppConfig.SyncDb = true
  117. //sysmodel.SyncDb(db)
  118. //config.AppConfig.SyncDb = false
  119. _, 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()
  120. if err != nil {
  121. return err
  122. }
  123. _, 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()
  124. if err != nil {
  125. return err
  126. }
  127. _, 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()
  128. if err != nil {
  129. return err
  130. }
  131. _, 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()
  132. if err != nil {
  133. return err
  134. }
  135. _, 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()
  136. if err != nil {
  137. return err
  138. }
  139. _, 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()
  140. if err != nil {
  141. return err
  142. }
  143. //平台插入管理员
  144. _, err = c.apiengine.PlatformOrmEngine.Insert(users)
  145. if err != nil {
  146. return err
  147. }
  148. //域插入角色
  149. _, err = db.Insert(roles)
  150. if err != nil {
  151. return err
  152. }
  153. _, err = db.Insert(userRoles)
  154. if err != nil {
  155. return err
  156. }
  157. return nil
  158. }