You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
6.1 KiB

8 months ago
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
}