main.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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))
  61. }
  62. }
  63. func initReport() {
  64. var wg sync.WaitGroup
  65. wg.Add(2)
  66. logger.Info("开始初始化研报库")
  67. go func() {
  68. defer wg.Done()
  69. for {
  70. id, err := report.GetETALatestReportId()
  71. var etaReportList []eta.ETAReport
  72. etaReportList, err = eta.GetETAReports(id)
  73. if err != nil {
  74. logger.Error("获取ETA研报列表失败:%v", err)
  75. }
  76. if len(etaReportList) > 0 {
  77. err = report.InitETAReportList(etaReportList)
  78. if err != nil {
  79. logger.Error("同步ETA研报列表失败:%v", err)
  80. }
  81. } else {
  82. logger.Info(contants.TaskFormat, "同步ETA研报库结束")
  83. break
  84. }
  85. }
  86. }()
  87. go func() {
  88. defer wg.Done()
  89. for {
  90. id, err := report.GetHTLatestReportId()
  91. var htReportList []ht.HTReport
  92. htReportList, err = ht.GetHTReports(id)
  93. if err != nil {
  94. logger.Error("获取ETA研报列表失败:%v", err)
  95. }
  96. if len(htReportList) > 0 {
  97. for i := 0; i < len(htReportList); i++ {
  98. timestamp := int64(htReportList[i].PublishTime)
  99. t := time.UnixMilli(timestamp)
  100. htReportList[i].PublishedTime = t.Format(time.DateTime)
  101. plateId := htReportList[i].PlateId
  102. var plate ht.HTPlate
  103. plate, err = ht.GetPermissionNameById(plateId)
  104. if err != nil || plate.ParentId == 0 {
  105. htReportList[i].PermissionName = htReportList[i].PlateName
  106. } else {
  107. var PermissionName string
  108. err = getPermissionNameById(plate.Id, &PermissionName)
  109. if err != nil {
  110. logger.Error("获取ETA研报列表失败:%v", err)
  111. htReportList[i].PermissionName = ""
  112. } else {
  113. htReportList[i].PermissionName = PermissionName
  114. }
  115. }
  116. }
  117. var stop bool
  118. stop, err = report.InitHTReportList(htReportList)
  119. if err != nil {
  120. logger.Error("同步ETA研报列表失败:%v", err)
  121. break
  122. }
  123. if stop {
  124. logger.Info(contants.TaskFormat, "同步HT研报库结束")
  125. break
  126. }
  127. } else {
  128. logger.Info(contants.TaskFormat, "同步HT研报库结束")
  129. break
  130. }
  131. }
  132. }()
  133. wg.Wait()
  134. logger.Info("初始化研报库完成")
  135. }
  136. func getPermissionNameById(id int, currentName *string) (err error) {
  137. plate, err := ht.GetPermissionNameById(id)
  138. if err != nil {
  139. logger.Error("查询海通板块品种名称失败:%v", err)
  140. return
  141. }
  142. if plate.ParentId != 0 {
  143. *currentName = plate.PlateName
  144. return getPermissionNameById(plate.ParentId, currentName)
  145. } else {
  146. return
  147. }
  148. }