|
@@ -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
|