ebd_data_ly.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. // @Author gmy 2024/9/14 16:13:00
  2. package models
  3. // AddEdbDataFromLy 新增指标数据
  4. func AddEdbDataFromLy(edbCode string) (err error) {
  5. o := orm.NewOrm()
  6. var condition string
  7. var pars []interface{}
  8. if edbCode != "" {
  9. condition += " AND index_code = ? "
  10. pars = append(pars, edbCode)
  11. }
  12. dataAll, err := GetBaseFromLyDataByIndexCode(condition, pars)
  13. if err != nil {
  14. return err
  15. }
  16. dataLen := len(dataAll)
  17. existMap := make(map[string]string)
  18. if dataLen > 0 {
  19. var isAdd bool
  20. addSql := ` INSERT INTO edb_data_ly (edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  21. for i := 0; i < dataLen; i++ {
  22. item := dataAll[i]
  23. eDate := item.DataTime
  24. sValue := utils.SubFloatToString(item.Value, 4)
  25. if sValue != "" {
  26. if _, ok := existMap[eDate]; !ok {
  27. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  28. if err != nil {
  29. return err
  30. }
  31. timestamp := dataTime.UnixNano() / 1e6
  32. timeStr := fmt.Sprintf("%d", timestamp)
  33. addSql += GetAddSql("0", edbCode, eDate, timeStr, sValue)
  34. isAdd = true
  35. }
  36. }
  37. existMap[eDate] = eDate
  38. }
  39. if isAdd {
  40. addSql = strings.TrimRight(addSql, ",")
  41. utils.FileLog.Info("addSql:" + addSql)
  42. _, err = o.Raw(addSql).Exec()
  43. if err != nil {
  44. return err
  45. }
  46. }
  47. }
  48. return
  49. }
  50. func RefreshEdbDataFromLy(edbInfoId int, edbCode, startDate string) (err error) {
  51. source := utils.DATA_SOURCE_LY
  52. subSource := utils.DATA_SUB_SOURCE_EDB
  53. o := orm.NewOrm()
  54. if err != nil {
  55. return
  56. }
  57. edbInfoIdStr := strconv.Itoa(edbInfoId)
  58. //计算数据
  59. var condition string
  60. var pars []interface{}
  61. if edbCode != "" {
  62. condition += " AND index_code=? "
  63. pars = append(pars, edbCode)
  64. }
  65. if startDate != "" {
  66. condition += " AND data_time>=? "
  67. pars = append(pars, startDate)
  68. }
  69. dataList, err := GetBaseFromLyDataByIndexCode(condition, pars)
  70. if err != nil {
  71. return
  72. }
  73. // 真实数据的最大日期 , 插入规则配置的日期
  74. var realDataMaxDate, edbDataInsertConfigDate time.Time
  75. var edbDataInsertConfig *EdbDataInsertConfig
  76. var isFindConfigDateRealData bool //是否找到配置日期的实际数据的值
  77. {
  78. edbDataInsertConfig, err = GetEdbDataInsertConfigByEdbId(edbInfoId)
  79. if err != nil && err.Error() != utils.ErrNoRow() {
  80. return
  81. }
  82. if edbDataInsertConfig != nil {
  83. edbDataInsertConfigDate = edbDataInsertConfig.Date
  84. }
  85. }
  86. var existCondition string
  87. var existPars []interface{}
  88. existCondition += " AND edb_info_id=? "
  89. existPars = append(existPars, edbInfoId)
  90. if startDate != "" {
  91. existCondition += " AND data_time>=? "
  92. existPars = append(existPars, startDate)
  93. }
  94. //获取指标所有数据
  95. existList, err := GetEdbDataByCondition(source, subSource, existCondition, existPars)
  96. if err != nil {
  97. return err
  98. }
  99. existMap := make(map[string]*EdbInfoSearchData)
  100. for _, v := range existList {
  101. existMap[v.DataTime] = v
  102. }
  103. addSql := ` INSERT INTO ebd_data_ly(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  104. var isAdd bool
  105. addMap := make(map[string]string)
  106. for _, v := range dataList {
  107. item := v
  108. eDate := item.DataTime
  109. sValue := utils.SubFloatToString(item.Value, 4)
  110. dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
  111. if err != nil {
  112. return err
  113. }
  114. if findItem, ok := existMap[v.DataTime]; !ok {
  115. if sValue != "" {
  116. timestamp := dataTime.UnixNano() / 1e6
  117. timeStr := fmt.Sprintf("%d", timestamp)
  118. saveValue := sValue
  119. if _, addOk := addMap[eDate]; !addOk {
  120. addSql += GetAddSql(edbInfoIdStr, edbCode, eDate, timeStr, saveValue)
  121. isAdd = true
  122. }
  123. }
  124. } else {
  125. if findItem != nil && utils.SubFloatToString(findItem.Value, 4) != sValue {
  126. err = ModifyEdbDataById(source, subSource, findItem.EdbDataId, sValue)
  127. if err != nil {
  128. return err
  129. }
  130. }
  131. }
  132. addMap[v.DataTime] = v.DataTime
  133. // 下面代码主要目的是处理掉手动插入的数据判断
  134. {
  135. if realDataMaxDate.IsZero() || dataTime.After(realDataMaxDate) {
  136. realDataMaxDate = dataTime
  137. }
  138. if edbDataInsertConfigDate.IsZero() || dataTime.Equal(edbDataInsertConfigDate) {
  139. isFindConfigDateRealData = true
  140. }
  141. }
  142. }
  143. // 处理手工数据补充的配置
  144. HandleConfigInsertEdbData(realDataMaxDate, edbDataInsertConfig, edbInfoId, source, subSource, existMap, isFindConfigDateRealData)
  145. if isAdd {
  146. addSql = strings.TrimRight(addSql, ",")
  147. _, err = o.Raw(addSql).Exec()
  148. if err != nil {
  149. return err
  150. }
  151. }
  152. return
  153. }