base_from_wind.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. //刷新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. if startDate!="" {
  50. condition += " AND data_time>=? "
  51. pars = append(pars, startDate)
  52. }
  53. existList, err := GetEdbDataByCondition(source, condition, pars)
  54. existMap := make(map[string]*EdbInfoSearchData)
  55. for _, v := range existList {
  56. existMap[v.DataTime] = v
  57. }
  58. addSql := ` INSERT INTO edb_data_wind(edb_info_id,edb_code,data_time,value,create_time,modify_time,data_timestamp) values `
  59. var isAdd bool
  60. addMap := make(map[string]string)
  61. edbInfoIdStr := strconv.Itoa(edbInfoId)
  62. for k, v := range item.Dt {
  63. timeStr := fmt.Sprintf("%d", v)
  64. v = v / 1000
  65. t := time.Unix(v, 0)
  66. dateTime := t.Format(utils.FormatDate)
  67. val := item.Close[k]
  68. saveVal := utils.SubFloatToString(val, 30)
  69. if findItem, ok := existMap[dateTime]; !ok {
  70. if _, existOk := addMap[dateTime]; !existOk {
  71. isAdd = true
  72. addSql += GetAddSql(edbInfoIdStr, edbCode, dateTime, timeStr, saveVal)
  73. addMap[dateTime] = saveVal
  74. }
  75. } else {
  76. if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != saveVal {
  77. err = ModifyEdbDataById(source, findItem.EdbDataId, saveVal)
  78. if err != nil {
  79. return err
  80. }
  81. }
  82. }
  83. }
  84. if isAdd {
  85. addSql = strings.TrimRight(addSql, ",")
  86. _, err = o.Raw(addSql).Exec()
  87. if err != nil {
  88. fmt.Println("RefreshEdbDataFromWind add Err", err.Error())
  89. return
  90. }
  91. }
  92. return
  93. }