Bläddra i källkod

Merge branch 'feature/eta1.5.6_excel' into debug

xyxie 1 år sedan
förälder
incheckning
4f62ac884a

+ 63 - 22
controllers/data_manage/excel/excel_classify.go

@@ -10,6 +10,7 @@ import (
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/utils"
 	"fmt"
+	"sort"
 	"strconv"
 	"time"
 )
@@ -44,14 +45,15 @@ func (this *ExcelClassifyController) List() {
 		showUserId = this.SysUser.AdminId
 	}
 
-	// 获取一级分类
-	rootList, err := excel.GetExcelClassifyByParentId(0, source)
-	if err != nil && err.Error() != utils.ErrNoRow() {
+	classifyList, err := excel.GetExcelClassifyBySource(source)
+	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
 
+	// 获取二级分类
+	// 获取三级分类
 	// 根据来源获取所有excel表格(无内容)
 	allExcelInfo, err := excel.GetNoContentExcelInfoAll(source, showUserId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
@@ -64,26 +66,49 @@ func (this *ExcelClassifyController) List() {
 	for _, v := range allExcelInfo {
 		ExcelInfoMap[v.ExcelClassifyId] = append(ExcelInfoMap[v.ExcelClassifyId], v)
 	}
-	//rootChildMap := make(map[int][]*data_manage.ExcelClassifyItems)
-	//for _, v := range classifyAll {
-	//	rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
-	//	if existItems, ok := ExcelInfoMap[v.ExcelClassifyId]; ok {
-	//		v.Children = existItems
-	//	} else {
-	//		items := make([]*data_manage.ExcelClassifyItems, 0)
-	//		v.Children = items
-	//	}
-	//}
+	classifyMap := make(map[int][]*excel.ExcelClassifyItems)
+	for _, v := range classifyList {
+		if existItems, ok := ExcelInfoMap[v.ExcelClassifyId]; ok {
+			v.Children = existItems
+		}
+	}
+
+	for _, v := range classifyList {
+		if v.ParentId > 0 {
+			classifyMap[v.ParentId] = append(classifyMap[v.ParentId], v)
+		}
+	}
+	// todo 整理第三层
+	//组装三级分类
+	for key, classify := range classifyList {
+		subList, ok := classifyMap[classify.ExcelClassifyId]
+		if ok && classify.Level == 3 {
+			classifyList[key].Children = append(classifyList[key].Children, subList...)
+		}
+	}
+	// todo 整理第二层
+	for key, classify := range classifyList {
+		subList, ok := classifyMap[classify.ExcelClassifyId]
+		// 调用sort.Slice函数,传入切片、比较函数作为参数
+		sort.Slice(subList, func(i, j int) bool { return excel.ExcelClassifyItemBySort(subList[i], subList[j]) })
+		if ok && classify.Level == 2 {
+			classifyList[key].Children = append(classifyList[key].Children, subList...)
+		}
+	}
+	// todo 整理第一层
+	for key, classify := range classifyList {
+		subList, ok := classifyMap[classify.ExcelClassifyId]
+		sort.Slice(subList, func(i, j int) bool { return excel.ExcelClassifyItemBySort(subList[i], subList[j]) })
+		if ok && classify.Level == 1 {
+			classifyList[key].Children = append(classifyList[key].Children, subList...)
+		}
+	}
 	nodeAll := make([]*excel.ExcelClassifyItems, 0)
-	for _, v := range rootList {
-		var items []*excel.ExcelClassifyItems
-		if tmpItem, ok := ExcelInfoMap[v.ExcelClassifyId]; ok {
-			items = tmpItem
-		} else {
-			items = make([]*excel.ExcelClassifyItems, 0)
+	for _, v := range classifyList {
+		if v.ParentId == 0 {
+			sort.Slice(v.Children, func(i, j int) bool { return excel.ExcelClassifyItemBySort(v.Children[i], v.Children[j]) })
+			nodeAll = append(nodeAll, v)
 		}
-		v.Children = items
-		nodeAll = append(nodeAll, v)
 	}
 	resp := response2.ExcelClassifyListResp{
 		AllNodes: nodeAll,
@@ -181,6 +206,22 @@ func (this *ExcelClassifyController) AddExcelClassify() {
 		return
 	}
 
+	// 查询父级分类是否存在
+
+	if req.ParentId > 0 {
+		var parent *excel.ExcelClassify
+		parent, err = excel.GetExcelClassifyById(req.ParentId)
+		if err != nil {
+			if err.Error() == utils.ErrNoRow() {
+				br.Msg = "父级分类不存在"
+				return
+			}
+			br.Msg = "获取失败"
+			br.ErrMsg = "查询父级分类信息失败,Err:" + err.Error()
+			return
+		}
+		req.Level = parent.Level + 1
+	}
 	// 入库
 	timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
 	classify := &excel.ExcelClassify{
@@ -190,7 +231,7 @@ func (this *ExcelClassifyController) AddExcelClassify() {
 		Source:            source,
 		SysUserId:         this.SysUser.AdminId,
 		SysUserRealName:   this.SysUser.RealName,
-		Level:             req.Level + 1,
+		Level:             req.Level,
 		UniqueCode:        utils.MD5(utils.EXCEL_DATA_PREFIX + "_" + timestamp),
 		Sort:              maxSort + 1,
 		CreateTime:        time.Now(),

+ 12 - 0
models/data_manage/excel/excel_classify.go

@@ -63,6 +63,13 @@ func GetExcelClassifyByParentId(parentId, source int) (items []*ExcelClassifyIte
 	return
 }
 
+func GetExcelClassifyBySource(source int) (items []*ExcelClassifyItems, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := ` SELECT * FROM excel_classify WHERE  source = ? AND is_delete=0 order by sort asc,excel_classify_id asc`
+	_, err = o.Raw(sql, source).QueryRows(&items)
+	return
+}
+
 func GetExcelClassifyAll() (items []*ExcelClassifyItems, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := ` SELECT * FROM excel_classify WHERE parent_id<>0 AND is_delete=0 order by sort asc,excel_classify_id asc`
@@ -152,3 +159,8 @@ func GetExcelClassifyViewById(classifyId int) (item *ExcelClassifyView, err erro
 	err = o.Raw(sql, classifyId).QueryRow(&item)
 	return
 }
+
+// ExcelClassifyItemBySort 自定义比较函数,按年龄从小到大排序
+func ExcelClassifyItemBySort(p1, p2 *ExcelClassifyItems) bool {
+	return p1.Sort < p2.Sort
+}

+ 1 - 1
models/data_manage/excel/request/excel_classify.go

@@ -3,7 +3,7 @@ package request
 // AddExcelClassifyReq 添加excel分类请求
 type AddExcelClassifyReq struct {
 	ExcelClassifyName string `description:"分类名称"`
-	ParentId          int    `description:"父级id,第一级传0" json:"-"`
+	ParentId          int    `description:"父级id,第一级传0"`
 	Level             int    `description:"层级,第一级传0,其余传上一级的层级" json:"-"`
 	Source            int    `description:"1:excel插件的表格,2:自定义表格,3:混合表格,默认:1"`
 }

+ 1 - 1
services/data/excel/excel_classify.go

@@ -315,7 +315,7 @@ func moveExcelClassify(parentExcelClassifyInfo, excelClassifyInfo, prevClassify,
 		if excelInfo.ExcelClassifyId != parentClassifyId {
 			excelInfo.ExcelClassifyId = parentClassifyId
 			excelInfo.ModifyTime = time.Now()
-			updateCol = append(updateCol, "ClassifyId", "ModifyTime")
+			updateCol = append(updateCol, "ExcelClassifyId", "ModifyTime")
 		}
 		if prevSort > 0 {
 			//如果是移动在两个兄弟节点之间