暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

main.go 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package main
  2. import (
  3. "encoding/json"
  4. "log"
  5. "git.x2erp.com/qdy/go-db/factory/database"
  6. "git.x2erp.com/qdy/go-db/factory/mongodb"
  7. "git.x2erp.com/qdy/go-svc-worker/internal/domain"
  8. "git.x2erp.com/qdy/go-base/config"
  9. "git.x2erp.com/qdy/go-base/consul"
  10. "git.x2erp.com/qdy/go-base/container"
  11. "git.x2erp.com/qdy/go-base/ctx"
  12. "git.x2erp.com/qdy/go-base/logger"
  13. "git.x2erp.com/qdy/go-base/middleware"
  14. "git.x2erp.com/qdy/go-base/types"
  15. "git.x2erp.com/qdy/go-base/webx"
  16. "git.x2erp.com/qdy/go-base/webx/health"
  17. "git.x2erp.com/qdy/go-base/webx/router"
  18. )
  19. var (
  20. appName = "svc-worker"
  21. appVersion = "1"
  22. )
  23. func main() {
  24. //0.日志
  25. //logger.InitBootLog()
  26. logBootFactory := logger.InitBootLog()
  27. //1.获取配置文件
  28. cfg := config.GetConfig()
  29. cfg.SetAppName(appName)
  30. cfg.SetAppVersion(appVersion)
  31. //2.创建关闭容器
  32. ctr := container.NewContainer(cfg)
  33. //注册日志,实现自动关闭
  34. container.Reg(ctr, logBootFactory)
  35. //3.创建数据库工厂--如果需求
  36. dbFactory := container.Create(ctr, database.CreateDBFactory)
  37. // 赋值认证中间件参数
  38. middleware.JWTAuthMiddlewareInit(cfg)
  39. //测试数据库连接
  40. dbFactory.TestConnection()
  41. // 创建mongodb
  42. mongoDBFactory := container.Create(ctr, mongodb.CreateFactory)
  43. mongoDBFactory.TestConnection()
  44. //得到webservice服务工厂
  45. webxFactory := webx.GetWebServiceFactory()
  46. //建立hhtpService服务
  47. webServcie, _ := webxFactory.CreateService(cfg.GetServiceConfig())
  48. //建立路由-api
  49. routerService := router.NewWebService(webServcie.GetRouter())
  50. //注册路由--api
  51. registerDefaultRouter(routerService, mongoDBFactory)
  52. // 注册健康检查-api
  53. health.RegisterConsulHealthCheck(routerService)
  54. //启动服务
  55. webServcie.Run()
  56. //启用运行日志
  57. container.Create(ctr, logger.InitRuntimeLogger)
  58. //注册到注册中心
  59. container.Create(ctr, consul.Register)
  60. //等待关闭
  61. webServcie.WaitForServiceShutdown(ctr)
  62. }
  63. func registerDefaultRouter(ws *router.RouterService, mongoDBFactory *mongodb.MongoDBFactory) {
  64. // // GET示例:路径参数绑定
  65. // ws.GET("/api/users/{id}",
  66. // func(id string, reqCtx *ctx.RequestContext) (UserResponse, error) {
  67. // log.Print("ctx TenantID:", reqCtx.TenantID)
  68. // // id 自动从路径绑定
  69. // // 注意:webx版本没有自动注入dbFactory
  70. // return getUser(id, dbFactory) // 需要修改getUser函数以获取dbFactory
  71. // },
  72. // ).Use(middleware.JWTAuthMiddleware).Register()
  73. // POST示例:Body参数绑定
  74. ws.POST("/api/tenant/config",
  75. func(req domain.TenantConfig, reqCtx *ctx.RequestContext) (*types.QueryResult[interface{}], error) {
  76. log.Print("ctx TenantID:", reqCtx.TenantID)
  77. //log.Print("mongoDBFactory:", mongoDBFactory.GetConfig().URI)
  78. //log.Print("dbFactory:", dbFactory.GetDBName())
  79. jsonBytes, _ := json.Marshal(req)
  80. log.Printf("TenantConfig :%s", string(jsonBytes))
  81. ok := mongoDBFactory.InsertOne("tenant_configs", req)
  82. log.Print("TenantConfig InsertOne:", ok)
  83. // req 自动从JSON Body绑定
  84. return &types.QueryResult[interface{}]{
  85. Success: ok,
  86. Data: mongoDBFactory.GetConfig().URI,
  87. }, nil
  88. },
  89. ).Use(middleware.JWTAuthMiddleware).Register()
  90. // 您的业务路由
  91. ws.POST("/api/query/yaml",
  92. func() (interface{}, error) {
  93. return queryYaml(nil) // 需要修改queryYaml函数以获取dbFactory
  94. },
  95. ).Use(middleware.JWTAuthMiddleware).Register()
  96. ws.POST("/api/init/config/template",
  97. func() (interface{}, error) {
  98. return initConfigTemplate(nil) // 需要修改initConfigTemplate函数以获取dbFactory
  99. },
  100. ).Use(middleware.JWTAuthMiddleware).Register()
  101. }
  102. func queryYaml(dbFactory *database.DBFactory) (interface{}, error) {
  103. // 您的业务逻辑
  104. return map[string]interface{}{"message": "query yaml success"}, nil
  105. }
  106. func initConfigTemplate(dbFactory *database.DBFactory) (interface{}, error) {
  107. // 您的业务逻辑
  108. return map[string]interface{}{"message": "init config success"}, nil
  109. }
  110. // getSQLWithPagination 生成带分页的SQL语句(参数模式)
  111. // 返回SQL语句和参数映射
  112. func getSQLWithPaginationSQL(startRow, endRow int) (string, []interface{}) {
  113. sql := `SELECT
  114. CLOTHING_ID,
  115. CLOTHING_YEAR,
  116. CLOTHING_NAME
  117. FROM (
  118. SELECT a.*, ROWNUM as rn
  119. FROM (
  120. SELECT *
  121. FROM X6_STOCK_DEV.A3_CLOTHING
  122. ORDER BY CLOTHING_ID
  123. ) a
  124. WHERE ROWNUM <= :1
  125. )
  126. WHERE rn > :2`
  127. // 创建参数映射
  128. params := []interface{}{
  129. endRow,
  130. startRow - 1, // WHERE rn > :start_row 所以是startRow-1
  131. }
  132. return sql, params
  133. }