zhangjq 6 лет назад
Родитель
Сommit
2d9508c78f
2 измененных файлов с 70 добавлено и 59 удалено
  1. 18 42
      engine/apiengine.go
  2. 52 17
      engine/system_init.go

+ 18 - 42
engine/apiengine.go

@@ -7,10 +7,9 @@ import (
 	//"github.com/gin-contrib/sessions/cookie"
 
 	"os"
-	"time"
 
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
-	"git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
 	"github.com/gin-contrib/cors"
 	"github.com/gin-gonic/gin"
 	"github.com/xormplus/xorm"
@@ -32,10 +31,12 @@ func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
 	engine := &ApiEngine{}
 	var err error
 	engine.PlatformOrmEngine, err = xorm.NewEngine(driverName, dataSourceName)
-	if err != nil {
-		fmt.Println(err.Error())
-	}
+	printError(err)
+
 	initOrmEngine(engine.PlatformOrmEngine, driverName)
+
+	engine.LoadBusinessOrm()
+
 	engine.GinEngine = gin.Default()
 
 	//启动session
@@ -48,8 +49,6 @@ func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
 		engine.GinEngine.LoadHTMLGlob("doc/*")
 	}
 
-	CreateDatabase(engine)
-
 	//cross domain
 	config := cors.DefaultConfig()
 	config.AllowAllOrigins = true
@@ -60,48 +59,25 @@ func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
 	engine.listen_addr = addr
 
 	//设置登陆过滤
-
 	return engine
 }
 
