base_from_wind.go 3.7 KB

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