Răsfoiți Sursa

Merge branch 'feature/eta1.9.1_edb_refresh' into debug

xyxie 8 luni în urmă
părinte
comite
555203435a

+ 62 - 53
controllers/data_manage/edb_info_refresh.go

@@ -519,13 +519,43 @@ func (c *EdbInfoController) SaveEdbRefreshStatus() {
 		isStop = 1
 	}
 
+	if len(edbIdList) <= 0 {
+		br.Msg = "指标不能为空"
+		br.IsSendEmail = false
+		return
+	}
+	//查询计算指标信息
+	calculateEdbIdList := make([]int, 0)
+	if isStop == 1 {
+		fromEdbIdList := make([]int, 0)
+		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 {
+			if v.EdbInfoType == 0 && v.EdbType == 1 {
+				fromEdbIdList = append(fromEdbIdList, v.EdbInfoId)
+			}
+		}
+
+		hasFind := make(map[int]struct{})
+		calculateEdbIdList, err = data.GetCalculateEdbByFromEdbInfo(fromEdbIdList, calculateEdbIdList, hasFind)
+		if err != nil {
+			br.Msg = "查询计算指标信息失败"
+			br.ErrMsg = "查询计算指标信息失败,Err:" + err.Error()
+			return
+		}
+	}
+
 	switch req.Source {
 	case utils.DATA_SOURCE_MYSTEEL_CHEMICAL: // 钢联
 		err = data_manage.ModifyMysteelChemicalUpdateStatus(edbIdList, edbCodeList, isStop)
 	case utils.DATA_SOURCE_YS: // 有色
 		err = data_manage.ModifySmmUpdateStatus(edbIdList, edbCodeList, isStop)
 	default:
-		err = data_manage.ModifyEdbInfoUpdateStatus(edbIdList, isStop)
+		err = data_manage.ModifyEdbInfoUpdateStatus(edbIdList, isStop, calculateEdbIdList)
 	}
 	if err != nil {
 		br.Msg = `保存失败`
@@ -584,37 +614,22 @@ func (c *EdbInfoController) SaveEdbRefreshStatusSingle() {
 	if req.ModifyStatus == `暂停` {
 		isStop = 1
 	}
-	calculateEdb := make([]*data_manage.EdbInfoCalculateMapping, 0)
-	if edbInfo.EdbInfoType == 0 && edbInfo.EdbType == 1 { //基础指标
-		// 查询相关的计算指标
-		calculateEdb, err = data_manage.GetAllCalculateByEdbInfoId(edbInfo.EdbInfoId)
+
+	if isStop == 1 && edbInfo.EdbInfoType == 0 && edbInfo.EdbType == 1 { //基础指标, 只有在停用的情况下才需要查询计算指标
+		hasFind := make(map[int]struct{})
+		calculateEdbIdList, err = data.GetCalculateEdbByFromEdbInfo([]int{edbInfo.EdbInfoId}, calculateEdbIdList, hasFind)
 		if err != nil {
-			if err.Error() == utils.ErrNoRow() {
-				br.Msg = "指标不存在"
-				return
-			}
-			br.Msg = "查询计算指标失败"
-			br.ErrMsg = "查询计算指标失败,Err:" + err.Error()
+			br.Msg = "查询计算指标信息失败"
+			br.ErrMsg = "查询计算指标信息失败,Err:" + err.Error()
 			return
 		}
 	}
 
-	// 遍历指标列表,把计算指标id整理成数组
-	if len(calculateEdb) > 0 {
-		for _, calculateEdbInfo := range calculateEdb {
-			calculateEdbIdList = append(calculateEdbIdList, calculateEdbInfo.EdbInfoId)
-		}
-	}
-
 	switch edbInfo.Source {
 	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([]int{edbInfo.EdbInfoId}, isStop, calculateEdbIdList)
-	default:
-		// todo 支持其他的指标设置
-		err = data_manage.EdbInfoUpdateStatusByEdbInfoId([]int{edbInfo.EdbInfoId}, isStop)
-		return
+	default: // wind
+		err = data_manage.EdbInfoUpdateStatusByEdbInfoId([]int{edbInfo.EdbInfoId}, isStop, calculateEdbIdList)
 	}
 	if err != nil {
 		br.Msg = `保存失败`
@@ -693,22 +708,9 @@ func (c *EdbInfoController) SaveRelationEdbRefreshStatus() {
 
 			// 加入到待配置的指标列表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 {
@@ -716,6 +718,22 @@ func (c *EdbInfoController) SaveRelationEdbRefreshStatus() {
 		br.IsSendEmail = false
 		return
 	}
+	//查询指标信息
+	edbList, e := data_manage.GetEdbInfoByIdList(edbIdList)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + e.Error()
+		return
+	}
+	fromEdbIdList := make([]int, 0)
+	for _, v := range edbList {
+		if req.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
+			edbCodeList = append(edbCodeList, v.EdbCode)
+		}
+		if v.EdbInfoType == 0 && v.EdbType == 1 {
+			fromEdbIdList = append(fromEdbIdList, v.EdbInfoId)
+		}
+	}
 
 	isStop := 0
 	if req.ModifyStatus == `暂停` {
@@ -725,30 +743,21 @@ func (c *EdbInfoController) SaveRelationEdbRefreshStatus() {
 	// 查询计算指标ID
 	// 查询相关的计算指标
 	calculateEdbIdList := make([]int, 0)
-	calculateEdb, err := data_manage.GetAllCalculateByEdbInfoIds(edbIdList)
-	if err != nil {
-		if err.Error() == utils.ErrNoRow() {
-			br.Msg = "指标不存在"
+	if isStop == 1 {
+		hasFind := make(map[int]struct{})
+		calculateEdbIdList, err = data.GetCalculateEdbByFromEdbInfo(fromEdbIdList, calculateEdbIdList, hasFind)
+		if err != nil {
+			br.Msg = "查询计算指标信息失败"
+			br.ErrMsg = "查询计算指标信息失败,Err:" + err.Error()
 			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:
-		err = data_manage.EdbInfoUpdateStatusByEdbInfoId(edbIdList, isStop)
-		return
+		err = data_manage.EdbInfoUpdateStatusByEdbInfoId(edbIdList, isStop, calculateEdbIdList)
 	}
 	if err != nil {
 		br.Msg = `保存失败`

+ 11 - 0
models/data_manage/chart_edb_mapping.go

@@ -340,3 +340,14 @@ func ModifyChartEdbMapping(chartInfoId int, edbInfoList []*EdbInfo) (err error)
 
 	return
 }
+
+func GetRelationEdbInfoListMappingByCondition(condition string, pars []interface{}) (item []*ChartEdbInfoMapping, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT a.* FROM edb_info AS a 
+	JOIN edb_info_calculate_mapping AS b on a.edb_info_id = b.edb_info_id WHERE 1=1 `
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&item)
+	return
+}

+ 5 - 35
models/data_manage/edb_data_wind.go

@@ -65,7 +65,7 @@ type EdbDataFromWind struct {
 	ErrMsg string
 }
 
-func WindEdbInfoUpdateStatusByEdbInfoId(edbInfoIds []int, isStop int, calculateEdbInfoIds []int) (err error) {
+func EdbInfoUpdateStatusByEdbInfoId(edbInfoIds []int, isStop int, calculateEdbInfoIds []int) (err error) {
 	o, err := orm.NewOrmUsingDB("data").Begin()
 	if err != nil {
 		return
@@ -80,14 +80,14 @@ func WindEdbInfoUpdateStatusByEdbInfoId(edbInfoIds []int, isStop int, calculateE
 
 	// 更改指标的更新状态
 	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()
+		sql := ` UPDATE edb_info SET no_update = ? WHERE edb_info_id=? `
+		_, err = o.Raw(sql, isStop, 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()
+		sql := ` UPDATE edb_info SET no_update = ? WHERE edb_info_id IN (` + utils.GetOrmInReplace(len(edbInfoIds)) + `) `
+		_, err = o.Raw(sql, isStop, edbInfoIds).Exec()
 		if err != nil {
 			return
 		}
@@ -104,33 +104,3 @@ func WindEdbInfoUpdateStatusByEdbInfoId(edbInfoIds []int, isStop int, calculateE
 
 	return
 }
-
-func EdbInfoUpdateStatusByEdbInfoId(edbInfoIds []int, isStop int) (err error) {
-	o, err := orm.NewOrmUsingDB("data").Begin()
-	if err != nil {
-		return
-	}
-	defer func() {
-		if err != nil {
-			_ = o.Rollback()
-			return
-		}
-		_ = o.Commit()
-	}()
-
-	// 更改指标的更新状态
-	if len(edbInfoIds) == 1 {
-		sql := ` UPDATE edb_info SET no_update = ? WHERE edb_info_id=? `
-		_, err = o.Raw(sql, isStop, edbInfoIds[0]).Exec()
-		if err != nil {
-			return
-		}
-	} else {
-		sql := ` UPDATE edb_info SET no_update = ? WHERE edb_info_id IN (` + utils.GetOrmInReplace(len(edbInfoIds)) + `) `
-		_, err = o.Raw(sql, isStop, edbInfoIds).Exec()
-		if err != nil {
-			return
-		}
-	}
-	return
-}

+ 9 - 2
models/data_manage/edb_info.go

@@ -1648,7 +1648,7 @@ func GetEdbBaseInfoList(condition string, pars []interface{}, orderBy string, st
 // @param indexCodeList []string
 // @param isStop int
 // @return err error
-func ModifyEdbInfoUpdateStatus(edbIdList []int, isStop int) (err error) {
+func ModifyEdbInfoUpdateStatus(edbIdList []int, isStop int, calculateEdbInfoIds []int) (err error) {
 	idNum := len(edbIdList)
 	if idNum <= 0 {
 		return
@@ -1671,7 +1671,14 @@ func ModifyEdbInfoUpdateStatus(edbIdList []int, isStop int) (err error) {
 	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
 }
 

+ 7 - 7
models/data_manage/edb_info_relation.go

@@ -103,9 +103,9 @@ func AddOrUpdateEdbInfoRelation(objectId, objectType int, relationList []*EdbInf
 	}
 
 	if len(refreshEdbInfoIds) > 0 {
-		//更新指标的刷新状态
-		sql := ` UPDATE edb_info SET no_update = 0 WHERE source in (?, ?) AND edb_info_id IN (` + utils.GetOrmInReplace(len(refreshEdbInfoIds)) + `) AND  no_update = 1`
-		_, err = o.Raw(sql, utils.DATA_SOURCE_MYSTEEL_CHEMICAL, utils.DATA_SOURCE_WIND, refreshEdbInfoIds).Exec()
+		//todo 是否需要所有指标的刷新状态
+		sql := ` UPDATE edb_info SET no_update = 0 WHERE edb_info_id IN (` + utils.GetOrmInReplace(len(refreshEdbInfoIds)) + `) AND  no_update = 1`
+		_, err = o.Raw(sql, refreshEdbInfoIds).Exec()
 		if err != nil {
 			return
 		}
@@ -172,8 +172,8 @@ func AddOrUpdateEdbInfoRelationMulti(relationList []*EdbInfoRelation, refreshEdb
 
 	if len(refreshEdbInfoIds) > 0 {
 		// todo 更新指标的刷新状态
-		sql := ` UPDATE edb_info SET no_update = 0 WHERE source in (?, ?) AND edb_info_id IN (` + utils.GetOrmInReplace(len(refreshEdbInfoIds)) + `) AND no_update = 1`
-		_, err = o.Raw(sql, utils.DATA_SOURCE_MYSTEEL_CHEMICAL, utils.DATA_SOURCE_WIND, refreshEdbInfoIds).Exec()
+		sql := ` UPDATE edb_info SET no_update = 0 WHERE edb_info_id IN (` + utils.GetOrmInReplace(len(refreshEdbInfoIds)) + `) AND no_update = 1`
+		_, err = o.Raw(sql, refreshEdbInfoIds).Exec()
 		if err != nil {
 			return
 		}
@@ -397,8 +397,8 @@ func ReplaceRelationEdbInfoId(oldEdbInfo, newEdbInfo *EdbInfo, edbRelationIds []
 
 	if len(refreshEdbInfoIds) > 0 {
 		// todo 更新指标的刷新状态
-		sql := ` UPDATE edb_info SET no_update = 0 WHERE source in (?, ?) AND edb_info_id IN (` + utils.GetOrmInReplace(len(refreshEdbInfoIds)) + `) AND no_update = 1`
-		_, err = o.Raw(sql, utils.DATA_SOURCE_MYSTEEL_CHEMICAL, utils.DATA_SOURCE_WIND, refreshEdbInfoIds).Exec()
+		sql := ` UPDATE edb_info SET no_update = 0 WHERE  edb_info_id IN (` + utils.GetOrmInReplace(len(refreshEdbInfoIds)) + `) AND no_update = 1`
+		_, err = o.Raw(sql, refreshEdbInfoIds).Exec()
 		if err != nil {
 			return
 		}

+ 53 - 4
services/data/edb_info_relation.go

@@ -97,7 +97,7 @@ func saveEdbInfoRelation(edbInfoIds []int, objectId, objectType, objectSubType i
 			}
 			tmp.RelationCode = fmt.Sprintf("%d_%d_%d_%d", tmp.EdbInfoId, tmp.ReferObjectId, tmp.ReferObjectType, tmp.ReferObjectSubType)
 			addList = append(addList, tmp)
-			if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+			if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 				childEdbMappingIds, ok1 := calculateEdbMappingIdsMap[edbInfo.EdbInfoId]
 				if !ok1 {
 					continue
@@ -293,7 +293,7 @@ func SaveCalendarEdbInfoRelation(chartPermissionId int, matterDate string, editM
 			tmp.RelationCode = fmt.Sprintf("%d_%d_%d_%d", tmp.EdbInfoId, tmp.ReferObjectId, tmp.ReferObjectType, tmp.ReferObjectSubType)
 			addList = append(addList, tmp)
 			//添加指标间接引用
-			if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+			if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 				childEdbMappingIds, ok1 := calculateEdbMappingIdsMap[edbInfo.EdbInfoId]
 				if !ok1 {
 					continue
@@ -418,13 +418,14 @@ func GetEdbRelationList(source, edbInfoType int, classifyId, sysUserId, frequenc
 	return
 }
 
+// 查找当前计算指标的所有溯源指标
 func GetEdbListByEdbInfoId(edbInfoList []*data_manage.EdbInfo) (edbMappingListMap map[int]*data_manage.EdbInfoCalculateMapping, edbInfoMappingRootIdsMap map[int][]int, err error) {
 	if len(edbInfoList) == 0 {
 		return
 	}
 	edbInfoIds := make([]int, 0)
 	for _, v := range edbInfoList {
-		if v.EdbType == 2 || v.EdbInfoType == 1 {
+		if v.EdbType == 2 && v.EdbInfoType == 0 { //普通计算指标,排除预算指标
 			edbInfoIds = append(edbInfoIds, v.EdbInfoId)
 		}
 	}
@@ -454,7 +455,7 @@ func GetEdbListByEdbInfoId(edbInfoList []*data_manage.EdbInfo) (edbMappingListMa
 	edbInfoMappingRootIdsMap = make(map[int][]int, 0)
 	edbMappingMap := make(map[int]struct{})
 	for _, edbInfo := range edbInfoList {
-		if edbInfo.EdbType == 2 || edbInfo.EdbInfoType == 1 {
+		if edbInfo.EdbType == 2 && edbInfo.EdbInfoType == 0 {
 			edbInfoId := edbInfo.EdbInfoId
 			edbMappingList, err = getCalculateEdbInfoByEdbInfoId(allEdbMappingMap, edbInfoId, hasFindMap, edbInfoIdMap, edbMappingList, edbMappingMap, edbInfoMappingRootIdsMap, edbInfoId)
 			if err != nil {
@@ -621,3 +622,51 @@ func SaveExcelEdbInfoRelation(excelInfoId, source int, addChildExcel bool) (err
 	err = saveEdbInfoRelation(edbInfoIds, excelInfoId, utils.EDB_RELATION_TABLE, source)
 	return
 }
+
+// GetCalculateEdbByFromEdbInfo 找到依赖于该基础指标的所有计算指标
+func GetCalculateEdbByFromEdbInfo(edbInfoIds []int, calculateEdbIds []int, hasFind map[int]struct{}) (newCalculateEdbIds []int, err error) {
+	if len(edbInfoIds) == 0 {
+		return
+	}
+	newCalculateEdbIds = calculateEdbIds
+	newEdbInfoIds := make([]int, 0)
+	for _, v := range edbInfoIds {
+		if _, ok := hasFind[v]; ok {
+			continue
+		}
+		newEdbInfoIds = append(newEdbInfoIds, v)
+	}
+	if len(newEdbInfoIds) == 0 {
+		return
+	}
+	var condition string
+	var pars []interface{}
+	// 关联指标
+	condition += ` AND b.from_edb_info_id in (` + utils.GetOrmInReplace(len(newEdbInfoIds)) + `)`
+	pars = append(pars, newEdbInfoIds)
+
+	//获取关联图表列表
+	list, err := data_manage.GetRelationEdbInfoListMappingByCondition(condition, pars)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		err = fmt.Errorf("获取关联指标信息失败,Err:%s", err.Error())
+		return
+	}
+	calculateEdbIdsTmp := make([]int, 0)
+	for _, mapping := range list {
+		if mapping.EdbType == 2 && mapping.EdbInfoType == 0 { // 如果指标库里的计算指标,则加入,否则继续找
+			newCalculateEdbIds = append(newCalculateEdbIds, mapping.EdbInfoId)
+			calculateEdbIdsTmp = append(calculateEdbIdsTmp, mapping.EdbInfoId)
+		}
+	}
+	for _, v := range newEdbInfoIds {
+		hasFind[v] = struct{}{}
+	}
+	if len(calculateEdbIdsTmp) > 0 {
+		newCalculateEdbIds, err = GetCalculateEdbByFromEdbInfo(calculateEdbIdsTmp, newCalculateEdbIds, hasFind)
+		if err != nil {
+			return
+		}
+	}
+
+	return
+}