-func initOrmEngine(orm *xorm.Engine, driverName string) {
-	path, _ := utils.GetCurrentPath()
-	sqldir := path + "/sqlconfig"
-	//注册SqlMap配置,xml格式
-	err := orm.RegisterSqlMap(xorm.Xml(sqldir, ".xml"))
-	printError(err)
-	//注册SqlTemplate配置,使用Pongo2模板引擎
-	err = orm.RegisterSqlTemplate(xorm.Pongo2(sqldir, "_"+driverName+".stpl"))
-	printError(err)
-	//注册SqlTemplate配置,使用Jet模板引擎
-	err = orm.RegisterSqlTemplate(xorm.Jet(sqldir, "_"+driverName+".jet"))
-	printError(err)
-	//注册SqlTemplate配置,使用html/template模板引擎
-	err = orm.RegisterSqlTemplate(xorm.Default(sqldir, "_"+driverName+".tpl"))
-	printError(err)
-
-	//设置时区
-	orm.DatabaseTZ = time.Local // 必须
-	orm.TZLocation = time.Local // 必须
-	time.LoadLocation("Asia/Shanghai")
-
-	orm.StartFSWatcher()
-
-	orm.ShowSQL(true)
-	/*for k,_:=range orm.SqlMap.Sql{
-		fmt.Println(k)
-	}*/
-	//orm.ShowExecTime(true)
-}
-
-func printError(err error) {
-	if err != nil {
-		fmt.Println(err.Error())
+func (g *ApiEngine)LoadBusinessOrm()  {
+	var domain []models.SysDomain
+	g.PlatformOrmEngine.SQL("select * from sys_domain where del_flag = 0").Find(&domain)
+	g.BusinessOrmEngine = make(map[string]*xorm.Engine)
+	for _,v := range domain {
+		db,err := xorm.NewEngine("mysql", v.DataSource)
+		if err == nil {
+			initOrmEngine(db, "mysql")
+			g.BusinessOrmEngine[v.Domain] = db
+		}
 	}
 }
 
+
 func (g *ApiEngine) Run() {
-	InitPlatformDbData(g)
+	initPlatformDbData(g.PlatformOrmEngine)
 	g.GinEngine.StaticFile("/", "web/index.html")
 	g.GinEngine.Static("/static", "web/static")
 	g.GinEngine.Run(g.listen_addr)

+ 52 - 17
engine/system_init.go

@@ -3,28 +3,24 @@ package engine
 import (
 	"fmt"
 	"git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
+	"git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
 	"github.com/xormplus/xorm"
 	"regexp"
 	"time"
 )
 
-func CreateDatabase(engine *ApiEngine) {
-	createDatabase(engine.PlatformOrmEngine)
-	for _,db :=range engine.BusinessOrmEngine {
-		createDatabase(db)
-	}
-}
 
-func createDatabase(db *xorm.Engine)  {
-	if db.DriverName() == "mysql" {
-		dbname := db.DataSourceName()
+func createDatabase(orm *xorm.Engine)  {
+	if orm.DriverName() == "mysql" {
+		dbname := orm.DataSourceName()
 		reg := regexp.MustCompile("(.*)/(.*)(\\?.*)")
 		//strings := reg.FindAllStringSubmatch(s, -1)
 		strings := reg.FindStringSubmatch(dbname)
 		fmt.Println(strings)
 		if len(strings) > 3 {
 			dbname = strings[2]
-			db, _ := xorm.NewEngine(db.DriverName(), strings[1]+"/")
+			db, _ := xorm.NewEngine(orm.DriverName(), strings[1]+"/")
 			db.ShowSQL(true)
 			_, err := db.Sql("CREATE DATABASE IF NOT EXISTS `" + dbname + "` default charset utf8 COLLATE utf8_general_ci").Execute()
 			if err != nil {
@@ -36,7 +32,7 @@ func createDatabase(db *xorm.Engine)  {
 	}
 }
 
-func InitPlatformDbData(engine *ApiEngine) {
+func initPlatformDbData(db *xorm.Engine) {
 
 	orgs := []models.SysOrg{
 		{
@@ -134,16 +130,55 @@ func InitPlatformDbData(engine *ApiEngine) {
 		},
 	}
 
-	models.SyncDb(engine.PlatformOrmEngine)
+	models.SyncDb(db)
 
-	_, err := engine.PlatformOrmEngine.Insert(orgs)
+	_, err := db.Insert(orgs)
 	printError(err)
-	_, err = engine.PlatformOrmEngine.Insert(users)
+	_, err = db.Insert(users)
 	printError(err)
-	_, err = engine.PlatformOrmEngine.Insert(roles)
+	_, err = db.Insert(roles)
 	printError(err)
-	_, err = engine.PlatformOrmEngine.Insert(userRoles)
+	_, err = db.Insert(userRoles)
 	printError(err)
-	_, err = engine.PlatformOrmEngine.Insert(menus)
+	_, err = db.Insert(menus)
 	printError(err)
 }
+
+
+func initOrmEngine(orm *xorm.Engine, driverName string) {
+	path, _ := utils.GetCurrentPath()
+	sqldir := path + "/sqlconfig"
+	//注册SqlMap配置,xml格式
+	err := orm.RegisterSqlMap(xorm.Xml(sqldir, ".xml"))
+	printError(err)
+	//注册SqlTemplate配置,使用Pongo2模板引擎
+	err = orm.RegisterSqlTemplate(xorm.Pongo2(sqldir, "_"+driverName+".stpl"))
+	printError(err)
+	//注册SqlTemplate配置,使用Jet模板引擎
+	err = orm.RegisterSqlTemplate(xorm.Jet(sqldir, "_"+driverName+".jet"))
+	printError(err)
+	//注册SqlTemplate配置,使用html/template模板引擎
+	err = orm.RegisterSqlTemplate(xorm.Default(sqldir, "_"+driverName+".tpl"))
+	printError(err)
+
+	//设置时区
+	orm.DatabaseTZ = time.Local // 必须
+	orm.TZLocation = time.Local // 必须
+	time.LoadLocation("Asia/Shanghai")
+
+	orm.StartFSWatcher()
+
+	orm.ShowSQL(true)
+	/*for k,_:=range orm.SqlMap.Sql{
+		fmt.Println(k)
+	}*/
+	//orm.ShowExecTime(true)
+	createDatabase(orm)
+}
+
+
+func printError(err error) {
+	if err != nil {
+		logs.Error(err.Error())
+	}
+}