zwxi hace 7 meses
padre
commit
036bbb6ce0
Se han modificado 2 ficheros con 121 adiciones y 99 borrados
  1. 30 97
      controllers/data_manage/chart_info.go
  2. 91 2
      services/data/chart_info.go

+ 30 - 97
controllers/data_manage/chart_info.go

@@ -16,7 +16,6 @@ import (
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"github.com/shopspring/decimal"
 	"os"
 	"os/exec"
 	"sort"
@@ -1430,106 +1429,42 @@ func (this *ChartInfoController) PreviewChartInfoDetail() {
 		err = json.Unmarshal([]byte(req.MarkersLines), &markerLines)
 		if err != nil {
 			br.Msg = "标识线配置异常"
-			br.ErrMsg = "标识线配置异常"+err.Error()
+			br.ErrMsg = "标识线配置异常" + err.Error()
 			return
 		}
 		for i := range markerLines {
-			if markerLines[i].Calculation == 1 {
-				// 区间均值
-				averge := 0.0
-				for _, v := range edbList {
-					if v.IsAxis == 1{
-						// 计算左轴
-						if chartInfo.ChartType == 2 && markerLines[i].EdbType == 0 {
-							//季节性图结构体不一样
-							quarterDataList := v.DataList.(data_manage.QuarterDataList)
-							for _, quarterData := range quarterDataList[len(quarterDataList) - 1:] {
-								for _, vv := range quarterData.DataList {
-									averge += vv.Value
-								}
-								averge = averge / float64(len(quarterData.DataList))
-								markerLines[i].Value = fmt.Sprintf("%.2f", averge)
-							}
-						} else {
-							dataList := v.DataList.([]*data_manage.EdbDataList)
-							for _, dataItem := range dataList {
-								averge += dataItem.Value
-							}
-							averge = averge / float64(len(dataList))
-
-							markerLines[i].Value = fmt.Sprintf("%.2f", averge)
-						}
+			if markerLines[i].MarkLineType == 1 {
+				// 跟随图表
+				if edbList[0].IsAxis == 1 {
+					value, err := data.MarkerLineCalculate(markerLines[i], edbList[0].DataList, chartInfo)
+					if err != nil {
+						br.Msg = "标识线配置异常"
+						br.ErrMsg = "标识线配置异常" + err.Error()
+						return
 					}
+					markerLines[i].Value = value
 				}
-			} else if markerLines[i].Calculation == 2 {
-				// 区间均值加N倍标准差
-				averge := 0.0
-
-				for _, v := range edbList {
-					if v.IsAxis == 1{
-						// 计算左轴
-						if chartInfo.ChartType == 2 && markerLines[i].EdbType == 0 {
-							//季节性图结构体不一样
-							dataList := make([]float64,0)
-							quarterDataList := v.DataList.(data_manage.QuarterDataList)
-							for _, quarterData := range quarterDataList[len(quarterDataList) - 1:] {
-								for _, vv := range quarterData.DataList {
-									dataList = append(dataList, vv.Value)
-									averge += vv.Value
-								}
-								averge = averge / float64(len(quarterData.DataList))
-								stdev := utils.CalculateStandardDeviation(dataList)
-								stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
-
-								markerLines[i].Value = fmt.Sprintf("%.2f", averge + stdev * float64(markerLines[i].CalculationValue))
-							}
-
-						} else {
-							dataList := v.DataList.([]*data_manage.EdbDataList)
-							floatList := make([]float64,0)
-							for _, dataItem := range dataList {
-								floatList = append(floatList, dataItem.Value)
-								averge += dataItem.Value
-							}
-							averge = averge / float64(len(dataList))
-
-							stdev := utils.CalculateStandardDeviation(floatList)
-							stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
-
-							markerLines[i].Value = fmt.Sprintf("%.2f", averge + stdev * float64(markerLines[i].CalculationValue))
-						}
-					}
+			} else {
+				// 指标计算
+				edbInfo, err := data_manage.GetEdbInfoById(markerLines[i].EdbInfoId)
+				if err != nil {
+					br.Msg = "指标计算标识线获取指标信息异常"
+					br.ErrMsg = "指标计算标识线获取指标信息异常" + err.Error()
+					return
 				}
-			} else if markerLines[i].Calculation == 3 {
-				// 区间个数分位
-				markerLineValue := 0.0
-				for _, v := range edbList {
-					if v.IsAxis == 1 {
-						if chartInfo.ChartType == 2 && markerLines[i].EdbType == 0 {
-							//季节性图结构体不一样
-							dataList := make([]float64,0)
-							quarterDataList := v.DataList.(data_manage.QuarterDataList)
-							for _, quarterData := range quarterDataList[len(quarterDataList) - 1:] {
-								for _, vv := range quarterData.DataList {
-									dataList = append(dataList, vv.Value)
-								}
-
-								markerLineValue = data.PercentileAlgorithm(float64(markerLines[i].CalculationValue), dataList)
-								markerLines[i].Value = fmt.Sprintf("%.2f", markerLineValue)
-							}
-
-						} else {
-							dataList := v.DataList.([]*data_manage.EdbDataList)
-							floatList := make([]float64,0)
-							for _, dataItem := range dataList {
-								floatList = append(floatList, dataItem.Value)
-							}
-
-							markerLineValue = data.PercentileAlgorithm(float64(markerLines[i].CalculationValue), dataList)
-							markerLines[i].Value = fmt.Sprintf("%.2f", markerLineValue)
-						}
-					}
+				dataList, err := data_manage.GetEdbDataList(edbInfo.Source, edbInfo.SubSource, edbInfo.EdbInfoId, markerLines[i].StartDate.Date, markerLines[i].EndDate.Date)
+				if err != nil {
+					br.Msg = "指标计算标识线获取指标数据异常"
+					br.ErrMsg = "指标计算标识线获取指标数据异常" + err.Error()
+					return
 				}
+				value, err := data.MarkerLineCalculate(markerLines[i], dataList, chartInfo)
+				if err != nil {
+					br.Msg = "标识线配置异常"
+					br.ErrMsg = "标识线配置异常" + err.Error()
+					return
+				}
+				markerLines[i].Value = value
 			}
 		}
 
@@ -1543,8 +1478,6 @@ func (this *ChartInfoController) PreviewChartInfoDetail() {
 		chartInfo.MarkersLines = string(markerLineStr)
 	}
 
-
-
 	resp := new(data_manage.ChartInfoDetailResp)
 	resp.ChartInfo = chartInfo
 	resp.EdbInfoList = edbList
@@ -4494,4 +4427,4 @@ func (this *ChartInfoController) PreviewSeasonChartInfo() {
 	br.Success = true
 	br.Msg = "获取成功"
 	br.Data = resp
-}
+}

+ 91 - 2
services/data/chart_info.go

@@ -667,7 +667,7 @@ func getEdbDataMapList(chartInfoId, chartType int, calendar, startDate, endDate
 			if jumpYear == 1 {
 				latestDate = latestDate.AddDate(-1, 0, 0)
 			}
-			latestDateStr := fmt.Sprintf("%d-%s", latestDate.Year(),xStartDate)
+			latestDateStr := fmt.Sprintf("%d-%s", latestDate.Year(), xStartDate)
 			rightAxisDate, err = time.Parse(utils.FormatDate, latestDateStr)
 			if err != nil {
 				return
@@ -3154,7 +3154,7 @@ func getEdbConvertDataMapList(chartInfoId, chartType int, calendar, startDate, e
 				item.DataList = quarterDataList
 			}
 
-		}  else if chartType == 2 && isAxis == 0 {
+		} else if chartType == 2 && isAxis == 0 {
 			// 右轴数据处理,只要最新一年
 			latestDate, tmpErr := time.Parse(utils.FormatDate, v.LatestDate)
 			if tmpErr != nil {
@@ -3605,3 +3605,92 @@ func PercentileAlgorithm(x float64, data []float64) float64 {
 
 	return y
 }
+
+func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{}, chartInfo *data_manage.ChartInfoView) (value string, err error) {
+	if markerLine.Calculation == 1 {
+		// 区间均值
+		averge := 0.0
+		// 计算左轴
+		if chartInfo.ChartType == 2 && markerLine.EdbType == 0 {
+			//季节性图结构体不一样
+			quarterDataList := dataList.(data_manage.QuarterDataList)
+			for _, quarterData := range quarterDataList[len(quarterDataList)-1:] {
+				for _, vv := range quarterData.DataList {
+					averge += vv.Value
+				}
+				averge = averge / float64(len(quarterData.DataList))
+				value = fmt.Sprintf("%.2f", averge)
+			}
+		} else {
+			dataList := dataList.([]*data_manage.EdbDataList)
+			for _, dataItem := range dataList {
+				averge += dataItem.Value
+			}
+			averge = averge / float64(len(dataList))
+
+			value = fmt.Sprintf("%.2f", averge)
+		}
+
+	} else if markerLine.Calculation == 2 {
+		// 区间均值加N倍标准差
+		averge := 0.0
+		// 计算左轴
+		if chartInfo.ChartType == 2 && markerLine.EdbType == 0 {
+			//季节性图结构体不一样
+			faloatList := make([]float64, 0)
+			quarterDataList := dataList.(data_manage.QuarterDataList)
+			for _, quarterData := range quarterDataList[len(quarterDataList)-1:] {
+				for _, vv := range quarterData.DataList {
+					dataList = append(faloatList, vv.Value)
+					averge += vv.Value
+				}
+				averge = averge / float64(len(quarterData.DataList))
+				stdev := utils.CalculateStandardDeviation(faloatList)
+				stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
+
+				value = fmt.Sprintf("%.2f", averge+stdev*float64(markerLine.CalculationValue))
+			}
+
+		} else {
+			dataList := dataList.([]*data_manage.EdbDataList)
+			floatList := make([]float64, 0)
+			for _, dataItem := range dataList {
+				floatList = append(floatList, dataItem.Value)
+				averge += dataItem.Value
+			}
+			averge = averge / float64(len(dataList))
+
+			stdev := utils.CalculateStandardDeviation(floatList)
+			stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
+
+			value = fmt.Sprintf("%.2f", averge+stdev*float64(markerLine.CalculationValue))
+		}
+	} else if markerLine.Calculation == 3 {
+		// 区间个数分位
+		markerLineValue := 0.0
+		if chartInfo.ChartType == 2 && markerLine.EdbType == 0 {
+			//季节性图结构体不一样
+			faloatList := make([]float64, 0)
+			quarterDataList := dataList.(data_manage.QuarterDataList)
+			for _, quarterData := range quarterDataList[len(quarterDataList)-1:] {
+				for _, vv := range quarterData.DataList {
+					faloatList = append(faloatList, vv.Value)
+				}
+
+				markerLineValue = PercentileAlgorithm(float64(markerLine.CalculationValue), faloatList)
+				value = fmt.Sprintf("%.2f", markerLineValue)
+			}
+
+		} else {
+			dataList := dataList.([]*data_manage.EdbDataList)
+			floatList := make([]float64, 0)
+			for _, dataItem := range dataList {
+				floatList = append(floatList, dataItem.Value)
+			}
+
+			markerLineValue = PercentileAlgorithm(float64(markerLine.CalculationValue), floatList)
+			value = fmt.Sprintf("%.2f", markerLineValue)
+		}
+	}
+	return
+}