Browse Source

fix:搜索优化

Roc 3 months ago
parent
commit
46dea68fd4

+ 37 - 10
controllers/data_manage/edb_info.go

@@ -1745,6 +1745,7 @@ func (this *EdbInfoController) EdbInfoFilter() {
 // @Param   EdbType   query   int  false       "指标类型:0-基础和计算;1-基础指标;2-计算指标;3-衍生指标"
 // @Param   EdbAuth   query   int  false       "指标权限:0-全部;1-我的;2-公共"
 // @Param   EdbCollect   query   int  false       "指标收藏状态:0-全部;1-已收藏"
+// @Param   ClassifyId   query   int  false       "父级分类id"
 // @Success 200 {object} data_manage.EdbInfoList
 // @router /edb_info/filter_by_es [get]
 func (this *EdbInfoController) EdbInfoFilterByEs() {
@@ -1779,8 +1780,6 @@ func (this *EdbInfoController) EdbInfoFilterByEs() {
 
 	frequency := this.GetString("Frequency") //频度
 
-	//isAddPredictEdb, _ := this.GetBool("IsAddPredictEdb") //是否查询添加预测指标
-
 	// 指标类型数组:1-基础指标;2-计算指标;3-预测指标
 	edbTypeList := make([]int, 0)
 	edbInfoType := -1                            // 指标范围
@@ -1792,7 +1791,7 @@ func (this *EdbInfoController) EdbInfoFilterByEs() {
 		if edbTypeStr == `` || edbTypeStr == `0` {
 			edbTypeList = []int{1, 2}
 			edbInfoType = 0
-		} else if edbTypeStr == `1` { // 数据加工(基础指标),不应该固定创建人的
+		} else if edbTypeStr == `1` { // 数据查看(基础指标),不应该固定创建人的
 			edbTypeList = []int{1}
 			edbInfoType = 0
 			searchUserId = 0
@@ -1832,6 +1831,23 @@ func (this *EdbInfoController) EdbInfoFilterByEs() {
 
 	edbCollect, _ := this.GetInt("EdbCollect", 0) // 指标收藏状态:0-全部;1-已收藏
 
+	// 筛选分类id列表
+	searchClassifyIdList := make([]int, 0)
+	// 父级分类id
+	classifyId, _ := this.GetInt("ClassifyId")
+	if classifyId > 0 {
+		allChildClassifyItemList, err, _ := data.GetAllChildClassifyByParentId(classifyId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取指标分类信息失败,Err:" + err.Error()
+			return
+		}
+		searchClassifyIdList = append(searchClassifyIdList, classifyId)
+		for _, v := range allChildClassifyItemList {
+			searchClassifyIdList = append(searchClassifyIdList, v.ClassifyId)
+		}
+	}
+
 	var edbInfoList []*data_manage.EdbInfoList
 	var err error
 
@@ -1867,7 +1883,7 @@ func (this *EdbInfoController) EdbInfoFilterByEs() {
 	}
 
 	// 普通的搜索
-	total, edbInfoList, err = elastic.SearchEdbInfoData(keyWord, startSize, pageSize, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, edbTypeList, edbInfoType, edbAuth, searchUserId, sortMap)
+	total, edbInfoList, err = elastic.SearchEdbInfoData(keyWord, startSize, pageSize, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, edbTypeList, edbInfoType, edbAuth, searchUserId, sortMap)
 
 	if err != nil {
 		edbInfoList = make([]*data_manage.EdbInfoList, 0)
@@ -3256,7 +3272,7 @@ func (this *EdbInfoController) AllEdbInfoByEs() {
 		keyWordArr = append(keyWordArr, newKeyWord...)
 
 		// 普通的搜索
-		total, edbInfoList, err = elastic.SearchEdbInfoData(keyWord, startSize, pageSize, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, []int{}, []int{1, 2}, -1, 0, this.SysUser.AdminId, map[string]string{})
+		total, edbInfoList, err = elastic.SearchEdbInfoData(keyWord, startSize, pageSize, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, []int{}, []int{}, []int{1, 2}, -1, 0, this.SysUser.AdminId, map[string]string{})
 		isEs = true
 	} else {
 		var condition string
@@ -3694,7 +3710,8 @@ func (this *EdbInfoController) EdbChartAdminList() {
 // EdbSourceList
 // @Title 指标来源列表
 // @Description 指标来源列表
-// @Param   IsBase   query   int  false	"是否为基础指标: 1-是"
+// @Param   IsBase   query   int  false	"是否为基础指标: 1-基础指标,2:计算指标"
+// @Param   EdbInfoType   query   int  false	"指标类型,0:指标库;1:预测指标,默认:0"
 // @Success 200 {object} data_manage.EdbInfoListResp
 // @router /edb_source/list [get]
 func (this *EdbInfoController) EdbSourceList() {
@@ -3707,12 +3724,22 @@ func (this *EdbInfoController) EdbSourceList() {
 		this.ServeJSON()
 	}()
 	isBase, _ := this.GetInt("IsBase", 0)
+	edbInfoType, _ := this.GetInt("EdbInfoType", 0)
 
-	cond := ``
-	if isBase > 0 {
-		cond = ` AND is_base = 1`
-	}
 	pars := make([]interface{}, 0)
+	cond := ` AND edb_info_type = ? `
+	pars = append(pars, edbInfoType)
+
+	// 计算类型
+	switch isBase {
+	case 1:
+		cond += ` AND is_base = ? `
+		pars = append(pars, 1)
+	case 2:
+		cond += ` AND is_base = ? `
+		pars = append(pars, 2)
+	}
+
 	list, e := data_manage.GetEdbSourceItemsByCondition(cond, pars, []string{}, "")
 	if e != nil {
 		br.Msg = "获取失败"

+ 1 - 1
controllers/data_manage/predict_edb_info.go

@@ -1101,7 +1101,7 @@ func (this *PredictEdbInfoController) FilterByEs() {
 		newKeyWord := strings.Split(keyWord, " ")
 		keyWordArr = append(keyWordArr, newKeyWord...)
 
-		total, edbInfoList, err = elastic.SearchEdbInfoData(keyWord, startSize, pageSize, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, []int{}, []int{1, 2}, 1, 0, this.SysUser.AdminId, map[string]string{})
+		total, edbInfoList, err = elastic.SearchEdbInfoData(keyWord, startSize, pageSize, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, []int{}, []int{}, []int{1, 2}, 1, 0, this.SysUser.AdminId, map[string]string{})
 
 		isEs = true
 	} else {

+ 1 - 0
models/data_manage/edb_source.go

@@ -25,6 +25,7 @@ type EdbSource struct {
 	SourceExtend     string `description:"扩展字段做查询用"`
 	EdbCodeRequired  int    `description:"指标编码是否必填: 0-否; 1-是"`
 	IndexTableName   string `description:"数据源指标表名"`
+	EdbInfoTType     int    `description:"指标类型,0:指标库;1:预测指标"`
 }
 
 // GetEdbSourceItemsByCondition 获取指标来源列表

+ 44 - 6
services/data/chart_classify.go

@@ -1403,18 +1403,56 @@ func GetChartClassifyTreeRecursive(list []*data_manage.ChartClassifyItems, paren
 	res := make([]*data_manage.ChartClassifyItems, 0)
 	for _, v := range list {
 		if v.ParentId == parentId {
-			tmpChildrenList := GetChartClassifyTreeRecursive(list, v.ChartClassifyId)
-			if v.Children != nil {
-				v.Children = append(v.Children, tmpChildrenList...)
-			} else {
-				v.Children = GetChartClassifyTreeRecursive(list, v.ChartClassifyId)
-			}
+			v.Children = GetChartClassifyTreeRecursive(list, v.ChartClassifyId)
 			res = append(res, v)
 		}
 	}
 	return res
 }
 
+// GetChartClassifyTreeRecursiveAndInsert
+// @Description: 递归获取分类树形结构,同时根据分类id插入对应的图表数据
+// @author: Roc
+// @datetime 2024-12-12 14:42:28
+// @param list []*data_manage.ChartClassifyItems
+// @param parentId int
+// @param chartClassifyItemListMap map[int][]*data_manage.ChartClassifyItems
+// @return []*data_manage.ChartClassifyItems
+func GetChartClassifyTreeRecursiveAndInsert(list []*data_manage.ChartClassifyItems, parentId int, chartClassifyItemListMap map[int][]*data_manage.ChartClassifyItems) []*data_manage.ChartClassifyItems {
+	// 先获取树形结构
+	list = GetChartClassifyTreeRecursive(list, parentId)
+
+	// 将图表数据插入到分类树中
+	InsertChartClassifyItemsToClassifyTree(list, chartClassifyItemListMap)
+
+	return list
+}
+
+// InsertChartClassifyItemsToClassifyTree
+// @Description: 递归将图表数据插入到分类树中
+// @author: Roc
+// @datetime 2024-12-12 14:42:00
+// @param list []*data_manage.ChartClassifyItems
+// @param chartClassifyItemListMap map[int][]*data_manage.ChartClassifyItems
+// @return []*data_manage.ChartClassifyItems
+func InsertChartClassifyItemsToClassifyTree(list []*data_manage.ChartClassifyItems, chartClassifyItemListMap map[int][]*data_manage.ChartClassifyItems) []*data_manage.ChartClassifyItems {
+	for k, v := range list {
+		children := v.Children
+		if children != nil {
+			children = InsertChartClassifyItemsToClassifyTree(children, chartClassifyItemListMap)
+		} else {
+			children = make([]*data_manage.ChartClassifyItems, 0)
+		}
+
+		if chartClassifyItemList, ok := chartClassifyItemListMap[v.ChartClassifyId]; ok {
+			children = append(children, chartClassifyItemList...)
+		}
+		list[k].Children = children
+	}
+
+	return list
+}
+
 // GetChartClassifyParentRecursive 根据子目录递归父级目录
 func GetChartClassifyParentRecursive(list []*data_manage.ChartClassifyItems, classifyId int) []*data_manage.ChartClassifyItems {
 	res := make([]*data_manage.ChartClassifyItems, 0)

+ 1 - 11
services/data/chart_info_share.go

@@ -119,17 +119,7 @@ func GetChartClassifyItemListByShareChartInfoQueryList(items []*data_manage.Shar
 			return
 		}
 
-		for _, v := range classifyItemsList {
-			if chartClassifyItemList, ok := chartClassifyItemListMap[v.ChartClassifyId]; ok {
-				if v.Children == nil {
-					v.Children = chartClassifyItemList
-				} else {
-					v.Children = append(v.Children, chartClassifyItemList...)
-				}
-			}
-		}
-
-		item = GetChartClassifyTreeRecursive(classifyItemsList, 0)
+		item = GetChartClassifyTreeRecursiveAndInsert(classifyItemsList, 0, chartClassifyItemListMap)
 		//根据sort值排序
 		//sort.Sort(item)
 	}

+ 44 - 6
services/data/edb_classify.go

@@ -32,18 +32,56 @@ func GetClassifyTreeRecursive(list []*data_manage.EdbClassifyItems, parentId int
 	res := make([]*data_manage.EdbClassifyItems, 0)
 	for _, v := range list {
 		if v.ParentId == parentId {
-			children := GetClassifyTreeRecursive(list, v.ClassifyId)
-			if v.Children == nil {
-				v.Children = children
-			} else {
-				v.Children = append(v.Children, children...)
-			}
+			v.Children = GetClassifyTreeRecursive(list, v.ClassifyId)
 			res = append(res, v)
 		}
 	}
 	return res
 }
 
+// GetClassifyTreeRecursiveAndInsert
+// @Description: 递归获取分类树形结构,同时根据分类id插入对应的指标数据
+// @author: Roc
+// @datetime 2024-12-12 14:39:25
+// @param list []*data_manage.EdbClassifyItems
+// @param parentId int
+// @param edbClassifyItemListMap map[int][]*data_manage.EdbClassifyItems
+// @return []*data_manage.EdbClassifyItems
+func GetClassifyTreeRecursiveAndInsert(list []*data_manage.EdbClassifyItems, parentId int, edbClassifyItemListMap map[int][]*data_manage.EdbClassifyItems) []*data_manage.EdbClassifyItems {
+	// 先获取树形结构
+	list = GetClassifyTreeRecursive(list, parentId)
+
+	// 将指标数据插入到分类树中
+	InsertEdbClassifyItemsToClassifyTree(list, edbClassifyItemListMap)
+
+	return list
+}
+
+// InsertEdbClassifyItemsToClassifyTree
+// @Description: 递归将指标数据插入到分类树中
+// @author: Roc
+// @datetime 2024-12-12 14:39:56
+// @param list []*data_manage.EdbClassifyItems
+// @param edbClassifyItemListMap map[int][]*data_manage.EdbClassifyItems
+// @return []*data_manage.EdbClassifyItems
+func InsertEdbClassifyItemsToClassifyTree(list []*data_manage.EdbClassifyItems, edbClassifyItemListMap map[int][]*data_manage.EdbClassifyItems) []*data_manage.EdbClassifyItems {
+	for k, v := range list {
+		children := v.Children
+		if children != nil {
+			children = InsertEdbClassifyItemsToClassifyTree(children, edbClassifyItemListMap)
+		} else {
+			children = make([]*data_manage.EdbClassifyItems, 0)
+		}
+
+		if edbClassifyItemList, ok := edbClassifyItemListMap[v.ClassifyId]; ok {
+			children = append(children, edbClassifyItemList...)
+		}
+		list[k].Children = children
+	}
+
+	return list
+}
+
 func GetFullClassifyByClassifyId(targetClassifyId int) (targetList []*data_manage.EdbClassifyIdItems, err error, errMsg string) {
 	//判断是否是挂在顶级目录下
 	targetClassify, err := data_manage.GetEdbClassifyById(targetClassifyId)

+ 1 - 11
services/data/edb_info_share.go

@@ -117,17 +117,7 @@ func GetEdbClassifyItemListByShareEdbInfoQueryList(items []*data_manage.ShareEdb
 			return
 		}
 
-		for _, v := range classifyItemsList {
-			if edbClassifyItemList, ok := edbClassifyItemListMap[v.ClassifyId]; ok {
-				if v.Children == nil {
-					v.Children = edbClassifyItemList
-				} else {
-					v.Children = append(v.Children, edbClassifyItemList...)
-				}
-			}
-		}
-
-		item = GetClassifyTreeRecursive(classifyItemsList, 0)
+		item = GetClassifyTreeRecursiveAndInsert(classifyItemsList, 0, edbClassifyItemListMap)
 		//根据sort值排序
 		sort.Sort(item)
 	}

+ 23 - 11
services/elastic/edb_info.go

@@ -165,7 +165,7 @@ func searchEdbInfoData(indexName string, mustMap, mustNotMap []interface{}, shou
 // @return total int64
 // @return list []*data_manage.EdbInfoList
 // @return err error
-func SearchEdbInfoData(keywordStr string, from, size, filterSource, source int, frequency string, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, edbTypeList []int, edbInfoType, edbAuth, sysUserId int, sortMap map[string]string) (total int64, list []*data_manage.EdbInfoList, err error) {
+func SearchEdbInfoData(keywordStr string, from, size, filterSource, source int, frequency string, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, edbTypeList []int, edbInfoType, edbAuth, sysUserId int, sortMap map[string]string) (total int64, list []*data_manage.EdbInfoList, err error) {
 	indexName := utils.DATA_INDEX_NAME
 	list = make([]*data_manage.EdbInfoList, 0)
 	defer func() {
@@ -258,6 +258,15 @@ func SearchEdbInfoData(keywordStr string, from, size, filterSource, source int,
 		})
 	}
 
+	// searchClassifyIdList 指定分类id列表
+	if len(searchClassifyIdList) > 0 {
+		mustMap = append(mustMap, map[string]interface{}{
+			"terms": map[string]interface{}{
+				"ClassifyId": searchClassifyIdList,
+			},
+		})
+	}
+
 	// 指标类型:0-基础+计算;1-基础指标;2-计算指标;3-预测指标
 	if len(edbTypeList) > 0 {
 		mustMap = append(mustMap, map[string]interface{}{
@@ -341,16 +350,19 @@ func SearchEdbInfoData(keywordStr string, from, size, filterSource, source int,
 
 		}
 
-		// 基础指标(数据加工)
-		shouldTermList = append(shouldTermList, map[string]interface{}{
-			"term": map[string]interface{}{
-				"EdbType": 1,
-			},
-		}, map[string]interface{}{
-			"term": map[string]interface{}{
-				"EdbInfoType": 0,
-			},
-		})
+		// 如果是包含了数据查看(基础指标)的搜索,那么就需要加上这个条件;否则只看自己的指标+共享指标+公开指标
+		if edbInfoType == 0 && utils.InArrayByInt(edbTypeList, 1) {
+			// 基础指标(数据查看)
+			shouldTermList = append(shouldTermList, map[string]interface{}{
+				"term": map[string]interface{}{
+					"EdbType": 1,
+				},
+			}, map[string]interface{}{
+				"term": map[string]interface{}{
+					"EdbInfoType": 0,
+				},
+			})
+		}
 
 		shouldMap := map[string]interface{}{
 			"should": shouldTermList,