|
@@ -15,42 +15,46 @@ import (
|
|
|
)
|
|
|
|
|
|
|
|
|
-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)
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- 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: "现货价",
|
|
|
- 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)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -132,30 +158,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 +192,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 +218,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 +263,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
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+ 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 {
|
|
|
+
|
|
|
+ return*/
|
|
|
+ continue
|
|
|
+ }
|
|
|
for _, tmpData := range tmpDataList {
|
|
|
dataList = append(dataList, &data_manage.EdbDataList{
|
|
|
EdbDataId: tmpData.FutureGoodEdbDataId,
|
|
@@ -259,14 +315,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,
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -296,14 +358,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 +389,8 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
|
|
|
for i := lenEdbId - 1; i >= 0; i-- {
|
|
|
|
|
|
- if _, ok := noDataEdbIdMap[edbInfoIdList[i]]; !ok {
|
|
|
-
|
|
|
+ if _, ok := noDataEdbIdMap[edbInfoIdList[i]]; !ok || utils.InArrayByInt(baseEdbIds, edbInfoIdList[i]) {
|
|
|
+
|
|
|
if maxIndex < i-1 {
|
|
|
maxIndex = i - 1
|
|
|
}
|
|
@@ -362,22 +425,44 @@ 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
|
|
|
}
|
|
|
|
|
|
|
|
|
-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) {
|
|
|
|
|
|
+
|
|
|
+ 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 _, ok1 := edbInfoMappingMap[edbInfoId]; ok1 {
|
|
|
+ edbDateData := make(map[string]float64)
|
|
|
+ for _, edbData := range edbDataList {
|
|
|
+ edbDateData[edbData.DataTime] = edbData.Value
|
|
|
+ }
|
|
|
+ baseEdbDataMap[edbInfoId] = edbDateData
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
edbDataMap := make(map[int]map[string]float64)
|
|
|
for edbInfoId, edbDataList := range edbDataListMap {
|
|
|
+ if _, ok := edbInfoMappingMap[edbInfoId]; ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
edbDateData := make(map[string]float64)
|
|
|
for _, edbData := range edbDataList {
|
|
|
edbDateData[edbData.DataTime] = edbData.Value
|
|
@@ -387,7 +472,10 @@ func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMap
|
|
|
|
|
|
|
|
|
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)
|
|
|
}
|
|
@@ -428,23 +516,43 @@ func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMap
|
|
|
noDataIdMap := make(map[int]int, 0)
|
|
|
xEdbInfoIdList := make([]int, 0)
|
|
|
|
|
|
-
|
|
|
- realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[edbInfoMapping.EdbInfoId], edbDataMap[edbInfoMapping.EdbInfoId])
|
|
|
+
|
|
|
+ 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()
|
|
|
- xEdbInfoIdList = append(xEdbInfoIdList, edbInfoMapping.EdbInfoId)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ currMonth := realDateTime.Month()
|
|
|
+ currYear := realDateTime.Year()
|
|
|
+
|
|
|
mList := make([]int, 0)
|
|
|
indexList := make([]int, 0)
|
|
|
if regionType == `国内` {
|
|
@@ -564,10 +672,9 @@ func BarChartData(edbInfoMapping *data_manage.ChartEdbInfoMapping, futureGoodMap
|
|
|
}
|
|
|
|
|
|
|
|
|
-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 {
|
|
@@ -601,11 +708,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 {
|
|
@@ -677,8 +784,8 @@ func handleResultData(regionType string, futureGoodEdbType int, yDataList []data
|
|
|
currYear := findDateTime.Year()
|
|
|
|
|
|
for edbInfoIndex, edbInfoId := range v.XEdbInfoIdList {
|
|
|
-
|
|
|
- if edbInfoIndex == 0 {
|
|
|
+
|
|
|
+ if edbInfoIndex <= baseEdbLen-1 {
|
|
|
continue
|
|
|
}
|
|
|
|
|
@@ -717,12 +824,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 {
|
|
@@ -860,7 +967,7 @@ func getFutureGoodEdbInfoList(latestDateTime time.Time, tmpFutureGoodEdbInfoList
|
|
|
}
|
|
|
|
|
|
|
|
|
-func GetNeedDateData(needDateTime time.Time, dataList []*data_manage.EdbDataList, edbDataMap map[string]float64) (findDateTime time.Time, findDataValue float64, isFind bool, err error) {
|
|
|
+func GetNeedDateData(needDateTime time.Time, dataList []*data_manage.EdbDataList, edbDataMap map[string]float64, allEdbDataMap map[int]map[string]float64) (findDateTime time.Time, findDataValue float64, isFind bool, err error) {
|
|
|
|
|
|
if len(dataList) <= 0 {
|
|
|
|
|
@@ -873,18 +980,43 @@ func GetNeedDateData(needDateTime time.Time, dataList []*data_manage.EdbDataList
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ maxCount := 1
|
|
|
+
|
|
|
for tmpDateTime := needDateTime; tmpDateTime.After(minDateTime) || tmpDateTime.Equal(minDateTime); tmpDateTime = tmpDateTime.AddDate(0, 0, -1) {
|
|
|
tmpDate := tmpDateTime.Format(utils.FormatDate)
|
|
|
- if tmpValue, ok := edbDataMap[tmpDate]; ok {
|
|
|
-
|
|
|
- if tmpValue == 0 {
|
|
|
- return
|
|
|
+ tmpValue, ok := edbDataMap[tmpDate]
|
|
|
+ if !ok {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ count := 0
|
|
|
+
|
|
|
+ for _, currEdbDataMap := range allEdbDataMap {
|
|
|
+ _, tmpIsFind := currEdbDataMap[tmpDate]
|
|
|
+ if tmpIsFind {
|
|
|
+ count++
|
|
|
+ if count >= maxCount {
|
|
|
+ continue
|
|
|
+ }
|
|
|
}
|
|
|
- findDateTime, _ = time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
- findDataValue = tmpValue
|
|
|
- isFind = true
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if count < maxCount {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if tmpValue == 0 {
|
|
|
return
|
|
|
}
|
|
|
+ findDateTime, _ = time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
+ findDataValue = tmpValue
|
|
|
+ isFind = true
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
return
|
|
@@ -903,11 +1035,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 {
|
|
@@ -922,7 +1058,7 @@ func FutureGoodChartInfoRefresh(chartInfoId int) (err error) {
|
|
|
}
|
|
|
|
|
|
|
|
|
- err, _ = data.EdbInfoRefreshAllFromBaseV3([]int{edbInfoMapping.EdbInfoId}, false, true, false)
|
|
|
+ err, _ = data.EdbInfoRefreshAllFromBaseV3(edbInfoIds, false, true, false)
|
|
|
if err != nil {
|
|
|
return
|
|
|
}
|