Browse Source

批量设置被引用的指标刷新状态

xyxie 9 months ago
parent
commit
ee37b7e127

+ 129 - 1
controllers/data_manage/edb_info_refresh.go

@@ -606,7 +606,135 @@ func (c *EdbInfoController) SaveEdbRefreshStatusSingle() {
 	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
 		err = data_manage.ModifyMysteelChemicalUpdateStatusByEdbInfoId(edbInfo.EdbInfoId, isStop, edbInfo.EdbCode, calculateEdbIdList)
 	case utils.DATA_SOURCE_WIND: // wind
-		err = data_manage.WindEdbInfoUpdateStatusByEdbInfoId(edbInfo.EdbInfoId, isStop, edbInfo.SubSource, calculateEdbIdList)
+		err = data_manage.WindEdbInfoUpdateStatusByEdbInfoId([]int{edbInfo.EdbInfoId}, isStop, calculateEdbIdList)
+	default:
+		br.Msg = "暂不支持设置其他来源的指标"
+		return
+	}
+	if err != nil {
+		br.Msg = `保存失败`
+		br.ErrMsg = "保存失败,Err:" + err.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "保存成功"
+}
+
+// SaveRelationEdbRefreshStatus
+// @Title 批量设置被引用的指标刷新状态接口
+// @Description 批量设置被引用的指标刷新状态接口
+// @Param	request	body data_manage.SaveEdbRefreshStatusReq true "type json string"
+// @Success 200 {object} data_manage.RefreshBaseEdbInfoResp
+// @router /edb_info/relation/refresh/save [post]
+func (c *EdbInfoController) SaveRelationEdbRefreshStatus() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		c.Data["json"] = br
+		c.ServeJSON()
+	}()
+
+	var req request.SaveRelationEdbRefreshStatusReq
+	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	if req.Source <= 0 {
+		br.Msg = "来源不能为空"
+		br.IsSendEmail = false
+		return
+	}
+	switch req.Source {
+	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL, utils.DATA_SOURCE_WIND: // wind
+	default:
+		br.Msg = "暂不支持设置其他来源的指标"
+		return
+	}
+	// todo 批量设置刷新状态修改
+	edbIdList := make([]int, 0)
+	edbCodeList := make([]string, 0)
+	// 指标id列表
+	if req.IsSelectAll {
+		// 如果是列表全选
+		_, edbList, err := data.GetEdbRelationList(req.Source, req.ClassifyId, req.SysUserId, req.Frequency, req.Keyword, req.Status, 0, 100000, "", "")
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取数据失败,Err:" + err.Error()
+			return
+		}
+
+		// 不配置的指标id
+		notIdMap := make(map[int]int, 0)
+		for _, v := range req.EdbSelectIdList {
+			notIdMap[v] = v
+		}
+
+		for _, v := range edbList {
+			_, ok := notIdMap[v.EdbInfoId]
+			// 在不配置的指标id列表内的话,那就过滤
+			if ok {
+				continue
+			}
+
+			// 加入到待配置的指标列表id
+			edbIdList = append(edbIdList, v.EdbInfoId)
+			edbCodeList = append(edbCodeList, v.EdbCode)
+		}
+	} else {
+		edbIdList = req.EdbSelectIdList
+		if req.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			//查询指标信息
+			edbList, e := data_manage.GetEdbInfoByIdList(edbIdList)
+			if e != nil && e.Error() != utils.ErrNoRow() {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取数据失败,Err:" + e.Error()
+				return
+			}
+			for _, v := range edbList {
+				edbCodeList = append(edbCodeList, v.EdbCode)
+			}
+		}
+	}
+
+	if len(edbIdList) <= 0 {
+		br.Msg = "指标不能为空"
+		br.IsSendEmail = false
+		return
+	}
+
+	isStop := 0
+	if req.ModifyStatus == `暂停` {
+		isStop = 1
+	}
+
+	// 查询计算指标ID
+	// 查询相关的计算指标
+	calculateEdbIdList := make([]int, 0)
+	calculateEdb, err := data_manage.GetAllCalculateByEdbInfoIds(edbIdList)
+	if err != nil {
+		if err.Error() == utils.ErrNoRow() {
+			br.Msg = "指标不存在"
+			return
+		}
+		br.Msg = "查询计算指标失败"
+		br.ErrMsg = "查询计算指标失败,Err:" + err.Error()
+	}
+	// 遍历指标列表,把计算指标id整理成数组
+	if len(calculateEdb) > 0 {
+		for _, calculateEdbInfo := range calculateEdb {
+			calculateEdbIdList = append(calculateEdbIdList, calculateEdbInfo.EdbInfoId)
+		}
+	}
+
+	switch req.Source {
+	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联化工
+		err = data_manage.ModifyMysteelChemicalUpdateStatusByEdbInfoIds(edbIdList, isStop, edbCodeList, calculateEdbIdList)
+	case utils.DATA_SOURCE_WIND: // wind
+		err = data_manage.WindEdbInfoUpdateStatusByEdbInfoId(edbIdList, isStop, calculateEdbIdList)
 	default:
 		br.Msg = "暂不支持设置其他来源的指标"
 		return

+ 15 - 6
models/data_manage/edb_data_wind.go

@@ -65,7 +65,7 @@ type EdbDataFromWind struct {
 	ErrMsg string
 }
 
-func WindEdbInfoUpdateStatusByEdbInfoId(edbInfoId, isStop, subSource int, calculateEdbInfoIds []int) (err error) {
+func WindEdbInfoUpdateStatusByEdbInfoId(edbInfoIds []int, isStop int, calculateEdbInfoIds []int) (err error) {
 	o, err := orm.NewOrmUsingDB("data").Begin()
 	if err != nil {
 		return
@@ -79,14 +79,23 @@ func WindEdbInfoUpdateStatusByEdbInfoId(edbInfoId, isStop, subSource int, calcul
 	}()
 
 	// 更改指标的更新状态
-	sql := ` UPDATE edb_info SET no_update = ? WHERE source = ? AND sub_source= ? AND edb_info_id=? `
-	_, err = o.Raw(sql, isStop, utils.DATA_SOURCE_WIND, subSource, edbInfoId).Exec()
-	if err != nil {
-		return
+	if len(edbInfoIds) == 1 {
+		sql := ` UPDATE edb_info SET no_update = ? WHERE source = ? AND edb_info_id=? `
+		_, err = o.Raw(sql, isStop, utils.DATA_SOURCE_WIND, edbInfoIds[0]).Exec()
+		if err != nil {
+			return
+		}
+	} else {
+		sql := ` UPDATE edb_info SET no_update = ? WHERE source = ? AND edb_info_id IN (` + utils.GetOrmInReplace(len(edbInfoIds)) + `) `
+		_, err = o.Raw(sql, isStop, utils.DATA_SOURCE_WIND, edbInfoIds).Exec()
+		if err != nil {
+			return
+		}
 	}
+
 	if len(calculateEdbInfoIds) > 0 {
 		// 批量更新相关联的指标ID
-		sql = ` UPDATE edb_info SET no_update = ? WHERE edb_info_id IN (` + utils.GetOrmInReplace(len(calculateEdbInfoIds)) + `) `
+		sql := ` UPDATE edb_info SET no_update = ? WHERE edb_info_id IN (` + utils.GetOrmInReplace(len(calculateEdbInfoIds)) + `) `
 		_, err = o.Raw(sql, isStop, calculateEdbInfoIds).Exec()
 		if err != nil {
 			return

+ 11 - 0
models/data_manage/edb_info.go

@@ -1005,6 +1005,17 @@ func GetAllCalculateByEdbInfoId(edbInfoId int) (mappingList []*EdbInfoCalculateM
 	return
 }
 
+// 获取指标的所有计算指标,以及计算指标所依赖计算指标
+func GetAllCalculateByEdbInfoIds(edbInfoIds []int) (mappingList []*EdbInfoCalculateMapping, err error) {
+	o := orm.NewOrmUsingDB("data")
+	msql := ` SELECT * FROM edb_info_calculate_mapping WHERE from_edb_info_id in (` + utils.GetOrmInReplace(len(edbInfoIds)) + `)  GROUP BY edb_info_id `
+	_, err = o.Raw(msql, edbInfoIds).QueryRows(&mappingList)
+	if err != nil {
+		return
+	}
+	return
+}
+
 func GetAllCalculate(edbInfoId int, edbInfoMap map[int]int) (mappingList []*EdbInfoCalculateMapping, err error) {
 	calculateList, err := GetAllCalculateByEdbInfoId(edbInfoId)
 	if err != nil && err.Error() != utils.ErrNoRow() {

+ 1 - 0
models/data_manage/edb_info_relation.go

@@ -112,6 +112,7 @@ type BaseRelationEdbInfo struct {
 	EdbInfoId       int
 	ClassifyId      int    `description:"指标分类id"`
 	EdbName         string `description:"指标名称"`
+	EdbCode         string `description:"指标编码"`
 	SysUserId       int    `description:"创建人id"`
 	SysUserRealName string `description:"创建人姓名"`
 	Frequency       string `description:"频度"`

+ 14 - 0
models/data_manage/edb_refresh/request/edb_info_refresh.go

@@ -57,3 +57,17 @@ type SaveEdbRefreshStatusSingleReq struct {
 	EdbInfoId    int
 	ModifyStatus string `description:"需要更改的状态,枚举值:启用、暂停"`
 }
+
+// SaveRelationEdbRefreshStatusReq
+// @Description: 设置被引用的指标的刷新状态
+type SaveRelationEdbRefreshStatusReq struct {
+	Source          int    `description:"来源"`
+	ClassifyId      string `description:"分类id,支持多选,用英文,隔开"`
+	SysUserId       string `description:"操作人id,支持多选,用英文,隔开"`
+	Frequency       string `description:"频度,支持多选,用英文,隔开"`
+	Status          string `description:"状态,枚举值:启用、暂停"`
+	Keyword         string `description:"关键字"`
+	IsSelectAll     bool   `description:"是否选择所有指标"`
+	EdbSelectIdList []int  `description:"选择的指标id列表"`
+	ModifyStatus    string `description:"需要更改的状态,枚举值:启用、暂停"`
+}

+ 38 - 0
models/data_manage/mysteel_chemical_index.go

@@ -570,3 +570,41 @@ func ModifyMysteelChemicalUpdateStatusByEdbInfoId(edbInfoId, isStop int, edbCode
 
 	return
 }
+
+func ModifyMysteelChemicalUpdateStatusByEdbInfoIds(edbInfoIds []int, isStop int, edbCodes []string, calculateEdbInfoIds []int) (err error) {
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+			return
+		}
+		_ = o.Commit()
+	}()
+
+	// 更改数据源的更新状态
+	sql := ` UPDATE base_from_mysteel_chemical_index SET is_stop = ? WHERE index_code IN (` + utils.GetOrmInReplace(len(edbCodes)) + `) `
+	_, err = o.Raw(sql, isStop, edbCodes).Exec()
+	if err != nil {
+		return
+	}
+
+	// 更改指标的更新状态
+	sql = ` UPDATE edb_info SET no_update = ? WHERE source = ? AND edb_info_id IN (` + utils.GetOrmInReplace(len(edbInfoIds)) + `) `
+	_, err = o.Raw(sql, isStop, utils.DATA_SOURCE_MYSTEEL_CHEMICAL, edbInfoIds).Exec()
+	if err != nil {
+		return
+	}
+	if len(calculateEdbInfoIds) > 0 {
+		// 批量更新相关联的指标ID
+		sql = ` UPDATE edb_info SET no_update = ? WHERE edb_info_id IN (` + utils.GetOrmInReplace(len(calculateEdbInfoIds)) + `) `
+		_, err = o.Raw(sql, isStop, calculateEdbInfoIds).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}

+ 9 - 0
routers/commentsRouter.go

@@ -3526,6 +3526,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
+        beego.ControllerComments{
+            Method: "SaveRelationEdbRefreshStatus",
+            Router: `/edb_info/relation/refresh/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:EdbInfoController"],
         beego.ControllerComments{
             Method: "EdbInfoReplaceCheck",