Browse Source

fix:滚动相关性图表数据返回调整

Roc 1 year ago
parent
commit
b900458cd7
2 changed files with 73 additions and 17 deletions
  1. 1 6
      controllers/chart_common.go
  2. 72 11
      services/data/correlation/chart_info.go

+ 1 - 6
controllers/chart_common.go

@@ -566,7 +566,6 @@ func GetCorrelationChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, ke
 
 	var dataResp interface{} // 绘图数据返回(目前是滚动相关性的图)
 	var xEdbIdValue []int
-	var xDateTimeValue []string
 	var yDataList []models.YData
 	switch chartInfo.Source {
 	case utils.CHART_SOURCE_CORRELATION: // 相关性图
@@ -587,11 +586,7 @@ func GetCorrelationChartInfoDetailFromUniqueCode(chartInfo *models.ChartInfo, ke
 		}
 	case utils.CHART_SOURCE_ROLLING_CORRELATION: // 滚动相关性图
 		startDate, endDate := utils.GetDateByDateType(correlationChart.DateType, correlationChart.StartDate.Format(utils.FormatDate), correlationChart.EndDate.Format(utils.FormatDate))
-		xDateTimeValue, yDataList, e = correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.CalculateValue, correlationChart.CalculateUnit, startDate, endDate)
-		dataResp = models.RollingCorrelationChartDataResp{
-			XDateTimeValue: xDateTimeValue,
-			YDataList:      yDataList,
-		}
+		dataResp, e = correlationServ.GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB, correlationChart.LeadValue, correlationChart.LeadUnit, correlationChart.CalculateValue, correlationChart.CalculateUnit, startDate, endDate, chartInfo.ChartName, chartInfo.ChartNameEn)
 	}
 
 	// 完善指标信息

+ 72 - 11
services/data/correlation/chart_info.go

@@ -372,10 +372,40 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *models.ChartEdbInfo
 	return
 }
 
+type RollingCorrelationChartDataResp struct {
+	MaxData             float64
+	MinData             float64
+	LatestDate          string `description:"真实数据的最后日期"`
+	EdbInfoCategoryType int
+	ChartColor          string
+	ChartStyle          string
+	PredictChartColor   string
+	ChartType           int
+	ChartWidth          int
+	EdbName             string
+	EdbNameEn           string
+	Unit                string
+	UnitEn              string
+	IsAxis              int
+	DataList            []models.EdbDataList
+}
+
 // GetRollingCorrelationChartDataByEdbInfo 滚动相关性计算
-func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *models.ChartEdbInfoMapping, leadValue int, leadUnit string, calculateValue int, calculateUnit string, startDate, endDate string) (xDateTimeValue []string, yDataList []models.YData, err error) {
-	xDateTimeValue = make([]string, 0)
-	yData := make([]float64, 0)
+func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *models.ChartEdbInfoMapping, leadValue int, leadUnit string, calculateValue int, calculateUnit string, startDate, endDate, chartName, chartNameEn string) (dataResp RollingCorrelationChartDataResp, err error) {
+	dataResp = RollingCorrelationChartDataResp{
+		DataList:          make([]models.EdbDataList, 0),
+		MaxData:           0,
+		MinData:           0,
+		ChartColor:        "#00f",
+		ChartStyle:        `spline`,
+		PredictChartColor: `#00f`,
+		ChartType:         0,
+		ChartWidth:        3,
+		EdbName:           chartName,
+		EdbNameEn:         chartNameEn,
+		IsAxis:            1,
+	}
+	dataList := make([]models.EdbDataList, 0)
 
 	// 计算窗口,不包含第一天
 	startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
@@ -450,6 +480,8 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *m
 		endDateTime, _ := time.ParseInLocation(utils.FormatDate, endDate, time.Local)
 		endDateTime = endDateTime.AddDate(0, 0, -(calculateDay - 1))
 
+		// 是否开始第一条数据
+		var isStart, isNotFirst bool
 		for currDay := startDateTime; !currDay.After(endDateTime); currDay = currDay.AddDate(0, 0, 1) {
 			yCalculateData := make([]float64, 0)
 			baseCalculateData := make([]float64, 0)
@@ -472,17 +504,46 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *m
 			var ratio float64
 			if len(baseCalculateData) > 0 {
 				ratio = utils.CalculateCorrelationByIntArr(baseCalculateData, yCalculateData)
+			} else {
+				// 没有数据的话,那就不返回
+				continue
+			}
+
+			// 过滤前面都是0的数据
+			{
+				if ratio != 0 {
+					isStart = true
+				}
+
+				if !isStart {
+					continue
+				}
+			}
+
+			dataTime := currDay.AddDate(0, 0, calculateDay-1)
+			dataList = append(dataList, models.EdbDataList{
+				//EdbDataId:     0,
+				EdbInfoId:     0,
+				DataTime:      dataTime.Format(utils.FormatDate),
+				DataTimestamp: dataTime.UnixNano() / 1e6,
+				Value:         ratio,
+			})
+
+			if !isNotFirst {
+				dataResp.MinData = ratio
+				dataResp.MaxData = ratio
+				isNotFirst = true
+			}
+			if dataResp.MinData > ratio {
+				dataResp.MinData = ratio
+			}
+			if dataResp.MaxData < ratio {
+				dataResp.MaxData = ratio
 			}
-			yData = append(yData, ratio)
-			xDateTimeValue = append(xDateTimeValue, currDay.AddDate(0, 0, calculateDay-1).Format(utils.FormatDate))
 		}
+
+		dataResp.DataList = dataList
 	}
 
-	yDataList = make([]models.YData, 0)
-	yDate := "0000-00-00"
-	yDataList = append(yDataList, models.YData{
-		Date:  yDate,
-		Value: yData,
-	})
 	return
 }