|
@@ -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,13 @@ 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 {
|
|
|
+ startYear := time.Now().AddDate(-seasonConfig.MaxMinLimits.Year, 0, 0).Year()
|
|
|
dataResp.MaxMinLimits.List = make([]*data_manage.MaxMinLimitsData, 0)
|
|
|
dataTimeMap := make(map[time.Time]time.Time)
|
|
|
dataTimeList := make([]string, 0)
|
|
@@ -3328,6 +3359,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 +3384,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 +3510,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号日期改为2月28日
|
|
|
+ if dateTime.Month() == 2 && dateTime.Day() == 29 {
|
|
|
+ dateTime = dateTime.AddDate(0, 0, -1)
|
|
|
+ }
|
|
|
+ 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 +3641,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,9 +3668,8 @@ 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-- {
|
|
|
+ for i := len(quarterDataList) - 1; i >= 0; i-- {
|
|
|
// 插值成日度
|
|
|
dataTimeList, _, err = HandleDataByLinearRegressionToList(quarterDataList[i].DataList, handleDataMap)
|
|
|
if err != nil {
|
|
@@ -3455,6 +3682,18 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
|
|
|
err = errors.New("时间格式化异常, Err:" + e.Error())
|
|
|
return
|
|
|
}
|
|
|
+ startYear := time.Now().AddDate(-seasonConfig.SamePeriodAverage.Year, 0, 0).Year()
|
|
|
+ if dateTime.Year() < startYear {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // 不包含2月29号
|
|
|
+ if dateTime.Month() == 2 && dateTime.Day() == 29 {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ // 不包含当年
|
|
|
+ if quarterDataList[i].ChartLegend == strconv.Itoa(time.Now().Year()) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
|
|
|
// 处理均值
|
|
|
if value, ok := valueMap[newDate]; ok {
|
|
@@ -3497,6 +3736,8 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
|
|
|
|
|
|
// 自定义同期标准差
|
|
|
if seasonConfig.SamePeriodStandardDeviation.Year > 1 && seasonConfig.SamePeriodStandardDeviation.Multiple > 0 {
|
|
|
+ startYear := time.Now().AddDate(-seasonConfig.SamePeriodStandardDeviation.Year, 0, 0).Year()
|
|
|
+
|
|
|
// 先算均值,再算标准差
|
|
|
handleDataMap := make(map[string]float64)
|
|
|
dataTimeMap := make(map[time.Time]time.Time)
|
|
@@ -3518,6 +3759,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 +3864,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
|