base_from_fubao.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package models
  2. import (
  3. "fmt"
  4. "github.com/beego/beego/v2/client/orm"
  5. "hongze/hongze_edb_lib/services"
  6. "hongze/hongze_edb_lib/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. // 新增富宝指标数据
  12. func AddEdbDataFromFubao(edbCode string, fubaoData *services.FuBaoData) (err error) {
  13. o := orm.NewOrm()
  14. var isAdd bool
  15. addSql := ` INSERT INTO edb_data_fubao(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  16. for _, dataItem := range fubaoData.ReturnValue.Data {
  17. dataTime, err := time.ParseInLocation(utils.FormatDate, dataItem.Datadate, time.Local)
  18. if err != nil {
  19. return err
  20. }
  21. eDate := dataTime.Format(utils.FormatDate)
  22. if err != nil {
  23. return err
  24. }
  25. timestamp := dataTime.UnixNano() / 1e6
  26. timeStr := fmt.Sprintf("%d", timestamp)
  27. addSql += GetAddSql("0", edbCode, eDate, timeStr, dataItem.PriceStr)
  28. isAdd = true
  29. }
  30. if isAdd {
  31. addSql = strings.TrimRight(addSql, ",")
  32. _, err = o.Raw(addSql).Exec()
  33. if err != nil {
  34. fmt.Println("RefreshAllEdbDataByFubao add Err", err.Error())
  35. return
  36. }
  37. }
  38. return
  39. }
  40. // 刷新路透指标数据
  41. func RefreshEdbDataFromFubao(edbInfoId int, edbCode, startDate string, fubaoData *services.FuBaoData) (err error) {
  42. source := utils.DATA_SOURCE_FUBAO
  43. o := orm.NewOrm()
  44. // 真实数据的最大日期 , 插入规则配置的日期
  45. var realDataMaxDate, edbDataInsertConfigDate time.Time
  46. var edbDataInsertConfig *EdbDataInsertConfig
  47. var isFindConfigDateRealData bool //是否找到配置日期的实际数据的值
  48. {
  49. edbDataInsertConfig, err = GetEdbDataInsertConfigByEdbId(edbInfoId)
  50. if err != nil && err.Error() != utils.ErrNoRow() {
  51. return
  52. }
  53. if edbDataInsertConfig != nil {
  54. edbDataInsertConfigDate = edbDataInsertConfig.Date
  55. }
  56. }
  57. var existCondition string
  58. var existPars []interface{}
  59. existCondition += " AND edb_info_id=? "
  60. existPars = append(existPars, edbInfoId)
  61. if startDate != "" {
  62. existCondition += " AND data_time>=? "
  63. existPars = append(existPars, startDate)
  64. }
  65. existList, err := GetEdbDataByCondition(source, existCondition, existPars)
  66. if err != nil {
  67. return err
  68. }
  69. existMap := make(map[string]*EdbInfoSearchData)
  70. for _, v := range existList {
  71. existMap[v.DataTime] = v
  72. }
  73. fmt.Println("existMap start")
  74. fmt.Println(existMap)
  75. fmt.Println("existMap end")
  76. edbInfoIdStr := strconv.Itoa(edbInfoId)
  77. addSql := ` INSERT INTO edb_data_fubao(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  78. var isAdd bool
  79. for k, dataItem := range fubaoData.ReturnValue.Data {
  80. dataTime, err := time.ParseInLocation(utils.FormatDate, dataItem.Datadate, time.Local)
  81. if err != nil {
  82. return err
  83. }
  84. if k < 3 {
  85. fmt.Println("dataItem.Datadate start")
  86. fmt.Println(dataItem.Datadate)
  87. fmt.Println("dataItem.Datadate end")
  88. }
  89. if findItem, ok := existMap[dataItem.Datadate]; !ok {
  90. timestamp := dataTime.UnixNano() / 1e6
  91. timeStr := fmt.Sprintf("%d", timestamp)
  92. addSql += GetAddSql(edbInfoIdStr, edbCode, dataItem.Datadate, timeStr, dataItem.PriceStr)
  93. isAdd = true
  94. } else {
  95. fmt.Println("update start")
  96. fmt.Println(findItem.Value)
  97. fmt.Println(dataItem.PriceStr)
  98. fmt.Println(utils.SubFloatToString(findItem.Value, 30))
  99. fmt.Println("update end")
  100. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != dataItem.PriceStr {
  101. err = ModifyEdbDataById(source, findItem.EdbDataId, dataItem.PriceStr)
  102. if err != nil {
  103. return err
  104. }
  105. }
  106. }
  107. // 下面代码主要目的是处理掉手动插入的数据判断
  108. {
  109. if realDataMaxDate.IsZero() || dataTime.After(realDataMaxDate) {
  110. realDataMaxDate = dataTime
  111. }
  112. if edbDataInsertConfigDate.IsZero() || dataTime.Equal(edbDataInsertConfigDate) {
  113. isFindConfigDateRealData = true
  114. }
  115. }
  116. if dataItem.Datadate == startDate {
  117. break
  118. }
  119. }
  120. // 处理手工数据补充的配置
  121. HandleConfigInsertEdbData(realDataMaxDate, edbDataInsertConfig, edbInfoId, source, existMap, isFindConfigDateRealData)
  122. if isAdd {
  123. addSql = strings.TrimRight(addSql, ",")
  124. _, err = o.Raw(addSql).Exec()
  125. if err != nil {
  126. fmt.Println("RefreshEdbDataFromFubao Err", err.Error())
  127. return
  128. }
  129. }
  130. return
  131. }