|
@@ -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)
|
|
@@ -2915,7 +2924,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)
|
|
@@ -3275,7 +3293,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)
|
|
@@ -3337,9 +3364,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)
|
|
@@ -3347,6 +3379,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 == "周度" {
|
|
@@ -3356,35 +3404,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取出来
|
|
@@ -3394,28 +3530,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
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -3433,6 +3661,7 @@ func SeasonChartData(dataList []*data_manage.ChartEdbInfoMapping, seasonExtraCon
|
|
|
} else {
|
|
|
maxMinItem.MinValue = maxValueMap[v]
|
|
|
}
|
|
|
+
|
|
|
maxMinItem.DataTime = v.Format(utils.FormatDate)
|
|
|
maxMinItem.DataTimestamp = v.UnixNano() / 1e6
|
|
|
|
|
@@ -3459,7 +3688,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-- {
|
|
|
// 插值成日度
|
|
@@ -3474,6 +3702,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 {
|
|
@@ -3516,6 +3753,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)
|
|
@@ -3537,6 +3777,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 {
|
|
@@ -3676,11 +3923,11 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
|
|
|
}
|
|
|
if vv.DataTime >= startDate && vv.DataTime <= endDate {
|
|
|
averge += vv.Value
|
|
|
- length +=1
|
|
|
+ length += 1
|
|
|
}
|
|
|
} else {
|
|
|
averge += vv.Value
|
|
|
- length +=1
|
|
|
+ length += 1
|
|
|
}
|
|
|
}
|
|
|
averge = averge / float64(length)
|
|
@@ -3881,7 +4128,7 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
|
|
|
faloatList = append(faloatList, vv.Value)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ sort.Float64s(faloatList)
|
|
|
markerLineValue = PercentileAlgorithm(markerLine.CalculationValue, faloatList)
|
|
|
value = fmt.Sprintf("%.2f", markerLineValue)
|
|
|
}
|
|
@@ -3925,10 +4172,120 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
|
|
|
floatList = append(floatList, dataItem.Value)
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ sort.Float64s(floatList)
|
|
|
markerLineValue = PercentileAlgorithm(markerLine.CalculationValue, floatList)
|
|
|
value = fmt.Sprintf("%.2f", markerLineValue)
|
|
|
}
|
|
|
+ } else if markerLine.Calculation == 4 {
|
|
|
+ // 数值分位
|
|
|
+ markerLineValue := 0.0
|
|
|
+ maxValue := 0.0
|
|
|
+ minValue := 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 {
|
|
|
+ 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 {
|
|
|
+ if maxValue < vv.Value {
|
|
|
+ maxValue = vv.Value
|
|
|
+ }
|
|
|
+ if minValue > vv.Value {
|
|
|
+ minValue = vv.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if maxValue < vv.Value {
|
|
|
+ maxValue = vv.Value
|
|
|
+ }
|
|
|
+ if minValue > vv.Value {
|
|
|
+ minValue = vv.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markerLineValue = CalculatePercentile(markerLine.CalculationValue, minValue, maxValue)
|
|
|
+ value = fmt.Sprintf("%.2f", markerLineValue)
|
|
|
+ }
|
|
|
+
|
|
|
+ } 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 {
|
|
|
+ if maxValue < dataItem.Value {
|
|
|
+ maxValue = dataItem.Value
|
|
|
+ }
|
|
|
+ if minValue > dataItem.Value {
|
|
|
+ minValue = dataItem.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if maxValue < dataItem.Value {
|
|
|
+ maxValue = dataItem.Value
|
|
|
+ }
|
|
|
+ if minValue > dataItem.Value {
|
|
|
+ minValue = dataItem.Value
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markerLineValue = CalculatePercentile(markerLine.CalculationValue, minValue, maxValue)
|
|
|
+ value = fmt.Sprintf("%.2f", markerLineValue)
|
|
|
+ }
|
|
|
}
|
|
|
return
|
|
|
}
|
|
@@ -3966,7 +4323,6 @@ func HandleDateChange(date string, edbDateConf data_manage.EdbDateChangeConf) (n
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-
|
|
|
// handleSystemAppointDateT
|
|
|
// @Description: 处理系统日期相关的指定频率(所在周/旬/月/季/半年/年的最后/最早一天)
|
|
|
// @author: Roc
|
|
@@ -4094,4 +4450,9 @@ func handleSystemAppointDateT2(currDate time.Time, appointDay, frequency string)
|
|
|
}
|
|
|
|
|
|
return
|
|
|
-}
|
|
|
+}
|
|
|
+
|
|
|
+// CalculatePercentile 计算数值分位
|
|
|
+func CalculatePercentile(x float64, min float64, max float64) float64 {
|
|
|
+ return (x/100)*(max-min) + min
|
|
|
+}
|