base_from_mysteel_chemical.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package services
  2. import (
  3. "eta/eta_index_lib/models"
  4. "eta/eta_index_lib/utils"
  5. "fmt"
  6. "strings"
  7. "time"
  8. )
  9. func HandleMysteelIndex(req *models.HandleMysteelIndexResp) (err error) {
  10. for _, v := range req.List {
  11. if v.IndexName == "" || v.IndexCode == "" {
  12. continue
  13. }
  14. err = handleIndex(v)
  15. if err != nil {
  16. return
  17. }
  18. }
  19. return
  20. }
  21. func handleIndex(indexItem *models.HandleMysteelIndex) (err error) {
  22. //return
  23. indexObj := new(models.BaseFromMysteelChemicalIndex)
  24. var indexId int64
  25. addDataList := make([]models.BaseFromMysteelChemicalData, 0)
  26. exitDataMap := make(map[string]*models.BaseFromMysteelChemicalData)
  27. //判断指标是否存在
  28. var isAdd int
  29. item, err := indexObj.GetIndexItem(indexItem.IndexCode)
  30. if err != nil {
  31. if err.Error() == utils.ErrNoRow() {
  32. isAdd = 1
  33. } else {
  34. isAdd = -1
  35. return
  36. }
  37. }
  38. if item != nil && item.BaseFromMysteelChemicalIndexId > 0 {
  39. isAdd = 2
  40. } else {
  41. isAdd = 1
  42. }
  43. fmt.Println("isAdd:", isAdd)
  44. if !strings.Contains(indexItem.Frequency, "度") {
  45. indexItem.Frequency = indexItem.Frequency + "度"
  46. }
  47. if isAdd == 1 {
  48. indexObj.IndexCode = indexItem.IndexCode
  49. indexObj.IndexName = indexItem.IndexName
  50. indexObj.Unit = indexItem.Unit
  51. indexObj.Source = indexItem.Source
  52. indexObj.Describe = indexItem.Describe
  53. indexObj.StartDate, _ = time.ParseInLocation(utils.FormatDate, indexItem.StartDate, time.Local)
  54. indexObj.EndDate, _ = time.ParseInLocation(utils.FormatDate, indexItem.EndDate, time.Local)
  55. indexObj.Frequency = indexItem.Frequency
  56. //indexObj.CreateTime = time.Now().Local()
  57. //indexObj.ModifyTime = time.Now().Local()
  58. err = indexObj.Add()
  59. if err != nil {
  60. fmt.Println("add err:" + err.Error())
  61. return
  62. }
  63. indexId = indexObj.BaseFromMysteelChemicalIndexId
  64. } else if isAdd == 2 {
  65. indexObj.BaseFromMysteelChemicalIndexId = item.BaseFromMysteelChemicalIndexId
  66. indexObj.IndexCode = indexItem.IndexCode
  67. indexObj.IndexName = indexItem.IndexName
  68. indexObj.Unit = indexItem.Unit
  69. indexObj.Source = indexItem.Source
  70. indexObj.Describe = indexItem.Describe
  71. indexObj.StartDate, _ = time.ParseInLocation(utils.FormatDate, indexItem.StartDate, time.Local)
  72. indexObj.EndDate, _ = time.ParseInLocation(utils.FormatDate, indexItem.EndDate, time.Local)
  73. indexObj.Frequency = indexItem.Frequency
  74. indexObj.ModifyTime = time.Now()
  75. indexId = item.BaseFromMysteelChemicalIndexId
  76. //修改数据
  77. updateColsArr := make([]string, 0)
  78. updateColsArr = append(updateColsArr, "index_name")
  79. updateColsArr = append(updateColsArr, "unit")
  80. updateColsArr = append(updateColsArr, "source")
  81. updateColsArr = append(updateColsArr, "frequency")
  82. updateColsArr = append(updateColsArr, "start_date")
  83. updateColsArr = append(updateColsArr, "end_date")
  84. updateColsArr = append(updateColsArr, "describe")
  85. updateColsArr = append(updateColsArr, "end_date")
  86. updateColsArr = append(updateColsArr, "modify_time")
  87. e := indexObj.Update(updateColsArr)
  88. if e != nil {
  89. fmt.Println("Index Update Err:" + e.Error())
  90. return
  91. }
  92. dataObj := new(models.BaseFromMysteelChemicalData)
  93. //获取已存在的所有数据
  94. exitDataList, err := dataObj.GetIndexDataList(indexItem.IndexCode)
  95. if err != nil {
  96. fmt.Println("GetIndexDataList Err:" + err.Error())
  97. return err
  98. }
  99. fmt.Println("exitDataListLen:", len(exitDataList))
  100. for _, v := range exitDataList {
  101. dateStr := v.DataTime.Format(utils.FormatDate)
  102. exitDataMap[dateStr] = v
  103. }
  104. }
  105. dataObj := new(models.BaseFromMysteelChemicalData)
  106. // 遍历excel数据,然后跟现有的数据做校验,不存在则入库
  107. for date, value := range indexItem.ExcelDataMap {
  108. if findData, ok := exitDataMap[date]; !ok {
  109. dateTime, err := time.ParseInLocation(utils.FormatDate, date, time.Local)
  110. if err != nil {
  111. fmt.Println("time.ParseInLocation Err:" + err.Error())
  112. return err
  113. }
  114. if !strings.Contains(value, "#N/A") {
  115. dataItem := new(models.BaseFromMysteelChemicalData)
  116. dataItem.BaseFromMysteelChemicalIndexId = indexId
  117. dataItem.IndexCode = indexItem.IndexCode
  118. dataItem.DataTime = dateTime
  119. dataItem.Value = value
  120. dataItem.UpdateDate = indexItem.UpdateDate
  121. dataItem.CreateTime = time.Now()
  122. dataItem.ModifyTime = time.Now()
  123. addDataList = append(addDataList, *dataItem)
  124. }
  125. } else {
  126. if findData != nil && findData.Value != value && !strings.Contains(value, "#N/A") { //修改数据
  127. dataObj.BaseFromMysteelChemicalDataId = findData.BaseFromMysteelChemicalDataId
  128. dataObj.Value = value
  129. dataObj.ModifyTime = time.Now()
  130. updateDataColsArr := make([]string, 0)
  131. updateDataColsArr = append(updateDataColsArr, "value")
  132. updateDataColsArr = append(updateDataColsArr, "modify_time")
  133. dataObj.Update(updateDataColsArr)
  134. }
  135. }
  136. }
  137. if len(addDataList) > 0 {
  138. err = dataObj.Add(addDataList)
  139. if err != nil {
  140. fmt.Println("dataObj.Add() Err:" + err.Error())
  141. }
  142. }
  143. return
  144. }