Procházet zdrojové kódy

Merge branch 'hotfix/bug_3417'

hsun před 1 rokem
rodič
revize
caa3f76bdd

+ 7 - 0
models/data_manage/chart_classify.go

@@ -287,3 +287,10 @@ func EditChartClassifySysUser(classifyId, sysUserId int, chartClassifyName strin
 	_, err = o.Raw(sql, sysUserId, chartClassifyName, classifyId).Exec()
 	return
 }
+
+func GetAllChartClassifyItemsBySource(source int) (items []*ChartClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM chart_classify WHERE source = ? order by sort ASC,chart_classify_id ASC`
+	_, err = o.Raw(sql, source).QueryRows(&items)
+	return
+}

+ 8 - 0
models/data_manage/edb_classify.go

@@ -162,6 +162,14 @@ func GetPredictEdbClassifyAll() (items []*EdbClassifyItems, err error) {
 	return
 }
 
+// GetAllEdbClassifyByType 根据类型获取分类列表
+func GetAllEdbClassifyByType(classifyType int) (items []*EdbClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM edb_classify WHERE classify_type = ? order by sort ASC,classify_id ASC`
+	_, err = o.Raw(sql, classifyType).QueryRows(&items)
+	return
+}
+
 type EdbClassifyItems struct {
 	ClassifyId      int `description:"分类id"`
 	EdbInfoId       int `description:"指标id"`

+ 179 - 127
services/data/edb_info.go

@@ -2337,155 +2337,175 @@ func GetEdbChartClassifyList(source int) (resp data_manage.EdbChartClassifyResp,
 		}
 
 	case 3: //ETA指标库
-		rootList, e := data_manage.GetEdbClassifyByParentId(0, 0)
-		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = e
-			return
-		}
-		classifyAll, e := data_manage.GetEdbClassifyAll()
+		//rootList, e := data_manage.GetEdbClassifyByParentId(0, 0)
+		//if e != nil && e.Error() != utils.ErrNoRow() {
+		//	err = e
+		//	return
+		//}
+
+		// 考虑到后面可以会迭代到10层, 这里直接用递归处理
+		classifyAll, e := data_manage.GetAllEdbClassifyByType(0)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			err = e
 			return
 		}
-		rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
-		for _, v := range classifyAll {
-			rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
-		}
-		nodeAll := make([]*data_manage.EdbClassifyItems, 0)
-		for _, v := range rootList {
-			if existItems, ok := rootChildMap[v.ClassifyId]; ok {
-				v.Children = existItems
-			} else {
-				items := make([]*data_manage.EdbClassifyItems, 0)
-				v.Children = items
-			}
-			nodeAll = append(nodeAll, v)
-		}
+		resp.List = GetEdbMenuTreeRecursive(classifyAll, 0)
 
-		for _, v := range nodeAll {
-			item := data_manage.EdbChartClassify{
-				ClassifyId:   v.ClassifyId,
-				ClassifyName: v.ClassifyName,
-				ParentId:     v.ParentId,
-			}
-			for _, v2 := range v.Children {
-				child := data_manage.EdbChartClassify{
-					ClassifyId:   v2.ClassifyId,
-					ClassifyName: v2.ClassifyName,
-					ParentId:     v2.ParentId,
-				}
-				item.Child = append(item.Child, &child)
-			}
-			resp.List = append(resp.List, &item)
-		}
+		//rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
+		//for _, v := range classifyAll {
+		//	rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
+		//}
+		//nodeAll := make([]*data_manage.EdbClassifyItems, 0)
+		//for _, v := range rootList {
+		//	if existItems, ok := rootChildMap[v.ClassifyId]; ok {
+		//		v.Children = existItems
+		//	} else {
+		//		items := make([]*data_manage.EdbClassifyItems, 0)
+		//		v.Children = items
+		//	}
+		//	nodeAll = append(nodeAll, v)
+		//}
+		//
+		//for _, v := range nodeAll {
+		//	item := data_manage.EdbChartClassify{
+		//		ClassifyId:   v.ClassifyId,
+		//		ClassifyName: v.ClassifyName,
+		//		ParentId:     v.ParentId,
+		//	}
+		//	for _, v2 := range v.Children {
+		//		child := data_manage.EdbChartClassify{
+		//			ClassifyId:   v2.ClassifyId,
+		//			ClassifyName: v2.ClassifyName,
+		//			ParentId:     v2.ParentId,
+		//		}
+		//		item.Child = append(item.Child, &child)
+		//	}
+		//	resp.List = append(resp.List, &item)
+		//}
 	case 4: //ETA预测指标
