base_from_ths.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package models
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "github.com/beego/beego/v2/client/orm"
  7. "github.com/rdlucklib/rdluck_tools/http"
  8. "hongze/hongze_edb_lib/utils"
  9. "strings"
  10. "time"
  11. )
  12. type EdbDataFromThs struct {
  13. DataVol int64 `json:"dataVol"`
  14. Errmsg string `json:"errmsg"`
  15. Errorcode int64 `json:"errorcode"`
  16. Perf interface{} `json:"perf"`
  17. Tables []struct {
  18. ID []string `json:"id"`
  19. Time []string `json:"time"`
  20. Value []float64 `json:"value"`
  21. } `json:"tables"`
  22. }
  23. func AddEdbDataFromThs(edbCode, startDate, endDate string) (err error) {
  24. var errMsg string
  25. o := orm.NewOrm()
  26. tx, err := o.Begin()
  27. defer func() {
  28. if err != nil {
  29. err = tx.Rollback()
  30. if err != nil {
  31. errMsg = " Rollback err:" + err.Error()
  32. }
  33. } else {
  34. err = tx.Commit()
  35. if err != nil {
  36. errMsg = " Commit err:" + err.Error()
  37. }
  38. }
  39. if err != nil {
  40. go utils.SendEmail(utils.APP_NAME_CN+"【"+utils.RunMode+"】"+"失败提醒", " 同花顺数据获取失败:err:"+errMsg, utils.EmailSendToUsers)
  41. }
  42. }()
  43. thsUrl := utils.Hz_Ths_Data_Url + `edbInfo/ths?EdbCode=%s&StartDate=%s&EndDate=%s`
  44. thsUrl = fmt.Sprintf(thsUrl, edbCode, startDate, endDate)
  45. utils.FileLog.Info("thsUrl:" + thsUrl)
  46. body, err := http.Get(thsUrl)
  47. utils.FileLog.Info("ths result:" + string(body))
  48. if err != nil {
  49. err = errors.New(" Err:" + err.Error() + ";result:" + string(body))
  50. return
  51. }
  52. item := new(EdbDataFromThs)
  53. err = json.Unmarshal(body, &item)
  54. if err != nil {
  55. err = errors.New("GetEdbDataFromThs json.Unmarshal Err:" + err.Error())
  56. return
  57. }
  58. if item.Errorcode != 0 {
  59. err = errors.New(string(body))
  60. errMsg ="获取同花顺信息失败:"+ string(body)
  61. return
  62. }
  63. if len(item.Tables) > 0 {
  64. table := item.Tables[0]
  65. dataLen := len(table.Time)
  66. var isAdd bool
  67. addSql := ` INSERT INTO %s(edb_info_id,edb_code,data_time,value,create_time,modify_time,status,data_timestamp) values `
  68. tableName := GetEdbDataTableName(utils.DATA_SOURCE_THS)
  69. addSql = fmt.Sprintf(addSql, tableName)
  70. for i := 0; i < dataLen; i++ {
  71. eDate := table.Time[i]
  72. sValue := table.Value[i]
  73. dataTime, err := time.Parse(utils.FormatDate, eDate)
  74. if err != nil {
  75. errMsg = " time.Parse :" + err.Error()
  76. return err
  77. }
  78. timestamp := dataTime.UnixNano() / 1e6
  79. timeStr := fmt.Sprintf("%d", timestamp)
  80. addSql += GetAddSql("0", edbCode, eDate, timeStr, utils.SubFloatToString(sValue, 20))
  81. isAdd = true
  82. }
  83. if isAdd {
  84. addSql = strings.TrimRight(addSql, ",")
  85. _, err = tx.Raw(addSql).Exec()
  86. if err != nil {
  87. errMsg = " tx.Exec Err :" + err.Error()
  88. return
  89. }
  90. }
  91. }
  92. return
  93. }