Prechádzať zdrojové kódy

映射残差 领先指标

gmy 3 mesiacov pred
rodič
commit
3338f553c1

+ 0 - 0
controllers/residual_analysis/residual_analysis.go → controllers/residual_analysis/residual_analysis_controller.go


+ 54 - 2
services/residual_analysis_service/residual_analysis_service.go

@@ -265,7 +265,7 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
 	}
 
 	// 领先指标 dataList进行数据处理
-	if req.IndexType == 2 {
+	/*if req.IndexType == 2 {
 		if req.LeadValue < 0 {
 			return nil, a, b, r, fmt.Errorf("领先值不能小于0")
 		} else if req.LeadValue > 0 {
@@ -282,9 +282,10 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
 				case "年":
 					indexData.DataTime = utils.TimeToString(utils.AddDate(utils.StringToTime(indexData.DataTime), req.LeadValue, 0), utils.YearMonthDay)
 				}
+				indexData.DataTimestamp = utils.StringToTime(indexData.DataTime).UnixMilli()
 			}
 		}
-	}
+	}*/
 
 	// 指标B数据补充
 	// 新建一个切片来保存补充的数据
@@ -317,6 +318,9 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
 	// 将补充数据插入原始数据列表
 	dataList = append(dataList, replenishDataList...)
 
+	// 填充映射指标值 使得时间长度一致
+	dataList = FillDataBList(dataList, edbInfoMappingA)
+
 	// 排序
 	sort.Sort(ByDataTime(dataList))
 
@@ -385,6 +389,31 @@ func fillMappingChartInfo(req residual_analysis_model.ResidualAnalysisReq, edbIn
 	return mappingEdbList, a, b, r, nil
 }
 
+// FillDataBList 填充B的数据 使得与A的时间保持一致
+func FillDataBList(dataList []*data_manage.EdbDataList, edbInfoMappingA *data_manage.ChartEdbInfoMapping) []*data_manage.EdbDataList {
+	dataAList, ok := edbInfoMappingA.DataList.([]*data_manage.EdbDataList)
+	if !ok {
+		return nil
+	}
+
+	for utils.StringToTime(dataList[len(dataList)-1].DataTime).Before(utils.StringToTime(dataAList[len(dataAList)-1].DataTime)) {
+		// 使用A的时间填充时间差
+		timeDiff := utils.GetNextDayN(dataList[len(dataList)-1].DataTime, 1)
+
+		// 创建新的数据点并填充 前值填充
+		newDataPoint := &data_manage.EdbDataList{
+			DataTime:      timeDiff,
+			Value:         dataList[len(dataList)-1].Value,
+			DataTimestamp: utils.StringToTime(timeDiff).UnixMilli(),
+		}
+
+		// 将新数据点添加到dataList末尾
+		dataList = append(dataList, newDataPoint)
+	}
+
+	return dataList
+}
+
 type ByDataTime []*data_manage.EdbDataList
 
 func (a ByDataTime) Len() int {
@@ -425,6 +454,29 @@ func fillOriginalChart(req residual_analysis_model.ResidualAnalysisReq, mappingL
 			edbInfoMapping.ChartColor = `#F00`
 			edbInfoMapping.ChartWidth = 1
 
+			// 领先指标 dataList进行数据处理
+			if req.IndexType == 2 {
+				if req.LeadValue < 0 {
+					return nil, fmt.Errorf("领先值不能小于0")
+				} else if req.LeadValue > 0 {
+					for _, indexData := range dataList {
+						switch req.LeadFrequency {
+						case "天":
+							indexData.DataTime = utils.GetNextDayN(indexData.DataTime, req.LeadValue)
+						case "周":
+							indexData.DataTime = utils.GetNextDayN(indexData.DataTime, req.LeadValue*7)
+						case "月":
+							indexData.DataTime = utils.TimeToString(utils.AddDate(utils.StringToTime(indexData.DataTime), 0, req.LeadValue), utils.YearMonthDay)
+						case "季":
+							indexData.DataTime = utils.TimeToString(utils.AddDate(utils.StringToTime(indexData.DataTime), 0, req.LeadValue*3), utils.YearMonthDay)
+						case "年":
+							indexData.DataTime = utils.TimeToString(utils.AddDate(utils.StringToTime(indexData.DataTime), req.LeadValue, 0), utils.YearMonthDay)
+						}
+						indexData.DataTimestamp = utils.StringToTime(indexData.DataTime).UnixMilli()
+					}
+				}
+			}
+
 			edbInfoMappingB.DataList = dataList
 		} else {
 			edbInfoMappingA.DataList = dataList