edb_data.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package services
  2. import (
  3. "eta/eta_forum_hub/models"
  4. "eta/eta_forum_hub/models/mgodb"
  5. "eta/eta_forum_hub/utils"
  6. "fmt"
  7. "strconv"
  8. "time"
  9. )
  10. func BatchAddOrUpdateEdbData(req []*models.AddEdbDataReq) (err error) {
  11. for _, reqData := range req {
  12. if reqData.EdbType == 1 {
  13. err = AddOrUpdateEdbData(reqData.EdbCode, reqData.DataList)
  14. if err != nil {
  15. return
  16. }
  17. } else {
  18. err = AddOrUpdateEdbDataCalculate(reqData.EdbCode, reqData.DataList)
  19. if err != nil {
  20. return
  21. }
  22. }
  23. }
  24. return
  25. }
  26. func AddOrUpdateEdbData(edbCode string, dataList []*models.EdbDataBase) (err error) {
  27. addList := make([]interface{}, 0)
  28. existList, err := mgodb.GetEdbDataBaseByEdbCode(edbCode)
  29. if err != nil {
  30. err = fmt.Errorf("查询指标数据出错 error, %v", err)
  31. return
  32. }
  33. existMap := make(map[time.Time]*mgodb.EdbDataBase, len(existList))
  34. for _, exist := range existList {
  35. existMap[exist.DataTime] = exist
  36. }
  37. for _, v := range dataList {
  38. dataTime, e := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
  39. if e != nil {
  40. err = fmt.Errorf("时间格式化出错 error, %v", e)
  41. return
  42. }
  43. val, e := strconv.ParseFloat(v.Value, 64)
  44. if e != nil {
  45. err = fmt.Errorf("指标数据格式化出错 error, %v", e)
  46. return
  47. }
  48. if oldObj, ok := existMap[dataTime]; !ok {
  49. tmp := &mgodb.EdbDataBase{
  50. EdbInfoId: 0,
  51. EdbCode: v.EdbCode,
  52. DataTime: dataTime,
  53. Value: val,
  54. Status: v.Status,
  55. CreateTime: time.Now(),
  56. ModifyTime: time.Now(),
  57. DataTimestamp: v.DataTimestamp,
  58. }
  59. addList = append(addList, tmp)
  60. if len(addList) >= 500 {
  61. err = mgodb.InsertEdbDataBatch(addList)
  62. if err != nil {
  63. err = fmt.Errorf("批量新增指标数据失败 error, %v", e)
  64. return
  65. }
  66. addList = make([]interface{}, 0)
  67. }
  68. } else {
  69. if val != oldObj.Value {
  70. err = mgodb.ModifyValueEdbDataValue(oldObj.EdbDataId, val)
  71. if err != nil {
  72. err = fmt.Errorf("更新指标数据出错 error, %v", err)
  73. return
  74. }
  75. }
  76. }
  77. }
  78. if len(addList) > 0 {
  79. err = mgodb.InsertEdbDataBatch(addList)
  80. }
  81. return
  82. }
  83. func AddOrUpdateEdbDataCalculate(edbCode string, dataList []*models.EdbDataBase) (err error) {
  84. addList := make([]interface{}, 0)
  85. existList, err := mgodb.GetEdbDataCalculateByEdbCode(edbCode)
  86. if err != nil {
  87. err = fmt.Errorf("查询指标数据出错 error, %v", err)
  88. return
  89. }
  90. existMap := make(map[time.Time]*mgodb.EdbDataBase, len(existList))
  91. for _, exist := range existList {
  92. existMap[exist.DataTime] = exist
  93. }
  94. for _, v := range dataList {
  95. dataTime, e := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
  96. if e != nil {
  97. err = fmt.Errorf("时间格式化出错 error, %v", e)
  98. return
  99. }
  100. val, e := strconv.ParseFloat(v.Value, 64)
  101. if e != nil {
  102. err = fmt.Errorf("指标数据格式化出错 error, %v", e)
  103. return
  104. }
  105. if oldObj, ok := existMap[dataTime]; !ok {
  106. tmp := &mgodb.EdbDataBase{
  107. EdbInfoId: 0,
  108. EdbCode: v.EdbCode,
  109. DataTime: dataTime,
  110. Value: val,
  111. Status: v.Status,
  112. CreateTime: time.Now(),
  113. ModifyTime: time.Now(),
  114. DataTimestamp: v.DataTimestamp,
  115. }
  116. addList = append(addList, tmp)
  117. if len(addList) >= 500 {
  118. err = mgodb.InsertEdbCalculateDataBatch(addList)
  119. if err != nil {
  120. err = fmt.Errorf("批量新增指标数据失败 error, %v", e)
  121. return
  122. }
  123. addList = make([]interface{}, 0)
  124. }
  125. } else {
  126. if val != oldObj.Value {
  127. err = mgodb.ModifyValueEdbCalculateDataValue(oldObj.EdbDataId, val)
  128. if err != nil {
  129. err = fmt.Errorf("更新指标数据出错 error, %v", err)
  130. return
  131. }
  132. }
  133. }
  134. }
  135. if len(addList) > 0 {
  136. err = mgodb.InsertEdbCalculateDataBatch(addList)
  137. }
  138. return
  139. }