Преглед изворни кода

fix:商品价格曲线调整

Roc пре 2 година
родитељ
комит
a10cceb1e8

+ 2 - 1
controller/chart/chart_common.go

@@ -140,7 +140,7 @@ func getFutureGoodChartInfoDetail(chartInfo *chartInfoModel.ChartInfoView, myCha
 	barChartInfoSort = barConfig.Sort
 
 	// 获取图表中的指标数据
-	barConfigEdbInfoIdList, edbList, xEdbIdValue, yDataList, sourceArr, err := future_goodServ.GetChartEdbData(chartInfoId, startDate, endDate, edbInfoMapping, futureGoodEdbInfoMapping, barChartInfoDateList, barChartInfoSort)
+	barConfigEdbInfoIdList, edbList, xEdbIdValue, xDataList, yDataList, sourceArr, err := future_goodServ.GetChartEdbData(chartInfoId, startDate, endDate, edbInfoMapping, futureGoodEdbInfoMapping, barChartInfoDateList, barChartInfoSort)
 	if err != nil {
 		msg = "获取失败"
 		errMsg = "获取图表,指标信息失败,Err:" + err.Error()
@@ -207,6 +207,7 @@ func getFutureGoodChartInfoDetail(chartInfo *chartInfoModel.ChartInfoView, myCha
 	resp.ChartInfo = chartInfo
 	resp.EdbInfoList = edbList
 	resp.XEdbIdValue = xEdbIdValue
+	resp.XDataList = xDataList
 	resp.YDataList = yDataList
 
 	isOk = true

+ 7 - 0
models/response/chart_info/chart_info.go

@@ -10,10 +10,17 @@ type ChartInfoDetailResp struct {
 	ChartInfo   *chart_info.ChartInfoView
 	EdbInfoList []*chart_edb_mapping.ChartEdbInfoMappingList
 	XEdbIdValue []int   `description:"柱方图的x轴数据,指标id"`
+	XDataList   []XData `description:"商品价格曲线的X轴数据"`
 	YDataList   []YData `description:"柱方图的y轴数据"`
 	MyChartInfo *responseModel.MyChartItem
 }
 
+// XData 商品价格曲线的的x轴数据
+type XData struct {
+	Name   string `description:"别名"`
+	NameEn string `description:"英文别名"`
+}
+
 // YData 柱方图的y轴数据
 type YData struct {
 	Date          string    `description:"数据日期"`

+ 8 - 0
models/tables/future_good_edb_info/query.go

@@ -9,3 +9,11 @@ func GetFutureGoodEdbInfoListByParentId(parentId int) (list []*FutureGoodEdbInfo
 
 	return
 }
+
+// GetFutureGoodEdbInfoByCode 根据期货code获取 期货指标信息
+func GetFutureGoodEdbInfoByCode(futureGoodEdbCode string) (item *FutureGoodEdbInfo, err error) {
+	sql := `SELECT * FROM future_good_edb_info WHERE future_good_edb_code = ?  ORDER BY future_good_edb_info_id ASC `
+	err = global.MYSQL["data"].Raw(sql, futureGoodEdbCode).First(&item).Error
+
+	return
+}

+ 134 - 232
services/chart/future_good/chart_info.go

@@ -13,13 +13,12 @@ import (
 	"hongze/hongze_yb/services/alarm_msg"
 	"hongze/hongze_yb/services/chart"
 	"hongze/hongze_yb/utils"
-	"sort"
 	"strconv"
 	"time"
 )
 
 // GetChartEdbData 获取图表的指标数据
-func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping, futureGoodEdbInfoMapping *chartEdbMappingModel.ChartEdbInfoMappingList, barChartInfoDateList []request.BarChartInfoDateReq, barChartInfoSort request.BarChartInfoSortReq) (barConfigEdbInfoIdList []request.BarChartInfoEdbItemReq, edbList []*chartEdbMappingModel.ChartEdbInfoMappingList, xEdbIdValue []int, yDataList []chart_info.YData, sourceArr []string, err error) {
+func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping, futureGoodEdbInfoMapping *chartEdbMappingModel.ChartEdbInfoMappingList, barChartInfoDateList []request.BarChartInfoDateReq, barChartInfoSort request.BarChartInfoSortReq) (barConfigEdbInfoIdList []request.BarChartInfoEdbItemReq, edbList []*chartEdbMappingModel.ChartEdbInfoMappingList, xEdbIdValue []int, xDataList []chart_info.XData, yDataList []chart_info.YData, sourceArr []string, err error) {
 	edbList = make([]*chartEdbMappingModel.ChartEdbInfoMappingList, 0)
 
 	sourceArr = make([]string, 0)
@@ -96,7 +95,6 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
 		}
 	}
 
-	nowMonth := time.Now().Month()
 	// 获取期货指标以及期货数据
 	futureGoodEdbInfoList, err := future_good_edb_info.GetFutureGoodEdbInfoListByParentId(futureGoodEdbInfoMapping.EdbInfoId)
 	if err != nil {
@@ -104,18 +102,7 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
 	}
 
 	futureGoodMappingList := make([]*chartEdbMappingModel.ChartEdbInfoMappingList, 0)
-	//当前月份之后的月
-	nextFutureGoodEdbInfoList := make([]*future_good_edb_info.FutureGoodEdbInfo, 0)
 	for k, v := range futureGoodEdbInfoList {
-		// 过滤当前月
-		if int(v.Month) == int(nowMonth) {
-			continue
-		}
-
-		if int(v.Month) < int(nowMonth) {
-			nextFutureGoodEdbInfoList = append(nextFutureGoodEdbInfoList, v)
-			continue
-		}
 		newMappingInfo := &chartEdbMappingModel.ChartEdbInfoMappingList{
 			ChartEdbInfoMapping: chartEdbMappingModel.ChartEdbInfoMapping{
 				EdbInfoId:           int(v.FutureGoodEdbInfoID),
@@ -168,59 +155,6 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
 		})
 	}
 
-	//当前月份之前的月
-	for k, v := range nextFutureGoodEdbInfoList {
-		newMappingInfo := &chartEdbMappingModel.ChartEdbInfoMappingList{
-			ChartEdbInfoMapping: chartEdbMappingModel.ChartEdbInfoMapping{
-				EdbInfoId:           int(v.FutureGoodEdbInfoID),
-				SourceName:          v.Exchange,
-				Source:              utils.CHART_SOURCE_FUTURE_GOOD,
-				EdbCode:             v.FutureGoodEdbCode,
-				EdbName:             v.FutureGoodEdbName,
-				EdbAliasName:        v.FutureGoodEdbName,
-				EdbNameEn:           v.FutureGoodEdbNameEn,
-				EdbType:             edbInfoMapping.EdbType,
-				Frequency:           edbInfoMapping.Frequency,
-				FrequencyEn:         edbInfoMapping.FrequencyEn,
-				Unit:                edbInfoMapping.Unit,
-				UnitEn:              edbInfoMapping.UnitEn,
-				StartDate:           v.StartDate.Format(utils.FormatDateTime),
-				EndDate:             v.EndDate.Format(utils.FormatDateTime),
-				ModifyTime:          v.ModifyTime.Format(utils.FormatDateTime),
-				ChartEdbMappingId:   int(v.FutureGoodEdbInfoID),
-				ChartInfoId:         edbInfoMapping.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,
-				LatestDate:          v.LatestDate,
-				LatestValue:         v.LatestValue,
-				UniqueCode:          futureGoodEdbInfoMapping.UniqueCode + "1" + strconv.Itoa(k),
-				MinValue:            v.MinValue,
-				MaxValue:            v.MaxValue,
-			},
-			DataList:   nil,
-			IsNullData: false,
-		}
-		futureGoodMappingList = append(futureGoodMappingList, newMappingInfo)
-
-		barConfigEdbInfoIdList = append(barConfigEdbInfoIdList, request.BarChartInfoEdbItemReq{
-			EdbInfoId: newMappingInfo.EdbInfoId,
-			Name:      fmt.Sprint("M+", v.Month),
-			NameEn:    fmt.Sprint("M+", v.Month),
-			Source:    newMappingInfo.Source,
-		})
-	}
 	// 获取数据
 	for _, v := range futureGoodMappingList {
 		dataList := make([]*edbDataModel.EdbDataList, 0)
@@ -243,12 +177,27 @@ func GetChartEdbData(chartInfoId int, startDate, endDate string, edbInfoMapping,
 	}
 
 	edbList = append(edbList, futureGoodMappingList...)
-	xEdbIdValue, yDataList, err = BarChartData(edbList, edbDataListMap, barChartInfoDateList, barChartInfoSort)
+	xEdbIdValue, yDataList, err = BarChartData(edbList[0], futureGoodMappingList, edbDataListMap, barChartInfoDateList, barChartInfoSort)
+
+	xDataList = []chart_info.XData{
+		{
+			Name:   "现货价",
+			NameEn: "Spot Price",
+		},
+	}
+
+	for i := 1; i <= 11; i++ {
+		xDataList = append(xDataList, chart_info.XData{
+			Name:   fmt.Sprint("M+", i),
+			NameEn: fmt.Sprint("M+", i),
+		})
+	}
+
 	return
 }
 
 // BarChartData 柱方图的数据处理
-func BarChartData(mappingList []*chartEdbMappingModel.ChartEdbInfoMappingList, edbDataListMap map[int][]*edbDataModel.EdbDataList, barChartInfoDateList []request.BarChartInfoDateReq, barChartInfoSort request.BarChartInfoSortReq) (edbIdList []int, yDataList []chart_info.YData, err error) {
+func BarChartData(edbInfoMapping *chartEdbMappingModel.ChartEdbInfoMappingList, futureGoodMappingList []*chartEdbMappingModel.ChartEdbInfoMappingList, edbDataListMap map[int][]*edbDataModel.EdbDataList, barChartInfoDateList []request.BarChartInfoDateReq, barChartInfoSort request.BarChartInfoSortReq) (edbIdList []int, yDataList []chart_info.YData, err error) {
 	// 指标数据数组(10086:{"2022-12-02":100.01,"2022-12-01":102.3})
 	edbDataMap := make(map[int]map[string]float64)
 	for edbInfoId, edbDataList := range edbDataListMap {
@@ -261,190 +210,116 @@ func BarChartData(mappingList []*chartEdbMappingModel.ChartEdbInfoMappingList, e
 
 	// edbIdList 指标展示顺序;x轴的指标顺序
 	edbIdList = make([]int, 0)
-	//Sort int    `description:"排序类型,0:默认,1:升序,2:降序"`
-	dateData := make(map[int]float64)
+	edbIdList = append(edbIdList, edbInfoMapping.EdbInfoId)
 	if barChartInfoSort.Sort == 0 {
-		for _, v := range mappingList {
+		for _, v := range futureGoodMappingList {
 			edbIdList = append(edbIdList, v.EdbInfoId)
 		}
-	} else {
-		lenBarChartInfoDateList := len(barChartInfoDateList)
-		if barChartInfoSort.DateIndex >= lenBarChartInfoDateList {
-			err = errors.New("排序日期异常")
-			return
-		}
-
-		notDataEdbIdList := make([]int, 0) //没有数据的指标id
-		// 日期配置
-		barChartInfoDate := barChartInfoDateList[barChartInfoSort.DateIndex]
-		for edbInfoId, dataList := range edbDataListMap {
-			if len(dataList) <= 0 {
-				// 没有数据的指标id
-				notDataEdbIdList = append(notDataEdbIdList, edbInfoId)
-				continue
-			}
-			findDate := barChartInfoDate.Date
-			switch barChartInfoDate.Type {
-			case 1: //最新值
-				findDate = dataList[len(dataList)-1].DataTime
-			case 2: //近期几天
-				findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[len(dataList)-1].DataTime, time.Local)
-				if tmpErr != nil {
-					err = tmpErr
-					return
-				}
-				findDateTime = findDateTime.AddDate(0, 0, -barChartInfoDate.Value)
-
-				lenData := len(dataList) - 1
-
-				for i := lenData; i >= 0; i-- {
-					currDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[i].DataTime, time.Local)
-					if tmpErr != nil {
-						err = tmpErr
-						return
-					}
-					if currDateTime.Equal(findDateTime) || currDateTime.Before(findDateTime) {
-						findDate = dataList[i].DataTime
-						break
-					}
-				}
-			case 3: // 固定日期
-				//最早的日期
-				minDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
-				if tmpErr != nil {
-					err = tmpErr
-					return
-				}
-				//寻找固定日期的数据
-				findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, barChartInfoDate.Date, time.Local)
-				if tmpErr != nil {
-					err = tmpErr
-					return
-				}
-				for tmpDateTime := findDateTime; tmpDateTime.After(minDateTime) || tmpDateTime.Equal(minDateTime); tmpDateTime = tmpDateTime.AddDate(0, 0, -1) {
-					tmpDate := tmpDateTime.Format(utils.FormatDate)
-					if _, ok := edbDataMap[edbInfoId][tmpDate]; ok { //如果能找到数据,那么就返回
-						findDate = tmpDate
-						break
-					}
-				}
-			default:
-				err = errors.New(fmt.Sprint("日期类型异常,Type:", barChartInfoDate.Type))
-				return
-			}
-			if tmpValue, ok := edbDataMap[edbInfoId][findDate]; ok {
-				dateData[edbInfoId] = tmpValue
-			} else {
-				// 没有数据的指标id
-				notDataEdbIdList = append(notDataEdbIdList, edbInfoId)
-			}
-		}
+	}
 
-		//Sort int    `description:"排序类型,0:默认,1:升序,2:降序"`
-		// 排序
-		dateDataSort := utils.NewMapSorter(dateData)
-		sort.Sort(dateDataSort)
-		if barChartInfoSort.Sort == 1 {
-			// 先将没有数据的指标id放在最前面
-			if len(notDataEdbIdList) > 0 {
-				edbIdList = append(edbIdList, notDataEdbIdList...)
-			}
-			for _, v := range dateDataSort {
-				edbIdList = append(edbIdList, v.Key)
-			}
-		} else {
-			for i := len(dateDataSort) - 1; i >= 0; i-- {
-				edbIdList = append(edbIdList, dateDataSort[i].Key)
-			}
-			// 再将没有数据的指标id放在最后面
-			if len(notDataEdbIdList) > 0 {
-				edbIdList = append(edbIdList, notDataEdbIdList...)
-			}
-		}
+	//固定取螺纹期货主力合约的时间序列,最新值为该合约最新日期、N天前为该合约最新日期N天前
+	rbzlInfo, err := future_good_edb_info.GetFutureGoodEdbInfoByCode("RBZL.SHF")
+	if err != nil {
+		return
+	}
+	// 最新日期是这个
+	if rbzlInfo.EndDate.IsZero() {
+		err = errors.New("日期异常")
+		return
 	}
+	latestDateTime := rbzlInfo.EndDate
 
 	yDataList = make([]chart_info.YData, 0) //y轴的数据列表
 
 	for _, barChartInfoDate := range barChartInfoDateList {
 		var maxDate time.Time
 
+		var findDateTime time.Time
+		switch barChartInfoDate.Type {
+		case 1: //最新值
+			findDateTime = latestDateTime
+		case 2: //近期几天
+			findDateTime = latestDateTime.AddDate(0, 0, -barChartInfoDate.Value)
+		case 3: // 固定日期
+			//寻找固定日期的数据
+			tmpFindDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, barChartInfoDate.Date, time.Local)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			findDateTime = tmpFindDateTime
+		default:
+			err = errors.New(fmt.Sprint("日期类型异常,Type:", barChartInfoDate.Type))
+			return
+		}
+		if findDateTime.IsZero() {
+			err = errors.New("错误的日期")
+			return
+		}
+
 		findDataList := make([]float64, 0)  // 当前日期的数据值
 		noDataIdList := make([]int, 0)      // 没有数据的指标id
 		noDataIdMap := make(map[int]int, 0) // 没有数据的指标map
-		for _, edbInfoId := range edbIdList {
-			findDate := barChartInfoDate.Date     //需要的日期值
-			dataList := edbDataListMap[edbInfoId] //指标的所有数据值
-			if len(dataList) <= 0 {
-				// 没有数据的指标id
-				findDataList = append(findDataList, 0)
-				noDataIdList = append(noDataIdList, edbInfoId)
-				noDataIdMap[edbInfoId] = edbInfoId
-				continue
+		xEdbInfoIdList := make([]int, 0)    // 当前数据的指标id列表
+
+		// 现货指标
+		realDateTime, findDataValue, isFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[edbInfoMapping.EdbInfoId], edbDataMap[edbInfoMapping.EdbInfoId])
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		findDataList = append(findDataList, findDataValue)
+		if isFind {
+			maxDate = realDateTime
+		} else {
+			noDataIdList = append(noDataIdList, edbInfoMapping.EdbInfoId)
+			noDataIdMap[edbInfoMapping.EdbInfoId] = edbInfoMapping.EdbInfoId
+		}
+		currMonth := findDateTime.Month() // 当前月份
+		xEdbInfoIdList = append(xEdbInfoIdList, edbInfoMapping.EdbInfoId)
+
+		// 当前月的后面月份合约的数据
+		for i := currMonth; i < 12; i++ {
+			futureGoodMapping := futureGoodMappingList[i] // 当前的期货指标
+			tmpRealDateTime, tmpFindDataValue, tmpIsFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[futureGoodMapping.EdbInfoId], edbDataMap[futureGoodMapping.EdbInfoId])
+			if tmpErr != nil {
+				err = tmpErr
+				return
 			}
-			switch barChartInfoDate.Type {
-			case 1: //最新值
-				dataList := edbDataListMap[edbInfoId]
-				findDate = dataList[len(dataList)-1].DataTime
-			case 2: //近期几天
-				findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[len(dataList)-1].DataTime, time.Local)
-				if tmpErr != nil {
-					err = tmpErr
-					return
-				}
-				findDateTime = findDateTime.AddDate(0, 0, -barChartInfoDate.Value)
-
-				lenData := len(dataList) - 1
-				for i := lenData; i >= 0; i-- {
-					currDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[i].DataTime, time.Local)
-					if tmpErr != nil {
-						err = tmpErr
-						return
-					}
-					if currDateTime.Equal(findDateTime) || currDateTime.Before(findDateTime) {
-						findDate = dataList[i].DataTime
-						break
-					}
+			findDataList = append(findDataList, tmpFindDataValue)
+			if tmpIsFind {
+				if maxDate.IsZero() || maxDate.Before(tmpRealDateTime) {
+					maxDate = realDateTime
 				}
-			case 3: // 固定日期
-				//最早的日期
-				minDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
-				if tmpErr != nil {
-					err = tmpErr
-					return
-				}
-				//寻找固定日期的数据
-				findDateTime, tmpErr := time.ParseInLocation(utils.FormatDate, barChartInfoDate.Date, time.Local)
-				if tmpErr != nil {
-					err = tmpErr
-					return
-				}
-				for tmpDateTime := findDateTime; tmpDateTime.After(minDateTime) || tmpDateTime.Equal(minDateTime); tmpDateTime = tmpDateTime.AddDate(0, 0, -1) {
-					tmpDate := tmpDateTime.Format(utils.FormatDate)
-					if _, ok := edbDataMap[edbInfoId][tmpDate]; ok { //如果能找到数据,那么就返回
-						findDate = tmpDate
-						break
-					}
-				}
-			default:
-				err = errors.New(fmt.Sprint("日期类型异常,Type:", barChartInfoDate.Type))
+			} else {
+				noDataIdList = append(noDataIdList, futureGoodMapping.EdbInfoId)
+				noDataIdMap[futureGoodMapping.EdbInfoId] = futureGoodMapping.EdbInfoId
+			}
+			// 当前期货合约的指标
+			xEdbInfoIdList = append(xEdbInfoIdList, futureGoodMapping.EdbInfoId)
+		}
+
+		// 当前月的前面月份合约的数据
+		for i := 1; i < int(currMonth); i++ {
+			futureGoodMapping := futureGoodMappingList[i-1] // 当前的期货指标
+			tmpRealDateTime, tmpFindDataValue, tmpIsFind, tmpErr := GetNeedDateData(findDateTime, edbDataListMap[futureGoodMapping.EdbInfoId], edbDataMap[futureGoodMapping.EdbInfoId])
+			if tmpErr != nil {
+				err = tmpErr
 				return
 			}
-			findDateTime, _ := time.ParseInLocation(utils.FormatDate, findDate, time.Local)
-			if maxDate.IsZero() {
-				maxDate = findDateTime
-			} else {
-				if findDateTime.After(maxDate) {
-					maxDate = findDateTime
+			findDataList = append(findDataList, tmpFindDataValue)
+			if tmpIsFind {
+				if maxDate.IsZero() || maxDate.Before(tmpRealDateTime) {
+					maxDate = realDateTime
 				}
-			}
-			if tmpValue, ok := edbDataMap[edbInfoId][findDate]; ok {
-				findDataList = append(findDataList, tmpValue)
 			} else {
-				findDataList = append(findDataList, 0)
-				noDataIdList = append(noDataIdList, edbInfoId)
-				noDataIdMap[edbInfoId] = edbInfoId
+				noDataIdList = append(noDataIdList, futureGoodMapping.EdbInfoId)
+				noDataIdMap[futureGoodMapping.EdbInfoId] = futureGoodMapping.EdbInfoId
 			}
+			// 当前期货合约的指标
+			xEdbInfoIdList = append(xEdbInfoIdList, futureGoodMapping.EdbInfoId)
 		}
+
 		yName := barChartInfoDate.Name
 		yNameEn := barChartInfoDate.Name
 		if yName == `` {
@@ -468,7 +343,7 @@ func BarChartData(mappingList []*chartEdbMappingModel.ChartEdbInfoMappingList, e
 		// 数据处理,将没有数据的下标,赋值平均值
 		{
 			hasDataIndexList := make([]int, 0)
-			for dataK, edbInfoId := range edbIdList {
+			for dataK, edbInfoId := range xEdbInfoIdList {
 				if _, ok := noDataIdMap[edbInfoId]; !ok { // 如果是没有数据的指标id
 					hasDataIndexList = append(hasDataIndexList, dataK)
 				}
@@ -506,6 +381,33 @@ func BarChartData(mappingList []*chartEdbMappingModel.ChartEdbInfoMappingList, e
 	return
 }
 
+// GetNeedDateData 获取合约内需要的日期数据
+func GetNeedDateData(needDateTime time.Time, dataList []*edbDataModel.EdbDataList, edbDataMap map[string]float64) (findDateTime time.Time, findDataValue float64, isFind bool, err error) {
+	//dataList := edbDataListMap[edbInfoId] //指标的所有数据值
+	if len(dataList) <= 0 {
+		// 没有数据的指标id
+		return
+	}
+
+	//最早的日期
+	minDateTime, err := time.ParseInLocation(utils.FormatDate, dataList[0].DataTime, time.Local)
+	if err != nil {
+		return
+	}
+
+	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 { //如果能找到数据,那么就返回
+			findDateTime, _ = time.ParseInLocation(utils.FormatDate, tmpDate, time.Local)
+			findDataValue = tmpValue
+			isFind = true
+			return
+		}
+	}
+
+	return
+}
+
 // FutureGoodChartInfoRefresh
 // @author Roc
 // @datetime 2023-2-2 18:44:46