kobe6258 1 nedēļu atpakaļ
vecāks
revīzija
062e3ab850
1 mainītis faili ar 35 papildinājumiem un 41 dzēšanām
  1. 35 41
      services/data/predict_edb_info_rule.go

+ 35 - 41
services/data/predict_edb_info_rule.go

@@ -1599,71 +1599,65 @@ func GetChartPredictEdbInfoDataListByRuleDynamicYOYComparisonOrDifference(ruleTy
 		return
 	}
 	if len(dynamicYOYComparisonIndexDataList) <= 0 {
-		err = errors.New(fmt.Sprintf("选择%s指标没有预测数据", yoyType))
+		//err = errors.New(fmt.Sprintf("选择%s指标没有预测数据", yoyType))
 		return
 	} else {
 		for _, v := range dynamicYOYComparisonIndexDataList {
 			DynamicCalculateDataList[v.DataTime] = decimal.NewFromFloat(v.Value)
 		}
 	}
-	//检查是不存在同期数据
-	for _, date := range dayList {
-		dayStr := date.Format(utils.FormatDate)
-		if _, ok := DynamicCalculateDataList[dayStr]; !ok {
-			err = errors.New(fmt.Sprintf("选择%s指标没有同期预测数据,日期:[%s]", yoyType, dayStr))
-			return
-		}
-	}
+	var predictDayList []time.Time
 	//获取上一期的同期数据
 	for _, date := range dayList {
 		preDate := date.AddDate(-1, 0, 0)
 		preDateStr := preDate.Format(utils.FormatDate)
 		if preValue, ok := existMap[preDateStr]; ok { //上一年同期找到
 			baseDynamicDataList[preDateStr] = decimal.NewFromFloat(preValue)
+			predictDayList = append(predictDayList, date)
 		} else {
 			if baseDynamicDataList[preDateStr], ok = getReplaceValue(existMap, 0, -1, preDate); !ok {
-				err = errors.New(fmt.Sprintf("指标没有历史同期数据,Date:[%s]", preDateStr))
-				return
+				continue
 			}
+			predictDayList = append(predictDayList, date)
 		}
 	}
 
 	//获取后面的预测数据
 
-	for k, currentDate := range dayList {
+	for k, currentDate := range predictDayList {
 		var calculateValue decimal.Decimal
 		var dateStr = currentDate.Format(utils.FormatDate)
-		switch ruleType {
-		case 17:
-			calculateValue = baseDynamicDataList[dateStr].Mul(DynamicCalculateDataList[dateStr].Add(decimal.NewFromInt(1)))
-		case 18:
-			calculateValue = baseDynamicDataList[dateStr].Add(DynamicCalculateDataList[dateStr])
-		default:
-			err = errors.New("计算规则不存在")
-			return
-		}
-
-		tmpData := &data_manage.EdbDataList{
-			EdbDataId:     edbInfoId + 100000 + index + k,
-			EdbInfoId:     edbInfoId,
-			DataTime:      currentDate.Format(utils.FormatDate),
-			DataTimestamp: currentDate.UnixNano() / 1e6,
-		}
-		//currentItem := existMap[av]
-		var val = calculateValue.InexactFloat64()
-		tmpData.Value = val
-		newPredictEdbInfoData = append(newPredictEdbInfoData, tmpData)
-		existMap[tmpData.DataTime] = val
-		if k == 0 {
-			minValue = val
-			maxValue = val
-		} else {
-			// 最大最小值
-			if val < minValue {
-				minValue = val
+		if _, ok := DynamicCalculateDataList[dateStr]; !ok {
+			switch ruleType {
+			case 17:
+				calculateValue = baseDynamicDataList[dateStr].Mul(DynamicCalculateDataList[dateStr].Add(decimal.NewFromInt(1)))
+			case 18:
+				calculateValue = baseDynamicDataList[dateStr].Add(DynamicCalculateDataList[dateStr])
+			default:
+				err = errors.New("计算规则不存在")
+				return
 			}
-			if val > maxValue {
+			tmpData := &data_manage.EdbDataList{
+				EdbDataId:     edbInfoId + 100000 + index + k,
+				EdbInfoId:     edbInfoId,
+				DataTime:      currentDate.Format(utils.FormatDate),
+				DataTimestamp: currentDate.UnixNano() / 1e6,
+			}
+			var val = calculateValue.InexactFloat64()
+			tmpData.Value = val
+			newPredictEdbInfoData = append(newPredictEdbInfoData, tmpData)
+			existMap[tmpData.DataTime] = val
+			if k == 0 {
+				minValue = val
 				maxValue = val
+			} else {
+				// 最大最小值
+				if val < minValue {
+					minValue = val
+				}
+				if val > maxValue {
+					maxValue = val
+				}
 			}
 		}
 	}