فهرست منبع

区间计算指标保存

xyxie 7 ماه پیش
والد
کامیت
7256958c6d

+ 228 - 0
controllers/data_manage/range_analysis/chart_info.go

@@ -5,6 +5,7 @@ import (
 	"eta/eta_api/controllers"
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/request"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/data"
 	"eta/eta_api/services/data/data_manage_permission"
@@ -1275,3 +1276,230 @@ func (this *RangeChartChartInfoController) Refresh() {
 	br.Success = true
 	br.Msg = "刷新成功"
 }
+
+// MultipleGraphConfigSaveEdb
+// @Title 保存指标接口
+// @Description 保存指标接口
+// @Param	request	body request.SaveMultipleGraphEdbReq true "type json string"
+// @Success Ret=200 返回指标id
+// @router /edb/save [post]
+func (this *RangeChartChartInfoController) MultipleGraphConfigSaveEdb() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	var req data_manage.SaveChartRangeAnalysisEdbReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	cacheKey := "CACHE_CHART_EDB_INFO_ADD_" + strconv.Itoa(sysUser.AdminId)
+	if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
+		br.Msg = "系统处理中,请稍后重试!"
+		br.ErrMsg = "系统处理中,请稍后重试!" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
+		return
+	}
+	defer func() {
+		_ = utils.Rc.Delete(cacheKey)
+	}()
+	edbInfoIds := make([]int, 0)
+	for _, v := range req.EdbInfoList {
+		edbInfoIds = append(edbInfoIds, v.EdbInfoId)
+	}
+	mappingList, err := data_manage.GetChartEdbMappingListByEdbInfoIdList(edbInfoIds)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
+		return
+	}
+	edbInfoMap := make(map[int]*data_manage.ChartEdbInfoMapping, 0)
+	for _, v := range mappingList {
+		edbInfoMap[v.EdbInfoId] = v
+	}
+
+	for _, v := range req.EdbInfoList {
+		if _, ok := edbInfoMap[v.EdbInfoId]; !ok {
+			br.Msg = "指标信息不存在"
+			br.ErrMsg = "指标信息不存在,EdbInfoId:" + strconv.Itoa(v.EdbInfoId)
+			br.IsSendEmail = false
+			return
+		}
+	}
+
+	// todo 校验配置合法性
+
+	multipleGraphConfigEdbMapping, err := data_manage.GetMultipleGraphConfigEdbMappingByIdAndSource(req.MultipleGraphConfigId, 10)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = `保存失败`
+		br.ErrMsg = "获取配置与图表的关联关系失败,ERR:" + err.Error()
+		return
+	}
+	err = nil
+	var isAdd bool
+	var edbInfoId int
+	if multipleGraphConfigEdbMapping == nil {
+		isAdd = true
+	} else {
+		edbInfo, err := data_manage.GetEdbInfoById(multipleGraphConfigEdbMapping.EdbInfoId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = `保存失败`
+			br.ErrMsg = "获取图表信息失败,ERR:" + err.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
+		}
+	}
+
+	// 关联指标
+	edbInfoIdArr := []data_manage.EdbInfoFromTag{
+		{
+			EdbInfoId: edbInfoMappingA.EdbInfoId,
+			FromTag:   "A",
+			MoveValue: 0,
+		}, {
+			EdbInfoId: edbInfoMappingB.EdbInfoId,
+			FromTag:   "B",
+			MoveValue: 0,
+		},
+	}
+
+	calculateFormula := request.EdbCalculateFormula{
+		BaseCalculateValue: correlationConf.CalculateValue,
+		BaseCalculateUnit:  correlationConf.CalculateUnit,
+		LeadValue:          rollingCorrelation.LeadValue,
+		LeadUnit:           rollingCorrelation.LeadUnit,
+		CalculateValue:     rollingCorrelation.CalculateValue,
+		CalculateUnit:      rollingCorrelation.CalculateUnit,
+	}
+	calculateFormulaByte, err := json.Marshal(calculateFormula)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	var respItem *data.AddPredictEdbDataResponse
+	if edbInfoId <= 0 || req.IsSaveAs {
+		req2 := &data_manage.EdbInfoCalculateBatchSaveReqByEdbLib{
+			AdminId:      sysUser.AdminId,
+			AdminName:    sysUser.RealName,
+			EdbName:      req.EdbName,
+			Frequency:    req.Frequency,
+			Unit:         req.Unit,
+			ClassifyId:   req.ClassifyId,
+			Formula:      string(calculateFormulaByte),
+			Source:       utils.DATA_SOURCE_CALCULATE_CORRELATION,
+			EdbInfoIdArr: edbInfoIdArr,
+			Calendar:     `公历`,
+		}
+
+		// 调用指标库去添加
+		reqJson, err := json.Marshal(req2)
+		if err != nil {
+			br.Msg = "参数解析异常!"
+			br.ErrMsg = "参数解析失败,Err:" + err.Error()
+			return
+		}
+		respItem, err = data.BatchSaveEdbCalculateData(string(reqJson), this.Lang)
+		if err != nil {
+			br.Msg = "新增失败"
+			br.ErrMsg = "新增失败,Err:" + err.Error()
+			return
+		}
+	} else {
+		req2 := &data_manage.EdbInfoCalculateBatchEditReqByEdbLib{
+			EdbInfoId:    edbInfoId,
+			EdbName:      req.EdbName,
+			Frequency:    req.Frequency,
+			Unit:         req.Unit,
+			ClassifyId:   req.ClassifyId,
+			Formula:      string(calculateFormulaByte),
+			Source:       utils.DATA_SOURCE_CALCULATE_CORRELATION,
+			EdbInfoIdArr: edbInfoIdArr,
+			Calendar:     `公历`,
+		}
+
+		// 调用指标库去更新
+		reqJson, err := json.Marshal(req2)
+		if err != nil {
+			br.Msg = "参数解析异常!"
+			br.ErrMsg = "参数解析失败,Err:" + err.Error()
+			return
+		}
+		respItem, err = data.BatchEditEdbCalculateData(string(reqJson), this.Lang)
+		if err != nil {
+			br.Msg = "编辑失败"
+			br.ErrMsg = "编辑失败,Err:" + err.Error()
+			return
+		}
+	}
+	if respItem == nil {
+		br.Msg = "保存失败"
+		br.ErrMsg = "保存失败"
+		return
+	}
+	if respItem.Ret != 200 {
+		br.Msg = respItem.Msg
+		br.ErrMsg = respItem.ErrMsg
+		return
+	}
+
+	resp := respItem.Data
+
+	//添加es
+	data.AddOrEditEdbInfoToEs(resp.EdbInfoId)
+
+	// 如果不是另存为的话,那么需要建立配置与指标的关系
+	if !req.IsSaveAs {
+		// 如果指标没有建立关联关系,那么就需要添加关系
+		if isAdd {
+			multipleGraphConfigEdbMapping = &data_manage.MultipleGraphConfigEdbMapping{
+				//Id:                    0,
+				MultipleGraphConfigId: req.MultipleGraphConfigId,
+				EdbInfoId:             resp.EdbInfoId,
+				Source:                req.Source,
+				ModifyTime:            time.Now(),
+				CreateTime:            time.Now(),
+			}
+			err = data_manage.AddMultipleGraphConfigEdbMapping(multipleGraphConfigEdbMapping)
+			if err != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = "保存配置与指标的关联关系失败,ERR:" + err.Error()
+				return
+			}
+		} else if multipleGraphConfigEdbMapping != nil {
+			multipleGraphConfigEdbMapping.EdbInfoId = resp.EdbInfoId
+			multipleGraphConfigEdbMapping.ModifyTime = time.Now()
+			err = multipleGraphConfigEdbMapping.Update([]string{"EdbInfoId", "ModifyTime"})
+			if err != nil {
+				br.Msg = "保存失败"
+				br.ErrMsg = "保存配置与指标的关联关系失败,ERR:" + err.Error()
+				return
+			}
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+	br.Data = resp
+	br.IsAddLog = true
+}

