|
@@ -126,7 +126,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(models.SeasonChartResp)
|
|
|
}
|
|
|
case 7: // 柱形图
|
|
|
barChartConf := extraConfig.(data_manage.BarChartInfoReq)
|
|
@@ -1588,9 +1597,14 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
if mappingItem.IsAxis == 0 {
|
|
|
continue
|
|
|
}
|
|
|
- quarterDataList := mappingItem.DataList.(models.QuarterDataList)
|
|
|
+ quarterDataList, ok := mappingItem.DataList.(models.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([]*models.MaxMinLimitsData, 0)
|
|
|
dataTimeMap := make(map[time.Time]time.Time)
|
|
|
dataTimeList := make([]string, 0)
|
|
@@ -1598,6 +1612,22 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
minValueMap := make(map[time.Time]float64)
|
|
|
|
|
|
maxMinDataList := make([]*models.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 == "周度" {
|
|
@@ -1607,31 +1637,123 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
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
|
|
|
}
|
|
|
- newDate := dateTime.AddDate(time.Now().Year()-dateTime.Year(), 0, 0)
|
|
|
- // 处理上下限列表
|
|
|
- if value, ok := maxValueMap[newDate]; ok {
|
|
|
- if value < handleDataMap[date] {
|
|
|
- maxValueMap[newDate] = handleDataMap[date]
|
|
|
+ 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 < 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取出来
|
|
@@ -1641,24 +1763,120 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
err = errors.New("时间格式化异常, Err:" + e.Error())
|
|
|
return
|
|
|
}
|
|
|
- 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 v.ChartLegend == strconv.Itoa(time.Now().Year()) {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ 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
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1676,6 +1894,7 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
} else {
|
|
|
maxMinItem.MinValue = maxValueMap[v]
|
|
|
}
|
|
|
+
|
|
|
maxMinItem.DataTime = v.Format(utils.FormatDate)
|
|
|
maxMinItem.DataTimestamp = v.UnixNano() / 1e6
|
|
|
|
|
@@ -1702,7 +1921,6 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
dataTimeMap := make(map[time.Time]time.Time)
|
|
|
dataTimeList := make([]string, 0)
|
|
|
valueMap := make(map[time.Time]float64)
|
|
|
-
|
|
|
averageDataList := make([]*models.SamePeriodAverageData, 0)
|
|
|
for i := len(quarterDataList) - 1; i > len(quarterDataList)-seasonConfig.SamePeriodAverage.Year && i > 0; i-- {
|
|
|
// 插值成日度
|
|
@@ -1717,8 +1935,13 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
err = errors.New("时间格式化异常, Err:" + e.Error())
|
|
|
return
|
|
|
}
|
|
|
- // 不包含今年
|
|
|
- if dateTime.Year() == time.Now().Year() {
|
|
|
+ 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)
|
|
@@ -1763,6 +1986,9 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
|
|
|
// 自定义同期标准差
|
|
|
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)
|
|
@@ -1784,8 +2010,11 @@ func SeasonChartData(dataList []*models.ChartEdbInfoMapping, seasonExtraConfig s
|
|
|
err = errors.New("时间格式化异常, Err:" + e.Error())
|
|
|
return
|
|
|
}
|
|
|
- // 不包含今年
|
|
|
- if dateTime.Year() == time.Now().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)
|