|
@@ -3388,9 +3388,74 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
|
|
}
|
|
}
|
|
|
|
|
|
// 自定义同期标准差
|
|
// 自定义同期标准差
|
|
- if seasonConfig.SamePeriodAverage.Year > 0 {
|
|
|
|
|
|
+ //if seasonConfig.SamePeriodStandardDeviation.Year > 1 && seasonConfig.SamePeriodStandardDeviation.Multiple > 0 {
|
|
|
|
+ // 先算均值,再算标准差
|
|
|
|
+ handleDataMap := make(map[string]float64)
|
|
|
|
+ dataTimeMap := make(map[time.Time]time.Time)
|
|
|
|
+ dataTimeValueMap := make(map[time.Time][]float64)
|
|
|
|
+ dataTimeList := make([]string, 0)
|
|
|
|
+ valueMap := make(map[time.Time]float64)
|
|
|
|
|
|
- }
|
|
|
|
|
|
+ samePeriodStandardDeviationList := make([]*data_manage.MaxMinLimitsData, 0)
|
|
|
|
+ for i := len(quarterDataList) - 1 ; i > len(quarterDataList) - seasonConfig.SamePeriodAverage.Year-1 && i > 0; i-- {
|
|
|
|
+ // 插值成日度
|
|
|
|
+ dataTimeList, _, err = HandleDataByLinearRegressionToList(quarterDataList[i].DataList, handleDataMap)
|
|
|
|
+ if err != nil {
|
|
|
|
+ err = errors.New("插值处理数据异常, Err:" + err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ for _, date := range dataTimeList {
|
|
|
|
+ dateTime, e := time.Parse(utils.FormatDate, date)
|
|
|
|
+ if e != nil {
|
|
|
|
+ err = errors.New("时间格式化异常, Err:" + e.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
|
|
|
|
+ // 处理均值
|
|
|
|
+ if value, ok := valueMap[newDate]; ok {
|
|
|
|
+ valueMap[newDate] = (handleDataMap[date] + value)/2
|
|
|
|
+ } else {
|
|
|
|
+ valueMap[newDate] = handleDataMap[date]
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dataTimeMap[newDate] = newDate
|
|
|
|
+ valueList := dataTimeValueMap[newDate]
|
|
|
|
+ valueList = append(valueList, handleDataMap[date])
|
|
|
|
+ dataTimeValueMap[newDate] = valueList
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ for _, v := range dataTimeMap {
|
|
|
|
+ valueList := dataTimeValueMap[v]
|
|
|
|
+ stdev := utils.CalculateStandardDeviation(valueList)
|
|
|
|
+ stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
|
|
|
|
+
|
|
|
|
+ maxMinItem := &data_manage.MaxMinLimitsData{}
|
|
|
|
+
|
|
|
|
+ if value, ok := valueMap[v]; ok {
|
|
|
|
+ maxMinItem.MaxValue = value + stdev*seasonConfig.SamePeriodStandardDeviation.Multiple
|
|
|
|
+ maxMinItem.MinValue = value - stdev*seasonConfig.SamePeriodStandardDeviation.Multiple
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ maxMinItem.DataTime = v.Format(utils.FormatDate)
|
|
|
|
+ maxMinItem.DataTimestamp = v.UnixNano() / 1e6
|
|
|
|
+
|
|
|
|
+ samePeriodStandardDeviationList = append(samePeriodStandardDeviationList, maxMinItem)
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 排序
|
|
|
|
+ sort.Slice(samePeriodStandardDeviationList, func(i, j int) bool {
|
|
|
|
+ return samePeriodStandardDeviationList[i].DataTime < samePeriodStandardDeviationList[j].DataTime
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ dataResp.SamePeriodStandardDeviation.List = samePeriodStandardDeviationList
|
|
|
|
+ dataResp.SamePeriodStandardDeviation.Color = seasonConfig.SamePeriodStandardDeviation.Color
|
|
|
|
+ dataResp.SamePeriodStandardDeviation.Legend = seasonConfig.SamePeriodStandardDeviation.Legend
|
|
|
|
+ dataResp.SamePeriodStandardDeviation.IsShow = seasonConfig.SamePeriodStandardDeviation.IsShow
|
|
|
|
+ dataResp.SamePeriodStandardDeviation.Multiple = seasonConfig.SamePeriodStandardDeviation.Multiple
|
|
|
|
+ dataResp.SamePeriodStandardDeviation.Year = seasonConfig.SamePeriodStandardDeviation.Year
|
|
|
|
+ //}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|