package main import ( "eta/eta_mini_ht_api/api" _ "eta/eta_mini_ht_api/common/component" "eta/eta_mini_ht_api/common/component/cache" "eta/eta_mini_ht_api/common/component/config" logger "eta/eta_mini_ht_api/common/component/log" "eta/eta_mini_ht_api/common/contants" "eta/eta_mini_ht_api/common/exception" "eta/eta_mini_ht_api/common/utils/redis" "eta/eta_mini_ht_api/domian/report" "eta/eta_mini_ht_api/models/eta" "eta/eta_mini_ht_api/models/ht" merchantDao "eta/eta_mini_ht_api/models/merchant" _ "eta/eta_mini_ht_api/routers" _ "eta/eta_mini_ht_api/task" "github.com/beego/beego/v2/server/web" "sync" "time" ) var ( redisUtils = cache.GetInstance() htApi = api.GetInstance() ) func main() { htConfig := config.GetConfig(contants.HT).(*config.HTBizConfig) if web.BConfig.RunMode == "dev" { web.BConfig.WebConfig.DirectoryIndex = true web.BConfig.WebConfig.StaticDir["/swagger"] = "swagger" } //web.ErrorHandler("*", exception.ControllerAdvice()) web.BConfig.RecoverFunc = exception.PanicAdvice go func() { //内存数据预热预加载 logger.Info("开始预加载数据") if htConfig.EnableTask() { //初始化研报库 initReport() } //初始化第三方AccessToken initThirdPartyAccessToken() //初始化商户信息 initMerchant(htConfig.GetMerchantId()) //初始化上架产品 }() logger.Info("初始化成功") web.Run() } func initThirdPartyAccessToken() { accessToken := redis.GenerateCAPAccessTokenKey() if redisUtils.GetString(accessToken) == "" { logger.Info("开始初始化CAP AccessToken") token, err := htApi.GetAccessToken() if err != nil { logger.Error("获取CAP AccessToken失败:%v", err) return } expireTime, err := time.Parse(time.DateTime, token.ExpiresAt) if err != nil { logger.Error("解析过期时间失败:%v", err) return } duration := expireTime.Sub(time.Now()).Seconds() _ = redisUtils.SetString(accessToken, token.AccessToken, int(duration)-5) //fmt.Printf(base64.StdEncoding.EncodeToString([]byte(token.AccessToken))) } } func initReport() { var wg sync.WaitGroup wg.Add(2) logger.Info("开始初始化研报库") go func() { defer wg.Done() for { id, err := report.GetETALatestReportId() var etaReportList []eta.ETAReport etaReportList, err = eta.GetETAReports(id) if err != nil { logger.Error("获取ETA研报列表失败:%v", err) } if len(etaReportList) > 0 { err = report.InitETAReportList(etaReportList) if err != nil { logger.Error("同步ETA研报列表失败:%v", err) } } else { logger.Info(contants.TaskFormat, "同步ETA研报库结束") break } } }() go func() { defer wg.Done() for { id, err := report.GetHTLatestReportId() var htReportList []ht.HTReport htReportList, err = ht.GetHTReports(id) if err != nil { logger.Error("获取ETA研报列表失败:%v", err) } if len(htReportList) > 0 { for i := 0; i < len(htReportList); i++ { timestamp := int64(htReportList[i].PublishTime) t := time.UnixMilli(timestamp) htReportList[i].PublishedTime = t.Format(time.DateTime) plateId := htReportList[i].PlateId var plate ht.HTPlate plate, err = ht.GetPermissionNameById(plateId) if err != nil || plate.ParentId == 0 { htReportList[i].PermissionName = htReportList[i].PlateName } else { var PermissionName string err = getPermissionNameById(plate.Id, &PermissionName) if err != nil { logger.Error("获取ETA研报列表失败:%v", err) htReportList[i].PermissionName = "" } else { htReportList[i].PermissionName = PermissionName } } } var stop bool stop, err = report.InitHTReportList(htReportList) if err != nil { logger.Error("同步ETA研报列表失败:%v", err) break } if stop { logger.Info(contants.TaskFormat, "同步HT研报库结束") break } } else { logger.Info(contants.TaskFormat, "同步HT研报库结束") break } } }() wg.Wait() logger.Info("初始化研报库完成") } func initMerchant(merchantId string) { merchantList, err := merchantDao.GetEnablerMerchants() if err != nil { logger.Error("加载商户信息失败:%v", err) } if len(merchantList) == 0 { logger.Warn("未配置商户信息,请配置商户信息") return } if merchantId != "" { find := false for _, merchant := range merchantList { if merchant.MerchantID == merchantId { err = redisUtils.SetString(redis.GenerateMerchantKey(), merchant.MerchantID, 0) if err != nil { logger.Error("ID添加失败:%v", err) return } find = true break } if !find { logger.Error("未找到启动的商户信息,请配置商户信息,商户ID:[" + merchantId + "]") } } } else { err = redisUtils.SetString(redis.GenerateMerchantKey(), merchantList[0].MerchantID, 0) if err != nil { logger.Error("redis商户ID添加失败:%v", err) return } } } func getPermissionNameById(id int, currentName *string) (err error) { plate, err := ht.GetPermissionNameById(id) if err != nil { logger.Error("查询海通板块品种名称失败:%v", err) return } if plate.ParentId != 0 { *currentName = plate.PlateName return getPermissionNameById(plate.ParentId, currentName) } else { return } }