Browse Source

汾渭数据源-分类递归

gmy 7 tháng trước cách đây
mục cha
commit
bd12065334
1 tập tin đã thay đổi với 39 bổ sung40 xóa
  1. 39 40
      services/base_from_fenwei.go

+ 39 - 40
services/base_from_fenwei.go

@@ -356,7 +356,7 @@ func NetDataHandle(req models.HandleFenWeiNetDataReq) error {
 		}
 	}
 	// 批量插入指标数据
-	logs.Info("NetDataHandle addIndexData indexDataList.size: ", indexDataList)
+	logs.Info("NetDataHandle addIndexData indexDataList.size: ", len(indexDataList))
 	err := models.BatchAddBaseFromFenWeiData(indexDataList)
 	if err != nil {
 		return err
@@ -433,45 +433,43 @@ func addIndex(info *models.FenWeiNetIndexInfo, classifyId int, indexCode string)
 
 // addFenWeiClassify 添加分类
 func addFenWeiClassify(info *models.FenWeiNetIndexInfo) (int, error) {
+	// 初始化分类结构
 	classify := new(models.BaseFromFenweiClassify)
 	classify.ClassifyName = info.ClassifyName
-	classify.ParentId = 0
-	classify.Level = 1
-
-	// ClassifyName 拿到”-“分割的字符串 拿到前面的字符串
-	// 是否需要新增子分类
-	var childClassifyName string
-	if strings.Contains(classify.ClassifyName, "-") {
-		classifyArr := strings.Split(classify.ClassifyName, "-")
-		if len(classifyArr) > 1 {
-			parentClassify, err := classify.GetByClassifyName(classifyArr[0])
-			if err != nil {
-				return 0, err
-			}
-			if parentClassify != nil {
-				// 判断子分类是否存在
-				childClassify, err := classify.GetByClassifyName(classifyArr[1])
-				if err != nil {
-					return 0, err
-				}
-				if childClassify != nil {
-					return childClassify.ClassifyId, nil
-				}
 
-				classify.ParentId = parentClassify.ClassifyId
-				classify.Level = parentClassify.Level + 1
-				classify.ClassifyName = classifyArr[1]
-			} else {
-				//新增父分类
-				classify.ClassifyName = classifyArr[0]
-				classify.ParentId = 0
-				classify.Level = 1
-				childClassifyName = classifyArr[1]
-			}
+	// 递归处理分类层级
+	return handleClassify(classify, 0, 1)
+}
+
+func handleClassify(classify *models.BaseFromFenweiClassify, parentId int, level int) (int, error) {
+	// 将分类名按 "-" 分割
+	classifyArr := strings.Split(classify.ClassifyName, "-")
+
+	// 当前分类名称
+	currentClassifyName := classifyArr[0]
+	classify.ClassifyName = currentClassifyName
+	classify.ParentId = parentId
+	classify.Level = level
+
+	// 检查当前分类是否已存在
+	existingClassify, err := classify.GetByClassifyName(currentClassifyName)
+	if err != nil {
+		return 0, err
+	}
+
+	// 如果分类存在,且父级ID相同,则递归处理下一级
+	if existingClassify != nil && existingClassify.ParentId == parentId {
+		// 如果存在且有下一级,则递归处理下一级
+		if len(classifyArr) > 1 {
+			nextClassifyName := strings.Join(classifyArr[1:], "-")
+			nextClassify := new(models.BaseFromFenweiClassify)
+			nextClassify.ClassifyName = nextClassifyName
+			return handleClassify(nextClassify, existingClassify.ClassifyId, existingClassify.Level+1)
 		}
-		return 0, nil
+		return existingClassify.ClassifyId, nil
 	}
 
+	// 如果不存在,新增当前分类
 	classify.SysUserId = 0
 	classify.SysUserRealName = ""
 	classify.ModifyTime = time.Now()
@@ -480,12 +478,13 @@ func addFenWeiClassify(info *models.FenWeiNetIndexInfo) (int, error) {
 	if err != nil {
 		return 0, err
 	}
-	// 新增子分类
-	if childClassifyName != "" {
-		classify.ClassifyName = childClassifyName
-		classify.ParentId = int(classifyId)
-		classify.Level = classify.Level + 1
-		classifyId, err = models.AddBaseFromFenWeiClassify(classify)
+
+	// 如果有下一级,递归处理下一级
+	if len(classifyArr) > 1 {
+		nextClassifyName := strings.Join(classifyArr[1:], "-")
+		nextClassify := new(models.BaseFromFenweiClassify)
+		nextClassify.ClassifyName = nextClassifyName
+		return handleClassify(nextClassify, int(classifyId), level+1)
 	}
 
 	return int(classifyId), nil