main.go 4.2 KB

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