main.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package main
  2. import (
  3. "eta/eta_mini_ht_api/api"
  4. _ "eta/eta_mini_ht_api/common/component"
  5. "eta/eta_mini_ht_api/common/component/cache"
  6. "eta/eta_mini_ht_api/common/component/config"
  7. logger "eta/eta_mini_ht_api/common/component/log"
  8. "eta/eta_mini_ht_api/common/contants"
  9. "eta/eta_mini_ht_api/common/exception"
  10. "eta/eta_mini_ht_api/common/utils/redis"
  11. "eta/eta_mini_ht_api/domian/report"
  12. "eta/eta_mini_ht_api/models/eta"
  13. "eta/eta_mini_ht_api/models/ht"
  14. _ "eta/eta_mini_ht_api/routers"
  15. _ "eta/eta_mini_ht_api/task"
  16. "github.com/beego/beego/v2/server/web"
  17. "sync"
  18. "time"
  19. )
  20. var (
  21. redisUtils = cache.GetInstance()
  22. htApi = api.GetInstance()
  23. )
  24. func main() {
  25. htConfig := config.GetConfig(contants.HT).(*config.HTBizConfig)
  26. if web.BConfig.RunMode == "dev" {
  27. web.BConfig.WebConfig.DirectoryIndex = true
  28. web.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
  29. }
  30. //web.ErrorHandler("*", exception.ControllerAdvice())
  31. web.BConfig.RecoverFunc = exception.PanicAdvice
  32. go func() {
  33. //内存数据预热预加载
  34. logger.Info("开始预加载数据")
  35. if htConfig.EnableTask() {
  36. //初始化研报库
  37. initReport()
  38. }
  39. //初始化第三方AccessToken
  40. initThirdPartyAccessToken()
  41. }()
  42. logger.Info("初始化成功")
  43. web.Run()
  44. }
  45. func initThirdPartyAccessToken() {
  46. accessToken := redis.GenerateCAPAccessTokenKey()
  47. if redisUtils.GetString(accessToken) == "" {
  48. logger.Info("开始初始化CAP AccessToken")
  49. token, err := htApi.GetAccessToken()
  50. if err != nil {
  51. logger.Error("获取CAP AccessToken失败:%v", err)
  52. return
  53. }
  54. expireTime, err := time.Parse(time.DateTime, token.ExpiresAt)
  55. if err != nil {
  56. logger.Error("解析过期时间失败:%v", err)
  57. return
  58. }
  59. duration := expireTime.Sub(time.Now()).Seconds()
  60. _ = redisUtils.SetString(accessToken, token.AccessToken, int(duration)-5)
  61. //fmt.Printf(base64.StdEncoding.EncodeToString([]byte(token.AccessToken)))
  62. }
  63. }
  64. func initReport() {
  65. var wg sync.WaitGroup
  66. wg.Add(2)
  67. logger.Info("开始初始化研报库")
  68. go func() {
  69. defer wg.Done()
  70. for {
  71. id, err := report.GetETALatestReportId()
  72. var etaReportList []eta.ETAReport
  73. etaReportList, err = eta.GetETAReports(id)
  74. if err != nil {
  75. logger.Error("获取ETA研报列表失败:%v", err)
  76. }
  77. if len(etaReportList) > 0 {
  78. err = report.InitETAReportList(etaReportList)
  79. if err != nil {
  80. logger.Error("同步ETA研报列表失败:%v", err)
  81. }
  82. } else {
  83. logger.Info(contants.TaskFormat, "同步ETA研报库结束")
  84. break
  85. }
  86. }
  87. }()
  88. go func() {
  89. defer wg.Done()
  90. for {
  91. id, err := report.GetHTLatestReportId()
  92. var htReportList []ht.HTReport
  93. htReportList, err = ht.GetHTReports(id)
  94. if err != nil {
  95. logger.Error("获取ETA研报列表失败:%v", err)
  96. }
  97. if len(htReportList) > 0 {
  98. for i := 0; i < len(htReportList); i++ {
  99. timestamp := int64(htReportList[i].PublishTime)
  100. t := time.UnixMilli(timestamp)
  101. htReportList[i].PublishedTime = t.Format(time.DateTime)
  102. plateId := htReportList[i].PlateId
  103. var plate ht.HTPlate
  104. plate, err = ht.GetPermissionNameById(plateId)
  105. if err != nil || plate.ParentId == 0 {
  106. htReportList[i].PermissionName = htReportList[i].PlateName
  107. } else {
  108. var PermissionName string
  109. err = getPermissionNameById(plate.Id, &PermissionName)
  110. if err != nil {
  111. logger.Error("获取ETA研报列表失败:%v", err)
  112. htReportList[i].PermissionName = ""
  113. } else {
  114. htReportList[i].PermissionName = PermissionName
  115. }
  116. }
  117. }
  118. var stop bool
  119. stop, err = report.InitHTReportList(htReportList)
  120. if err != nil {
  121. logger.Error("同步ETA研报列表失败:%v", err)
  122. break
  123. }
  124. if stop {
  125. logger.Info(contants.TaskFormat, "同步HT研报库结束")
  126. break
  127. }
  128. } else {
  129. logger.Info(contants.TaskFormat, "同步HT研报库结束")
  130. break
  131. }
  132. }
  133. }()
  134. wg.Wait()
  135. logger.Info("初始化研报库完成")
  136. }
  137. func getPermissionNameById(id int, currentName *string) (err error) {
  138. plate, err := ht.GetPermissionNameById(id)
  139. if err != nil {
  140. logger.Error("查询海通板块品种名称失败:%v", err)
  141. return
  142. }
  143. if plate.ParentId != 0 {
  144. *currentName = plate.PlateName
  145. return getPermissionNameById(plate.ParentId, currentName)
  146. } else {
  147. return
  148. }
  149. }