+ 4 - 2
models/data_manage/chart_info_range_analysis.go

@@ -283,6 +283,8 @@ func EditRangeChartInfoAndMapping(req *EditChartInfoReq, edbInfoIdStr, lang stri
 
 // SaveChartRangeAnalysisEdbReq 指标保存请求
 type SaveChartRangeAnalysisEdbReq struct {
-	EdbInfoList []*EdbInfoBase `description:"指标列表"`
-	ExtraConfig ChartRangeAnalysisExtraConf
+	EdbInfoList           []*EdbInfoBase `description:"指标列表"`
+	ExtraConfig           ChartRangeAnalysisExtraConf
+	MultipleGraphConfigId int  `description:"配置id"`
+	IsSaveAs              bool `description:"是否另存为,true的话,就是另存为,不会建立与配置的关系"`
 }

+ 1 - 1
models/data_manage/multiple_graph_config_edb_mapping.go

@@ -10,7 +10,7 @@ type MultipleGraphConfigEdbMapping struct {
 	Id                    int       `orm:"column(id);pk"`
 	MultipleGraphConfigId int       `description:"多图配置id"`
 	EdbInfoId             int       `description:"指标id"`
-	Source                int       `description:"来源,1:曲线图,2:相关性图;3:滚动相关性图1;4:滚动相关性图2;"`
+	Source                int       `description:"来源,1:曲线图,2:相关性图;3:滚动相关性图1;4:滚动相关性图2;10:区间计算指标"`
 	ModifyTime            time.Time `description:"最近一次修改时间"`
 	CreateTime            time.Time `description:"添加时间"`
 }