bloomberg.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package pcsg
  2. import (
  3. "eta/eta_bridge/global"
  4. "eta/eta_bridge/utils"
  5. "fmt"
  6. "strings"
  7. "time"
  8. )
  9. const (
  10. TaskKey0000 = "IDpcsgDailySnap0000"
  11. SubOneDayTaskKey = "IDpcsgDailySnap0330" // 日期-1的key
  12. )
  13. // PythonBloombergGeneralData 通用数据格式(有空改成Map吧...然后做成配置方便加新字段...)
  14. type PythonBloombergGeneralData struct {
  15. NAME string `json:"NAME" description:"指标名称, 可能为null"`
  16. IDENTIFIER string `json:"IDENTIFIER" description:"指标编码"`
  17. PX_LAST_EOD *float64 `json:"PX_LAST_EOD" description:"数据值, 可能为null"`
  18. PX_VOLUME_EOD *float64 `json:"PX_VOLUME_EOD" description:"数据值, 可能为null"`
  19. PX_LAST *float64 `json:"PX_LAST" description:"数据值, 可能为null"`
  20. PX_VOLUME *float64 `json:"PX_VOLUME" description:"数据值, 可能为null"`
  21. LAST_UPDATE_DATE_EOD string `json:"LAST_UPDATE_DATE_EOD" description:"数据日期"`
  22. DATE string `json:"DATE" description:"数据日期"`
  23. PX_SETTLE *float64 `json:"PX_SETTLE" description:"数据值, 可能为null"`
  24. PX_SETTLE_LAST_DT string `json:"PX_SETTLE_LAST_DT" description:"数据日期"`
  25. OPEN_INT *float64 `json:"OPEN_INT"`
  26. OPEN_INT_DATE string `json:"OPEN_INT_DATE"`
  27. DL_SNAPSHOT_START_TIME string `json:"DL_SNAPSHOT_START_TIME" description:"数据日期"`
  28. LAST_UPDATE string `json:"LAST_UPDATE" description:"IDpcsgDailySnap0000和IDpcsgDailySnap0330判断用的"`
  29. }
  30. // PythonBloombergGeneralResult API响应体
  31. type PythonBloombergGeneralResult struct {
  32. Code int `json:"code"`
  33. Msg string `json:"msg"`
  34. Data []PythonBloombergGeneralData `json:"data"`
  35. }
  36. // BaseFromBloombergApiIndexAndData Bloomberg原始指标及数据
  37. type BaseFromBloombergApiIndexAndData struct {
  38. BaseFromBloombergIndexId int `description:"指标ID"`
  39. IndexCode string `description:"指标编码"`
  40. IndexName string `description:"指标名称"`
  41. Unit string `description:"单位"`
  42. Source string `description:"来源"`
  43. Frequency string `description:"频度"`
  44. CreateTime time.Time `description:"创建时间"`
  45. ModifyTime time.Time `description:"修改时间"`
  46. Data []BaseFromBloombergApiIndexData `description:"数据列表"`
  47. }
  48. // BaseFromBloombergApiIndexData Bloomberg原始指标数据
  49. type BaseFromBloombergApiIndexData struct {
  50. DataTime time.Time `description:"数据日期"`
  51. Value float64 `description:"数据值"`
  52. }
  53. func FormatPythonBloombergGeneralData2Base(origin PythonBloombergGeneralData, frequency, taskKey string) (item BaseFromBloombergApiIndexAndData) {
  54. if origin.IDENTIFIER == "" {
  55. return
  56. }
  57. item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
  58. item.IndexName = strings.TrimSpace(origin.NAME)
  59. item.Frequency = frequency
  60. item.Unit = "无"
  61. item.Data = make([]BaseFromBloombergApiIndexData, 0)
  62. // 数据来源的值和日期对应字段不同
  63. var dataTime time.Time
  64. var val *float64
  65. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_LAST_EOD != nil {
  66. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
  67. val = origin.PX_LAST_EOD
  68. }
  69. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_VOLUME_EOD != nil {
  70. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
  71. val = origin.PX_VOLUME_EOD
  72. }
  73. if origin.DATE != "" && origin.PX_LAST != nil {
  74. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
  75. val = origin.PX_LAST
  76. }
  77. if origin.DATE != "" && origin.PX_VOLUME != nil {
  78. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
  79. val = origin.PX_VOLUME
  80. }
  81. if origin.PX_SETTLE_LAST_DT != "" && origin.PX_SETTLE != nil {
  82. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.PX_SETTLE_LAST_DT, time.Local)
  83. val = origin.PX_SETTLE
  84. }
  85. if origin.OPEN_INT_DATE != "" && origin.OPEN_INT != nil {
  86. dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.OPEN_INT_DATE, time.Local)
  87. val = origin.OPEN_INT
  88. }
  89. if (taskKey == TaskKey0000 || taskKey == SubOneDayTaskKey) && origin.DL_SNAPSHOT_START_TIME != "" && origin.PX_LAST != nil {
  90. // 根据LAST_UPDATE的格式进行判断, 仅加入格式为hh:mm:ss的
  91. _, e := time.ParseInLocation("15:04:05", origin.LAST_UPDATE, time.Local)
  92. if e != nil {
  93. return
  94. }
  95. d, e := time.ParseInLocation("2006-01-02T15:04:05", origin.DL_SNAPSHOT_START_TIME, time.Local)
  96. if e != nil {
  97. global.LOG.Info(fmt.Sprintf("DL_SNAPSHOT_START_TIME日期解析失败, %s", origin.DL_SNAPSHOT_START_TIME))
  98. }
  99. dataTime = d
  100. // 这个任务日期需要-1
  101. if taskKey == SubOneDayTaskKey {
  102. dataTime = dataTime.AddDate(0, 0, -1)
  103. }
  104. val = origin.PX_LAST
  105. }
  106. if !dataTime.IsZero() && val != nil {
  107. item.Data = append(item.Data, BaseFromBloombergApiIndexData{
  108. DataTime: dataTime,
  109. Value: *val,
  110. })
  111. }
  112. return
  113. }