Bläddra i källkod

批量设置指标禁止刷新

xyxie 8 månader sedan
förälder
incheckning
2b9f818868
3 ändrade filer med 130 tillägg och 40 borttagningar
  1. 67 0
      models/data_manage/chart_edb_mapping.go
  2. 15 40
      services/edb_refresh.go
  3. 48 0
      services/edb_relation.go

+ 67 - 0
models/data_manage/chart_edb_mapping.go

@@ -46,3 +46,70 @@ func GetChartEdbMappingList(startSize, pageSize int) (items []*ChartEdbMapping,
 	_, err = o.Raw(sql, startSize, pageSize).QueryRows(&items)
 	return
 }
+
+type ChartEdbInfoMapping struct {
+	EdbInfoId           int     `description:"指标id"`
+	SourceName          string  `description:"来源名称"`
+	Source              int     `description:"来源id"`
+	SubSource           int     `description:"来源id"`
+	EdbCode             string  `description:"指标编码"`
+	EdbName             string  `description:"指标名称"`
+	EdbAliasName        string  `description:"指标名称(别名)"`
+	EdbNameEn           string  `description:"英文指标名称"`
+	EdbAliasNameEn      string  `description:"英文指标名称(别名)"`
+	EdbType             int     `description:"指标类型:1:基础指标,2:计算指标"`
+	Frequency           string  `description:"频率"`
+	FrequencyEn         string  `description:"英文频率"`
+	Unit                string  `description:"单位"`
+	UnitEn              string  `description:"英文单位"`
+	StartDate           string  `description:"起始日期"`
+	EndDate             string  `description:"终止日期"`
+	ModifyTime          string  `description:"指标最后更新时间"`
+	ChartEdbMappingId   int     `description:"图表指标id"`
+	ChartInfoId         int     `description:"图表id"`
+	MaxData             float64 `description:"上限"`
+	MinData             float64 `description:"下限"`
+	IsOrder             bool    `description:"true:正序,false:逆序"`
+	IsAxis              int     `description:"1:左轴,0:右轴"`
+	EdbInfoType         int     `description:"1:标准指标,0:领先指标"`
+	EdbInfoCategoryType int     `description:"0:普通指标,1:预测指标"`
+	LeadValue           int     `description:"领先值"`
+	LeadUnit            string  `description:"领先单位"`
+	LeadUnitEn          string  `description:"领先英文单位"`
+	ChartStyle          string  `description:"图表类型"`
+	ChartColor          string  `description:"颜色"`
+	PredictChartColor   string  `description:"预测数据的颜色"`
+	ChartWidth          float64 `description:"线条大小"`
+	ChartType           int     `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图"`
+	LatestDate          string  `description:"数据最新日期"`
+	LatestValue         float64 `description:"数据最新值"`
+	MoveLatestDate      string  `description:"移动后的数据最新日期"`
+	UniqueCode          string  `description:"指标唯一编码"`
+	MinValue            float64 `json:"-" description:"最小值"`
+	MaxValue            float64 `json:"-" description:"最大值"`
+	DataList            interface{}
+	IsNullData          bool    `json:"-" description:"是否空数据"`
+	MappingSource       int     `description:"1:ETA图库;2:商品价格曲线"`
+	RegionType          string  `description:"交易所来源,海外还是国内" json:"-"`
+	ClassifyId          int     `description:"分类id"`
+	SubSourceName       string  `description:"子数据来源名称"`
+	IndicatorCode       string  `description:"指标代码"`
+	IsConvert           int     `description:"是否数据转换 0不转 1转"`
+	ConvertType         int     `description:"数据转换类型 1乘 2除 3对数"`
+	ConvertValue        float64 `description:"数据转换值"`
+	ConvertUnit         string  `description:"数据转换单位"`
+	ConvertEnUnit       string  `description:"数据转换单位"`
+	IsJoinPermission    int     `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
+	HaveOperaAuth       bool    `description:"是否有数据权限,默认:false"`
+}
+
+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
+}

+ 15 - 40
services/edb_refresh.go

@@ -714,7 +714,7 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 		pageNum := (int(totalCount) + 99) / pageSize // 使用整数除法,并添加一页以防有余数
 		stopRefreshIds := make([]int, 0)
 		stopRefreshMysteelCode := make([]string, 0)
-		edbInfoList := make([]*data_manage.EdbInfo, 0)
+		fromEdbIdList := make([]int, 0)
 		for i := 0; i < pageNum; i++ {
 			start := i * pageSize
 			edbItems, e := data_manage.GetEdbInfoPageByCondition(condition, pars, start, pageSize)
@@ -726,11 +726,9 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 				continue
 			}
 			edbInfoIds := make([]int, 0)
-			edbInfoList = make([]*data_manage.EdbInfo, 0)
-			edbInfoMap := make(map[int]*data_manage.EdbInfo, 0)
+			fromEdbIdList = make([]int, 0)
 			for _, item := range edbItems {
 				edbInfoIds = append(edbInfoIds, item.EdbInfoId)
-				edbInfoMap[item.EdbInfoId] = item
 			}
 			// 查询指标库里这些指标 引用情况
 			relationList, e := data_manage.GetEdbInfoRelationByEdbInfoIds(edbInfoIds)
@@ -744,36 +742,24 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 			}
 			for _, item := range edbItems {
 				if _, ok := edbMap[item.EdbInfoId]; !ok {
-					edbInfo, ok1 := edbInfoMap[item.EdbInfoId]
-					if ok1 {
-						edbInfoList = append(edbInfoList, edbInfo)
-					}
 					stopRefreshIds = append(stopRefreshIds, item.EdbInfoId)
 					if item.Source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL {
 						stopRefreshMysteelCode = append(stopRefreshMysteelCode, item.EdbCode)
 					}
+					if item.EdbInfoType == 0 && item.EdbType == 1 {
+						fromEdbIdList = append(fromEdbIdList, item.EdbInfoId)
+					}
 					// 更新指标禁止刷新状态
 					if len(stopRefreshIds) > 100 {
 						// 查询相关的计算指标
 						calculateEdbIdList := make([]int, 0)
-						if len(edbInfoList) > 0 {
-							calculateEdbMappingListMap, calculateEdbMappingIdsMap, e1 := GetEdbListByEdbInfoId(edbInfoList)
-							if e1 != nil {
-								err = fmt.Errorf("查询计算指标信息失败, Err" + e1.Error())
+						if len(fromEdbIdList) > 0 {
+							hasFind := make(map[int]struct{})
+							calculateEdbIdList, err = GetCalculateEdbByFromEdbInfo(fromEdbIdList, calculateEdbIdList, hasFind)
+							if err != nil {
+								err = fmt.Errorf("查询计算指标信息失败:%v", err)
 								return
 							}
-							for _, v := range edbInfoList {
-								childEdbMappingIds, ok2 := calculateEdbMappingIdsMap[v.EdbInfoId]
-								if ok2 {
-									for _, childEdbMappingId := range childEdbMappingIds {
-										childEdbMapping, ok3 := calculateEdbMappingListMap[childEdbMappingId]
-										if !ok3 {
-											continue
-										}
-										calculateEdbIdList = append(calculateEdbIdList, childEdbMapping.EdbInfoId)
-									}
-								}
-							}
 						}
 						err = data_manage.ModifyEdbUpdateStatus(stopRefreshIds, stopRefreshMysteelCode, calculateEdbIdList)
 						if err != nil {
@@ -791,24 +777,13 @@ func DisableEdbRefresh(cont context.Context) (err error) {
 		if len(stopRefreshIds) > 0 {
 			// 查询相关的计算指标
 			calculateEdbIdList := make([]int, 0)
-			if len(edbInfoList) > 0 {
-				calculateEdbMappingListMap, calculateEdbMappingIdsMap, e1 := GetEdbListByEdbInfoId(edbInfoList)
-				if e1 != nil {
-					err = fmt.Errorf("查询计算指标信息失败, Err" + e1.Error())
+			if len(fromEdbIdList) > 0 {
+				hasFind := make(map[int]struct{})
+				calculateEdbIdList, err = GetCalculateEdbByFromEdbInfo(fromEdbIdList, calculateEdbIdList, hasFind)
+				if err != nil {
+					err = fmt.Errorf("查询计算指标信息失败:%v", err)
 					return
 				}
-				for _, v := range edbInfoList {
-					childEdbMappingIds, ok2 := calculateEdbMappingIdsMap[v.EdbInfoId]
-					if ok2 {
-						for _, childEdbMappingId := range childEdbMappingIds {
-							childEdbMapping, ok3 := calculateEdbMappingListMap[childEdbMappingId]
-							if !ok3 {
-								continue
-							}
-							calculateEdbIdList = append(calculateEdbIdList, childEdbMapping.EdbInfoId)
-						}
-					}
-				}
 			}
 			err = data_manage.ModifyEdbUpdateStatus(stopRefreshIds, stopRefreshMysteelCode, calculateEdbIdList)
 			if err != nil {

+ 48 - 0
services/edb_relation.go

@@ -1115,3 +1115,51 @@ func getCalculateEdbInfoByEdbInfoId(allEdbMappingMap map[int][]*data_manage.EdbI
 
 	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
+}