Roc 1 سال پیش
والد
کامیت
a5202e331a
2فایلهای تغییر یافته به همراه62 افزوده شده و 42 حذف شده
  1. 54 24
      services/data/line_feature/chart_info.go
  2. 8 18
      utils/common.go

+ 54 - 24
services/data/line_feature/chart_info.go

@@ -172,13 +172,6 @@ func GetPercentileData(chartInfoId int, mappingInfo *data_manage.ChartEdbInfoMap
 
 // GetFrequencyDistributionData 获取频率分布的图表数据
 func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.ChartEdbInfoMapping, dateType, stepVal int, startDate, endDate string) (edbList []*data_manage.ChartEdbInfoMapping, dataResp response.FrequencyDistributionResp, err error, errMsg string) {
-	//日期类型:1:最近3月;2:最近6月;3:最近1年;4:最近2年;5:最近3年;6:最近5年;7:最近10年,8:自定义时间
-	startDate, endDate = utils.GetDateByDateType2(dateType, startDate, endDate)
-	if startDate == `` {
-		errMsg = "错误的日期"
-		err = errors.New(errMsg)
-		return
-	}
 	XDataList := make([]float64, 0)
 	// 频度
 	Y1DataList := make([]response.FrequencyDistributionYData, 0)
@@ -203,10 +196,36 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
 
 	edb := edbList[0]
 	dataList := edb.DataList.([]*data_manage.EdbDataList)
-
 	if len(dataList) <= 0 {
 		return
 	}
+
+	// 非自定义
+	if dateType != 8 {
+		endDate = dataList[len(dataList)-1].DataTime
+		endDateTime, err = time.ParseInLocation(utils.FormatDate, endDate, time.Local)
+		if err != nil {
+			return
+		}
+		//日期类型:1:最近3月;2:最近6月;3:最近1年;4:最近2年;5:最近3年;6:最近5年;7:最近10年,8:自定义时间
+		startDateTime = utils.GetDateByDateType2(dateType, endDateTime)
+		startDate = startDateTime.Format(utils.FormatDate)
+
+		newDataList := make([]*data_manage.EdbDataList, 0)
+		for _, v := range dataList {
+			tmpDataTime, tmpErr := time.ParseInLocation(utils.FormatDate, v.DataTime, time.Local)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			if tmpDataTime.Equal(startDateTime) || tmpDataTime.After(startDateTime) {
+				newDataList = append(newDataList, v)
+			}
+
+		}
+		dataList = newDataList
+	}
+
 	maxVal := dataList[0].Value
 	minVal := dataList[0].Value
 	dataValMap := make(map[float64]int)
@@ -250,31 +269,42 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
 		XDataList = append(XDataList, tmpMinVal)
 		distributionDataNumMap[tmpMinVal] = 0
 		for tmpVal, num := range dataValMap {
-			if tmpMinVal <= tmpVal && tmpVal < tmpMaxVal {
-				distributionDataNumMap[tmpMinVal] += num
+			if tmpMinVal <= tmpVal {
+				// 最后一期数据是要小于等于
+				if i == stepVal {
+					if tmpVal <= tmpMaxVal {
+						distributionDataNumMap[tmpMinVal] += num
+					}
+				} else {
+					if tmpVal < tmpMaxVal {
+						distributionDataNumMap[tmpMinVal] += num
+					}
+				}
 			}
 		}
 	}
 
-	var minNum, maxNum int
+	var minFrequency, maxFrequency float64
 	tmpNum := 0
 	for k, tmpMinVal := range XDataList {
-		// 频率
+		// 数量
 		frequencyYNum := distributionDataNumMap[tmpMinVal]
+
+		// 频率
+		tmpFrequency, _ := decimal.NewFromInt(int64(frequencyYNum)).Div(decimal.NewFromInt(int64(total))).Mul(decimal.NewFromInt(100)).Round(4).Float64()
 		Y1DataList = append(Y1DataList, response.FrequencyDistributionYData{
 			X: tmpMinVal,
-			Y: float64(frequencyYNum),
+			Y: tmpFrequency,
 		})
-
 		if k == 0 {
-			minNum = frequencyYNum
-			maxNum = frequencyYNum
+			minFrequency = tmpFrequency
+			maxFrequency = tmpFrequency
 		} else {
-			if frequencyYNum < minNum {
-				minNum = frequencyYNum
+			if tmpFrequency < minFrequency {
+				minFrequency = tmpFrequency
 			}
-			if frequencyYNum > maxNum {
-				maxNum = frequencyYNum
+			if tmpFrequency > maxFrequency {
+				maxFrequency = tmpFrequency
 			}
 		}
 
@@ -292,8 +322,8 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
 		{
 			Name:   "频率",
 			NameEn: "Frequency",
-			Unit:   "",
-			UnitEn: "",
+			Unit:   "%",
+			UnitEn: "%",
 			Value:  Y1DataList,
 			Color:  "#00F",
 			IsAxis: 1,
@@ -309,8 +339,8 @@ func GetFrequencyDistributionData(chartInfoId int, mappingInfo *data_manage.Char
 	}
 	edbList[0].DataList = nil
 	dataResp = response.FrequencyDistributionResp{
-		LeftMinValue:  float64(minNum),
-		LeftMaxValue:  float64(maxNum),
+		LeftMinValue:  minFrequency,
+		LeftMaxValue:  maxFrequency,
 		RightMinValue: 0,
 		RightMaxValue: 100,
 		DataList:      newDataList,

+ 8 - 18
utils/common.go

@@ -1477,32 +1477,22 @@ func GetDaysBetween2Date(format, date1Str, date2Str string) (int, error) {
 }
 
 // GetDateByDateType2 通过dateType获取需要的开始/结束日期(日期类型:1:最近3月;2:最近6月;3:最近1年;4:最近2年;5:最近3年;6:最近5年;7:最近10年,8:自定义时间)
-func GetDateByDateType2(dateType int, tmpStartDate, tmpEndDate string) (startDate, endDate string) {
-	startDate = tmpStartDate
-	endDate = tmpEndDate
-	currDate := time.Now()
+func GetDateByDateType2(dateType int, currDate time.Time) (startDate time.Time) {
 	switch dateType {
 	case 1:
-		startDate = currDate.AddDate(0, -3, 0).Format(FormatDate)
-		endDate = ""
+		startDate = currDate.AddDate(0, -3, 0)
 	case 2:
-		startDate = currDate.AddDate(0, -6, 0).Format(FormatDate)
-		endDate = ""
+		startDate = currDate.AddDate(0, -6, 0)
 	case 3:
-		startDate = currDate.AddDate(-1, 0, 0).Format(FormatDate)
-		endDate = ""
+		startDate = currDate.AddDate(-1, 0, 0)
 	case 4:
-		startDate = currDate.AddDate(-2, 0, 0).Format(FormatDate)
-		endDate = ""
+		startDate = currDate.AddDate(-2, 0, 0)
 	case 5:
-		startDate = currDate.AddDate(-3, 0, 0).Format(FormatDate)
-		endDate = ""
+		startDate = currDate.AddDate(-3, 0, 0)
 	case 6:
-		startDate = currDate.AddDate(-5, 0, 0).Format(FormatDate)
-		endDate = ""
+		startDate = currDate.AddDate(-5, 0, 0)
 	case 7:
-		startDate = currDate.AddDate(-10, 0, 0).Format(FormatDate)
-		endDate = ""
+		startDate = currDate.AddDate(-10, 0, 0)
 	}
 
 	return