Browse Source

Merge branch 'ETA_1.9.4'

zwxi 7 months ago
parent
commit
5981aceeec
3 changed files with 298 additions and 340 deletions
  1. 8 8
      models/data_manage/chart_info.go
  2. 280 331
      services/data/chart_info.go
  3. 10 1
      services/data/chart_theme.go

+ 8 - 8
models/data_manage/chart_info.go

@@ -2429,18 +2429,18 @@ type MarkersLineTime struct {
 // EdbDateExtraConf
 // @Description: 导入指标日期前移和日期变换
 type EdbDateChangeConf struct {
-	MoveForward int `description:"前移的期数"`
-	BaseDate    int `description:"基准日期 0系统日期 1指标最新日期"`
+	MoveForward int `json:"moveForward" description:"前移的期数"`
+	BaseDate    int `json:"baseDate" description:"基准日期 0系统日期 1指标最新日期"`
 	DateChange  []*EdbDateConfDateChange
 }
 
 type EdbDateConfDateChange struct {
-	Year         int
-	Month        int
-	Day          int
-	Frequency    string `description:"频度变换"`
-	FrequencyDay string `description:"频度的固定日期"`
-	ChangeType   int    `description:"日期变换类型1日期位移,2指定频率"`
+	Year         int    `json:"year" description:"前移的期数"`
+	Month        int    `json:"month" description:"前移的期数"`
+	Day          int    `json:"day" description:"前移的期数"`
+	Frequency    string `json:"moveForward" description:"频度变换"`
+	FrequencyDay string `json:"frequencyDay" description:"频度的固定日期"`
+	ChangeType   int    `json:"changeType" description:"日期变换类型1日期位移,2指定频率"`
 }
 
 // 自定义右轴指标

+ 280 - 331
services/data/chart_info.go

@@ -359,7 +359,16 @@ func GetChartEdbData(chartInfoId, chartType int, calendar, startDate, endDate st
 	switch chartType {
 	case 2: // 季节性图
 		if seasonExtraConfig != "" {
-			dataResp, err = SeasonChartData(edbList, seasonExtraConfig)
+			// 季节性图计算不管图上数据时间,拿所有数据
+			_, tempEdbList, e := getEdbDataMapList(chartInfoId, chartType, calendar, "1990-01-01", "", mappingList, seasonExtraConfig)
+			if e != nil {
+				err = e
+				return
+			}
+			dataResp, err = SeasonChartData(tempEdbList, seasonExtraConfig)
+		} else {
+			// 兼容无配置的老图
+			dataResp = new(data_manage.SeasonChartResp)
 		}
 	case 7: // 柱形图
 		barChartConf := extraConfig.(data_manage.BarChartInfoReq)
@@ -2896,7 +2905,16 @@ func GetChartConvertEdbData(chartInfoId, chartType int, calendar, startDate, end
 	switch chartType {
 	case 2: // 季节性图
 		if seasonExtraConfig != "" {
-			dataResp, err = SeasonChartData(edbList, seasonExtraConfig)
+			// 季节性图计算不管图上数据时间,拿所有数据
+			_, tempEdbList, e := getEdbDataMapList(chartInfoId, chartType, calendar, "1990-01-01", "", mappingList, seasonExtraConfig)
+			if e != nil {
+				err = e
+				return
+			}
+			dataResp, err = SeasonChartData(tempEdbList, seasonExtraConfig)
+		} else {
+			// 兼容无配置的老图
+			dataResp = new(data_manage.SeasonChartResp)
 		}
 	case 7: // 柱形图
 		barChartConf := extraConfig.(data_manage.BarChartInfoReq)
@@ -3255,7 +3273,16 @@ func GetChartEdbDataV2(chartInfoId, chartType int, calendar, startDate, endDate
 	switch chartType {
 	case 2: // 季节性图
 		if seasonExtraConfig != "" {
-			dataResp, err = SeasonChartData(edbList, seasonExtraConfig)
+			// 季节性图计算不管图上数据时间,拿所有数据
+			_, tempEdbList, e := getEdbDataMapList(chartInfoId, chartType, calendar, "1990-01-01", "", mappingList, seasonExtraConfig)
+			if e != nil {
+				err = e
+				return
+			}
+			dataResp, err = SeasonChartData(tempEdbList, seasonExtraConfig)
+		} else {
+			// 兼容无配置的老图
+			dataResp = new(data_manage.SeasonChartResp)
 		}
 	case 7: // 柱形图
 		barChartConf := extraConfig.(data_manage.BarChartInfoReq)
@@ -3318,9 +3345,14 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 		if mappingItem.IsAxis == 0 {
 			continue
 		}
-		quarterDataList := mappingItem.DataList.(data_manage.QuarterDataList)
+		quarterDataList, ok := mappingItem.DataList.(data_manage.QuarterDataList)
+		if !ok {
+			continue
+		}
 		// 上下限区间
 		if seasonConfig.MaxMinLimits.Year > 0 {
+			yearRange := time.Now().Year() - seasonConfig.MaxMinLimits.Year
+			startYear := time.Now().AddDate(-yearRange, 0, 0).Year()
 			dataResp.MaxMinLimits.List = make([]*data_manage.MaxMinLimitsData, 0)
 			dataTimeMap := make(map[time.Time]time.Time)
 			dataTimeList := make([]string, 0)
@@ -3328,6 +3360,22 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 			minValueMap := make(map[time.Time]float64)
 
 			maxMinDataList := make([]*data_manage.MaxMinLimitsData, 0)
+			var startDateStr string
+			var endDateStr string
+			var newDate time.Time
+
+			startDateStr = fmt.Sprintf("%d-%s", time.Now().Year(), seasonConfig.XStartDate)
+			endDateStr = fmt.Sprintf("%d-%s", time.Now().Year(), seasonConfig.XEndDate)
+			startDate, e := time.Parse(utils.FormatDate, startDateStr)
+			if e != nil {
+				err = e
+				return
+			}
+			endDate, e := time.Parse(utils.FormatDate, endDateStr)
+			if e != nil {
+				err = e
+				return
+			}
 			// 日度 周度插值
 			for _, v := range quarterDataList {
 				if mappingItem.Frequency == "日度" || mappingItem.Frequency == "周度" {
@@ -3337,35 +3385,123 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 						err = errors.New("插值处理数据异常, Err:" + err.Error())
 						return
 					}
+					// 不包含当年
+					if v.ChartLegend == strconv.Itoa(time.Now().Year()) {
+						continue
+					}
 					for _, date := range dataTimeList {
 						dateTime, e := time.Parse(utils.FormatDate, date)
 						if e != nil {
 							err = errors.New("时间格式化异常, Err:" + e.Error())
 							return
 						}
-						// 不包含今年
-						if dateTime.Year() == time.Now().Year() {
+						if dateTime.Year() < startYear {
 							continue
 						}
-						newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
-						// 处理上下限列表
-						if value, ok := maxValueMap[newDate]; ok {
-							if value < handleDataMap[date] {
-								maxValueMap[newDate] = handleDataMap[date]
+						// 不包含2月29号
+						if dateTime.Month() == 2 && dateTime.Day() == 29 {
+							continue
+						}
+						newDate = dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
+						if seasonConfig.JumpYear == 1 {
+							if startDate.After(endDate) {
+								// 如果跨年且不到一年
+								// 全年截取一部分
+								if newDate.Before(startDate.AddDate(0, 0, 1)) && newDate.After(endDate) {
+									continue
+								}
+								if newDate.After(startDate.AddDate(0, 0, -1)) {
+									// 减一年
+									newDate = dateTime.AddDate(time.Now().Year()-dateTime.Year()-1, 0, 0)
+								}
+								// 处理上下限列表
+								if value, ok := maxValueMap[newDate]; ok {
+									if value < handleDataMap[date] {
+										maxValueMap[newDate] = handleDataMap[date]
+									}
+								} else {
+									maxValueMap[newDate] = handleDataMap[date]
+								}
+
+								if value, ok := minValueMap[newDate]; ok {
+									if value > handleDataMap[date] {
+										minValueMap[newDate] = handleDataMap[date]
+									}
+								} else {
+									minValueMap[newDate] = handleDataMap[date]
+								}
+
+								dataTimeMap[newDate] = newDate
+							} else {
+								// 如果跨年且大于等于一年
+								// double后截取
+								if newDate.After(startDate) {
+									// 处理上下限列表
+									if value, ok := maxValueMap[newDate]; ok {
+										if value < handleDataMap[date] {
+											maxValueMap[newDate] = handleDataMap[date]
+										}
+									} else {
+										maxValueMap[newDate] = handleDataMap[date]
+									}
+
+									if value, ok := minValueMap[newDate]; ok {
+										if value > handleDataMap[date] {
+											minValueMap[newDate] = handleDataMap[date]
+										}
+									} else {
+										minValueMap[newDate] = handleDataMap[date]
+									}
+
+									dataTimeMap[newDate] = newDate
+								}
+
+								newDate = dateTime.AddDate(time.Now().Year()-dateTime.Year()+1, 0, 0)
+								newEndDate := endDate.AddDate(1, 0, 0)
+								if newDate.Before(newEndDate) {
+									// 处理上下限列表
+									if value, ok := maxValueMap[newDate]; ok {
+										if value < handleDataMap[date] {
+											maxValueMap[newDate] = handleDataMap[date]
+										}
+									} else {
+										maxValueMap[newDate] = handleDataMap[date]
+									}
+
+									if value, ok := minValueMap[newDate]; ok {
+										if value > handleDataMap[date] {
+											minValueMap[newDate] = handleDataMap[date]
+										}
+									} else {
+										minValueMap[newDate] = handleDataMap[date]
+									}
+
+									dataTimeMap[newDate] = newDate
+								}
+
 							}
 						} else {
-							maxValueMap[newDate] = handleDataMap[date]
-						}
+							// 如果不跨年 正常获取
+							// 获取当前日期所在区间
+							// 处理上下限列表
+							if value, ok := maxValueMap[newDate]; ok {
+								if value < handleDataMap[date] {
+									maxValueMap[newDate] = handleDataMap[date]
+								}
+							} else {
+								maxValueMap[newDate] = handleDataMap[date]
+							}
 
-						if value, ok := minValueMap[newDate]; ok {
-							if value > handleDataMap[date] {
+							if value, ok := minValueMap[newDate]; ok {
+								if value > handleDataMap[date] {
+									minValueMap[newDate] = handleDataMap[date]
+								}
+							} else {
 								minValueMap[newDate] = handleDataMap[date]
 							}
-						} else {
-							minValueMap[newDate] = handleDataMap[date]
-						}
 
-						dataTimeMap[newDate] = newDate
+							dataTimeMap[newDate] = newDate
+						}
 					}
 				} else {
 					// 旬度、月度、季度、半年度 不插值,需要先把日期列表和数据map取出来
@@ -3375,28 +3511,120 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 							err = errors.New("时间格式化异常, Err:" + e.Error())
 							return
 						}
-						// 不包含今年
-						if dateTime.Year() == time.Now().Year() {
+
+						// 不包含当年
+						if v.ChartLegend == strconv.Itoa(time.Now().Year()) {
 							continue
 						}
-						newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
 
-						if value, ok := maxValueMap[newDate]; ok {
-							if value < vv.Value {
-								maxValueMap[newDate] = vv.Value
+						if dateTime.Year() < startYear {
+							continue
+						}
+						// 不包含2月29号
+						if dateTime.Month() == 2 && dateTime.Day() == 29 {
+							continue
+						}
+						newDate = dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
+						if seasonConfig.JumpYear == 1 {
+							if startDate.After(endDate) {
+								// 如果跨年且不到一年
+								// 全年截取一部分
+								if newDate.Before(startDate.AddDate(0, 0, 1)) && newDate.After(endDate) {
+									continue
+								}
+								if newDate.After(startDate.AddDate(0, 0, -1)) {
+									// 减一年
+									newDate = dateTime.AddDate(time.Now().Year()-dateTime.Year()-1, 0, 0)
+								}
+								// 处理上下限列表
+								if value, ok := maxValueMap[newDate]; ok {
+									if value < vv.Value {
+										maxValueMap[newDate] = vv.Value
+									}
+								} else {
+									maxValueMap[newDate] = vv.Value
+								}
+
+								if value, ok := minValueMap[newDate]; ok {
+									if value > vv.Value {
+										minValueMap[newDate] = vv.Value
+									}
+								} else {
+									minValueMap[newDate] = vv.Value
+								}
+
+								dataTimeMap[newDate] = newDate
+							} else {
+								// 如果跨年且大于等于一年
+								// double后截取
+								if newDate.After(startDate) {
+									// 处理上下限列表
+									if value, ok := maxValueMap[newDate]; ok {
+										if value < vv.Value {
+											maxValueMap[newDate] = vv.Value
+										}
+									} else {
+										maxValueMap[newDate] = vv.Value
+									}
+
+									if value, ok := minValueMap[newDate]; ok {
+										if value > vv.Value {
+											minValueMap[newDate] = vv.Value
+										}
+									} else {
+										minValueMap[newDate] = vv.Value
+									}
+
+									dataTimeMap[newDate] = newDate
+								}
+
+								newDate = dateTime.AddDate(time.Now().Year()-dateTime.Year()+1, 0, 0)
+								newEndDate := endDate.AddDate(1, 0, 0)
+								if newDate.Before(newEndDate) {
+									// 处理上下限列表
+									if value, ok := maxValueMap[newDate]; ok {
+										if value < vv.Value {
+											maxValueMap[newDate] = vv.Value
+										}
+									} else {
+										maxValueMap[newDate] = vv.Value
+									}
+
+									if value, ok := minValueMap[newDate]; ok {
+										if value > vv.Value {
+											minValueMap[newDate] = vv.Value
+										}
+									} else {
+										minValueMap[newDate] = vv.Value
+									}
+
+									dataTimeMap[newDate] = newDate
+								}
+
 							}
 						} else {
-							maxValueMap[newDate] = vv.Value
-						}
+							// 如果不跨年 正常获取
+							// 获取当前日期所在区间
+							// 处理上下限列表
+							if value, ok := maxValueMap[newDate]; ok {
+								if value < vv.Value {
+									maxValueMap[newDate] = vv.Value
+								}
+							} else {
+								maxValueMap[newDate] = vv.Value
+							}
 
-						if value, ok := minValueMap[newDate]; ok {
-							if value > vv.Value {
+							if value, ok := minValueMap[newDate]; ok {
+								if value > vv.Value {
+									minValueMap[newDate] = vv.Value
+								}
+							} else {
 								minValueMap[newDate] = vv.Value
 							}
-						} else {
-							minValueMap[newDate] = vv.Value
+
+							dataTimeMap[newDate] = newDate
 						}
-						dataTimeMap[newDate] = newDate
+
 					}
 				}
 			}
@@ -3414,6 +3642,7 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 				} else {
 					maxMinItem.MinValue = maxValueMap[v]
 				}
+
 				maxMinItem.DataTime = v.Format(utils.FormatDate)
 				maxMinItem.DataTimestamp = v.UnixNano() / 1e6
 
@@ -3440,7 +3669,6 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 			dataTimeMap := make(map[time.Time]time.Time)
 			dataTimeList := make([]string, 0)
 			valueMap := make(map[time.Time]float64)
-
 			averageDataList := make([]*data_manage.SamePeriodAverageData, 0)
 			for i := len(quarterDataList) - 1; i > len(quarterDataList)-seasonConfig.SamePeriodAverage.Year && i > 0; i-- {
 				// 插值成日度
@@ -3455,6 +3683,15 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 						err = errors.New("时间格式化异常, Err:" + e.Error())
 						return
 					}
+					yearRange := time.Now().Year() - seasonConfig.SamePeriodAverage.Year
+					startYear := time.Now().AddDate(-yearRange, 0, 0).Year()
+					if dateTime.Year() < startYear {
+						continue
+					}
+					// 不包含2月29号
+					if dateTime.Month() == 2 && dateTime.Day() == 29 {
+						continue
+					}
 					newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
 					// 处理均值
 					if value, ok := valueMap[newDate]; ok {
@@ -3497,6 +3734,9 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 
 		// 自定义同期标准差
 		if seasonConfig.SamePeriodStandardDeviation.Year > 1 && seasonConfig.SamePeriodStandardDeviation.Multiple > 0 {
+			yearRange := time.Now().Year() - seasonConfig.SamePeriodAverage.Year
+			startYear := time.Now().AddDate(-yearRange, 0, 0).Year()
+
 			// 先算均值,再算标准差
 			handleDataMap := make(map[string]float64)
 			dataTimeMap := make(map[time.Time]time.Time)
@@ -3518,6 +3758,13 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
 						err = errors.New("时间格式化异常, Err:" + e.Error())
 						return
 					}
+					if dateTime.Year() < startYear {
+						continue
+					}
+					// 不包含2月29号
+					if dateTime.Month() == 2 && dateTime.Day() == 29 {
+						continue
+					}
 					newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
 					// 处理均值
 					if value, ok := valueMap[newDate]; ok {
@@ -3616,304 +3863,6 @@ 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
-		length := 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 {
-					if markerLine.TimeIntervalType == 1 {
-						startDate := markerLine.StartDate.Date
-						endDate := time.Now().Format(utils.FormatDate)
-						if markerLine.StartDate.TimeType == 2 {
-							// 动态
-							if markerLine.StartDate.Conf.BaseDate == 1 {
-								// 指标最新日期
-								startDate = quarterData.DataList[len(quarterData.DataList)-1].DataTime
-							} else {
-								// 系统日期
-								startDate = time.Now().Format(utils.FormatDate)
-							}
-							startDate, err = HandleDateChange(startDate, markerLine.StartDate.Conf)
-						}
-						if markerLine.EndDate.TimeType == 1 {
-							// 固定
-							endDate = markerLine.EndDate.Date
-						} else if markerLine.EndDate.TimeType == 2 {
-							// 动态
-							if markerLine.StartDate.Conf.BaseDate == 1 {
-								// 指标最新日期
-								endDate = quarterData.DataList[len(quarterData.DataList)-1].DataTime
-							} else {
-								// 系统日期
-								endDate = time.Now().Format(utils.FormatDate)
-							}
-							endDate, err = HandleDateChange(endDate, markerLine.StartDate.Conf)
-						}
-						if vv.DataTime >= startDate && vv.DataTime <= endDate {
-							averge += vv.Value
-							length +=1
-						}
-					} else {
-						averge += vv.Value
-						length +=1
-					}
-				}
-				averge = averge / float64(length)
-				value = fmt.Sprintf("%.2f", averge)
-			}
-		} else {
-			dataList := dataList.([]*data_manage.EdbDataList)
-			for _, dataItem := range dataList {
-				if markerLine.TimeIntervalType == 1 {
-					startDate := markerLine.StartDate.Date
-					endDate := time.Now().Format(utils.FormatDate)
-					if markerLine.StartDate.TimeType == 2 {
-						// 动态
-						if markerLine.StartDate.Conf.BaseDate == 1 {
-							// 指标最新日期
-							startDate = dataList[len(dataList)-1].DataTime
-						} else {
-							// 系统日期
-							startDate = time.Now().Format(utils.FormatDate)
-						}
-						startDate, err = HandleDateChange(startDate, markerLine.StartDate.Conf)
-					}
-					if markerLine.EndDate.TimeType == 1 {
-						// 固定
-						endDate = markerLine.EndDate.Date
-					} else if markerLine.EndDate.TimeType == 2 {
-						// 动态
-						if markerLine.StartDate.Conf.BaseDate == 1 {
-							// 指标最新日期
-							endDate = dataList[len(dataList)-1].DataTime
-						} else {
-							// 系统日期
-							endDate = time.Now().Format(utils.FormatDate)
-						}
-						endDate, err = HandleDateChange(endDate, markerLine.StartDate.Conf)
-					}
-					if dataItem.DataTime >= startDate && dataItem.DataTime <= endDate {
-						averge += dataItem.Value
-						length += 1
-					}
-				} else {
-					averge += dataItem.Value
-					length += 1
-				}
-			}
-			averge = averge / float64(length)
-
-			value = fmt.Sprintf("%.2f", averge)
-		}
-	} else if markerLine.Calculation == 2 {
-		// 区间均值加N倍标准差
-		averge := 0.0
-		length := 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 {
-					if markerLine.TimeIntervalType == 1 {
-						startDate := markerLine.StartDate.Date
-						endDate := time.Now().Format(utils.FormatDate)
-						if markerLine.StartDate.TimeType == 2 {
-							// 动态
-							if markerLine.StartDate.Conf.BaseDate == 1 {
-								// 指标最新日期
-								startDate = quarterData.DataList[len(quarterData.DataList)-1].DataTime
-							} else {
-								// 系统日期
-								startDate = time.Now().Format(utils.FormatDate)
-							}
-							startDate, err = HandleDateChange(startDate, markerLine.StartDate.Conf)
-						}
-						if markerLine.EndDate.TimeType == 1 {
-							// 固定
-							endDate = markerLine.EndDate.Date
-						} else if markerLine.EndDate.TimeType == 2 {
-							// 动态
-							if markerLine.StartDate.Conf.BaseDate == 1 {
-								// 指标最新日期
-								endDate = quarterData.DataList[len(quarterData.DataList)-1].DataTime
-							} else {
-								// 系统日期
-								endDate = time.Now().Format(utils.FormatDate)
-							}
-							endDate, err = HandleDateChange(endDate, markerLine.StartDate.Conf)
-						}
-						if vv.DataTime >= startDate && vv.DataTime <= endDate {
-							faloatList = append(faloatList, vv.Value)
-							averge += vv.Value
-							length += 1
-						}
-					} else {
-						faloatList = append(faloatList, vv.Value)
-						averge += vv.Value
-						length += 1
-					}
-				}
-				averge = averge / float64(length)
-				stdev := utils.CalculateStandardDeviation(faloatList)
-				stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
-
-				value = fmt.Sprintf("%.2f", averge+stdev*markerLine.CalculationValue)
-			}
-
-		} else {
-			dataList := dataList.([]*data_manage.EdbDataList)
-			floatList := make([]float64, 0)
-			for _, dataItem := range dataList {
-				if markerLine.TimeIntervalType == 1 {
-					startDate := markerLine.StartDate.Date
-					endDate := time.Now().Format(utils.FormatDate)
-					if markerLine.StartDate.TimeType == 2 {
-						// 动态
-						if markerLine.StartDate.Conf.BaseDate == 1 {
-							// 指标最新日期
-							startDate = dataList[len(dataList)-1].DataTime
-						} else {
-							// 系统日期
-							startDate = time.Now().Format(utils.FormatDate)
-						}
-						startDate, err = HandleDateChange(startDate, markerLine.StartDate.Conf)
-					}
-					if markerLine.EndDate.TimeType == 1 {
-						// 固定
-						endDate = markerLine.EndDate.Date
-					} else if markerLine.EndDate.TimeType == 2 {
-						// 动态
-						if markerLine.StartDate.Conf.BaseDate == 1 {
-							// 指标最新日期
-							endDate = dataList[len(dataList)-1].DataTime
-						} else {
-							// 系统日期
-							endDate = time.Now().Format(utils.FormatDate)
-						}
-						endDate, err = HandleDateChange(endDate, markerLine.StartDate.Conf)
-					}
-					if dataItem.DataTime >= startDate && dataItem.DataTime <= endDate {
-						floatList = append(floatList, dataItem.Value)
-						averge += dataItem.Value
-						length += 1
-					}
-				} else {
-					floatList = append(floatList, dataItem.Value)
-					averge += dataItem.Value
-					length += 1
-				}
-			}
-			averge = averge / float64(length)
-
-			stdev := utils.CalculateStandardDeviation(floatList)
-			stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
-
-			value = fmt.Sprintf("%.2f", averge+stdev*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 {
-					if markerLine.TimeIntervalType == 1 {
-						startDate := markerLine.StartDate.Date
-						endDate := time.Now().Format(utils.FormatDate)
-						if markerLine.StartDate.TimeType == 2 {
-							// 动态
-							if markerLine.StartDate.Conf.BaseDate == 1 {
-								// 指标最新日期
-								startDate = quarterData.DataList[len(quarterData.DataList)-1].DataTime
-							} else {
-								// 系统日期
-								startDate = time.Now().Format(utils.FormatDate)
-							}
-							startDate, err = HandleDateChange(startDate, markerLine.StartDate.Conf)
-						}
-						if markerLine.EndDate.TimeType == 1 {
-							// 固定
-							endDate = markerLine.EndDate.Date
-						} else if markerLine.EndDate.TimeType == 2 {
-							// 动态
-							if markerLine.StartDate.Conf.BaseDate == 1 {
-								// 指标最新日期
-								endDate = quarterData.DataList[len(quarterData.DataList)-1].DataTime
-							} else {
-								// 系统日期
-								endDate = time.Now().Format(utils.FormatDate)
-							}
-							endDate, err = HandleDateChange(endDate, markerLine.StartDate.Conf)
-						}
-						if vv.DataTime >= startDate && vv.DataTime <= endDate {
-							faloatList = append(faloatList, vv.Value)
-						}
-					} else {
-						faloatList = append(faloatList, vv.Value)
-					}
-				}
-
-				markerLineValue = PercentileAlgorithm(markerLine.CalculationValue, faloatList)
-				value = fmt.Sprintf("%.2f", markerLineValue)
-			}
-
-		} else {
-			dataList := dataList.([]*data_manage.EdbDataList)
-			floatList := make([]float64, 0)
-			for _, dataItem := range dataList {
-				if markerLine.TimeIntervalType == 1 {
-					startDate := markerLine.StartDate.Date
-					endDate := time.Now().Format(utils.FormatDate)
-					if markerLine.StartDate.TimeType == 2 {
-						// 动态
-						if markerLine.StartDate.Conf.BaseDate == 1 {
-							// 指标最新日期
-							startDate = dataList[len(dataList)-1].DataTime
-						} else {
-							// 系统日期
-							startDate = time.Now().Format(utils.FormatDate)
-						}
-						startDate, err = HandleDateChange(startDate, markerLine.StartDate.Conf)
-					}
-					if markerLine.EndDate.TimeType == 1 {
-						// 固定
-						endDate = markerLine.EndDate.Date
-					} else if markerLine.EndDate.TimeType == 2 {
-						// 动态
-						if markerLine.StartDate.Conf.BaseDate == 1 {
-							// 指标最新日期
-							endDate = dataList[len(dataList)-1].DataTime
-						} else {
-							// 系统日期
-							endDate = time.Now().Format(utils.FormatDate)
-						}
-						endDate, err = HandleDateChange(endDate, markerLine.StartDate.Conf)
-					}
-					if dataItem.DataTime >= startDate && dataItem.DataTime <= endDate {
-						floatList = append(floatList, dataItem.Value)
-					}
-				} else {
-					floatList = append(floatList, dataItem.Value)
-				}
-			}
-
-			markerLineValue = PercentileAlgorithm(markerLine.CalculationValue, floatList)
-			value = fmt.Sprintf("%.2f", markerLineValue)
-		}
-	}
-	return
-}
-
 // HandleDateChange 处理日期变换
 func HandleDateChange(date string, edbDateConf data_manage.EdbDateChangeConf) (newDate string, err error) {
 	newDate = date

+ 10 - 1
services/data/chart_theme.go

@@ -79,7 +79,16 @@ func GetThemePreviewChartEdbData(chartType int, calendar, startDate, endDate str
 	switch chartType {
 	case 2: // 季节性图
 		if seasonExtraConfig != "" {
-			dataResp, err = SeasonChartData(edbList, seasonExtraConfig)
+			// 季节性图计算不管图上数据时间,拿所有数据
+			_, tempEdbList, e := getEdbDataMapList(0, chartType, calendar, "1990-01-01", "", mappingList, seasonExtraConfig)
+			if e != nil {
+				err = e
+				return
+			}
+			dataResp, err = SeasonChartData(tempEdbList, seasonExtraConfig)
+		} else {
+			// 兼容无配置的老图
+			dataResp = new(data_manage.SeasonChartResp)
 		}
 	case 7: // 柱形图
 		barChartConf := extraConfig.(data_manage.BarChartInfoReq)