|
@@ -321,6 +321,29 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
|
|
|
// BarChartData 柱方图的数据处理
|
|
|
func BarChartData(edbInfoMapping *models.ChartEdbInfoMapping, futureGoodMappingList []*future_good.FutureGoodEdbInfo, edbDataListMap map[int][]*models.EdbDataList, barChartInfoDateList []data_manage.BarChartInfoDateReq, regionType, latestDate string) (edbIdList []int, yDataList []models.YData, err error) {
|
|
|
// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
|
|
|
+ // 现货指标数据map
|
|
|
+ baseEdbDataMap := make(map[string]float64)
|
|
|
+ for edbInfoId, edbDataList := range edbDataListMap {
|
|
|
+ if edbInfoId == edbInfoMapping.EdbInfoId {
|
|
|
+ for _, edbData := range edbDataList {
|
|
|
+ baseEdbDataMap[edbData.DataTime] = edbData.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 期货指标数据map
|
|
|
+ futureGoodEdbDataMap := make(map[int]map[string]float64)
|
|
|
+ for edbInfoId, edbDataList := range edbDataListMap {
|
|
|
+ if edbInfoId == edbInfoMapping.EdbInfoId {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ edbDateData := make(map[string]float64)
|
|
|
+ for _, edbData := range edbDataList {
|
|
|
+ edbDateData[edbData.DataTime] = edbData.Value
|
|
|
+ }
|
|
|
+ futureGoodEdbDataMap[edbInfoId] = edbDateData
|
|
|
+ }
|
|
|
+
|
|
|
edbDataMap := make(map[int]map[string]float64)
|
|
|
for edbInfoId, edbDataList := range edbDataListMap {
|
|
|
edbDateData := make(map[string]float64)
|
|
@@ -374,7 +397,7 @@ func BarChartData(edbInfoMapping *models.ChartEdbInfoMapping, futureGoodMappingL
|
|
|
xEdbInfoIdList := make([]int, 0) // 当前数据的指标id列表
|
|
|
|
|
|
// 现货指标
|
|
|
- realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[edbInfoMapping.EdbInfoId], edbDataMap[edbInfoMapping.EdbInfoId])
|
|
|
+ realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[edbInfoMapping.EdbInfoId], baseEdbDataMap, futureGoodEdbDataMap)
|
|
|
if tmpErr != nil {
|
|
|
err = tmpErr
|
|
|
return
|
|
@@ -387,8 +410,13 @@ func BarChartData(edbInfoMapping *models.ChartEdbInfoMapping, futureGoodMappingL
|
|
|
noDataIdList = append(noDataIdList, edbInfoMapping.EdbInfoId)
|
|
|
noDataIdMap[edbInfoMapping.EdbInfoId] = edbInfoMapping.EdbInfoId
|
|
|
}
|
|
|
- currMonth := findDateTime.Month() // 当前月份
|
|
|
- currYear := findDateTime.Year() // 当前年份
|
|
|
+ //currMonth := findDateTime.Month() // 当前月份
|
|
|
+ //currYear := findDateTime.Year() // 当前年份
|
|
|
+
|
|
|
+ // 用实际日期的月份作为基准,往前推12个月(2024-5-13 16:26:43修改)
|
|
|
+ currMonth := realDateTime.Month() // 当前月份
|
|
|
+ currYear := realDateTime.Year() // 当前年份
|
|
|
+
|
|
|
xEdbInfoIdList = append(xEdbInfoIdList, edbInfoMapping.EdbInfoId)
|
|
|
mList := make([]int, 0) // 间隔月份
|
|
|
indexList := make([]int, 0)
|
|
@@ -427,7 +455,7 @@ func BarChartData(edbInfoMapping *models.ChartEdbInfoMapping, futureGoodMappingL
|
|
|
//}
|
|
|
//tmpRealDateTime := findDateTime // 按照配置找到的日期
|
|
|
tmpRealDateTime := realDateTime // 实际现货的日期
|
|
|
- tmpFindDataValue, tmpIsFind := edbDataMap[futureGoodMapping.FutureGoodEdbInfoId][tmpRealDateTime.Format(utils.FormatDate)]
|
|
|
+ tmpFindDataValue, tmpIsFind := futureGoodEdbDataMap[futureGoodMapping.FutureGoodEdbInfoId][tmpRealDateTime.Format(utils.FormatDate)]
|
|
|
yDataMap[futureGoodMapping.FutureGoodEdbInfoId] = tmpFindDataValue
|
|
|
|
|
|
findDataList = append(findDataList, tmpFindDataValue)
|
|
@@ -509,7 +537,7 @@ func BarChartData(edbInfoMapping *models.ChartEdbInfoMapping, futureGoodMappingL
|
|
|
}
|
|
|
|
|
|
// GetNeedDateData 获取合约内需要的日期数据
|
|
|
-func GetNeedDateData(needDateTime time.Time, dataList []*models.EdbDataList, edbDataMap map[string]float64) (findDateTime time.Time, findDataValue float64, isFind bool, err error) {
|
|
|
+func GetNeedDateData(needDateTime time.Time, dataList []*models.EdbDataList, edbDataMap map[string]float64, allEdbDataMap map[int]map[string]float64) (findDateTime time.Time, findDataValue float64, isFind bool, err error) {
|
|
|
//dataList := edbDataListMap[edbInfoId] //指标的所有数据值
|
|
|
if len(dataList) <= 0 {
|
|
|
// 没有数据的指标id
|
|
@@ -522,18 +550,43 @@ func GetNeedDateData(needDateTime time.Time, dataList []*models.EdbDataList, edb
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ // 该日期存在数据的期货指标的最小数量,目前是现货和期货各1个,总共2个
|
|
|
+ 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 { //如果能找到数据,那么就返回
|
|
|
- // 数据为0,也直接返回,做无值处理
|
|
|
- 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
|
|
|
+ }
|
|
|
+
|
|
|
+ // 该日期存在数据的期货指标数量小于2个,那么要继续往前找
|
|
|
+ if count < maxCount {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果能找到数据,那么就返回
|
|
|
+ // 数据为0,也直接返回,做无值处理
|
|
|
+ if tmpValue == 0 {
|
|
|
return
|
|
|
}
|
|
|
+ findDateTime, _ = time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
|
|
|
+ findDataValue = tmpValue
|
|
|
+ isFind = true
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
return
|