Browse Source

残差分析bug修改

gmy 4 months ago
parent
commit
29c077d8c0

+ 6 - 0
controllers/residual_analysis/residual_analysis.go

@@ -41,6 +41,12 @@ func (this *ResidualAnalysisController) ResidualAnalysisPreview() {
 		return
 	}
 
+	if req.EdbInfoIdA == req.EdbInfoIdB {
+		br.Msg = "自变量指标和因变量指标不能相同"
+		br.ErrMsg = "自变量指标和因变量指标不能相同"
+		return
+	}
+
 	resp, err := residual_analysis_service.ResidualAnalysisPreview(req)
 	if err != nil {
 		br.Ret = 403

+ 24 - 3
services/residual_analysis_service/residual_analysis_service.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/utils"
 	"fmt"
 	"math"
+	"sort"
 	"strconv"
 	"time"
 )
@@ -295,16 +296,19 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
 		afterIndexData := dataList[index+1]
 
 		// 从最早时间开始,补充时间为自然日
-		if utils.IsMoreThanOneDay(beforeIndexData.DataTime, afterIndexData.DataTime) {
+		for utils.IsMoreThanOneDay(beforeIndexData.DataTime, afterIndexData.DataTime) {
 			// 创建补充数据
 			replenishIndexData := data_manage.EdbDataList{
-				DataTime:      utils.GetNextDay(beforeIndexData.DataTime),
+				DataTime:      utils.GetNextDay(beforeIndexData.DataTime), // 计算下一个自然日
 				DataTimestamp: time.Now().UnixMilli(),
-				Value:         beforeIndexData.Value,
+				Value:         beforeIndexData.Value, // 可以选择使用前一天的值,或者其他逻辑来计算值
 			}
 
 			// 将补充数据加入补充数据列表
 			replenishDataList = append(replenishDataList, &replenishIndexData)
+
+			// 更新 beforeIndexData 为新创建的补充数据
+			beforeIndexData = &replenishIndexData
 		}
 	}
 
@@ -312,6 +316,7 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
 	dataList = append(dataList, replenishDataList...)
 
 	// 排序
+	sort.Sort(ByDataTime(dataList))
 
 	// 拟合残差 计算a,b
 	var coordinateList []utils.Coordinate
@@ -378,6 +383,22 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
 	return mappingEdbList, a, b, r, nil
 }
 
+type ByDataTime []*data_manage.EdbDataList
+
+func (a ByDataTime) Len() int {
+	return len(a)
+}
+
+func (a ByDataTime) Swap(i, j int) {
+	a[i], a[j] = a[j], a[i]
+}
+
+func (a ByDataTime) Less(i, j int) bool {
+	t1 := utils.StringToTime(a[i].DataTime)
+	t2 := utils.StringToTime(a[j].DataTime)
+	return t1.Before(t2)
+}
+
 func fillOriginalChart(req residual_analysis_model.ResidualAnalysisReq, mappingList []*data_manage.ChartEdbInfoMapping, startDate string, endDate string, edbInfoMappingA *data_manage.ChartEdbInfoMapping, edbInfoMappingB *data_manage.ChartEdbInfoMapping, originalEdbList []residual_analysis_model.ResidualAnalysisChartEdbInfoMapping) ([]residual_analysis_model.ResidualAnalysisChartEdbInfoMapping, error) {
 	for _, v := range mappingList {
 		var edbInfoMapping residual_analysis_model.ResidualAnalysisChartEdbInfoMapping