Эх сурвалжийг харах

Merge branch 'chart/13.8'

Roc 2 жил өмнө
parent
commit
e0fa4e0c94

+ 19 - 4
services/chart/correlation/chart_info.go

@@ -211,6 +211,10 @@ func GetChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *chart_edb_mapping.C
 		}
 	}
 
+	// 计算窗口,不包含第一天
+	startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+	startDate = startDateTime.AddDate(0, 0, 1).Format(utils.FormatDate)
+
 	//// 2023-03-02 时间序列始终以指标B为基准, 始终是A进行平移
 	//baseEdbInfo := edbInfoMappingB
 	//changeEdbInfo := edbInfoMappingA
@@ -286,7 +290,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
 			}
 		}
@@ -358,6 +362,10 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *c
 	xDateTimeValue = make([]string, 0)
 	yData := make([]float64, 0)
 
+	// 计算窗口,不包含第一天
+	startDateTime, _ := time.ParseInLocation(utils.FormatDate, startDate, time.Local)
+	startDate = startDateTime.AddDate(0, 0, 1).Format(utils.FormatDate)
+
 	baseEdbInfo := edbInfoMappingA
 	changeEdbInfo := edbInfoMappingB
 
@@ -430,8 +438,15 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *c
 			// 取出对应的基准日期的值
 			for i := 0; i < calculateDay; i++ {
 				iDay := currDay.AddDate(0, 0, i).Format(utils.FormatDate)
-				baseCalculateData = append(baseCalculateData, baseDataMap[iDay])
-				yCalculateData = append(yCalculateData, changeDataMap[iDay])
+
+				tmpBaseValue, ok1 := baseDataMap[iDay]
+				tmpChangeValue, ok2 := changeDataMap[iDay]
+				if ok1 && ok2 {
+					baseCalculateData = append(baseCalculateData, tmpBaseValue)
+					yCalculateData = append(yCalculateData, tmpChangeValue)
+				} else {
+					continue
+				}
 			}
 
 			// 公式计算出领先/滞后频度对应点的相关性系数
@@ -440,7 +455,7 @@ func GetRollingCorrelationChartDataByEdbInfo(edbInfoMappingA, edbInfoMappingB *c
 				ratio = utils.CalculateCorrelationByIntArr(baseCalculateData, yCalculateData)
 			}
 			yData = append(yData, ratio)
-			xDateTimeValue = append(xDateTimeValue, currDay.AddDate(0, 0, calculateDay).Format(utils.FormatDate))
+			xDateTimeValue = append(xDateTimeValue, currDay.AddDate(0, 0, calculateDay-1).Format(utils.FormatDate))
 		}
 	}
 

+ 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