-		rootList, e := data_manage.GetEdbClassifyByParentId(0, 1)
+		// 考虑到后面可以会迭代到10层, 这里直接用递归
+		classifyAll, e := data_manage.GetAllEdbClassifyByType(1)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			err = e
 			return
 		}
-		nodeAll := make([]*data_manage.EdbClassifyItems, 0)
-		for _, v := range rootList {
-			nodeAll = append(nodeAll, v)
-		}
+		resp.List = GetEdbMenuTreeRecursive(classifyAll, 0)
 
-		for _, v := range nodeAll {
-			item := data_manage.EdbChartClassify{
-				ClassifyId:   v.ClassifyId,
-				ClassifyName: v.ClassifyName,
-				ParentId:     v.ParentId,
-			}
-			for _, v2 := range v.Children {
-				child := data_manage.EdbChartClassify{
-					ClassifyId:   v2.ClassifyId,
-					ClassifyName: v2.ClassifyName,
-					ParentId:     v2.ParentId,
-				}
-				item.Child = append(item.Child, &child)
-			}
-			resp.List = append(resp.List, &item)
-		}
+		//rootList, e := data_manage.GetEdbClassifyByParentId(0, 1)
+		//if e != nil && e.Error() != utils.ErrNoRow() {
+		//	err = e
+		//	return
+		//}
+		//nodeAll := make([]*data_manage.EdbClassifyItems, 0)
+		//for _, v := range rootList {
+		//	nodeAll = append(nodeAll, v)
+		//}
+		//
+		//for _, v := range nodeAll {
+		//	item := data_manage.EdbChartClassify{
+		//		ClassifyId:   v.ClassifyId,
+		//		ClassifyName: v.ClassifyName,
+		//		ParentId:     v.ParentId,
+		//	}
+		//	for _, v2 := range v.Children {
+		//		child := data_manage.EdbChartClassify{
+		//			ClassifyId:   v2.ClassifyId,
+		//			ClassifyName: v2.ClassifyName,
+		//			ParentId:     v2.ParentId,
+		//		}
+		//		item.Child = append(item.Child, &child)
+		//	}
+		//	resp.List = append(resp.List, &item)
+		//}
 	case 5: //图库
 
 		//判断是否存在缓存,如果存在缓存,那么直接从缓存中获取
-		key := utils.CACHE_CHART_CLASSIFY
-		if utils.Re == nil {
-			if utils.Re == nil && utils.Rc.IsExist(key) {
-				rep := new(data_manage.ChartClassifyListResp)
-				if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
-					e := json.Unmarshal(data, &rep)
-					if e == nil && rep != nil {
-						for _, v := range rep.AllNodes {
-							item := data_manage.EdbChartClassify{
-								ClassifyId:   v.ChartClassifyId,
-								ClassifyName: v.ChartClassifyName,
-								ParentId:     v.ParentId,
-							}
-							for _, v2 := range v.Children {
-								child := data_manage.EdbChartClassify{
-									ClassifyId:   v2.ChartClassifyId,
-									ClassifyName: v2.ChartClassifyName,
-									ParentId:     v2.ParentId,
-								}
-								item.Child = append(item.Child, &child)
-							}
-							resp.List = append(resp.List, &item)
-						}
-						fmt.Println("source redis")
-						return
-					}
-				}
-			}
-		}
-
-		rootList, e := data_manage.GetChartClassifyByParentIdFromETA(0)
-		if e != nil && e.Error() != utils.ErrNoRow() {
-			err = e
-			return
-		}
+		//key := utils.CACHE_CHART_CLASSIFY
+		//if utils.Re == nil {
+		//	if utils.Re == nil && utils.Rc.IsExist(key) {
+		//		rep := new(data_manage.ChartClassifyListResp)
+		//		if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
+		//			e := json.Unmarshal(data, &rep)
+		//			if e == nil && rep != nil {
+		//				for _, v := range rep.AllNodes {
+		//					item := data_manage.EdbChartClassify{
+		//						ClassifyId:   v.ChartClassifyId,
+		//						ClassifyName: v.ChartClassifyName,
+		//						ParentId:     v.ParentId,
+		//					}
+		//					for _, v2 := range v.Children {
+		//						child := data_manage.EdbChartClassify{
+		//							ClassifyId:   v2.ChartClassifyId,
+		//							ClassifyName: v2.ChartClassifyName,
+		//							ParentId:     v2.ParentId,
+		//						}
+		//						item.Child = append(item.Child, &child)
+		//					}
+		//					resp.List = append(resp.List, &item)
+		//				}
+		//				fmt.Println("source redis")
+		//				return
+		//			}
+		//		}
+		//	}
+		//}
 
