apiengine.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package engine
  2. import (
  3. "fmt"
  4. //"github.com/gin-contrib/sessions"
  5. //"github.com/gin-contrib/sessions/memstore"
  6. //"github.com/gin-contrib/sessions/cookie"
  7. "os"
  8. "git.qianqiusoft.com/qianqiusoft/light-apiengine-client/client"
  9. "git.qianqiusoft.com/qianqiusoft/light-apiengine/config"
  10. "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  11. "git.qianqiusoft.com/qianqiusoft/light-apiengine/env"
  12. "git.qianqiusoft.com/qianqiusoft/light-apiengine/logs"
  13. "github.com/gin-contrib/cors"
  14. "github.com/gin-gonic/gin"
  15. "github.com/xormplus/xorm"
  16. )
  17. type ApiEngine struct {
  18. PlatformOrmEngine *xorm.Engine
  19. BusinessOrmEngine map[string]*xorm.Engine
  20. GinEngine *gin.Engine
  21. listen_addr string
  22. }
  23. func Default() *ApiEngine {
  24. apiengine := NewApiEngine("mysql", config.AppConfig.DataSource, fmt.Sprintf(":%d", config.AppConfig.HttpPort))
  25. return apiengine
  26. }
  27. func NewApiEngine(driverName, dataSourceName string, addr string) *ApiEngine {
  28. engine := &ApiEngine{}
  29. var err error
  30. engine.PlatformOrmEngine, err = xorm.NewEngine(driverName, dataSourceName)
  31. printError(err)
  32. initOrmEngine(engine.PlatformOrmEngine, driverName)
  33. initPlatformDbData(engine.PlatformOrmEngine)
  34. engine.LoadBusinessOrm()
  35. engine.GinEngine = gin.Default()
  36. //启动session
  37. //store := sessions.NewCookieStore([]byte("secret"))
  38. //engine.GinEngine.Use(sessions.Sessions("session", store))
  39. _, err = os.Stat("doc/api.tpl")
  40. if err == nil {
  41. fmt.Println("LoadHTMLGlob.")
  42. engine.GinEngine.LoadHTMLGlob("doc/*")
  43. }
  44. //cross domain
  45. config := cors.DefaultConfig()
  46. config.AllowAllOrigins = true
  47. //config.AllowOrigins = []string{"http://localhost:8090"}
  48. config.AllowCredentials = true
  49. config.AllowHeaders = []string{"Content-Type,AccessToken,X-CSRF-Token, Authorization, Token"}
  50. engine.GinEngine.Use(cors.New(config))
  51. engine.listen_addr = addr
  52. //设置登陆过滤
  53. return engine
  54. }
  55. func (g *ApiEngine)LoadBusinessOrm() {
  56. var domain []models.SysDomain
  57. g.PlatformOrmEngine.SQL("select * from sys_domain where del_flag = 0").Find(&domain)
  58. g.BusinessOrmEngine = make(map[string]*xorm.Engine)
  59. for _,v := range domain {
  60. db,err := xorm.NewEngine("mysql", v.DataSource)
  61. if err == nil {
  62. initOrmEngine(db, "mysql")
  63. g.BusinessOrmEngine[v.Domain] = db
  64. }
  65. }
  66. //将platformOrm添加到businessOrm中,这样平台账号登录上去也相当于使用相同的数据库配置
  67. g.BusinessOrmEngine["qianqiusoft.com"] = g.PlatformOrmEngine
  68. }
  69. func (g *ApiEngine) Run() {
  70. if config.AppConfig.RunMode != "release" {
  71. engine_path := env.Get("GOPATH", "") + "/src/git.qianqiusoft.com/qianqiusoft/light-apiengine/"
  72. _,err:=os.Stat(engine_path+"/light-apiengine.xml")
  73. if err == nil{
  74. gen_clinet := client.NewEngineClient("light-apiengine", "http://ccbeetech.com:6166")
  75. gen_clinet.GenerateToPath(engine_path+"/light-apiengine.xml", engine_path)
  76. }else{
  77. logs.Error("light-engine.xml文件不存在")
  78. }
  79. }
  80. g.GinEngine.StaticFile("/", "web/index.html")
  81. g.GinEngine.Static("/static", "web/static")
  82. g.GinEngine.Run(g.listen_addr)
  83. }