Bladeren bron

选择性同步数据库表

zhangjq 6 jaren geleden
bovenliggende
commit
0d9ef47691

+ 1 - 3
controllers/partial/SystemController.go

@@ -705,9 +705,7 @@ func System_AddDomain(c *entitys.CtrlContext) {
 	_, err = c.Db.SqlMapClient("insert_sys_domain", paramMap).Execute()
 	if err == nil {
 		//添加数据库基本用户权限数据
-		ret := c.App.AddBusinessDb(paramObj0.Id, "admin@"+paramObj0.Domain, paramObj0.Domain, paramObj0.DataSource)
-		//添加模块初始化配置
-		c.App.AppModuleInit()
+		ret := c.App.AddBusinessDb(paramObj0.Id, "admin@"+paramObj0.Domain, paramObj0.Domain, paramObj0.DataSource, true)
 		if ret {
 			c.Ctx.JSON(200, sysmodel.SysReturn{200, "", paramObj0.Id})
 		} else {

+ 15 - 9
engine/apiengine.go

@@ -75,9 +75,9 @@ func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
 	return engine
 }
 
-func (g *ApiEngine)AppModuleInit()  {
+func (g *ApiEngine)AppModuleInit(domain string)  {
 	for _,v := range g.AppModuleInitFunc {
-		v(g)
+		v(domain, g)
 	}
 }
 
@@ -85,13 +85,19 @@ func (g *ApiEngine)AddAppMoudleInitFunc(module_name string, handler entitys.AppM
 	g.AppModuleInitFunc[module_name] = handler
 }
 
-func (g *ApiEngine)AddBusinessDb(domainid, login_id, domain, datasource string) bool{
-	db,err := xorm.NewEngine("mysql", datasource)
-	if err == nil {
+func (g *ApiEngine)AddBusinessDb(domainid, login_id, domain, datasource string, sync_db bool) bool{
+	db := g.BusinessOrmEngine[domain]
+	if db == nil {
+		db, _ = xorm.NewEngine("mysql", datasource)
+	}
+	if db != nil {
 		g.BusinessOrmEngine[domain] = db
-		g.AppModuleInit()
-		initOrmEngine(db, "mysql")
-		initBusinessDbData(domainid, login_id, domain, db, g.PlatformOrmEngine)
+		if sync_db {
+			g.AppModuleInit(domain)
+			initOrmEngine(db, "mysql")
+			initBusinessDbData(domainid, login_id, domain, db, g.PlatformOrmEngine)
+			db.SQL("update sys_domain set sync_flag=1 where id = ?", domainid).Execute()
+		}
 		return true
 	}
 	return false
@@ -102,7 +108,7 @@ func (g *ApiEngine)LoadBusinessOrm()  {
 	g.PlatformOrmEngine.SQL("select * from sys_domain where del_flag = 0").Find(&domain)
 	g.BusinessOrmEngine = make(map[string]*xorm.Engine)
 	for _,v := range domain {
-		g.AddBusinessDb(v.Id, v.Domain, v.Domain, v.DataSource)
+		g.AddBusinessDb(v.Id, v.Domain, v.Domain, v.DataSource, (v.SyncFlag == 0))
 	}
 	//将platformOrm添加到businessOrm中,这样平台账号登录上去也相当于使用相同的数据库配置
 	g.BusinessOrmEngine["qianqiusoft.com"] = g.PlatformOrmEngine

+ 3 - 3
entitys/ctrl_context.go

@@ -5,13 +5,13 @@ import (
 	"github.com/xormplus/xorm"
 )
 
-type AppModuleInitFunction func(e ApiEngineInterface)
+type AppModuleInitFunction func(domain string, e ApiEngineInterface)
 
 type ApiEngineInterface interface {
 	GetBusinessDb(domain string) *xorm.Engine
 	GetAllBusinessDb() map[string]*xorm.Engine
-	AddBusinessDb(domainid, login_id, domain, datasource string) bool
-	AppModuleInit()
+	AddBusinessDb(domainid, login_id, domain, datasource string, sync_db bool) bool
+	AppModuleInit(domain string)
 }
 
 type CtrlContext struct {

+ 1 - 0
light-apiengine.xml

@@ -493,6 +493,7 @@
             <column isNull="false" name="domain_url" caption="网址" type="string" size="200" dbtype="varchar(200)"/>
             <column name="type" caption="域类型" type="int32"/>
             <column name="status" caption="状态 0:禁用   1:正常" type="int32"/>
+            <column isNull="false" name="sync_flag" caption="是否同步了数据库标志" 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="local_time" />

+ 2 - 0
models/SysDomain_gen.go

@@ -25,6 +25,8 @@ type SysDomain struct {
 	Type   int32    `xorm:"'type' notnull "json:"type"`
 	//状态 0:禁用   1:正常
 	Status   int32    `xorm:"'status' notnull "json:"status"`
+	//是否同步了数据库标志
+	SyncFlag   int32    `xorm:"'sync_flag' notnull "json:"sync_flag"`
 	//域
 	Domain   string    `xorm:"'domain' varchar(36) notnull "json:"domain"`
 	//创建人

+ 7 - 2
routers/router_gen.go

@@ -43,8 +43,13 @@ func Register(e *engine.ApiEngine){
 	}
 }
 
-func DbInitFunc(e entitys.ApiEngineInterface)  {
-	for _,db := range e.GetAllBusinessDb() {
+func DbInitFunc(domain string, e entitys.ApiEngineInterface)  {
+	if domain == ""{
+		for _,db := range e.GetAllBusinessDb() {
+			models.SyncDb(db)
+		}
+	}else {
+		db := e.GetBusinessDb(domain)
 		models.SyncDb(db)
 	}
 }

+ 5 - 5
sqlconfig/light-apiengine/sys_domain_gen.xml

@@ -2,13 +2,13 @@
 <sqlMap>
     <sql id="insert_sys_domain">
         insert into sys_domain
-		(`id`,`name`,`full_name`,`contact_name`,`contact_email`,`contact_mobile`,`data_source`,`domain_url`,`type`,`status`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`)
+		(`id`,`name`,`full_name`,`contact_name`,`contact_email`,`contact_mobile`,`data_source`,`domain_url`,`type`,`status`,`sync_flag`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`)
 		values
-		(?id,?name,?full_name,?contact_name,?contact_email,?contact_mobile,?data_source,?domain_url,?type,?status,?domain,?create_by,?create_time,?last_update_by,?last_update_time,?del_flag)
+		(?id,?name,?full_name,?contact_name,?contact_email,?contact_mobile,?data_source,?domain_url,?type,?status,?sync_flag,?domain,?create_by,?create_time,?last_update_by,?last_update_time,?del_flag)
     </sql>
     <sql id="update_sys_domain">
         update sys_domain set
-		`name` = ?name,`full_name` = ?full_name,`contact_name` = ?contact_name,`contact_email` = ?contact_email,`contact_mobile` = ?contact_mobile,`data_source` = ?data_source,`domain_url` = ?domain_url,`type` = ?type,`status` = ?status,`domain` = ?domain,`create_by` = ?create_by,`create_time` = ?create_time,`last_update_by` = ?last_update_by,`last_update_time` = ?last_update_time,`del_flag` = ?del_flag
+		`name` = ?name,`full_name` = ?full_name,`contact_name` = ?contact_name,`contact_email` = ?contact_email,`contact_mobile` = ?contact_mobile,`data_source` = ?data_source,`domain_url` = ?domain_url,`type` = ?type,`status` = ?status,`sync_flag` = ?sync_flag,`domain` = ?domain,`create_by` = ?create_by,`create_time` = ?create_time,`last_update_by` = ?last_update_by,`last_update_time` = ?last_update_time,`del_flag` = ?del_flag
 		where id = ?id
     </sql>
     <sql id="deleteone_sys_domain">
@@ -17,13 +17,13 @@
     </sql>
     <sql id="selectone_sys_domain">
         select 
-			`id`,`name`,`full_name`,`contact_name`,`contact_email`,`contact_mobile`,`data_source`,`domain_url`,`type`,`status`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
+			`id`,`name`,`full_name`,`contact_name`,`contact_email`,`contact_mobile`,`data_source`,`domain_url`,`type`,`status`,`sync_flag`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
         from sys_domain
 		where id = ?id
     </sql>
     <sql id="selectall_sys_domain">
         select 
-			`id`,`name`,`full_name`,`contact_name`,`contact_email`,`contact_mobile`,`data_source`,`domain_url`,`type`,`status`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
+			`id`,`name`,`full_name`,`contact_name`,`contact_email`,`contact_mobile`,`data_source`,`domain_url`,`type`,`status`,`sync_flag`,`domain`,`create_by`,`create_time`,`last_update_by`,`last_update_time`,`del_flag`
         from sys_domain
     </sql>
 </sqlMap>