-		classifyAll, e := data_manage.GetChartClassifyAllFromETA()
+		// 考虑到后面可以会迭代到10层, 这里直接用递归处理
+		classifyAll, e := data_manage.GetAllChartClassifyItemsBySource(1)
 		if e != nil && e.Error() != utils.ErrNoRow() {
 			err = e
 			return
 		}
+		resp.List = GetChartMenuTreeRecursive(classifyAll, 0)
 
-		rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
-		for _, v := range classifyAll {
-			rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
-		}
-		nodeAll := make([]*data_manage.ChartClassifyItems, 0)
-		for _, v := range rootList {
-			if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
-				v.Children = existItems
-			} else {
-				items := make([]*data_manage.ChartClassifyItems, 0)
-				v.Children = items
-			}
-			nodeAll = append(nodeAll, v)
-		}
-
-		for _, v := range nodeAll {
-			item := data_manage.EdbChartClassify{
-				ClassifyId:   v.ChartClassifyId,
-				ClassifyName: v.ChartClassifyName,
-				ParentId:     v.ParentId,
-			}
-			for _, v2 := range v.Children {
-				child := data_manage.EdbChartClassify{
-					ClassifyId:   v2.ChartClassifyId,
-					ClassifyName: v2.ChartClassifyName,
-					ParentId:     v2.ParentId,
-				}
-				item.Child = append(item.Child, &child)
-			}
-			resp.List = append(resp.List, &item)
-		}
+		//rootList, e := data_manage.GetChartClassifyByParentIdFromETA(0)
+		//if e != nil && e.Error() != utils.ErrNoRow() {
+		//	err = e
+		//	return
+		//}
+		//
+		//classifyAll, e := data_manage.GetChartClassifyAllFromETA()
+		//if e != nil && e.Error() != utils.ErrNoRow() {
+		//	err = e
+		//	return
+		//}
+		//
+		//rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
+		//for _, v := range classifyAll {
+		//	rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
+		//}
+		//nodeAll := make([]*data_manage.ChartClassifyItems, 0)
+		//for _, v := range rootList {
+		//	if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
+		//		v.Children = existItems
+		//	} else {
+		//		items := make([]*data_manage.ChartClassifyItems, 0)
+		//		v.Children = items
+		//	}
+		//	nodeAll = append(nodeAll, v)
+		//}
+		//
+		//for _, v := range nodeAll {
+		//	item := data_manage.EdbChartClassify{
+		//		ClassifyId:   v.ChartClassifyId,
+		//		ClassifyName: v.ChartClassifyName,
+		//		ParentId:     v.ParentId,
+		//	}
+		//	for _, v2 := range v.Children {
+		//		child := data_manage.EdbChartClassify{
+		//			ClassifyId:   v2.ChartClassifyId,
+		//			ClassifyName: v2.ChartClassifyName,
+		//			ParentId:     v2.ParentId,
+		//		}
+		//		item.Child = append(item.Child, &child)
+		//	}
+		//	resp.List = append(resp.List, &item)
+		//}
 
 		// 将数据加入缓存
-		if utils.Re == nil {
-			utils.Rc.Delete(key)
-		}
+		//if utils.Re == nil {
+		//	utils.Rc.Delete(key)
+		//}
 
 	default:
 		return
@@ -3018,3 +3038,35 @@ func GetEdbChartAdminList(source int) (list []int, err error) {
 
 	return
 }
+
+// GetEdbMenuTreeRecursive 递归指标库菜单树
+func GetEdbMenuTreeRecursive(list []*data_manage.EdbClassifyItems, parentId int) []*data_manage.EdbChartClassify {
+	res := make([]*data_manage.EdbChartClassify, 0)
+	for _, v := range list {
+		t := new(data_manage.EdbChartClassify)
+		t.ClassifyId = v.ClassifyId
+		t.ClassifyName = v.ClassifyName
+		t.ParentId = v.ParentId
+		if v.ParentId == parentId {
+			t.Child = GetEdbMenuTreeRecursive(list, v.ClassifyId)
+			res = append(res, t)
+		}
+	}
+	return res
+}
+
+// GetChartMenuTreeRecursive 递归指标库菜单树
+func GetChartMenuTreeRecursive(list []*data_manage.ChartClassifyItems, parentId int) []*data_manage.EdbChartClassify {
+	res := make([]*data_manage.EdbChartClassify, 0)
+	for _, v := range list {
+		t := new(data_manage.EdbChartClassify)
+		t.ClassifyId = v.ChartClassifyId
+		t.ClassifyName = v.ChartClassifyName
+		t.ParentId = v.ParentId
+		if v.ParentId == parentId {
+			t.Child = GetChartMenuTreeRecursive(list, v.ChartClassifyId)
+			res = append(res, t)
+		}
+	}
+	return res
+}