|
@@ -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 {
|