|
|
|
|
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
|
|
|
|
|
}
|