Browse Source

fix:历史的分类设置为公共分类,新添加的分类归属为自己的分类,只能操作自己的表格和分类

Roc 1 year ago
parent
commit
794c4246d4
1 changed files with 137 additions and 0 deletions
  1. 137 0
      controllers/data_manage/excel/excel_classify.go

+ 137 - 0
controllers/data_manage/excel/excel_classify.go

@@ -41,6 +41,12 @@ func (this *ExcelClassifyController) List() {
 	}
 	//只看我的
 	isShowMe, _ := this.GetBool("IsShowMe")
+	// 自定义分析只看自己的
+	if source == utils.CUSTOM_ANALYSIS_TABLE {
+		AnalysisClassifyList(this)
+		return
+	}
+
 	showUserId := 0
 	if isShowMe {
 		showUserId = this.SysUser.AdminId
@@ -85,6 +91,103 @@ func (this *ExcelClassifyController) List() {
 
 		ExcelInfoMap[v.ExcelClassifyId] = append(ExcelInfoMap[v.ExcelClassifyId], v)
 	}
+
+	classifyListMap := make(map[int][]*excel.ExcelClassifyItems)
+	for _, v := range classifyList {
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckExcelClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ExcelClassifyId, permissionClassifyIdList)
+		if existItems, ok := ExcelInfoMap[v.ExcelClassifyId]; ok {
+			v.Children = existItems
+		}
+	}
+
+	for _, v := range classifyList {
+		if v.ParentId > 0 {
+			classifyListMap[v.ParentId] = append(classifyListMap[v.ParentId], v)
+		}
+	}
+	//组装三级分类
+	for key, classify := range classifyList {
+		subList, ok := classifyListMap[classify.ExcelClassifyId]
+		if ok {
+			classifyList[key].Children = append(classifyList[key].Children, subList...)
+			sort.Slice(classifyList[key].Children, func(i, j int) bool {
+				return excel.ExcelClassifyItemBySort(classifyList[key].Children[i], classifyList[key].Children[j])
+			})
+		}
+	}
+
+	nodeAll := 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)
+		}
+	}
+
+	resp := response2.ExcelClassifyListResp{
+		AllNodes: nodeAll,
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+func AnalysisClassifyList(this *ExcelClassifyController) {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	source, _ := this.GetInt("Source")
+	if source <= 0 {
+		source = utils.EXCEL_DEFAULT
+	}
+	//只看我的
+	showUserId := this.SysUser.AdminId
+
+	classifyList, err := excel.GetExcelClassifyBySource(source)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+		return
+	}
+	// 分类map
+	classifyMap := make(map[int]*excel.ExcelClassifyItems)
+	for _, v := range classifyList {
+		classifyMap[v.ExcelClassifyId] = v
+	}
+
+	// 获取二级分类
+	// 获取三级分类
+	// 根据来源获取所有excel表格(无内容)
+	allExcelInfo, err := excel.GetNoContentExcelInfoAll(source, showUserId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取表格信息失败,Err:" + err.Error()
+		return
+	}
+
+	// 获取所有有权限的指标和分类
+	permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserExcelAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+		return
+	}
+
+	ExcelInfoMap := make(map[int][]*excel.ExcelClassifyItems)
+	for _, v := range allExcelInfo {
+		// 数据权限
+		if classifyInfo, ok := classifyMap[v.ExcelClassifyId]; ok {
+			v.HaveOperaAuth = data_manage_permission.CheckExcelPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.ExcelInfoId, v.ExcelClassifyId, permissionEdbIdList, permissionClassifyIdList)
+		}
+
+		ExcelInfoMap[v.ExcelClassifyId] = append(ExcelInfoMap[v.ExcelClassifyId], v)
+	}
+
 	classifyListMap := make(map[int][]*excel.ExcelClassifyItems)
 	for _, v := range classifyList {
 		// 数据权限
@@ -117,6 +220,10 @@ func (this *ExcelClassifyController) List() {
 			nodeAll = append(nodeAll, v)
 		}
 	}
+
+	// 自定义分析只看自己的分类
+	nodeAll = removeNodesWithAnalysisClassify(nodeAll, this.SysUser.AdminId)
+
 	resp := response2.ExcelClassifyListResp{
 		AllNodes: nodeAll,
 	}
@@ -126,6 +233,36 @@ func (this *ExcelClassifyController) List() {
 	br.Data = resp
 }
 
+func removeNodesWithAnalysisClassify(nodes []*excel.ExcelClassifyItems, adminId int) []*excel.ExcelClassifyItems {
+	var newListNode []*excel.ExcelClassifyItems
+
+	for _, node := range nodes {
+		if node.Children != nil {
+			node.Children = removeNodesWithAnalysisClassify(node.Children, adminId)
+		}
+
+		// 如果是ETA表格,那么就保留
+		if node.ExcelInfoId > 0 {
+			newListNode = append(newListNode, node)
+			continue
+		}
+
+		// 如果是公共分类,且名下的ETA表格不为空,那么就保留
+		if node.SysUserId == 0 && node.Children != nil && len(node.Children) > 0 {
+			newListNode = append(newListNode, node)
+			continue
+		}
+
+		// 如果是自己的分类,那么就保留
+		if node.SysUserId == adminId {
+			newListNode = append(newListNode, node)
+			continue
+		}
+	}
+
+	return newListNode
+}
+
 // ExcelClassifyItems
 // @Title 获取所有excel表格分类接口-不包含表格
 // @Description 获取所有excel表格分类接口-不包含表格