Kaynağa Gözat

区间计算

xyxie 7 ay önce
ebeveyn
işleme
c72cedb06c

+ 31 - 65
controllers/data_manage/range_analysis/chart_info.go

@@ -56,56 +56,13 @@ func (this *RangeChartChartInfoController) Preview() {
 		br.Msg = "请选择指标"
 		return
 	}
-	// todo 校验时间区间配置
-	switch req.ExtraConfig.DateRangeType {
-	case 0:
-	case 1:
-		if len(req.ExtraConfig.ManualDateConf) == 0 {
-			br.Msg = "请选择时间区间"
-			return
-		}
-		// 先按开始时间排序
-		sort.Sort(data_manage.ChartRangeAnalysisManualDateConfList(req.ExtraConfig.ManualDateConf))
-		// 校验日期
-		// 1.如果截止时间小于指标的截止日期,需要重置为指标的截止日期
-		// 2.时间区间不能重叠
-		for i := 1; i < len(req.ExtraConfig.ManualDateConf); i++ {
-			start1, err := time.Parse(utils.FormatDate, req.ExtraConfig.ManualDateConf[i-1].EndDate)
-			if err != nil {
-				br.Msg = "截止日期格式有误"
-				return
-			}
-			start2, err := time.Parse(utils.FormatDate, req.ExtraConfig.ManualDateConf[i].EndDate)
-			if err != nil {
-				br.Msg = "截止日期格式有误"
-				return
-			}
 
-			start3, err := time.Parse(utils.FormatDate, req.ExtraConfig.ManualDateConf[i].StartDate)
-			if err != nil {
-				br.Msg = "截止日期格式有误"
-				return
-			}
-			// 如果当前区间的开始时间小于等于前一个区间的结束时间,则存在重叠
-			if !start2.After(start1) || start3.Before(start1) {
-				br.Msg = "日期区间存在重叠"
-				return
-			}
-		}
-		//如果截止时间大于指标的截止日期,需要重置为指标的截止日期
-	case 2:
-		if req.ExtraConfig.YearDateConf.StartDay == "" || req.ExtraConfig.YearDateConf.EndDay == "" {
-			br.Msg = "请选择时间区间"
-			return
-		}
-		if _, e := time.Parse(utils.FormatMonthDay, req.ExtraConfig.YearDateConf.StartDay); e != nil {
-			br.Msg = "开始日期格式有误"
-			return
-		}
-		if _, e := time.Parse(utils.FormatMonthDay, req.ExtraConfig.YearDateConf.EndDay); e != nil {
-			br.Msg = "结束日期格式有误"
-			return
-		}
+	err, msg, isSendEmail := rangeServ.CheckChartRangeExtraConfig(req.ExtraConfig)
+	if err != nil {
+		br.Msg = msg
+		br.ErrMsg = err.Error()
+		br.IsSendEmail = isSendEmail
+		return
 	}
 
 	// 获取指标信息
@@ -1338,31 +1295,40 @@ func (this *RangeChartChartInfoController) MultipleGraphConfigSaveEdb() {
 	}
 
 	// todo 校验配置合法性
-	multipleGraphConfigEdbMapping, err := data_manage.GetMultipleGraphConfigEdbMappingByIdAndSource(req.MultipleGraphConfigId, 10)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	multipleGraphConfigEdbMappingList, err := data_manage.GetMultipleGraphConfigEdbMappingListByIdAndSource(req.MultipleGraphConfigId, 10)
+	if err != nil {
 		br.Msg = `保存失败`
-		br.ErrMsg = "获取配置与图表的关联关系失败,ERR:" + err.Error()
+		br.ErrMsg = "查询配置与图表的关联关系失败,ERR:" + err.Error()
 		return
 	}
-	err = nil
-	var isAdd bool
 	var edbInfoId int
-	if multipleGraphConfigEdbMapping == nil {
-		isAdd = true
+	addEdbInfoIds := make([]int, 0)
+	updateEdbInfoIds := make([]int, 0)
+	deleteEdbInfoIds := make([]int, 0)
+	if len(multipleGraphConfigEdbMappingList) == 0 {
+		// 需要新增的指标
 	} else {
-		edbInfo, err := data_manage.GetEdbInfoById(multipleGraphConfigEdbMapping.EdbInfoId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
+		// 需要更新的指标
+		// 查询原先所有指标的来源指标,进一步筛选出需要新增,或者更新 或者删除的指标
+		oldEdbInfoIds := make([]int, 0)
+		for _, v := range multipleGraphConfigEdbMappingList {
+			oldEdbInfoIds = append(oldEdbInfoIds, v.EdbInfoId)
+		}
+
+		oldEdbCalculateMappingList, e := data_manage.GetEdbInfoCalculateMappingListByEdbInfoIds(oldEdbInfoIds)
+		if e != nil {
 			br.Msg = `保存失败`
-			br.ErrMsg = "获取图表信息失败,ERR:" + err.Error()
+			br.ErrMsg = "获取计算指标信息失败,ERR:" + e.Error()
 			return
 		}
+
 		// 说明指标还在,没有被删除
-		if edbInfo != nil && !req.IsSaveAs {
-			edbInfoId = multipleGraphConfigEdbMapping.EdbInfoId
-			req.EdbName = edbInfo.EdbName
-			req.ClassifyId = edbInfo.ClassifyId
-			req.Frequency = edbInfo.Frequency
-			req.Unit = edbInfo.Unit
+		oldFromEdbInfoIds := make([]int, 0)
+		for _, v := range oldEdbCalculateMappingList {
+			if !utils.InArrayByInt(edbInfoIds, v.FromEdbInfoId) {
+				deleteEdbInfoIds = append(deleteEdbInfoIds, v.EdbInfoId)
+			}
+			oldFromEdbInfoIds = append(oldFromEdbInfoIds, v.FromEdbInfoId)
 		}
 	}