|
@@ -15,42 +15,46 @@ import (
|
|
|
)
|
|
|
|
|
|
// GetChartEdbData 获取图表的指标数据
|
|
|
-func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping, futureGoodEdbInfoMapping *data_manage.ChartEdbInfoMapping, barChartInfoDateList []data_manage.BarChartInfoDateReq, needData bool) (barConfigEdbInfoIdList []data_manage.BarChartInfoEdbItemReq, edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, xDataList []data_manage.XData, yDataList []data_manage.YData, err error) {
|
|
|
+func GetChartEdbData(chartInfoId int, startDate, endDate string, baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, futureGoodEdbInfoMapping *data_manage.ChartEdbInfoMapping, barChartInfoConf data_manage.FutureGoodBarChartInfoReq, needData bool) (barConfigEdbInfoIdList []data_manage.BarChartInfoEdbItemReq, edbList []*data_manage.ChartEdbInfoMapping, xEdbIdValue []int, xDataList []data_manage.XData, yDataList []data_manage.YData, err error) {
|
|
|
edbList = make([]*data_manage.ChartEdbInfoMapping, 0)
|
|
|
-
|
|
|
+ barChartInfoDateList := barChartInfoConf.DateList
|
|
|
if futureGoodEdbInfoMapping == nil {
|
|
|
err = errors.New("商品指标未选取")
|
|
|
return
|
|
|
}
|
|
|
- if edbInfoMapping == nil {
|
|
|
+ if len(edbInfoMappingList) == 0 {
|
|
|
err = errors.New("ETA指标未选取")
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
// 指标对应的所有数据
|
|
|
edbDataListMap := make(map[int][]*data_manage.EdbDataList)
|
|
|
|
|
|
- item := new(data_manage.ChartEdbInfoMapping)
|
|
|
- edbInfoMapping.FrequencyEn = data.GetFrequencyEn(edbInfoMapping.Frequency)
|
|
|
+ // todo item
|
|
|
+ //item := new(data_manage.ChartEdbInfoMapping)
|
|
|
|
|
|
- if edbInfoMapping.Unit == `无` {
|
|
|
- edbInfoMapping.Unit = ``
|
|
|
- }
|
|
|
if futureGoodEdbInfoMapping.Unit == `无` {
|
|
|
futureGoodEdbInfoMapping.Unit = ``
|
|
|
}
|
|
|
|
|
|
if chartInfoId <= 0 {
|
|
|
- edbInfoMapping.IsAxis = 1
|
|
|
- edbInfoMapping.LeadValue = 0
|
|
|
- edbInfoMapping.LeadUnit = ""
|
|
|
- edbInfoMapping.ChartEdbMappingId = 0
|
|
|
- edbInfoMapping.ChartInfoId = 0
|
|
|
- edbInfoMapping.IsOrder = false
|
|
|
- edbInfoMapping.EdbInfoType = 1
|
|
|
- edbInfoMapping.ChartStyle = ""
|
|
|
- edbInfoMapping.ChartColor = ""
|
|
|
- edbInfoMapping.ChartWidth = 0
|
|
|
-
|
|
|
+ for k, edbInfoMapping := range edbInfoMappingList {
|
|
|
+ edbInfoMapping.FrequencyEn = data.GetFrequencyEn(edbInfoMapping.Frequency)
|
|
|
+ if edbInfoMapping.Unit == `无` {
|
|
|
+ edbInfoMapping.Unit = ``
|
|
|
+ }
|
|
|
+ edbInfoMapping.IsAxis = 1
|
|
|
+ edbInfoMapping.LeadValue = 0
|
|
|
+ edbInfoMapping.LeadUnit = ""
|
|
|
+ edbInfoMapping.ChartEdbMappingId = 0
|
|
|
+ edbInfoMapping.ChartInfoId = 0
|
|
|
+ edbInfoMapping.IsOrder = false
|
|
|
+ edbInfoMapping.EdbInfoType = 1
|
|
|
+ edbInfoMapping.ChartStyle = ""
|
|
|
+ edbInfoMapping.ChartColor = ""
|
|
|
+ edbInfoMapping.ChartWidth = 0
|
|
|
+ edbInfoMappingList[k] = edbInfoMapping
|
|
|
+ }
|
|
|
futureGoodEdbInfoMapping.IsAxis = 1
|
|
|
futureGoodEdbInfoMapping.LeadValue = 0
|
|
|
futureGoodEdbInfoMapping.LeadUnit = ""
|
|
@@ -62,21 +66,43 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
futureGoodEdbInfoMapping.ChartColor = ""
|
|
|
futureGoodEdbInfoMapping.ChartWidth = 0
|
|
|
} else {
|
|
|
- edbInfoMapping.LeadUnitEn = data.GetLeadUnitEn(edbInfoMapping.LeadUnit)
|
|
|
+ for k, edbInfoMapping := range edbInfoMappingList {
|
|
|
+ edbInfoMapping.FrequencyEn = data.GetFrequencyEn(edbInfoMapping.Frequency)
|
|
|
+ if edbInfoMapping.Unit == `无` {
|
|
|
+ edbInfoMapping.Unit = ``
|
|
|
+ }
|
|
|
+ edbInfoMapping.LeadUnitEn = data.GetLeadUnitEn(edbInfoMapping.LeadUnit)
|
|
|
+ edbInfoMappingList[k] = edbInfoMapping
|
|
|
+ }
|
|
|
futureGoodEdbInfoMapping.LeadUnitEn = data.GetLeadUnitEn(futureGoodEdbInfoMapping.LeadUnit)
|
|
|
}
|
|
|
|
|
|
+ //查询横轴配置项
|
|
|
+ xDataItemMap := make(map[int]data_manage.XData)
|
|
|
+ for k, v := range barChartInfoConf.XDataList {
|
|
|
+ xDataItemMap[k] = v
|
|
|
+ }
|
|
|
+
|
|
|
// 普通的指标数据
|
|
|
{
|
|
|
- edbList = append(edbList, edbInfoMapping)
|
|
|
-
|
|
|
- barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, data_manage.BarChartInfoEdbItemReq{
|
|
|
- EdbInfoId: edbInfoMapping.EdbInfoId,
|
|
|
- //Name: edbInfoMapping.EdbName,
|
|
|
- Name: "现货价",
|
|
|
- NameEn: "Spot Price",
|
|
|
- Source: edbInfoMapping.Source,
|
|
|
- })
|
|
|
+ edbList = edbInfoMappingList
|
|
|
+
|
|
|
+ for k, edbInfoMapping := range edbInfoMappingList {
|
|
|
+ tmp := data_manage.BarChartInfoEdbItemReq{
|
|
|
+ EdbInfoId: edbInfoMapping.EdbInfoId,
|
|
|
+ Name: edbInfoMapping.EdbName,
|
|
|
+ NameEn: edbInfoMapping.EdbNameEn,
|
|
|
+ Source: edbInfoMapping.Source,
|
|
|
+ }
|
|
|
+ // 如果有配置,则用配置中的指标名称替换
|
|
|
+ xItem, ok := xDataItemMap[k]
|
|
|
+ if ok && xItem.Name != "" {
|
|
|
+ tmp.Name = xItem.Name
|
|
|
+ tmp.NameEn = xItem.NameEn
|
|
|
+ tmp.IsHide = xItem.IsHide
|
|
|
+ }
|
|
|
+ barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, tmp)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 获取主力合约和最新日期
|
|
@@ -88,6 +114,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
// 寻找主力合约
|
|
|
zlFutureGoodEdbInfo, err = future_good2.GetFutureGoodEdbInfo(futureGoodEdbInfoMapping.EdbInfoId)
|
|
|
if err != nil {
|
|
|
+ err = fmt.Errorf("查不到期货指标,GetFutureGoodEdbInfo err: %v", err)
|
|
|
return
|
|
|
}
|
|
|
regionType = zlFutureGoodEdbInfo.RegionType
|
|
@@ -97,7 +124,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
if zlFutureGoodEdbInfo.DateSourceId != zlFutureGoodEdbInfo.FutureGoodEdbInfoId {
|
|
|
sourceDateFutureGoodEdbInfo, tmpErr := future_good2.GetFutureGoodEdbInfo(zlFutureGoodEdbInfo.DateSourceId)
|
|
|
if tmpErr != nil {
|
|
|
- err = tmpErr
|
|
|
+ err = fmt.Errorf("获取期货指标 %d 的日期来源的指标信息失败,错误:%s", zlFutureGoodEdbInfo.DateSourceId, tmpErr.Error())
|
|
|
return
|
|
|
}
|
|
|
latestDate = sourceDateFutureGoodEdbInfo.EndDate // 最新日期是这个
|
|
@@ -119,6 +146,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
latestDateTime, _ := time.ParseInLocation(utils.FormatDate, latestDate, time.Local)
|
|
|
_, futureGoodEdbInfoList, err := getFutureGoodEdbInfoList(latestDateTime, tmpFutureGoodEdbInfoList, barChartInfoDateList)
|
|
|
if err != nil {
|
|
|
+ err = fmt.Errorf("获取期货指标列表失败,getFutureGoodEdbInfoList 错误:%s", err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -132,30 +160,30 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
EdbName: v.FutureGoodEdbName,
|
|
|
EdbAliasName: v.FutureGoodEdbName,
|
|
|
EdbNameEn: v.FutureGoodEdbNameEn,
|
|
|
- EdbType: edbInfoMapping.EdbType,
|
|
|
- Frequency: edbInfoMapping.Frequency,
|
|
|
- FrequencyEn: edbInfoMapping.FrequencyEn,
|
|
|
- Unit: edbInfoMapping.Unit,
|
|
|
- UnitEn: edbInfoMapping.UnitEn,
|
|
|
+ EdbType: baseEdbInfoMapping.EdbType,
|
|
|
+ Frequency: baseEdbInfoMapping.Frequency,
|
|
|
+ FrequencyEn: baseEdbInfoMapping.FrequencyEn,
|
|
|
+ Unit: baseEdbInfoMapping.Unit,
|
|
|
+ UnitEn: baseEdbInfoMapping.UnitEn,
|
|
|
StartDate: v.StartDate,
|
|
|
EndDate: v.EndDate,
|
|
|
ModifyTime: v.ModifyTime.Format(utils.FormatDateTime),
|
|
|
ChartEdbMappingId: v.FutureGoodEdbInfoId,
|
|
|
- ChartInfoId: edbInfoMapping.ChartInfoId,
|
|
|
+ ChartInfoId: baseEdbInfoMapping.ChartInfoId,
|
|
|
MaxData: v.MaxValue,
|
|
|
MinData: v.MinValue,
|
|
|
- IsOrder: edbInfoMapping.IsOrder,
|
|
|
- IsAxis: edbInfoMapping.IsAxis,
|
|
|
- EdbInfoType: edbInfoMapping.EdbInfoType,
|
|
|
- EdbInfoCategoryType: edbInfoMapping.EdbInfoCategoryType,
|
|
|
- LeadValue: edbInfoMapping.LeadValue,
|
|
|
- LeadUnit: edbInfoMapping.LeadUnit,
|
|
|
- LeadUnitEn: edbInfoMapping.LeadUnitEn,
|
|
|
- ChartStyle: edbInfoMapping.ChartStyle,
|
|
|
- ChartColor: edbInfoMapping.ChartColor,
|
|
|
- PredictChartColor: edbInfoMapping.PredictChartColor,
|
|
|
- ChartWidth: edbInfoMapping.ChartWidth,
|
|
|
- ChartType: edbInfoMapping.ChartType,
|
|
|
+ IsOrder: baseEdbInfoMapping.IsOrder,
|
|
|
+ IsAxis: baseEdbInfoMapping.IsAxis,
|
|
|
+ EdbInfoType: baseEdbInfoMapping.EdbInfoType,
|
|
|
+ EdbInfoCategoryType: baseEdbInfoMapping.EdbInfoCategoryType,
|
|
|
+ LeadValue: baseEdbInfoMapping.LeadValue,
|
|
|
+ LeadUnit: baseEdbInfoMapping.LeadUnit,
|
|
|
+ LeadUnitEn: baseEdbInfoMapping.LeadUnitEn,
|
|
|
+ ChartStyle: baseEdbInfoMapping.ChartStyle,
|
|
|
+ ChartColor: baseEdbInfoMapping.ChartColor,
|
|
|
+ PredictChartColor: baseEdbInfoMapping.PredictChartColor,
|
|
|
+ ChartWidth: baseEdbInfoMapping.ChartWidth,
|
|
|
+ ChartType: baseEdbInfoMapping.ChartType,
|
|
|
LatestDate: v.LatestDate.Format(utils.FormatDateTime),
|
|
|
LatestValue: v.LatestValue,
|
|
|
UniqueCode: futureGoodEdbInfoMapping.UniqueCode + strconv.Itoa(k),
|
|
@@ -166,12 +194,21 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
}
|
|
|
futureGoodMappingList = append(futureGoodMappingList, newMappingInfo)
|
|
|
|
|
|
- barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, data_manage.BarChartInfoEdbItemReq{
|
|
|
+ tmp := data_manage.BarChartInfoEdbItemReq{
|
|
|
EdbInfoId: newMappingInfo.EdbInfoId,
|
|
|
Name: fmt.Sprint("M+", v.Month),
|
|
|
NameEn: fmt.Sprint("M+", v.Month),
|
|
|
Source: newMappingInfo.Source,
|
|
|
- })
|
|
|
+ }
|
|
|
+ // 判断如果有配置,需要替换为配置内容
|
|
|
+ xItem, ok := xDataItemMap[k]
|
|
|
+ if ok && xItem.Name != "" {
|
|
|
+ tmp.Name = xItem.Name
|
|
|
+ tmp.NameEn = xItem.NameEn
|
|
|
+ tmp.IsHide = xItem.IsHide
|
|
|
+ }
|
|
|
+ barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, tmp)
|
|
|
+
|
|
|
}
|
|
|
|
|
|
if regionType == `海外` {
|
|
@@ -183,30 +220,30 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
EdbName: zlFutureGoodEdbInfo.FutureGoodEdbName,
|
|
|
EdbAliasName: zlFutureGoodEdbInfo.FutureGoodEdbName,
|
|
|
EdbNameEn: zlFutureGoodEdbInfo.FutureGoodEdbNameEn,
|
|
|
- EdbType: edbInfoMapping.EdbType,
|
|
|
- Frequency: edbInfoMapping.Frequency,
|
|
|
- FrequencyEn: edbInfoMapping.FrequencyEn,
|
|
|
- Unit: edbInfoMapping.Unit,
|
|
|
- UnitEn: edbInfoMapping.UnitEn,
|
|
|
+ EdbType: baseEdbInfoMapping.EdbType,
|
|
|
+ Frequency: baseEdbInfoMapping.Frequency,
|
|
|
+ FrequencyEn: baseEdbInfoMapping.FrequencyEn,
|
|
|
+ Unit: baseEdbInfoMapping.Unit,
|
|
|
+ UnitEn: baseEdbInfoMapping.UnitEn,
|
|
|
StartDate: zlFutureGoodEdbInfo.StartDate,
|
|
|
EndDate: zlFutureGoodEdbInfo.EndDate,
|
|
|
ModifyTime: zlFutureGoodEdbInfo.ModifyTime.Format(utils.FormatDateTime),
|
|
|
ChartEdbMappingId: zlFutureGoodEdbInfo.FutureGoodEdbInfoId,
|
|
|
- ChartInfoId: edbInfoMapping.ChartInfoId,
|
|
|
+ ChartInfoId: baseEdbInfoMapping.ChartInfoId,
|
|
|
MaxData: zlFutureGoodEdbInfo.MaxValue,
|
|
|
MinData: zlFutureGoodEdbInfo.MinValue,
|
|
|
- IsOrder: edbInfoMapping.IsOrder,
|
|
|
- IsAxis: edbInfoMapping.IsAxis,
|
|
|
- EdbInfoType: edbInfoMapping.EdbInfoType,
|
|
|
- EdbInfoCategoryType: edbInfoMapping.EdbInfoCategoryType,
|
|
|
- LeadValue: edbInfoMapping.LeadValue,
|
|
|
- LeadUnit: edbInfoMapping.LeadUnit,
|
|
|
- LeadUnitEn: edbInfoMapping.LeadUnitEn,
|
|
|
- ChartStyle: edbInfoMapping.ChartStyle,
|
|
|
- ChartColor: edbInfoMapping.ChartColor,
|
|
|
- PredictChartColor: edbInfoMapping.PredictChartColor,
|
|
|
- ChartWidth: edbInfoMapping.ChartWidth,
|
|
|
- ChartType: edbInfoMapping.ChartType,
|
|
|
+ IsOrder: baseEdbInfoMapping.IsOrder,
|
|
|
+ IsAxis: baseEdbInfoMapping.IsAxis,
|
|
|
+ EdbInfoType: baseEdbInfoMapping.EdbInfoType,
|
|
|
+ EdbInfoCategoryType: baseEdbInfoMapping.EdbInfoCategoryType,
|
|
|
+ LeadValue: baseEdbInfoMapping.LeadValue,
|
|
|
+ LeadUnit: baseEdbInfoMapping.LeadUnit,
|
|
|
+ LeadUnitEn: baseEdbInfoMapping.LeadUnitEn,
|
|
|
+ ChartStyle: baseEdbInfoMapping.ChartStyle,
|
|
|
+ ChartColor: baseEdbInfoMapping.ChartColor,
|
|
|
+ PredictChartColor: baseEdbInfoMapping.PredictChartColor,
|
|
|
+ ChartWidth: baseEdbInfoMapping.ChartWidth,
|
|
|
+ ChartType: baseEdbInfoMapping.ChartType,
|
|
|
LatestDate: zlFutureGoodEdbInfo.LatestDate.Format(utils.FormatDateTime),
|
|
|
LatestValue: zlFutureGoodEdbInfo.LatestValue,
|
|
|
UniqueCode: futureGoodEdbInfoMapping.UniqueCode + strconv.Itoa(0),
|
|
@@ -228,24 +265,45 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
// 获取数据
|
|
|
|
|
|
// 现货数据
|
|
|
- {
|
|
|
+ for _, edbInfoMapping := range edbInfoMappingList {
|
|
|
dataList := make([]*data_manage.EdbDataList, 0)
|
|
|
dataList, err = data_manage.GetEdbDataList(edbInfoMapping.Source, edbInfoMapping.SubSource, edbInfoMapping.EdbInfoId, startDate, endDate)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
edbDataListMap[edbInfoMapping.EdbInfoId] = dataList
|
|
|
- item.DataList = dataList
|
|
|
+ // todo item
|
|
|
+ //item.DataList = dataList
|
|
|
}
|
|
|
-
|
|
|
- // 期货数据
|
|
|
+ futureEdbInfoIds := make([]int, 0)
|
|
|
for _, v := range futureGoodMappingList {
|
|
|
- dataList := make([]*data_manage.EdbDataList, 0)
|
|
|
-
|
|
|
- tmpDataList, tmpErr := future_good2.GetFutureGoodEdbDataListByDate(v.EdbInfoId, startDate, endDate)
|
|
|
+ futureEdbInfoIds = append(futureEdbInfoIds, v.EdbInfoId)
|
|
|
+ }
|
|
|
+ tmpDataListMap := make(map[int][]*future_good2.FutureGoodEdbData)
|
|
|
+ if len(futureEdbInfoIds) > 0 {
|
|
|
+ // 期货数据
|
|
|
+ tmpDataList, tmpErr := future_good2.GetFutureGoodEdbDataListByIdsAndDate(futureEdbInfoIds, startDate, endDate)
|
|
|
if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+ for _, v := range tmpDataList {
|
|
|
+ if _, ok := tmpDataListMap[v.FutureGoodEdbInfoId]; !ok {
|
|
|
+ tmpDataListMap[v.FutureGoodEdbInfoId] = make([]*future_good2.FutureGoodEdbData, 0)
|
|
|
+ }
|
|
|
+ tmpDataListMap[v.FutureGoodEdbInfoId] = append(tmpDataListMap[v.FutureGoodEdbInfoId], v)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range futureGoodMappingList {
|
|
|
+ dataList := make([]*data_manage.EdbDataList, 0)
|
|
|
+ tmpDataList, ok := tmpDataListMap[v.EdbInfoId]
|
|
|
+ if !ok {
|
|
|
+ /*err = fmt.Errorf("期货数据不存在 FutureGoodEdbInfoId: %d", v.EdbInfoId)
|
|
|
+ return*/
|
|
|
+ continue
|
|
|
+ }
|
|
|
for _, tmpData := range tmpDataList {
|
|
|
dataList = append(dataList, &data_manage.EdbDataList{
|
|
|
EdbDataId: tmpData.FutureGoodEdbDataId,
|
|
@@ -259,14 +317,20 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
v.DataList = dataList
|
|
|
}
|
|
|
|
|
|
- xEdbIdValue, yDataList, err = BarChartData(edbList[0], futureGoodEdbInfoList, edbDataListMap, barChartInfoDateList, regionType, edbInfoMapping.EndDate)
|
|
|
+ xEdbIdValue, yDataList, err = BarChartData(baseEdbInfoMapping, edbInfoMappingList, futureGoodEdbInfoList, edbDataListMap, barChartInfoDateList, regionType, baseEdbInfoMapping.EndDate)
|
|
|
|
|
|
- xDataList = []data_manage.XData{
|
|
|
- {
|
|
|
- Name: "现货价",
|
|
|
- NameEn: "Spot Price",
|
|
|
- },
|
|
|
+ if len(barChartInfoConf.XDataList) > 0 {
|
|
|
+ xDataList = barChartInfoConf.XDataList
|
|
|
+ } else {
|
|
|
+ for _, v := range edbInfoMappingList {
|
|
|
+ xDataList = append(xDataList, data_manage.XData{
|
|
|
+ Name: v.EdbName,
|
|
|
+ NameEn: v.EdbNameEn,
|
|
|
+ IsHide: 0,
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
//yDataList =make([]data_manage.YData,0)
|
|
|
//data_manage.YData{
|
|
|
// Date: "",
|
|
@@ -296,14 +360,15 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
}
|
|
|
|
|
|
// 基础指标
|
|
|
- {
|
|
|
- baseEdbInfId := edbList[0].EdbInfoId
|
|
|
- edbInfoIdList = append(edbInfoIdList, baseEdbInfId)
|
|
|
- tmpVal, ok := yDataMap[baseEdbInfId]
|
|
|
+ baseEdbIds := make([]int, 0)
|
|
|
+ for _, tmp := range edbInfoMappingList {
|
|
|
+ edbInfoIdList = append(edbInfoIdList, tmp.EdbInfoId)
|
|
|
+ baseEdbIds = append(baseEdbIds, tmp.EdbInfoId)
|
|
|
+ tmpVal, ok := yDataMap[tmp.EdbInfoId]
|
|
|
valueList = append(valueList, tmpVal)
|
|
|
if !ok || tmpVal == 0 {
|
|
|
- noDataEdbInfoIdList = append(noDataEdbInfoIdList, baseEdbInfId)
|
|
|
- noDataEdbIdMap[baseEdbInfId] = baseEdbInfId
|
|
|
+ noDataEdbInfoIdList = append(noDataEdbInfoIdList, tmp.EdbInfoId)
|
|
|
+ noDataEdbIdMap[tmp.EdbInfoId] = tmp.EdbInfoId
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -326,8 +391,8 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
|
|
|
for i := lenEdbId - 1; i >= 0; i-- {
|
|
|
// 如果没有在无数据的指标列表中找到,那么就找到了最大x轴的下标
|
|
|
- if _, ok := noDataEdbIdMap[edbInfoIdList[i]]; !ok {
|
|
|
- // 如果最大x轴的下标 小于 当前下标,那么就重新赋值
|
|
|
+ if _, ok := noDataEdbIdMap[edbInfoIdList[i]]; !ok || utils.InArrayByInt(baseEdbIds, edbInfoIdList[i]) { //以往的逻辑是碰到第一个无数据的期货指标,那后续的月份都是无数据的,因此需要特殊处理,改成多个现货指标之后需要排除无值的现货指标
|
|
|
+ // 如果最大x轴的下标 小于 当前下标,那么就重新赋值,
|
|
|
if maxIndex < i-1 {
|
|
|
maxIndex = i - 1
|
|
|
}
|
|
@@ -362,46 +427,57 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
yDataList[k].Value = v.Value[0 : maxIndex+1]
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- tmpXDataList, newYDataList, err := handleResultData(regionType, futureGoodEdbType, yDataList, futureGoodEdbInfoList, maxIndex)
|
|
|
+ baseEdbLen := len(edbInfoMappingList)
|
|
|
+ tmpXDataList, newYDataList, err := handleResultData(regionType, futureGoodEdbType, baseEdbLen, yDataList, futureGoodEdbInfoList, maxIndex)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|
|
|
- xDataList = append(xDataList, tmpXDataList...)
|
|
|
+ if len(barChartInfoConf.XDataList) == 0 {
|
|
|
+ xDataList = append(xDataList, tmpXDataList...)
|
|
|
+ }
|
|
|
+
|
|
|
yDataList = newYDataList
|
|
|
|
|
|
return
|
|
|
}
|
|
|
|
|
|
// BarChartData 获取数据
|
|
|
-func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMappingList []*future_good2.FutureGoodEdbInfo, edbDataListMap map[int][]*data_manage.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, regionType, latestDate string) (edbIdList []int, yDataList []data_manage.YData, err error) {
|
|
|
+func BarChartData(baseEdbInfoMapping *data_manage.ChartEdbInfoMapping, edbInfoMappingList []*data_manage.ChartEdbInfoMapping, futureGoodMappingList []*future_good2.FutureGoodEdbInfo, edbDataListMap map[int][]*data_manage.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, regionType, latestDate string) (edbIdList []int, yDataList []data_manage.YData, err error) {
|
|
|
// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
|
|
|
// 现货指标数据map
|
|
|
- baseEdbDataMap := make(map[string]float64)
|
|
|
+ baseEdbDataMap := make(map[int]map[string]float64)
|
|
|
+ edbInfoMappingMap := make(map[int]struct{})
|
|
|
+ for _, v := range edbInfoMappingList {
|
|
|
+ edbInfoMappingMap[v.EdbInfoId] = struct{}{}
|
|
|
+ }
|
|
|
for edbInfoId, edbDataList := range edbDataListMap {
|
|
|
- if edbInfoId == edbInfoMapping.EdbInfoId {
|
|
|
+ if _, ok1 := edbInfoMappingMap[edbInfoId]; ok1 {
|
|
|
+ edbDateData := make(map[string]float64)
|
|
|
for _, edbData := range edbDataList {
|
|
|
- baseEdbDataMap[edbData.DataTime] = edbData.Value
|
|
|
+ edbDateData[edbData.DataTime] = edbData.Value
|
|
|
}
|
|
|
+ baseEdbDataMap[edbInfoId] = edbDateData
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 期货指标数据map
|
|
|
- futureGoodEdbDataMap := make(map[int]map[string]float64)
|
|
|
+ edbDataMap := make(map[int]map[string]float64)
|
|
|
for edbInfoId, edbDataList := range edbDataListMap {
|
|
|
- if edbInfoId == edbInfoMapping.EdbInfoId {
|
|
|
+ if _, ok := edbInfoMappingMap[edbInfoId]; ok {
|
|
|
continue
|
|
|
}
|
|
|
edbDateData := make(map[string]float64)
|
|
|
for _, edbData := range edbDataList {
|
|
|
edbDateData[edbData.DataTime] = edbData.Value
|
|
|
}
|
|
|
- futureGoodEdbDataMap[edbInfoId] = edbDateData
|
|
|
+ edbDataMap[edbInfoId] = edbDateData
|
|
|
}
|
|
|
|
|
|
// edbIdList 指标展示顺序;x轴的指标顺序
|
|
|
edbIdList = make([]int, 0)
|
|
|
- edbIdList = append(edbIdList, edbInfoMapping.EdbInfoId)
|
|
|
+ for _, v := range edbInfoMappingList {
|
|
|
+ edbIdList = append(edbIdList, v.EdbInfoId)
|
|
|
+ }
|
|
|
+
|
|
|
for _, v := range futureGoodMappingList {
|
|
|
edbIdList = append(edbIdList, v.FutureGoodEdbInfoId)
|
|
|
}
|
|
@@ -442,19 +518,35 @@ func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMap
|
|
|
noDataIdMap := make(map[int]int, 0) // 没有数据的指标map
|
|
|
xEdbInfoIdList := make([]int, 0) // 当前数据的指标id列表
|
|
|
|
|
|
- // 现货指标
|
|
|
- realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[edbInfoMapping.EdbInfoId], baseEdbDataMap, futureGoodEdbDataMap)
|
|
|
+ // 先找到基准日期
|
|
|
+ var realDateTime time.Time
|
|
|
+ realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[baseEdbInfoMapping.EdbInfoId], baseEdbDataMap[baseEdbInfoMapping.EdbInfoId], edbDataMap)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
|
}
|
|
|
- findDataList = append(findDataList, findDataValue)
|
|
|
- yDataMap[edbInfoMapping.EdbInfoId] = findDataValue
|
|
|
- if isFind {
|
|
|
- maxDate = realDateTime
|
|
|
- } else {
|
|
|
- noDataIdList = append(noDataIdList, edbInfoMapping.EdbInfoId)
|
|
|
- noDataIdMap[edbInfoMapping.EdbInfoId] = edbInfoMapping.EdbInfoId
|
|
|
+ // 处理其余现货指标
|
|
|
+ for _, v := range edbInfoMappingList {
|
|
|
+ if v.EdbInfoId == baseEdbInfoMapping.EdbInfoId {
|
|
|
+ findDataList = append(findDataList, findDataValue)
|
|
|
+ yDataMap[baseEdbInfoMapping.EdbInfoId] = findDataValue
|
|
|
+ if isFind {
|
|
|
+ maxDate = realDateTime
|
|
|
+ } else {
|
|
|
+ noDataIdList = append(noDataIdList, baseEdbInfoMapping.EdbInfoId)
|
|
|
+ noDataIdMap[baseEdbInfoMapping.EdbInfoId] = baseEdbInfoMapping.EdbInfoId
|
|
|
+ }
|
|
|
+ xEdbInfoIdList = append(xEdbInfoIdList, v.EdbInfoId)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ findDataValueTmp, isFindTmp := baseEdbDataMap[v.EdbInfoId][realDateTime.Format(utils.FormatDate)]
|
|
|
+ findDataList = append(findDataList, findDataValueTmp)
|
|
|
+ yDataMap[v.EdbInfoId] = findDataValueTmp
|
|
|
+ if !isFindTmp {
|
|
|
+ noDataIdList = append(noDataIdList, v.EdbInfoId)
|
|
|
+ noDataIdMap[v.EdbInfoId] = v.EdbInfoId
|
|
|
+ }
|
|
|
+ xEdbInfoIdList = append(xEdbInfoIdList, v.EdbInfoId)
|
|
|
}
|
|
|
//currMonth := findDateTime.Month() // 当前月份
|
|
|
//currYear := findDateTime.Year() // 当前年份
|
|
@@ -463,7 +555,6 @@ func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMap
|
|
|
currMonth := realDateTime.Month() // 当前月份
|
|
|
currYear := realDateTime.Year() // 当前年份
|
|
|
|
|
|
- xEdbInfoIdList = append(xEdbInfoIdList, edbInfoMapping.EdbInfoId)
|
|
|
mList := make([]int, 0) // 间隔月份
|
|
|
indexList := make([]int, 0)
|
|
|
if regionType == `国内` {
|
|
@@ -501,7 +592,7 @@ func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMap
|
|
|
//}
|
|
|
//tmpRealDateTime := findDateTime // 按照配置找到的日期
|
|
|
tmpRealDateTime := realDateTime // 实际现货的日期
|
|
|
- tmpFindDataValue, tmpIsFind := futureGoodEdbDataMap[futureGoodMapping.FutureGoodEdbInfoId][tmpRealDateTime.Format(utils.FormatDate)]
|
|
|
+ tmpFindDataValue, tmpIsFind := edbDataMap[futureGoodMapping.FutureGoodEdbInfoId][tmpRealDateTime.Format(utils.FormatDate)]
|
|
|
yDataMap[futureGoodMapping.FutureGoodEdbInfoId] = tmpFindDataValue
|
|
|
|
|
|
findDataList = append(findDataList, tmpFindDataValue)
|
|
@@ -583,10 +674,9 @@ func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMap
|
|
|
}
|
|
|
|
|
|
// handleResultData 处理成最终的结果数据
|
|
|
-func handleResultData(regionType string, futureGoodEdbType int, yDataList []data_manage.YData, futureGoodEdbInfoList []*future_good2.FutureGoodEdbInfo, maxIndex int) (xDataList []data_manage.XData, newYDataList []data_manage.YData, err error) {
|
|
|
+func handleResultData(regionType string, futureGoodEdbType, baseEdbLen int, yDataList []data_manage.YData, futureGoodEdbInfoList []*future_good2.FutureGoodEdbInfo, maxIndex int) (xDataList []data_manage.XData, newYDataList []data_manage.YData, err error) {
|
|
|
xDataList = make([]data_manage.XData, 0)
|
|
|
newYDataList = yDataList
|
|
|
-
|
|
|
if regionType == `国内` {
|
|
|
for i := 1; i < 12; i++ {
|
|
|
if i > maxIndex {
|
|
@@ -620,11 +710,11 @@ func handleResultData(regionType string, futureGoodEdbType int, yDataList []data
|
|
|
tmpNList := nList
|
|
|
|
|
|
//当前的主力合约
|
|
|
- newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, yData.XEdbInfoIdList[0])
|
|
|
- newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[0])
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, yData.XEdbInfoIdList[0:baseEdbLen]...)
|
|
|
+ newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[0:baseEdbLen]...)
|
|
|
|
|
|
- xEdbInfoIdList := yData.XEdbInfoIdList[1:]
|
|
|
- valIndex := 1
|
|
|
+ xEdbInfoIdList := yData.XEdbInfoIdList[baseEdbLen:]
|
|
|
+ valIndex := baseEdbLen
|
|
|
needNum := 0
|
|
|
for _, n := range tmpNList {
|
|
|
if len(xEdbInfoIdList) > 0 {
|
|
@@ -696,8 +786,8 @@ func handleResultData(regionType string, futureGoodEdbType int, yDataList []data
|
|
|
currYear := findDateTime.Year() // 当前年份
|
|
|
//v.XEdbInfoIdList
|
|
|
for edbInfoIndex, edbInfoId := range v.XEdbInfoIdList {
|
|
|
- // 第一个不处理
|
|
|
- if edbInfoIndex == 0 {
|
|
|
+ // 现货指标不处理
|
|
|
+ if edbInfoIndex <= baseEdbLen-1 {
|
|
|
continue
|
|
|
}
|
|
|
|
|
@@ -736,12 +826,12 @@ func handleResultData(regionType string, futureGoodEdbType int, yDataList []data
|
|
|
tmpNList := nList
|
|
|
|
|
|
//当前的主力合约
|
|
|
- newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, yData.XEdbInfoIdList[0])
|
|
|
- newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[0])
|
|
|
+ newYDataList[yIndex].XEdbInfoIdList = append(newYDataList[yIndex].XEdbInfoIdList, yData.XEdbInfoIdList[0:baseEdbLen]...)
|
|
|
+ newYDataList[yIndex].Value = append(newYDataList[yIndex].Value, yData.Value[0:baseEdbLen]...)
|
|
|
|
|
|
- xEdbInfoIdList := yData.XEdbInfoIdList[1:]
|
|
|
+ xEdbInfoIdList := yData.XEdbInfoIdList[baseEdbLen:]
|
|
|
currDataTime := yData.ConfigDate
|
|
|
- valIndex := 1
|
|
|
+ valIndex := baseEdbLen
|
|
|
needNum := 0
|
|
|
for _, n := range tmpNList {
|
|
|
if len(xEdbInfoIdList) > 0 {
|
|
@@ -947,11 +1037,15 @@ func FutureGoodChartInfoRefresh(chartInfoId int) (err error) {
|
|
|
}
|
|
|
}()
|
|
|
|
|
|
- edbInfoMapping, err := data_manage.GetEtaEdbChartEdbMapping(chartInfoId)
|
|
|
+ edbInfoMappingList, err := data_manage.GetEtaEdbChartEdbMappingList(chartInfoId)
|
|
|
if err != nil {
|
|
|
errMsg = "获取需要刷新的ETA指标失败:Err:" + err.Error()
|
|
|
return
|
|
|
}
|
|
|
+ edbInfoIds := make([]int, 0)
|
|
|
+ for _, edbInfoMapping := range edbInfoMappingList {
|
|
|
+ edbInfoIds = append(edbInfoIds, edbInfoMapping.EdbInfoId)
|
|
|
+ }
|
|
|
// 获取期货指标
|
|
|
futureGoodEdbInfoMapping, err := data_manage.GetFutureGoodEdbChartEdbMapping(chartInfoId)
|
|
|
if err != nil {
|
|
@@ -966,7 +1060,7 @@ func FutureGoodChartInfoRefresh(chartInfoId int) (err error) {
|
|
|
}
|
|
|
|
|
|
// 批量刷新ETA指标
|
|
|
- err, _ = data.EdbInfoRefreshAllFromBaseV3([]int{edbInfoMapping.EdbInfoId}, false, true, false)
|
|
|
+ err, _ = data.EdbInfoRefreshAllFromBaseV3(edbInfoIds, false, true, false)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|