Ver código fonte

Merge branch 'feature/eta_forum3_chart_classify' into debug

xyxie 1 mês atrás
pai
commit
2176dfbeb9
2 arquivos alterados com 76 adições e 11 exclusões
  1. 9 0
      models/data_manage/chart_classify.go
  2. 67 11
      services/data/chart_classify.go

+ 9 - 0
models/data_manage/chart_classify.go

@@ -25,6 +25,9 @@ type ChartClassify struct {
 	IsJoinPermission    int       `description:"是否加入权限管控,0:不加入;1:加入;默认:0"`
 	ChartClassifyNameEn string    `description:"英文分类名称"`
 	RootId              int       `description:"顶级ID"`
+	IsSelected          int       `description:"是否精选资源,0:否;1:是"`
+	ResourceStatus      int       `description:"在ETA投研资源库中的状态,0:初始状态,1上架,2下架"`
+	LevelPath           string    `description:"所有的父级分类id"`
 }
 
 func AddChartClassify(item *ChartClassify) (lastId int64, err error) {
@@ -694,3 +697,9 @@ func GetChartClassifiesById(chartClassifyId int) (items []*ChartClassifyItems, e
 	err = global.DbMap[utils.DbNameIndex].Raw(sql, chartClassifyId, chartClassifyId, chartClassifyId).Find(&items).Error
 	return
 }
+
+func GetChartClassifyByLevelPath(levelPath string) (items []*ChartClassify, err error) {
+	sql := `SELECT * FROM chart_classify where level_path like '` + levelPath + `%'`
+	err = global.DbMap[utils.DbNameIndex].Raw(sql).Find(&items).Error
+	return
+}

+ 67 - 11
services/data/chart_classify.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/utils"
 	"fmt"
 	"strconv"
+	"strings"
 	"time"
 )
 
@@ -308,6 +309,7 @@ func AddChartClassify(chartClassifyName string, parentId, level, source int, lan
 	}
 	//查询顶级rootId
 	rootId := 0
