123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- package pcsg
- import (
- "eta/eta_bridge/global"
- "eta/eta_bridge/utils"
- "fmt"
- "strings"
- "time"
- )
- const (
- TaskKey0000 = "IDpcsgDailySnap0000"
- SubOneDayTaskKey = "IDpcsgDailySnap0330" // 日期-1的key
- TaskKey0345 = "IDpcsgDailySnap0345"
- TaskKeyHistU3 = "IDpcsgDailyRunHistU3"
- TaskKeyIDpcsgDailyRun11 = "IDpcsgDailyRun11"
- TaskKeyIDpcsgDailyRun12 = "IDpcsgDailyRun12"
- )
- // PythonBloombergGeneralData 通用数据格式(有空改成Map吧...然后做成配置方便加新字段...)
- type PythonBloombergGeneralData struct {
- NAME string `json:"NAME" description:"指标名称, 可能为null"`
- IDENTIFIER string `json:"IDENTIFIER" description:"指标编码"`
- PX_LAST_EOD *float64 `json:"PX_LAST_EOD" description:"数据值, 可能为null"`
- PX_VOLUME_EOD *float64 `json:"PX_VOLUME_EOD" description:"数据值, 可能为null"`
- PX_LAST *float64 `json:"PX_LAST" description:"数据值, 可能为null"`
- PX_VOLUME *float64 `json:"PX_VOLUME" description:"数据值, 可能为null"`
- LAST_UPDATE_DATE_EOD string `json:"LAST_UPDATE_DATE_EOD" description:"数据日期"`
- DATE string `json:"DATE" description:"数据日期"`
- PX_SETTLE *float64 `json:"PX_SETTLE" description:"数据值, 可能为null"`
- PX_SETTLE_LAST_DT string `json:"PX_SETTLE_LAST_DT" description:"数据日期"`
- OPEN_INT *float64 `json:"OPEN_INT"`
- OPEN_INT_DATE string `json:"OPEN_INT_DATE"`
- DL_SNAPSHOT_START_TIME string `json:"DL_SNAPSHOT_START_TIME" description:"数据日期"`
- LAST_UPDATE string `json:"LAST_UPDATE" description:"IDpcsgDailySnap0000和IDpcsgDailySnap0330判断用的"`
- PX_CLOSE_DT string `json:"PX_CLOSE_DT" description:"数据日期"`
- LAST_UPDATE_DT string `json:"LAST_UPDATE_DT" description:"数据日期"`
- HEATING_DAYS *float64 `json:"HEATING_DAYS" description:"数据值, 可能为null"`
- COOLING_DAYS *float64 `json:"COOLING_DAYS" description:"数据值, 可能为null"`
- PX_OPEN *float64 `json:"PX_OPEN" description:"数据值, 可能为null"`
- PX_LOW *float64 `json:"PX_LOW" description:"数据值, 可能为null"`
- PX_HIGH *float64 `json:"PX_HIGH" description:"数据值, 可能为null"`
- WIND_SPEED *float64 `json:"WIND_SPEED" description:"数据值, 可能为null"`
- PRECIPITATION *float64 `json:"PRECIPITATION" description:"数据值, 可能为null"`
- }
- // PythonBloombergGeneralResult API响应体
- type PythonBloombergGeneralResult struct {
- Code int `json:"code"`
- Msg string `json:"msg"`
- Data []PythonBloombergGeneralData `json:"data"`
- }
- // BaseFromBloombergApiIndexAndData Bloomberg原始指标及数据
- type BaseFromBloombergApiIndexAndData struct {
- BaseFromBloombergIndexId int `description:"指标ID"`
- IndexCode string `description:"指标编码"`
- IndexName string `description:"指标名称"`
- Unit string `description:"单位"`
- Source string `description:"来源"`
- Frequency string `description:"频度"`
- CreateTime time.Time `description:"创建时间"`
- ModifyTime time.Time `description:"修改时间"`
- Data []BaseFromBloombergApiIndexData `description:"数据列表"`
- }
- // BaseFromBloombergApiIndexData Bloomberg原始指标数据
- type BaseFromBloombergApiIndexData struct {
- DataTime time.Time `description:"数据日期"`
- Value float64 `description:"数据值"`
- }
- func FormatPythonBloombergGeneralData2Base(origin PythonBloombergGeneralData, frequency, taskKey string) (item BaseFromBloombergApiIndexAndData) {
- if origin.IDENTIFIER == "" {
- return
- }
- item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- item.IndexName = strings.TrimSpace(origin.NAME)
- item.Frequency = frequency
- item.Unit = "无"
- item.Data = make([]BaseFromBloombergApiIndexData, 0)
- // 数据来源的值和日期对应字段不同
- var dataTime time.Time
- var val *float64
- if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_LAST_EOD != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
- val = origin.PX_LAST_EOD
- }
- if origin.LAST_UPDATE_DATE_EOD != "" && origin.PX_VOLUME_EOD != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DATE_EOD, time.Local)
- val = origin.PX_VOLUME_EOD
- }
- if origin.DATE != "" && origin.PX_LAST != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
- val = origin.PX_LAST
- }
- if origin.DATE != "" && origin.PX_VOLUME != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
- val = origin.PX_VOLUME
- }
- if origin.PX_SETTLE_LAST_DT != "" && origin.PX_SETTLE != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.PX_SETTLE_LAST_DT, time.Local)
- val = origin.PX_SETTLE
- }
- if origin.OPEN_INT_DATE != "" && origin.OPEN_INT != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.OPEN_INT_DATE, time.Local)
- val = origin.OPEN_INT
- }
- if taskKey == TaskKey0345 && origin.PX_CLOSE_DT != "" && origin.PX_LAST != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.PX_CLOSE_DT, time.Local)
- val = origin.PX_LAST
- }
- if (taskKey == TaskKey0000 || taskKey == SubOneDayTaskKey) && origin.DL_SNAPSHOT_START_TIME != "" && origin.PX_LAST != nil {
- // 根据LAST_UPDATE的格式进行判断, 仅加入格式为hh:mm:ss的
- _, e := time.ParseInLocation("15:04:05", origin.LAST_UPDATE, time.Local)
- if e != nil {
- return
- }
- d, e := time.ParseInLocation("2006-01-02T15:04:05", origin.DL_SNAPSHOT_START_TIME, time.Local)
- if e != nil {
- global.LOG.Info(fmt.Sprintf("DL_SNAPSHOT_START_TIME日期解析失败, %s", origin.DL_SNAPSHOT_START_TIME))
- }
- dataTime = d
- // 这个任务日期需要-1
- if taskKey == SubOneDayTaskKey {
- dataTime = dataTime.AddDate(0, 0, -1)
- }
- val = origin.PX_LAST
- }
- if !dataTime.IsZero() && val != nil {
- item.Data = append(item.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- return
- }
- // FormatPythonBloombergDailyRun11Data2Base Run11不要了被Run12替代了,留这过渡一下
- func FormatPythonBloombergDailyRun11Data2Base(origin PythonBloombergGeneralData, frequency, taskKey string) (items []BaseFromBloombergApiIndexAndData) {
- if origin.IDENTIFIER == "" {
- return
- }
- if origin.LAST_UPDATE_DT == "" {
- return
- }
- dataTime, err := time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DT, time.Local)
- if err != nil {
- return
- }
- items = make([]BaseFromBloombergApiIndexAndData, 0)
- // WER1UK00 Index, WER1UK00 Index HDD, WER1UK00 Index CDD
- item := BaseFromBloombergApiIndexAndData{}
- item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- item.IndexName = strings.TrimSpace(origin.NAME)
- item.Frequency = frequency
- item.Unit = "无"
- item.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemHDD := BaseFromBloombergApiIndexAndData{}
- itemHDD.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- itemHDD.IndexCode = fmt.Sprintf("%s HDD", itemHDD.IndexCode)
- itemHDD.IndexName = strings.TrimSpace(origin.NAME)
- itemHDD.IndexName = fmt.Sprintf("%s HDD", itemHDD.IndexName)
- itemHDD.Frequency = frequency
- itemHDD.Unit = "无"
- itemHDD.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemCDD := BaseFromBloombergApiIndexAndData{}
- itemCDD.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- itemCDD.IndexCode = fmt.Sprintf("%s CDD", itemCDD.IndexCode)
- itemCDD.IndexName = strings.TrimSpace(origin.NAME)
- itemCDD.IndexName = fmt.Sprintf("%s CDD", itemCDD.IndexName)
- itemCDD.Frequency = frequency
- itemCDD.Unit = "无"
- itemCDD.Data = make([]BaseFromBloombergApiIndexData, 0)
- // 数据来源的值和日期对应字段不同
- if origin.PX_LAST != nil {
- val := origin.PX_LAST
- item.Data = append(item.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.HEATING_DAYS != nil {
- val := origin.HEATING_DAYS
- itemHDD.Data = append(itemHDD.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.COOLING_DAYS != nil {
- val := origin.COOLING_DAYS
- itemCDD.Data = append(itemCDD.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- items = append(items, item, itemHDD, itemCDD)
- return
- }
- func FormatPythonBloombergDailyRunHistV1Data2Base(origin PythonBloombergGeneralData, frequency, taskKey string) (item BaseFromBloombergApiIndexAndData) {
- if origin.IDENTIFIER == "" {
- return
- }
- item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- if item.IndexCode == "TZT1 COMB Comdty" {
- item.IndexCode = "TZT1 COMB V Comdty"
- }
- item.IndexName = strings.TrimSpace(origin.NAME)
- item.Frequency = frequency
- item.Unit = "无"
- item.Data = make([]BaseFromBloombergApiIndexData, 0)
- // 数据来源的值和日期对应字段不同
- var dataTime time.Time
- var val *float64
- if origin.DATE != "" && origin.PX_VOLUME != nil {
- dataTime, _ = time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
- val = origin.PX_VOLUME
- }
- if !dataTime.IsZero() && val != nil {
- item.Data = append(item.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- return
- }
- func FormatPythonBloombergDailyHistU3Data2Base(origin PythonBloombergGeneralData, frequency string) (items []BaseFromBloombergApiIndexAndData) {
- origin.IDENTIFIER = strings.TrimSpace(origin.IDENTIFIER)
- if origin.IDENTIFIER == "" {
- return
- }
- dataTime, err := time.ParseInLocation(utils.FormatDate, origin.DATE, time.Local)
- if err != nil {
- return
- }
- items = make([]BaseFromBloombergApiIndexAndData, 0)
- // TZT1 Comdty / CO1 Comdty
- if origin.IDENTIFIER == "CO1 Comdty" {
- itemA1 := BaseFromBloombergApiIndexAndData{}
- itemA1.IndexCode = "CO1 O Comdty"
- itemA1.IndexName = "ICE Brent 1st Line - Open"
- itemA1.Frequency = frequency
- itemA1.Unit = "无"
- itemA1.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemA2 := BaseFromBloombergApiIndexAndData{}
- itemA2.IndexCode = "CO1 L Comdty"
- itemA2.IndexName = "ICE Brent 1st Line - Low"
- itemA2.Frequency = frequency
- itemA2.Unit = "无"
- itemA2.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemA3 := BaseFromBloombergApiIndexAndData{}
- itemA3.IndexCode = "CO1 H Comdty"
- itemA3.IndexName = "ICE Brent 1st Line - High"
- itemA3.Frequency = frequency
- itemA3.Unit = "无"
- itemA3.Data = make([]BaseFromBloombergApiIndexData, 0)
- // 数据来源的值和日期对应字段不同
- if origin.PX_OPEN != nil {
- val := origin.PX_OPEN
- itemA1.Data = append(itemA1.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.PX_LOW != nil {
- val := origin.PX_LOW
- itemA2.Data = append(itemA2.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.PX_HIGH != nil {
- val := origin.PX_HIGH
- itemA3.Data = append(itemA3.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- items = append(items, itemA1, itemA2, itemA3)
- }
- if origin.IDENTIFIER == "TZT1 Comdty" {
- itemB1 := BaseFromBloombergApiIndexAndData{}
- itemB1.IndexCode = "TZT1 O Comdty"
- itemB1.IndexName = "ICE TTF 1st Line - Open"
- itemB1.Frequency = frequency
- itemB1.Unit = "无"
- itemB1.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemB2 := BaseFromBloombergApiIndexAndData{}
- itemB2.IndexCode = "TZT1 L Comdty"
- itemB2.IndexName = "ICE TTF 1st Line - Low"
- itemB2.Frequency = frequency
- itemB2.Unit = "无"
- itemB2.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemB3 := BaseFromBloombergApiIndexAndData{}
- itemB3.IndexCode = "TZT1 H Comdty"
- itemB3.IndexName = "ICE TTF 1st Line - High"
- itemB3.Frequency = frequency
- itemB3.Unit = "无"
- itemB3.Data = make([]BaseFromBloombergApiIndexData, 0)
- // 数据来源的值和日期对应字段不同
- if origin.PX_OPEN != nil {
- val := origin.PX_OPEN
- itemB1.Data = append(itemB1.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.PX_LOW != nil {
- val := origin.PX_LOW
- itemB2.Data = append(itemB2.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.PX_HIGH != nil {
- val := origin.PX_HIGH
- itemB3.Data = append(itemB3.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- items = append(items, itemB1, itemB2, itemB3)
- }
- return
- }
- // FormatPythonBloombergDailyRun12Data2Base 替换Run11
- func FormatPythonBloombergDailyRun12Data2Base(origin PythonBloombergGeneralData, frequency string) (items []BaseFromBloombergApiIndexAndData) {
- if origin.IDENTIFIER == "" {
- return
- }
- if origin.LAST_UPDATE_DT == "" {
- return
- }
- dataTime, err := time.ParseInLocation(utils.FormatDate, origin.LAST_UPDATE_DT, time.Local)
- if err != nil {
- return
- }
- items = make([]BaseFromBloombergApiIndexAndData, 0)
- // WER1UK00 Index, WER1UK00 Index HDD, WER1UK00 Index CDD, WER1UK00 Index Pre, WER1UK00 Index Win
- item := BaseFromBloombergApiIndexAndData{}
- item.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- item.IndexName = strings.TrimSpace(origin.NAME)
- item.Frequency = frequency
- item.Unit = "无"
- item.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemHDD := BaseFromBloombergApiIndexAndData{}
- itemHDD.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- itemHDD.IndexCode = fmt.Sprintf("%s HDD", itemHDD.IndexCode)
- itemHDD.IndexName = strings.TrimSpace(origin.NAME)
- itemHDD.IndexName = fmt.Sprintf("%s HDD", itemHDD.IndexName)
- itemHDD.Frequency = frequency
- itemHDD.Unit = "无"
- itemHDD.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemCDD := BaseFromBloombergApiIndexAndData{}
- itemCDD.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- itemCDD.IndexCode = fmt.Sprintf("%s CDD", itemCDD.IndexCode)
- itemCDD.IndexName = strings.TrimSpace(origin.NAME)
- itemCDD.IndexName = fmt.Sprintf("%s CDD", itemCDD.IndexName)
- itemCDD.Frequency = frequency
- itemCDD.Unit = "无"
- itemCDD.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemPre := BaseFromBloombergApiIndexAndData{}
- itemPre.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- itemPre.IndexCode = fmt.Sprintf("%s Pre", itemPre.IndexCode)
- itemPre.IndexName = strings.TrimSpace(origin.NAME)
- itemPre.IndexName = fmt.Sprintf("%s Precipitation", itemPre.IndexName)
- itemPre.Frequency = frequency
- itemPre.Unit = "无"
- itemPre.Data = make([]BaseFromBloombergApiIndexData, 0)
- itemWin := BaseFromBloombergApiIndexAndData{}
- itemWin.IndexCode = strings.TrimSpace(origin.IDENTIFIER)
- itemWin.IndexCode = fmt.Sprintf("%s Win", itemWin.IndexCode)
- itemWin.IndexName = strings.TrimSpace(origin.NAME)
- itemWin.IndexName = fmt.Sprintf("%s Wind Speed", itemWin.IndexName)
- itemWin.Frequency = frequency
- itemWin.Unit = "无"
- itemWin.Data = make([]BaseFromBloombergApiIndexData, 0)
- // 数据来源的值和日期对应字段不同
- if origin.PX_LAST != nil {
- val := origin.PX_LAST
- item.Data = append(item.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.HEATING_DAYS != nil {
- val := origin.HEATING_DAYS
- itemHDD.Data = append(itemHDD.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.COOLING_DAYS != nil {
- val := origin.COOLING_DAYS
- itemCDD.Data = append(itemCDD.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.WIND_SPEED != nil {
- val := origin.WIND_SPEED
- itemWin.Data = append(itemWin.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- if origin.PRECIPITATION != nil {
- val := origin.PRECIPITATION
- itemPre.Data = append(itemPre.Data, BaseFromBloombergApiIndexData{
- DataTime: dataTime,
- Value: *val,
- })
- }
- items = append(items, item, itemHDD, itemCDD, itemWin, itemPre)
- return
- }
|