Browse Source

fix:相关性指标

Roc 1 year ago
parent
commit
2f92253cea
2 changed files with 48 additions and 6 deletions
  1. 27 1
      services/chart/correlation/chart_info.go
  2. 21 5
      utils/common.go

+ 27 - 1
services/chart/correlation/chart_info.go

@@ -230,6 +230,19 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 		return
 	}
 
+	// 移除多余的一组数据(开始日期的数据不能用作计算)
+	{
+		divDay, tmpErr := utils.GetDaysBetween2Date(utils.FormatDate, endDate, startDate)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		lenAData := len(aDataList)
+		if lenAData > divDay {
+			aDataList = aDataList[lenAData-divDay:]
+		}
+	}
+
 	// 获取变频指标所有日期的值, 插值法完善数据
 	bDataList := make([]*edb_data.EdbDataList, 0)
 	switch changeEdbInfo.EdbInfoCategoryType {
@@ -286,7 +299,7 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 			changeDataList = tmpNewChangeDataList
 		} else {
 			changeDataList = bDataList
-			for _, v := range baseDataList {
+			for _, v := range bDataList {
 				changeDataMap[v.DataTime] = v.Value
 			}
 		}
@@ -373,6 +386,19 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *c
 		return
 	}
 
+	// 移除多余的一组数据(开始日期的数据不能用作计算)
+	{
+		divDay, tmpErr := utils.GetDaysBetween2Date(utils.FormatDate, endDate, startDate)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		lenAData := len(aDataList)
+		if lenAData > divDay {
+			aDataList = aDataList[lenAData-divDay:]
+		}
+	}
+
 	// 获取变频指标所有日期的值, 插值法完善数据
 	bDataList := make([]*edb_data.EdbDataList, 0)
 	switch changeEdbInfo.EdbInfoCategoryType {

+ 21 - 5
utils/common.go

@@ -27,7 +27,7 @@ import (
 
 var ErrNoRow = gorm.ErrRecordNotFound
 
-//随机数种子
+// 随机数种子
 var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
 
 // GetRandString 获取随机字符串
@@ -385,8 +385,8 @@ func TrimHtml(src string) string {
 	return strings.TrimSpace(src)
 }
 
-//1556164246  ->  2019-04-25 03:50:46 +0000
-//timestamp
+// 1556164246  ->  2019-04-25 03:50:46 +0000
+// timestamp
 // TimeToTimestamp
 func TimeToTimestamp() {
 	fmt.Println(time.Unix(1556164246, 0).Format("2006-01-02 15:04:05"))
@@ -437,7 +437,7 @@ func GetWilsonScore(p, n float64) float64 {
 	return toFixed(((p+1.9208)/(p+n)-1.96*math.Sqrt(p*n/(p+n)+0.9604)/(p+n))/(1+3.8416/(p+n)), 2)
 }
 
-//将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
+// 将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
 func ChangeWordsToNum(str string) (numStr string) {
 	words := ([]rune)(str)
 	num := 0
@@ -613,7 +613,7 @@ func GetMonthStartAndEnd(myYear string, myMonth string) (startDate, endDate stri
 	return t1, t2
 }
 
-//TrimStr 移除字符串中的空格
+// TrimStr 移除字符串中的空格
 func TrimStr(str string) (str2 string) {
 	return strings.Replace(str, " ", "", -1)
 }
@@ -1048,6 +1048,22 @@ func GetTimeSubDay(t1, t2 time.Time) int {
 	return day
 }
 
+// GetDaysBetween2Date 计算两个日期之间相差几天
+func GetDaysBetween2Date(format, date1Str, date2Str string) (int, error) {
+	// 将字符串转化为Time格式
+	date1, err := time.ParseInLocation(format, date1Str, time.Local)
+	if err != nil {
+		return 0, err
+	}
+	// 将字符串转化为Time格式
+	date2, err := time.ParseInLocation(format, date2Str, time.Local)
+	if err != nil {
+		return 0, err
+	}
+	//计算相差天数
+	return int(date1.Sub(date2).Hours() / 24), nil
+}
+
 // MapSorter 对于map 排序
 type MapSorter []Item