bloomberg.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package pcsg
  2. import (
  3. "strings"
  4. "time"
  5. )
  6. // PythonBloombergGeneralData 通用数据格式
  7. type PythonBloombergGeneralData struct {
  8. IDENTIFIER string `json:"IDENTIFIER" description:"指标编码"`
  9. PX_LAST_EOD *float64 `json:"PX_LAST_EOD" description:"数据值, 可能为null"`
  10. PX_VOLUME_EOD *float64 `json:"PX_VOLUME_EOD" description:"数据值(Run3), 可能为null"`
  11. LAST_UPDATE_DATE_EOD string `json:"LAST_UPDATE_DATE_EOD" description:"数据日期, 可能为null"`
  12. NAME string `json:"NAME" description:"指标名称, 可能为null"`
  13. }
  14. // PythonBloombergGeneralResult API响应体
  15. type PythonBloombergGeneralResult struct {
  16. Code int `json:"code"`
  17. Msg string `json:"msg"`
  18. Data []PythonBloombergGeneralData `json:"data"`
  19. }
  20. // BaseFromBloombergApiIndexAndData Bloomberg原始指标及数据
  21. type BaseFromBloombergApiIndexAndData struct {
  22. BaseFromBloombergIndexId int `description:"指标ID"`
  23. IndexCode string `description:"指标编码"`
  24. IndexName string `description:"指标名称"`
  25. Unit string `description:"单位"`
  26. Source string `description:"来源"`
  27. Frequency string `description:"频度"`
  28. CreateTime time.Time `description:"创建时间"`
  29. ModifyTime time.Time `description:"修改时间"`
  30. Data []BaseFromBloombergApiIndexData `description:"数据列表"`
  31. }
  32. // BaseFromBloombergApiIndexData Bloomberg原始指标数据
  33. type BaseFromBloombergApiIndexData struct {
  34. DataTime time.Time `description:"数据日期"`
  35. Value float64 `description:"数据值"`
  36. }
  37. func FormatPythonBloombergGeneralData2Base(origin PythonBloombergGeneralData, frequency string) (item BaseFromBloombergApiIndexAndData) {
  38. if origin.IDENTIFIER == "" {
  39. return
  40. }
  41. item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
  42. item.IndexName = strings.TrimSpace(origin.NAME)
  43. item.Frequency = frequency
  44. item.Unit = "无"
  45. item.Data = make([]BaseFromBloombergApiIndexData, 0)
  46. // 值可能为nil
  47. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_LAST_EOD != nil {
  48. t, _ := time.ParseInLocation(time.DateOnly, origin.LAST_UPDATE_DATE_EOD, time.Local)
  49. item.Data = append(item.Data, BaseFromBloombergApiIndexData{
  50. DataTime: t,
  51. Value: *origin.PX_LAST_EOD,
  52. })
  53. }
  54. // 可能是从Run3过来的, 数据值的字段为PX_VOLUME_EOD
  55. if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_VOLUME_EOD != nil {
  56. t, _ := time.ParseInLocation(time.DateOnly, origin.LAST_UPDATE_DATE_EOD, time.Local)
  57. item.Data = append(item.Data, BaseFromBloombergApiIndexData{
  58. DataTime: t,
  59. Value: *origin.PX_VOLUME_EOD,
  60. })
  61. }
  62. return
  63. }