main.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package main
  2. import (
  3. _ "ERP_storage/Nats"
  4. "ERP_storage/conf"
  5. "ERP_storage/controllers"
  6. "ERP_storage/logs"
  7. "ERP_storage/models"
  8. "ERP_storage/models/Basic"
  9. _ "ERP_storage/models/Stock"
  10. _ "ERP_storage/routers"
  11. "fmt"
  12. "github.com/beego/beego/v2/adapter/orm"
  13. orm2 "github.com/beego/beego/v2/client/orm"
  14. beego "github.com/beego/beego/v2/server/web"
  15. "github.com/beego/beego/v2/server/web/context"
  16. "github.com/beego/beego/v2/server/web/filter/cors"
  17. _ "github.com/go-sql-driver/mysql"
  18. "runtime"
  19. "strconv"
  20. )
  21. func init() {
  22. fmt.Println(runtime.GOOS)
  23. orm.RegisterDriver("mysql", orm.DRMySQL)
  24. orm.RegisterDataBase("default", "mysql",
  25. conf.MysqlServer_Username+":"+conf.MysqlServer_Password+"@tcp("+conf.MysqlServer_UrlPort+")/"+conf.MysqlServer_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
  26. conf.MysqlServer_MaxIdleConnections, conf.MysqlServer_MaxOpenConnections)
  27. orm.RunSyncdb("default", false, true) // 创建数据库
  28. //Mqtt
  29. orm.RegisterDriver("mysql", orm.DRMySQL)
  30. orm.RegisterDataBase("mqtt", "mysql",
  31. conf.MysqlMqtt_Username+":"+conf.MysqlMqtt_Password+"@tcp("+conf.MysqlMqtt_UrlPort+")/"+conf.MysqlMqtt_Database+"?charset=utf8mb4&loc=Local&parseTime=True",
  32. conf.MysqlMqtt_MaxIdleConnections, conf.MysqlMqtt_MaxOpenConnections)
  33. orm2.Debug = true
  34. }
  35. func main() {
  36. HTTPPort, _ := beego.AppConfig.String("HTTPPort")
  37. HTTPPort_int, _ := strconv.Atoi(HTTPPort)
  38. beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
  39. // 允许访问所有源
  40. AllowAllOrigins: true,
  41. // 可选参数"GET", "POST", "PUT", "DELETE", "OPTIONS" (*为所有)
  42. AllowMethods: []string{"*"},
  43. // 指的是允许的Header的种类
  44. AllowHeaders: []string{"Origin", "Authorization", "Access-Control-Allow-Headers", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
  45. // 公开的HTTP标头列表
  46. ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
  47. // 如果设置,则允许共享身份验证凭据,例如cookie
  48. AllowCredentials: true,
  49. }))
  50. appname, _ := beego.AppConfig.String("appname")
  51. beego.BConfig.AppName = appname // 项目名
  52. beego.BConfig.ServerName = appname //server 名称
  53. beego.BConfig.RunMode = "dev" // 应用的运行模式
  54. beego.BConfig.Listen.HTTPPort = HTTPPort_int //监听端口 本地:8518 线上:8528
  55. beego.BConfig.WebConfig.AutoRender = false
  56. beego.BConfig.RecoverPanic = true
  57. beego.BConfig.RecoverFunc = RecoverPanic
  58. // 自动迁移
  59. models.AutoMigrateDB()
  60. go Basic.Read_ProductClass_All_Map() // 初始化产品类型
  61. go controllers.Cron_StockMonth() // 库存明细详情定时任务
  62. go controllers.Cron_VerifyContract() // 验证合同状态修改定时任务
  63. //go controllers.Cron_Device_Add() // 重写设备表 只执行一次
  64. go controllers.CheckPowerUniformity() // 检查角色是否与用户系统一致,不存在则添加
  65. //go controllers.Cron_StockMonth_Add() // 统计库存明细,测试使用
  66. go controllers.Cron_Percentage() // 同步冷链验证公司,每日执行一次
  67. beego.Run()
  68. }
  69. func RecoverPanic(ctx *context.Context, config *beego.Config) {
  70. if err := recover(); err != nil {
  71. ctx.ResponseWriter.Header().Set("Access-Control-Allow-Origin", ctx.Request.Header.Get("Origin"))
  72. var stack []string
  73. for i := 1; ; i++ {
  74. _, file, line, ok := runtime.Caller(i)
  75. if !ok {
  76. break
  77. }
  78. logs.Error(fmt.Sprintf("%s:%d", file, line))
  79. stack = append(stack, fmt.Sprintln(fmt.Sprintf("%s:%d", file, line)))
  80. }
  81. //显示错误
  82. data := map[string]interface{}{
  83. "AppError": fmt.Sprintf("%v", err),
  84. "Code": 500,
  85. "Msg": "请稍后重试!",
  86. }
  87. if conf.RunMode == "dev" {
  88. data["RequestMethod"] = ctx.Input.Method()
  89. data["RequestURL"] = ctx.Input.URI()
  90. data["RemoteAddr"] = ctx.Input.IP()
  91. data["Stack"] = stack
  92. data["GoVersion"] = runtime.Version()
  93. }
  94. _ = ctx.Output.JSON(data, true, true)
  95. //if ctx.Output.Status != 0 {
  96. // ctx.ResponseWriter.WriteHeader(ctx.Output.Status)
  97. //} else {
  98. // ctx.ResponseWriter.WriteHeader(500)
  99. //}
  100. }
  101. }