base_from_wind.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. func AddEdbDataFromWind(edbCode string, item *services.EdbDataFromWind) (err error) {
  12. var errMsg string
  13. o := orm.NewOrm()
  14. defer func() {
  15. if err != nil {
  16. go utils.SendEmail(utils.APP_NAME_CN+"【"+utils.RunMode+"】"+"失败提醒", " 同花顺数据获取失败:err:"+errMsg, utils.EmailSendToUsers)
  17. }
  18. }()
  19. var isAdd bool
  20. addSql := ` INSERT INTO edb_data_wind(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  21. for k, v := range item.Dt {
  22. timeStr := fmt.Sprintf("%d", v)
  23. v = v / 1000
  24. t := time.Unix(v, 0)
  25. dateTime := t.Format(utils.FormatDate)
  26. val := item.Close[k]
  27. saveVal := utils.SubFloatToString(val, 20)
  28. addSql += GetAddSql("0", edbCode, dateTime, timeStr, saveVal)
  29. isAdd = true
  30. }
  31. if isAdd {
  32. addSql = strings.TrimRight(addSql, ",")
  33. _, err = o.Raw(addSql).Exec()
  34. if err != nil {
  35. errMsg = " tx.Exec Err :" + err.Error()
  36. return
  37. }
  38. }
  39. return
  40. }
  41. // RefreshEdbDataFromWind 刷新wind指标数据
  42. func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *services.EdbDataFromWind) (err error) {
  43. o := orm.NewOrm()
  44. source := utils.DATA_SOURCE_WIND
  45. var condition string
  46. var pars []interface{}
  47. condition += " AND edb_info_id=? "
  48. pars = append(pars, edbInfoId)
  49. var startDateTime time.Time
  50. if startDate != "" {
  51. condition += " AND data_time>=? "
  52. pars = append(pars, startDate)
  53. startDateTime, _ = time.ParseInLocation(utils.FormatDate, startDate, time.Local)
  54. }
  55. existList, err := GetEdbDataByCondition(source, condition, pars)
  56. existMap := make(map[string]*EdbInfoSearchData)
  57. for _, v := range existList {
  58. existMap[v.DataTime] = v
  59. }
  60. addSql := ` INSERT INTO edb_data_wind(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  61. var isAdd bool
  62. addMap := make(map[string]string)
  63. edbInfoIdStr := strconv.Itoa(edbInfoId)
  64. for k, v := range item.Dt {
  65. timeStr := fmt.Sprintf("%d", v)
  66. v = v / 1000
  67. t := time.Unix(v, 0)
  68. dateTime := t.Format(utils.FormatDate)
  69. val := item.Close[k]
  70. saveVal := utils.SubFloatToString(val, 30)
  71. //如果传入的开始时间是空的,且当前数据日期早于传入的开始日期,那么需要判断下当前日期的数据是否存在
  72. if !startDateTime.IsZero() && t.Before(startDateTime) {
  73. tmpItem, tmpErr := GetEdbDataByDate(source, dateTime)
  74. if tmpErr == nil && tmpItem != nil {
  75. existMap[tmpItem.DataTime] = tmpItem
  76. }
  77. }
  78. if findItem, ok := existMap[dateTime]; !ok {
  79. if _, existOk := addMap[dateTime]; !existOk {
  80. isAdd = true
  81. addSql += GetAddSql(edbInfoIdStr, edbCode, dateTime, timeStr, saveVal)
  82. addMap[dateTime] = saveVal
  83. }
  84. } else {
  85. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != saveVal {
  86. err = ModifyEdbDataById(source, findItem.EdbDataId, saveVal)
  87. if err != nil {
  88. return err
  89. }
  90. }
  91. }
  92. }
  93. if isAdd {
  94. addSql = strings.TrimRight(addSql, ",")
  95. _, err = o.Raw(addSql).Exec()
  96. if err != nil {
  97. fmt.Println("RefreshEdbDataFromWind add Err", err.Error())
  98. return
  99. }
  100. }
  101. return
  102. }