فهرست منبع

Merge branch 'bugfix_7333' into debug

kobe6258 2 ماه پیش
والد
کامیت
e84c579b40
2فایلهای تغییر یافته به همراه79 افزوده شده و 56 حذف شده
  1. 11 8
      models/calculate_residual_analysis_config_mapping.go
  2. 68 48
      models/edb_data_residual_analysis.go

+ 11 - 8
models/calculate_residual_analysis_config_mapping.go

@@ -30,15 +30,18 @@ func GetConfigMappingListByConditionNotBase(edbInfoId int) (configMapping []Calc
 	//	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`
+	//	// AND index_type != 3
+	//	// AND index_type != 4`
 	sql := `
-	SELECT
-		* 
-	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 {

+ 68 - 48
models/edb_data_residual_analysis.go

@@ -90,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 {
@@ -168,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
 		}
 	}
 
@@ -325,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