package main import ( "base/app/config" "base/app/lib/ali" "base/app/lib/apple" "base/app/lib/bean" "base/app/lib/che300" "base/app/lib/jpush" "base/app/lib/opensearch" "base/app/lib/tencent" "base/app/lib/websocket" _ "base/app/logic/order" "fmt" "git.oa00.com/go/acs" "git.oa00.com/go/logger" "git.oa00.com/go/mysql" "git.oa00.com/go/pay" "git.oa00.com/go/redis" "git.oa00.com/go/wx" "github.com/gin-gonic/gin/binding" "github.com/go-playground/validator/v10" "go.uber.org/zap" "log" "reflect" "strings" ) // 初始化 func initApp() (closes []func()) { // 关闭资源 closes = []func(){} // 初始化配置文件 config.InitConfig(&config.IniConfig{ ConfigPath: "config", RunModelErrAllow: false, }) // 系统分页 bean.InitPage(config.Config.Page.MinLimit, config.Config.Page.MaxLimit, config.Config.Page.DefaultLimit) logLevel := logger.InfoLevel if config.Config.Debug { logLevel = logger.DebugLevel } // 初始化日志 logger.InitLogger(&logger.LoggerConfig{ Director: "log", Level: logLevel, ShowLine: true, StacktraceKey: "", LinkName: "", LogInConsole: true, EncodeLevel: logger.LowercaseColorLevelEncoder, Prefix: "", }) // 初始化redis pong, err := redis.InitRedis(&redis.RedisConfig{ Addr: config.Config.Redis.Addr, Password: config.Config.Redis.Password, DB: config.Config.Redis.DB, }) if err != nil { log.Fatalln("redis connect faild", err) } else { log.Println("redis pong ", pong) } // 初始化数据库 if err := mysql.InitMysql(&mysql.DbConfig{ Username: config.Config.Mysql.Username, Password: config.Config.Mysql.Password, Host: config.Config.Mysql.Host, Port: config.Config.Mysql.Port, DbName: config.Config.Mysql.DbName, Prefix: config.Config.Mysql.Prefix, Extend: config.Config.Mysql.Extend, SingularTable: config.Config.Mysql.SingularTable, LogColorful: config.Config.Mysql.LogColorful, LogLevel: config.Config.Mysql.LogLevel, MaxIdleConns: config.Config.Mysql.MaxIdleConns, MaxOpenConns: config.Config.Mysql.MaxOpenConns, }); err != nil { logger.Logger.Error(fmt.Sprintf("mysql链接失败:%s", err.Error())) return } // 验证 if err := acs.InitEnforcer(acs.Config{ Db: mysql.Db, ModelFile: "config/acs.model.conf", Prefix: strings.TrimRight(config.Config.Mysql.Prefix, "_"), TableName: "setting_acs", Log: config.Config.Debug, }); err != nil { log.Panicln(err) } // 微信小程序 wx.InitWxapp(config.Config.Wxapp.Appid, config.Config.Wxapp.Secret) // 微信开放平台 wx.InitWxopen(config.Config.Wxopen.Appid, config.Config.Wxopen.Secret) // 微信支付 if err := pay.InitWxpay(pay.WxpayConfig{ MchID: config.Config.Wxpay.MchID, MchCertificateSerialNumber: config.Config.Wxpay.MchCertificateSerialNumber, MchAPIv3Key: config.Config.Wxpay.MchAPIv3Key, PrivateKey: config.Config.Wxpay.PrivateKey, PrivateCert: config.Config.Wxpay.PrivateCert, }); err != nil { logger.Logger.Fatal("微信支付错误", zap.Error(err)) } // 支付宝支付 if err := pay.InitAlipay(pay.AlipayConfig{ AppId: config.Config.Alipay.AppId, PrivateKey: config.Config.Alipay.PrivateKey, AliPublicKey: config.Config.Alipay.AliPublicKey, IsProduction: config.Config.Alipay.IsProduction, }); err != nil { logger.Logger.Fatal("支付宝支付错误", zap.Error(err)) } // 车300接口 che300.InitChe300(config.Config.Che300.Url, config.Config.Che300.Token) if err := jpush.InitJpush(config.Config.Jpush.Appkey, config.Config.Jpush.Secret, config.Config.Jpush.PrivateKey); err != nil { logger.Logger.Fatal("极光接口错误", zap.Error(err)) } // 阿里短信 if err := ali.InitSms(config.Config.AliSms.AccessKeyId, config.Config.AliSms.AccessKeySecret, config.Config.AliSms.Endpoint); err != nil { logger.Logger.Fatal("阿里短信接口错误", zap.Error(err)) } // 阿里云行驶证识别 ali.InitOcr( config.Config.AliOcr.Url, config.Config.AliOcr.IdCardUrl, config.Config.AliOcr.BankCardUrl, config.Config.AliOcr.Appcode, config.Config.AliOcr.AccessKeyId, config.Config.AliOcr.AccessKeySecret, config.Config.AliOcr.Endpoint) // 腾讯电子签 tencent.InitEss( config.Config.TencentEss.SecretId, config.Config.TencentEss.SecretKey, config.Config.TencentEss.Appid, config.Config.TencentEss.OrganizationName, config.Config.TencentEss.ProxyAppId, config.Config.TencentEss.ProxyOrganizationOpenId, config.Config.TencentEss.ProxyOperatorOpenId, config.Config.TencentEss.EndPoint, config.Config.TencentEss.FileServiceEndPoint, config.Config.TencentEss.CallbackUrl, ) // 初始化websocket管理器 go websocket.WebsocketManager.Start() go websocket.WebsocketManager.SendService() go websocket.WebsocketManager.SendService() go websocket.WebsocketManager.SendGroupService() go websocket.WebsocketManager.SendGroupService() go websocket.WebsocketManager.SendAllService() go websocket.WebsocketManager.SendAllService() // 苹果登录 apple.Login.Init(config.AppleLogin{ KeyId: config.Config.AppleLogin.KeyId, AppleSignSecret: config.Config.AppleLogin.AppleSignSecret, TeamId: config.Config.AppleLogin.TeamId, AppId: config.Config.AppleLogin.AppId, Aud: config.Config.AppleLogin.Aud, AuthTokenUrl: config.Config.AppleLogin.AuthTokenUrl, }) // 验证器处理 if v, ok := binding.Validator.Engine().(*validator.Validate); ok { //注册一个函数,获取struct tag里自定义的label作为字段名 v.RegisterTagNameFunc(func(fld reflect.StructField) string { name := fld.Tag.Get("label") return name }) } // 初始化OpenSearch if err := opensearch.InitOpenSearch(config.Config.OpenSearch.Addresses, config.Config.OpenSearch.Tls, config.Config.OpenSearch.Username, config.Config.OpenSearch.Password); err != nil { logger.Logger.Fatal("openSearch err", zap.Error(err)) } // 任务运行 if len(config.Config.OpenSearch.Addresses) != 0 || config.IsProd() { //task.Task.PushESTaskRun() } return }