Browse Source

Merge branch 'ETA_1.9.4' into debug

zwxi 8 months ago
parent
commit
10d363a8ef
3 changed files with 209 additions and 13 deletions
  1. 1 1
      models/data_manage/chart_info.go
  2. 206 10
      services/data/chart_info.go
  3. 2 2
      services/data/excel/mixed_table.go

+ 1 - 1
models/data_manage/chart_info.go

@@ -284,7 +284,7 @@ type MarkersLine struct {
 	EdbType          int             `json:"edbType" description:"指标类型 0图中第一个指标 1其他指标 前端回显用"`
 	EdbInfoId        int             `json:"edbInfoId" description:"指标id"`
 	Calculation      int             `json:"calculation" description:"计算方式 1区间均值 2区间均值加N倍标准差 3区间个数分位 4区间数值分位"`
-	CalculationValue int             `json:"calculationValue" description:"计算方式对应的值 2就是几倍标准差 3就是分位值 4就是数值值·"`
+	CalculationValue float64         `json:"calculationValue" description:"计算方式对应的值 2就是几倍标准差 3就是分位值 4就是数值值·"`
 	TimeIntervalType int             `json:"timeInterval" description:"时间区间 0跟随图表 1自定义"`
 	StartDate        MarkersLineTime `json:"startTime" description:"开始时间"`
 	EndDate          MarkersLineTime `json:"endTime" description:"结束时间"`

+ 206 - 10
services/data/chart_info.go

@@ -9,6 +9,7 @@ import (
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/data/data_manage_permission"
+	"eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/shopspring/decimal"
@@ -4129,7 +4130,34 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			for _, quarterData := range quarterDataList[len(quarterDataList)-1:] {
 				for _, vv := range quarterData.DataList {
 					if markerLine.TimeIntervalType == 1 {
-						if vv.DataTime >= markerLine.StartDate.Date && vv.DataTime <= markerLine.EndDate.Date {
+						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
 						}
 					} else {
@@ -4143,7 +4171,34 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			dataList := dataList.([]*data_manage.EdbDataList)
 			for _, dataItem := range dataList {
 				if markerLine.TimeIntervalType == 1 {
-					if dataItem.DataTime >= markerLine.StartDate.Date && dataItem.DataTime <= markerLine.EndDate.Date {
+					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
 					}
 				} else {
@@ -4165,7 +4220,34 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			for _, quarterData := range quarterDataList[len(quarterDataList)-1:] {
 				for _, vv := range quarterData.DataList {
 					if markerLine.TimeIntervalType == 1 {
-						if vv.DataTime >= markerLine.StartDate.Date && vv.DataTime <= markerLine.EndDate.Date {
+						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 {
 							dataList = append(faloatList, vv.Value)
 							averge += vv.Value
 						}
@@ -4178,7 +4260,7 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 				stdev := utils.CalculateStandardDeviation(faloatList)
 				stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
 
-				value = fmt.Sprintf("%.2f", averge+stdev*float64(markerLine.CalculationValue))
+				value = fmt.Sprintf("%.2f", averge+stdev*markerLine.CalculationValue)
 			}
 
 		} else {
@@ -4186,7 +4268,34 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			floatList := make([]float64, 0)
 			for _, dataItem := range dataList {
 				if markerLine.TimeIntervalType == 1 {
-					if dataItem.DataTime >= markerLine.StartDate.Date && dataItem.DataTime <= markerLine.EndDate.Date {
+					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
 					}
@@ -4200,7 +4309,7 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			stdev := utils.CalculateStandardDeviation(floatList)
 			stdev, _ = decimal.NewFromFloat(stdev).Round(4).Float64()
 
-			value = fmt.Sprintf("%.2f", averge+stdev*float64(markerLine.CalculationValue))
+			value = fmt.Sprintf("%.2f", averge+stdev*markerLine.CalculationValue)
 		}
 	} else if markerLine.Calculation == 3 {
 		// 区间个数分位
@@ -4212,7 +4321,34 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			for _, quarterData := range quarterDataList[len(quarterDataList)-1:] {
 				for _, vv := range quarterData.DataList {
 					if markerLine.TimeIntervalType == 1 {
-						if vv.DataTime >= markerLine.StartDate.Date && vv.DataTime <= markerLine.EndDate.Date {
+						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 {
@@ -4220,7 +4356,7 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 					}
 				}
 
-				markerLineValue = PercentileAlgorithm(float64(markerLine.CalculationValue), faloatList)
+				markerLineValue = PercentileAlgorithm(markerLine.CalculationValue, faloatList)
 				value = fmt.Sprintf("%.2f", markerLineValue)
 			}
 
@@ -4229,7 +4365,34 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 			floatList := make([]float64, 0)
 			for _, dataItem := range dataList {
 				if markerLine.TimeIntervalType == 1 {
-					if dataItem.DataTime >= markerLine.StartDate.Date && dataItem.DataTime <= markerLine.EndDate.Date {
+					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 {
@@ -4237,9 +4400,42 @@ func MarkerLineCalculate(markerLine data_manage.MarkersLine, dataList interface{
 				}
 			}
 
-			markerLineValue = PercentileAlgorithm(float64(markerLine.CalculationValue), floatList)
+			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
+	if newDate != "" {
+		if len(edbDateConf.DateChange) > 0 {
+			var dateTime time.Time
+			dateTime, err = time.ParseInLocation(utils.FormatDate, newDate, time.Local)
+			if err != nil {
+				err = fmt.Errorf("日期解析失败: %s", err.Error())
+				return
+			}
+			for _, v := range edbDateConf.DateChange {
+				if v.ChangeType == 1 {
+					dateTime = dateTime.AddDate(v.Year, v.Month, v.Day)
+					newDate = dateTime.Format(utils.FormatDate)
+				} else if v.ChangeType == 2 {
+					newDate, err, _ = excel.HandleSystemAppointDateT(dateTime, v.FrequencyDay, v.Frequency)
+					if err != nil {
+						return
+					}
+					dateTime, err = time.ParseInLocation(utils.FormatDate, newDate, time.Local)
+					if err != nil {
+						err = fmt.Errorf("日期解析失败: %s", err.Error())
+						return
+					}
+				}
+			}
+		}
+	}
+
+	return
+}

+ 2 - 2
services/data/excel/mixed_table.go

@@ -730,7 +730,7 @@ func HandleMixTableDateChange(date, conf string) (newDate string, err error) {
 					dateTime = dateTime.AddDate(v.Year, v.Month, v.Day)
 					newDate = dateTime.Format(utils.FormatDate)
 				} else if v.ChangeType == 2 {
-					newDate, err, _ = handleSystemAppointDateT(dateTime, v.FrequencyDay, v.Frequency)
+					newDate, err, _ = HandleSystemAppointDateT(dateTime, v.FrequencyDay, v.Frequency)
 					if err != nil {
 						return
 					}
@@ -841,7 +841,7 @@ func handleSystemCalculateDateT(num int, frequency string) (date string, err err
 // @return date string
 // @return err error
 // @return errMsg string
-func handleSystemAppointDateT(currDate time.Time, appointDay, frequency string) (date string, err error, errMsg string) {
+func HandleSystemAppointDateT(currDate time.Time, appointDay, frequency string) (date string, err error, errMsg string) {
 	//currDate := time.Now()
 	switch frequency {
 	case "本周":