Browse Source

Merge branch 'bugfix_7333' of eta_server/eta_index_lib into master

chenhan 1 month ago
parent
commit
29a63babbd

+ 1 - 1
models/calculate_residual_analysis_config.go

@@ -41,7 +41,7 @@ func GetResidualAnalysisConfigById(edbInfoId int) (residualAnalysisConfig Calcul
 	o := orm.NewOrm()
 	sql := `SELECT t2.* FROM calculate_residual_analysis_config_mapping t1 
 			join calculate_residual_analysis_config t2 on t1.calculate_residual_analysis_config_id = t2.calculate_residual_analysis_config_id
-			WHERE t1.edb_info_id = ?`
+			WHERE t1.edb_info_id = ? and index_type!=3 and index_type !=4`
 	err = o.Raw(sql, edbInfoId).QueryRow(&residualAnalysisConfig)
 	return
 }

+ 19 - 8
models/calculate_residual_analysis_config_mapping.go

@@ -23,15 +23,26 @@ func init() {
 // GetConfigMappingListByConditionNotBase 查询非基础指标的配置映射
 func GetConfigMappingListByConditionNotBase(edbInfoId int) (configMapping []CalculateResidualAnalysisConfigMapping, err error) {
 	o := orm.NewOrm()
+	//sql := `
+	//SELECT
+	//	*
+	//FROM
+	//	calculate_residual_analysis_config_mapping
+	//WHERE
+	//	calculate_residual_analysis_config_id IN ( SELECT calculate_residual_analysis_config_id FROM calculate_residual_analysis_config_mapping WHERE edb_info_id = ? )
+	//	// AND index_type != 3
+	//	// AND index_type != 4`
 	sql := `
-	SELECT
-  		* 
-	FROM
-  		calculate_residual_analysis_config_mapping 
-	WHERE
-  		calculate_residual_analysis_config_id IN ( SELECT calculate_residual_analysis_config_id FROM calculate_residual_analysis_config_mapping WHERE edb_info_id = ? ) 
-  		AND index_type != 3 
-  		AND index_type != 4`
+	SELECT *
+		FROM calculate_residual_analysis_config_mapping m
+		WHERE EXISTS (
+			SELECT 1
+			FROM calculate_residual_analysis_config_mapping subq
+			WHERE subq.calculate_residual_analysis_config_id = m.calculate_residual_analysis_config_id
+			  AND subq.edb_info_id = ? AND subq.index_type != 3
+ 			AND subq.index_type != 4
+		)`
+
 	_, err = o.Raw(sql, edbInfoId).QueryRows(&configMapping)
 	if err != nil {
 		return nil, fmt.Errorf("查询数据时出错: %v", err)

+ 91 - 63
models/edb_data_residual_analysis.go

@@ -52,22 +52,30 @@ func RefreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
 			_ = to.Commit()
 		}
 	}()*/
+	//只清空残差分析数据自身指标的数据
 	configMapping, err := GetConfigMappingListByConditionNotBase(edbInfoId)
-	if err != nil {
-		return err
-	}
-
-	var edbInfoIdList []int64
-	for _, v := range configMapping {
-		edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
-	}
+	//if err != nil {
+	//	return err
+	//}
+	//
+	//var edbInfoIdList []int64
+	//for _, v := range configMapping {
+	//	edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
+	//}
 
 	//清空原有数据
-	sql := ` DELETE FROM edb_data_residual_analysis WHERE edb_info_id in (` + utils.GetOrmInReplace(len(edbInfoIdList)) + `) `
+	//sql := ` DELETE FROM edb_data_residual_analysis WHERE edb_info_id in (` + utils.GetOrmInReplace(len(edbInfoIdList)) + `) `
+	//var params []interface{}
+	//for _, i := range edbInfoIdList {
+	//	params = append(params, i)
+	//}
 	var params []interface{}
-	for _, i := range edbInfoIdList {
-		params = append(params, i)
-	}
+	sql := ` DELETE FROM edb_data_residual_analysis WHERE edb_info_id = ?`
+	params = append(params, edbInfoId)
+	//var params []interface{}
+	//for _, i := range edbInfoIdList {
+	//	params = append(params, i)
+	//}
 	_, err = to.Raw(sql, params...).Exec()
 	if err != nil {
 		return
@@ -82,13 +90,23 @@ func RefreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
 // refreshAllCalculateResidualAnalysis 刷新所有残差分析
 func refreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaInt, moveType int, fromEdbInfo *EdbInfo, edbCode, startDate, endDate, moveFrequency string, configMapping []CalculateResidualAnalysisConfigMapping) (err error) {
 	fmt.Println("refreshAllCalculateResidualAnalysis startDate:", startDate)
-
+	configMap := make(map[int64]CalculateResidualAnalysisConfigMapping, len(configMapping))
+	for _, v := range configMapping {
+		configMap[v.EdbInfoId] = v
+	}
 	calculateMappingList, err := GetCalculateMappingListByEdbInfoId(edbInfoId)
 	if err != nil {
 		return err
 	}
-	edbInfoIdA := calculateMappingList[0].FromEdbInfoId
-	edbInfoIdB := calculateMappingList[1].FromEdbInfoId
+	//这里顺序和之前的不一致导致的计算错误
+	var edbInfoIdA, edbInfoIdB int
+	if configMap[int64(calculateMappingList[0].FromEdbInfoId)].IndexType == 3 {
+		edbInfoIdA = calculateMappingList[0].FromEdbInfoId
+		edbInfoIdB = calculateMappingList[1].FromEdbInfoId
+	} else {
+		edbInfoIdA = calculateMappingList[1].FromEdbInfoId
+		edbInfoIdB = calculateMappingList[0].FromEdbInfoId
+	}
 
 	mappingList, err := GetEdbInfoListByIds([]int{edbInfoIdA, edbInfoIdB})
 	if err != nil {
@@ -126,10 +144,10 @@ func refreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
 
 	// 时间处理
 	switch config.DateType {
-	case 0:
+	case -1:
 		startDate = config.StartDate
 		endDate = config.EndDate
-	case 1:
+	case 0:
 		startDate = config.StartDate
 		endDate = ""
 	default:
@@ -160,54 +178,54 @@ func refreshAllCalculateResidualAnalysis(edbInfoId, source, subSource, formulaIn
 	residualEdbList, _, err := fillResidualChartInfo(config, fromEdbInfo, edbInfoMappingA, edbInfoMappingB, mappingEdbList)
 
 	// 映射指标 与 残差指标 同步刷新
-	for _, mapping := range configMapping {
-		var edbDataResidualAnalysisList []edbDataResidualAnalysis
-		if mapping.IndexType == 1 {
-			edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
-			if err != nil {
-				return err
-			}
+	//for _, mapping := range configMapping {
+	mapping := configMap[int64(edbInfoId)]
+	var edbDataResidualAnalysisList []edbDataResidualAnalysis
+	if mapping.IndexType == 1 {
+		edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
+		if err != nil {
+			return err
+		}
 
-			for _, edbData := range mappingEdbList[1].DataList {
-				value, _ := strconv.ParseFloat(edbData.Value, 64)
-				edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
-					EdbInfoId:     int(mapping.EdbInfoId),
-					EdbCode:       edbInfo.EdbCode,
-					DataTime:      edbData.DataTime,
-					Value:         value,
-					CreateTime:    time.Now(),
-					ModifyTime:    time.Now(),
-					DataTimeStamp: edbData.DataTimestamp,
-				})
-			}
+		for _, edbData := range mappingEdbList[0].DataList {
+			value, _ := strconv.ParseFloat(edbData.Value, 64)
+			edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
+				EdbInfoId:     int(mapping.EdbInfoId),
+				EdbCode:       edbInfo.EdbCode,
+				DataTime:      edbData.DataTime,
+				Value:         value,
+				CreateTime:    time.Now(),
+				ModifyTime:    time.Now(),
+				DataTimeStamp: edbData.DataTimestamp,
+			})
+		}
 
-			_, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
-			if err != nil {
-				return err
-			}
-		} else if mapping.IndexType == 2 {
-			edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
-			if err != nil {
-				return err
-			}
+		_, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
+		if err != nil {
+			return err
+		}
+	} else if mapping.IndexType == 2 {
+		edbInfo, err := GetEdbInfoById(int(mapping.EdbInfoId))
+		if err != nil {
+			return err
+		}
 
-			for _, edbData := range residualEdbList[1].DataList {
-				value, _ := strconv.ParseFloat(edbData.Value, 64)
-				edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
-					EdbInfoId:     int(mapping.EdbInfoId),
-					EdbCode:       edbInfo.EdbCode,
-					DataTime:      edbData.DataTime,
-					Value:         value,
-					CreateTime:    time.Now(),
-					ModifyTime:    time.Now(),
-					DataTimeStamp: edbData.DataTimestamp,
-				})
-			}
+		for _, edbData := range residualEdbList[0].DataList {
+			value, _ := strconv.ParseFloat(edbData.Value, 64)
+			edbDataResidualAnalysisList = append(edbDataResidualAnalysisList, edbDataResidualAnalysis{
+				EdbInfoId:     int(mapping.EdbInfoId),
+				EdbCode:       edbInfo.EdbCode,
+				DataTime:      edbData.DataTime,
+				Value:         value,
+				CreateTime:    time.Now(),
+				ModifyTime:    time.Now(),
+				DataTimeStamp: edbData.DataTimestamp,
+			})
+		}
 
-			_, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
-			if err != nil {
-				return err
-			}
+		_, err = AddResidualAnalysisData(edbDataResidualAnalysisList)
+		if err != nil {
+			return err
 		}
 	}
 
@@ -317,10 +335,20 @@ func fillResidualChartInfo(config ResidualAnalysisConfig, req *EdbInfo, edbInfoM
 			}
 		}
 	}
-
+	//reverse(mappingEdb)
 	return mappingEdb, R2, nil
 }
 
+// 双指针法
+func reverse(slice []EdbInfoList) {
+	left, right := 0, len(slice)-1
+	for left < right {
+		// 交换元素
+		slice[left], slice[right] = slice[right], slice[left]
+		left++
+		right--
+	}
+}
 func fillMappingChartInfo(config ResidualAnalysisConfig, req *EdbInfo, edbInfoMappingA *EdbInfoList, edbInfoMappingB *EdbInfoList, originalEdbList []EdbInfoList, indexADataMap map[string]*EdbData, startDate string, endDate string, fullADataList []*EdbDataList, fullBDataList []*EdbDataList) ([]EdbInfoList, float64, float64, float64, error) {
 	// 计算公式:Y=aX+b,Y为映射后的指标,X为自变量指标
 	// 正序:a=(L2-L1)/(R2-R1)	b=L2-R2*a
@@ -579,7 +607,7 @@ func fillOriginalChart(config ResidualAnalysisConfig, req *EdbInfo, mappingList
 
 		if v.EdbInfoId == edbInfoMappingB.EdbInfoId {
 			// 领先指标 dataList进行数据处理
-			if config.IndexType == 1 {
+			if config.IndexType == 2 {
 				if config.LeadValue < 0 {
 					return nil, nil, nil, fmt.Errorf("领先值不能小于0")
 				} else if config.LeadValue > 0 {