chart_info.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package data
  2. import (
  3. "errors"
  4. "fmt"
  5. "hongze/hongze_chart_lib/models/data_manage"
  6. "hongze/hongze_chart_lib/utils"
  7. "sort"
  8. "time"
  9. )
  10. // ChartInfoRefreshV1 图表刷新
  11. func ChartInfoRefreshV1(chartInfoId int) (err error) {
  12. var errmsg string
  13. defer func() {
  14. if err != nil {
  15. go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "ChartInfoRefresh:"+errmsg, utils.EmailSendToUsers)
  16. fmt.Println("ChartInfoRefresh Err:" + errmsg)
  17. }
  18. }()
  19. baseEdbInfoArr, calculateInfoArr, err := data_manage.GetChartInfoRefreshData(chartInfoId)
  20. if err != nil {
  21. errmsg = "获取需要刷新的指标失败:Err:" + err.Error()
  22. return
  23. }
  24. var startDate string
  25. newBaseEdbInfoArr := make([]*data_manage.EdbInfo, 0)
  26. baseMap := make(map[int]*data_manage.EdbInfo)
  27. for _, bv := range baseEdbInfoArr {
  28. if _, ok := baseMap[bv.EdbInfoId]; !ok {
  29. newBaseEdbInfoArr = append(newBaseEdbInfoArr, bv)
  30. }
  31. baseMap[bv.EdbInfoId] = bv
  32. }
  33. fmt.Println("calculateInfoArr:", len(calculateInfoArr))
  34. newCalculateInfoArr := make([]*data_manage.EdbInfo, 0)
  35. calculateMap := make(map[int]*data_manage.EdbInfo)
  36. var calculateArr []int
  37. for _, bv := range calculateInfoArr {
  38. if _, ok := calculateMap[bv.EdbInfoId]; !ok {
  39. newCalculateInfoArr = append(newCalculateInfoArr, bv)
  40. calculateArr = append(calculateArr, bv.EdbInfoId)
  41. }
  42. calculateMap[bv.EdbInfoId] = bv
  43. }
  44. sort.Ints(calculateArr)
  45. for _, bv := range newBaseEdbInfoArr {
  46. source := bv.Source
  47. edbInfoId := bv.EdbInfoId
  48. edbCode := bv.EdbCode
  49. startDate = bv.StartDate
  50. frequency := bv.Frequency
  51. if bv.StartDate == "0000-00-00" {
  52. continue
  53. }
  54. sTime, err := time.Parse(utils.FormatDate, bv.EndDate)
  55. if err != nil {
  56. return err
  57. }
  58. var limitDay int
  59. startDate := ""
  60. switch frequency {
  61. case "日度":
  62. limitDay = utils.DATA_REFRESH
  63. case "周度":
  64. limitDay = utils.DATA_REFRESH * 7
  65. case "月度":
  66. limitDay = utils.DATA_REFRESH * 30
  67. case "季度":
  68. limitDay = utils.DATA_REFRESH * 90
  69. case "年度":
  70. limitDay = utils.DATA_REFRESH * 365
  71. default:
  72. limitDay = utils.DATA_REFRESH
  73. }
  74. startDate = sTime.AddDate(0, 0, -limitDay).Format(utils.FormatDate)
  75. fmt.Println("source:", source)
  76. respItem, err := RefreshEdbData(edbInfoId, source, edbCode, startDate)
  77. if err != nil {
  78. errmsg = errors.New("RefreshEdbData Err:" + err.Error()).Error()
  79. return err
  80. }
  81. if respItem.Ret != 200 {
  82. errmsg = errors.New(respItem.ErrMsg + ";EdbCode:" + edbCode).Error()
  83. return err
  84. }
  85. maxAndMinItem, err := data_manage.GetEdbInfoMaxAndMinInfo(source, edbCode)
  86. if err != nil {
  87. return err
  88. }
  89. if maxAndMinItem != nil {
  90. err = data_manage.ModifyEdbInfoMaxAndMinInfo(edbInfoId, maxAndMinItem)
  91. if err != nil {
  92. return err
  93. }
  94. }
  95. }
  96. //刷新相关计算指标
  97. for _, v := range calculateArr {
  98. edbInfo := calculateMap[v]
  99. if edbInfo == nil {
  100. return err
  101. }
  102. startDate = edbInfo.StartDate
  103. source := edbInfo.Source
  104. if source == utils.DATA_SOURCE_CALCULATE {
  105. startDate = edbInfo.StartDate
  106. sTime, err := time.Parse(utils.FormatDate, edbInfo.EndDate)
  107. if err != nil {
  108. return err
  109. }
  110. startDate = sTime.Format(utils.FormatDate)
  111. }
  112. result, err := RefreshEdbCalculateData(edbInfo.EdbInfoId, edbInfo.EdbCode, startDate)
  113. if err != nil {
  114. fmt.Println(v, "RefreshEdbCalculateData err", time.Now())
  115. errmsg = "RefreshEdbCalculateData Err:" + err.Error()
  116. return err
  117. }
  118. if result.Ret != 200 {
  119. fmt.Println(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  120. errmsg = fmt.Sprint(v, "RefreshEdbCalculateData err;msg:", result.Msg, ";errMsg:", result.ErrMsg)
  121. return fmt.Errorf("刷新失败" + errmsg)
  122. }
  123. fmt.Println("end calculateArr:", v, time.Now())
  124. }
  125. return err
  126. }