فهرست منبع

feat(图谱):新增v3版本,返回数据正序返回

Roc 4 سال پیش
والد
کامیت
a1ca9fe8cc
1فایلهای تغییر یافته به همراه129 افزوده شده و 0 حذف شده
  1. 129 0
      services/industry_map.go

+ 129 - 0
services/industry_map.go

@@ -443,6 +443,135 @@ func GetIndustryMapNameSliceV2(industryName string) (nameSlice []string, err err
 	return
 }
 
+//获取行业图谱切片(v3版本,调整时间:2021-04-20 17:23:31,不乱序)
+func GetIndustryMapNameSliceV3(industryName string) (nameSlice []string, err error) {
+	nameSlice = append(nameSlice, industryName)
+	tree, err := GetIndustryTree()
+	if err != nil {
+		fmt.Println("获取树失败")
+		return
+	}
+
+	//fmt.Println(tree)
+
+	//已经存在的行业id的map集合
+	hasIdMap := make(map[int]string)
+	itemList, err := models.GetFirstCygxIndustryListByName(industryName)
+	if err != nil {
+		fmt.Println("获取数据失败,", err)
+		return
+	}
+	//找不到对应的数据
+	if len(itemList) <= 0 {
+		return
+	}
+
+	industryMapList := make(map[int][]*models.CygxIndustryMapItems)
+	//TODO  这里好像有问题,如果传入行业的话,上面再没有是否只是找到第一个节点判断,那么就会异常抛出
+	for _, item := range itemList {
+		industryMapList[item.Level] = append(industryMapList[item.Level], item)
+	}
+
+	//将查出来的根节点数据的key取出来,放在切片中,并对该切片做正序排列
+	var sortIndustryList []int
+	for k, _ := range industryMapList {
+		sortIndustryList = append(sortIndustryList, k)
+	}
+	sort.Ints(sortIndustryList)
+
+	//最底层节点的数据集合
+	list := industryMapList[sortIndustryList[0]]
+
+	//如果该数据正好是第一层节点数据,那么需要额外判断下
+	if list[0].ParentId <= 2 {
+		//如果存在第二级,那么就使用该层级
+		if len(sortIndustryList) > 1 {
+			list = industryMapList[sortIndustryList[1]]
+		}
+	}
+	//fmt.Println(list)
+	//return
+
+	otherChildMapSlice := map[int][]*models.CygxIndustryMapItems{}
+
+	//多个节点时,额外处理
+	if len(list) > 1 {
+		for _, item := range list {
+			hasIdMap[item.IndustryMapId] = ""
+			//将自己的节点给加进去
+			otherChildMapSlice[0] = append(otherChildMapSlice[0], item)
+
+			//获取上级
+			var tmpParentSlice []*models.CygxIndustryMapItems
+			tmpParentSlice, _ = parentTreeToSlice(tree, item, 0, tmpParentSlice, hasIdMap)
+			//父节点
+			parentItem := tmpParentSlice[len(tmpParentSlice)-1]
+			if _, ok := hasIdMap[parentItem.IndustryMapId]; ok == false {
+				hasIdMap[parentItem.IndustryMapId] = ""
+				otherChildMapSlice[1] = append(otherChildMapSlice[1], parentItem)
+			}
+		}
+	} else {
+		//匹配到单个节点
+		item := list[0]
+		hasIdMap[item.IndustryMapId] = ""
+		//将自己的节点给加进去
+		otherChildMapSlice[0] = append(otherChildMapSlice[0], item)
+		childTree := getChildTree(tree, item)
+
+		//如果是命中到最后一层节点
+		if len(childTree.Children) == 0 {
+			//获取上级
+			var tmpParentSlice []*models.CygxIndustryMapItems
+			tmpParentSlice, _ = parentTreeToSlice(tree, item, 0, tmpParentSlice, hasIdMap)
+			//父节点
+			parentItem := tmpParentSlice[len(tmpParentSlice)-1]
+
+			if _, ok := hasIdMap[parentItem.IndustryMapId]; ok == false {
+				hasIdMap[parentItem.IndustryMapId] = ""
+				otherChildMapSlice[1] = append(otherChildMapSlice[1], parentItem)
+			}
+
+			//兄弟节点
+			siblingTreeToSliceV2(parentItem, item, hasIdMap, 2, otherChildMapSlice)
+		} else {
+			//如果不是命中到最后一层节点
+			otherChildMapSlice[1] = append(otherChildMapSlice[1], childTree.Children...)
+		}
+	}
+
+	//return
+	var tmpSlice []*models.CygxIndustryMapItems
+
+	//将其他规律数据的key取出来,放在切片中,并对该切片做正序排列
+	var sortList []int
+	for k, _ := range otherChildMapSlice {
+		sortList = append(sortList, k)
+	}
+	sort.Ints(sortList)
+
+	//遍历该切片,根据下标key获取对应的数据,并插入到主数据中
+	for _, v := range sortList {
+		tmpChildSlice := otherChildMapSlice[v]
+		//randSlice(tmpChildSlice)
+		tmpSlice = append(tmpSlice, tmpChildSlice...)
+		//fmt.Println(k,"=====")
+		//for _,tmpV := range otherChildMapSlice[v]{
+		//	fmt.Println(tmpV.IndustryMapName)
+		//}
+	}
+	//名字切片
+	for _, v := range tmpSlice {
+		//fmt.Println("k===",k,"=======v=======",v)
+		nameSlice = append(nameSlice, v.IndustryMapName)
+	}
+
+	//fmt.Println(nameSlice)
+	//fmt.Println(strings.Join(nameSlice,","))
+	//utils.FileLog.Info("allNodes:%s",strings.Join(nameSlice,","))
+	return
+}
+
 //获取兄弟级树
 func siblingTreeToSliceV2(rootNode *models.CygxIndustryMapItems, nowNode *models.CygxIndustryMapItems, hasIdMap map[int]string, depth int, otherChildMapSlice map[int][]*models.CygxIndustryMapItems) (maxDepth int) {
 	if rootNode.Children != nil {