+	levelPath := ""
 	if parentId > 0 {
 		parentClassify, tErr := data_manage.GetChartClassifyById(parentId)
 		if tErr != nil {
@@ -321,6 +323,7 @@ func AddChartClassify(chartClassifyName string, parentId, level, source int, lan
 			return
 		}
 		rootId = parentClassify.RootId
+		levelPath = parentClassify.LevelPath
 	}
 
 	classifyInfo = new(data_manage.ChartClassify)
@@ -343,15 +346,23 @@ func AddChartClassify(chartClassifyName string, parentId, level, source int, lan
 	if err != nil {
 		return
 	}
+	updateCols := make([]string, 0)
 	if parentId == 0 { //一级目录的rootId等于自己本身
 		classifyInfo.RootId = int(newId)
-		err = classifyInfo.Update([]string{"RootId"})
-		if err != nil {
-			errMsg = "更新分类失败"
-			return
-		}
+		updateCols = append(updateCols, "RootId")
+	}
+	if parentId > 0 {
+		levelPath = fmt.Sprintf("%s%d,", levelPath, newId)
+	} else {
+		levelPath = fmt.Sprintf("%d,", newId)
+	}
+	updateCols = append(updateCols, "LevelPath")
+	classifyInfo.LevelPath = levelPath
+	err = classifyInfo.Update(updateCols)
+	if err != nil {
+		errMsg = "更新分类失败"
+		return
 	}
-
 	// 目前只有ETA图库需要继承分类权限
 	if classifyInfo.Source == utils.CHART_SOURCE_DEFAULT {
 		go data_manage_permission.InheritParentClassify(5, classifyInfo.Source, classifyInfo.ChartClassifyId, classifyInfo.ParentId, classifyInfo.ChartClassifyName)
@@ -621,6 +632,7 @@ func moveChartClassify(parentChartClassifyInfo, chartClassifyInfo, prevClassify,
 	// 移动对象为分类, 判断分类是否存在
 	if chartClassifyInfo != nil {
 		oldParentId := chartClassifyInfo.ParentId
+		oldLevelPath := chartClassifyInfo.LevelPath
 		oldLevel := chartClassifyInfo.Level
 		var classifyIds []int
 		if oldParentId != parentClassifyId {
@@ -779,6 +791,15 @@ func moveChartClassify(parentChartClassifyInfo, chartClassifyInfo, prevClassify,
 					}
 				}
 			}
+
+			//更新分类的level_path
+			if oldParentId != parentClassifyId {
+				if err = UpdateChartClassifyLevelPathWithChildren(chartClassifyInfo, parentChartClassifyInfo, oldParentId, oldLevelPath); err != nil {
+					errMsg = "移动失败"
+					err = errors.New("更新分类level_path失败,Err:" + err.Error())
+					return
+				}
+			}
 		}
 	} else {
 		if chartInfo == nil {
@@ -903,6 +924,33 @@ func moveChartClassify(parentChartClassifyInfo, chartClassifyInfo, prevClassify,
 	return
 }
 
+// 新增内部函数
+func UpdateChartClassifyLevelPathWithChildren(chartClassifyInfo *data_manage.ChartClassify, parentChartClassifyInfo *data_manage.ChartClassify, oldParentId int, oldLevelPath string) error {
+	levelPath := fmt.Sprintf("%s%d,", parentChartClassifyInfo.LevelPath, chartClassifyInfo.ChartClassifyId)
+	chartClassifyInfo.LevelPath = levelPath
+	if err := chartClassifyInfo.Update([]string{"LevelPath"}); err != nil {
+		return fmt.Errorf("修改失败,Err:" + err.Error())
+	}
+
+	// 更新子分类的levelpath
+	tmpList, err := data_manage.GetChartClassifyByLevelPath(oldLevelPath)
+	if err != nil {
+		return fmt.Errorf("保存分类失败,Err:" + err.Error())
+	}
+    // 把原先的父级levePath,替换成最新的父级序列
+	for _, tmp := range tmpList {
+		after, _ := strings.CutPrefix(tmp.LevelPath, oldLevelPath)
+		if after != "" {
+			tmp.LevelPath = levelPath + after
+			tmp.ModifyTime = time.Now()
+			if e := tmp.Update([]string{"LevelPath", "ModifyTime"}); e != nil {
+				return fmt.Errorf("修改子分类,Err:" + e.Error())
+			}
+		}
+	}
+	return nil
+}
+
 func GetChildChartClassifyByClassifyId(targetClassifyId int) (targetList []*data_manage.ChartClassifyIdItems, err error, errMsg string) {
 	//判断是否是挂在顶级目录下
 	targetClassify, err := data_manage.GetChartClassifyById(targetClassifyId)
@@ -1006,11 +1054,10 @@ func EditChartClassifyV2(chartClassifyId, parentId, source int, chartClassifyNam
 	if err != nil {
 		return
 	}
-
+	var parentClassifyInfo *data_manage.ChartClassify
 	if parentId != classifyInfo.ParentId {
-		parentClassifyInfo, e := data_manage.GetChartClassifyById(parentId)
-		if e != nil {
-			err = e
+		parentClassifyInfo, err= data_manage.GetChartClassifyById(parentId)
+		if err != nil {
 			return
 		}
 		if classifyInfo.Level != parentClassifyInfo.Level + 1 {
@@ -1029,7 +1076,8 @@ func EditChartClassifyV2(chartClassifyId, parentId, source int, chartClassifyNam
 
 	// 需要变更的字段
 	updateCols := make([]string, 0)
-
+	oldParentId := classifyInfo.ParentId
+	oldLevelPath := classifyInfo.LevelPath
 	if parentId != classifyInfo.ParentId {
 		classifyInfo.ParentId = parentId
 		classifyInfo.ModifyTime = time.Now()
@@ -1082,6 +1130,14 @@ func EditChartClassifyV2(chartClassifyId, parentId, source int, chartClassifyNam
 		err = classifyInfo.Update(updateCols)
 	}
 
+	if oldParentId != parentId {
+		if err = UpdateChartClassifyLevelPathWithChildren(classifyInfo, parentClassifyInfo, oldParentId, oldLevelPath); err != nil {
+			errMsg = "修改分类失败"
+			err = errors.New("更新分类level_path失败,Err:" + err.Error())
+			return
+		}
+	}
+
 	return
 }