Browse Source

fix:指标和预测分类的按钮权限控制

Roc 11 months ago
parent
commit
9019af9f93

+ 8 - 25
controllers/data_manage/data_manage_permission.go

@@ -4,10 +4,9 @@ import (
 	"encoding/json"
 	"eta/eta_api/controllers"
 	"eta/eta_api/models"
-	"eta/eta_api/models/data_manage"
-	"eta/eta_api/services/data"
+	data_manage_permission2 "eta/eta_api/models/data_manage/data_manage_permission"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
-	"fmt"
 )
 
 // DataMangePermissionController 数据权限管理
@@ -35,7 +34,7 @@ func (c *DataMangePermissionController) SetEdbChartPermission() {
 		return
 	}
 
-	var req data_manage.SetEdbChartPermissionReq
+	var req data_manage_permission2.SetEdbChartPermissionReq
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
@@ -62,7 +61,7 @@ func (c *DataMangePermissionController) SetEdbChartPermission() {
 		return
 	}
 
-	err, errMsg := data.SetEdbChartPermission(req.Source, req.SubSource, req.UserId, req.UserList, req.IsSelectAll, req.DataIdList, req.NoDataIdList, req.Keyword, req.ClassifyId)
+	err, errMsg := data_manage_permission.SetEdbChartPermission(req.Source, req.SubSource, req.UserId, req.UserList, req.IsSelectAll, req.DataIdList, req.NoDataIdList, req.Keyword, req.ClassifyId)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "设置失败"
@@ -98,7 +97,7 @@ func (c *DataMangePermissionController) SetPermissionEdbChartClassifyIsPermissio
 		return
 	}
 
-	var req data_manage.SetDataIsPermissionReq
+	var req data_manage_permission2.SetDataIsPermissionReq
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
@@ -119,7 +118,7 @@ func (c *DataMangePermissionController) SetPermissionEdbChartClassifyIsPermissio
 		return
 	}
 
-	err, errMsg := data.SetDataIsPermission(req.Source, req.SubSource, req.ClassifyIdList)
+	err, errMsg := data_manage_permission.SetDataIsPermission(req.Source, req.SubSource, req.ClassifyIdList)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "设置失败"
@@ -156,7 +155,7 @@ func (c *DataMangePermissionController) SetEdbChartClassifyPermission() {
 		return
 	}
 
-	var req data_manage.SetEdbChartClassifyPermissionReq
+	var req data_manage_permission2.SetEdbChartClassifyPermissionReq
 	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
 	if err != nil {
 		br.Msg = "参数解析异常!"
@@ -183,7 +182,7 @@ func (c *DataMangePermissionController) SetEdbChartClassifyPermission() {
 		return
 	}
 
-	err, errMsg := data.SetEdbChartClassifyPermission(req.Source, req.SubSource, req.UserList, req.ClassifyIdList)
+	err, errMsg := data_manage_permission.SetEdbChartClassifyPermission(req.Source, req.SubSource, req.UserList, req.ClassifyIdList)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "设置失败"
@@ -198,19 +197,3 @@ func (c *DataMangePermissionController) SetEdbChartClassifyPermission() {
 	br.Success = true
 	br.Msg = "设置成功"
 }
-func init() {
-	fmt.Println()
-
-	item, err := data_manage.GetEdbInfoById(100080)
-	if err != nil {
-		fmt.Println("GetEdbInfoById err:", err)
-		return
-	}
-	classifyItem, err := data_manage.GetEdbClassifyById(item.ClassifyId)
-	if err != nil {
-		fmt.Println("GetChartClassifyById err:", err)
-		return
-	}
-
-	fmt.Println(data.CheckEdbPermission(item.IsJoinPermission, classifyItem.IsJoinPermission, 142, item.EdbInfoId, item.ClassifyId))
-}

+ 168 - 57
controllers/data_manage/edb_classify.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
 	"sort"
 )
@@ -39,6 +40,19 @@ func (this *EdbClassifyController) ListV2() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	// 分类map
+	classifyMap := make(map[int]*data_manage.EdbClassifyItems)
+	for _, v := range classifyAll {
+		classifyMap[v.ClassifyId] = v
+	}
+
+	// 已授权分类id
+	permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+		return
+	}
 
 	// 获取当前账号的不可见指标
 	obj := data_manage.EdbInfoNoPermissionAdmin{}
@@ -59,19 +73,36 @@ func (this *EdbClassifyController) ListV2() {
 		return
 	}
 	edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
-	for _, v := range allEdbInfo {
-		// 如果指标不可见,那么就不返回该指标
-		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
-			continue
+	if len(allEdbInfo) > 0 {
+		// 获取所有有权限的指标和分类
+		permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range allEdbInfo {
+			// 如果指标不可见,那么就不返回该指标
+			if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+				continue
+			}
+			// 数据权限
+			if classifyInfo, ok := classifyMap[v.ClassifyId]; ok {
+				v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+			}
+
+			button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE, v.HaveOperaAuth)
+			button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+			v.Button = button
+			edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
 		}
-		button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
-		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-		v.Button = button
-		edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
 	}
 	rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
 	for _, v := range classifyAll {
-		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+		// 按钮权限
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
 		v.Button = button
 
@@ -85,7 +116,10 @@ func (this *EdbClassifyController) ListV2() {
 	}
 	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
 	for _, v := range rootList {
-		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+		// 按钮权限
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 		v.Button = button
 
 		if existItems, ok := rootChildMap[v.ClassifyId]; ok {
@@ -620,6 +654,13 @@ func (this *EdbClassifyController) ItemsV2() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	// 已授权分类id
+	permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+		return
+	}
 	//allEdbInfo, err := data_manage.GetEdbInfoAll(0)
 	//if err != nil && err.Error() != utils.ErrNoRow() {
 	//	br.Msg = "获取失败"
@@ -635,7 +676,10 @@ func (this *EdbClassifyController) ItemsV2() {
 	//}
 	rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
 	for _, v := range classifyAll {
-		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+		// 按钮权限
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
 		v.Button = button
 
@@ -649,7 +693,10 @@ func (this *EdbClassifyController) ItemsV2() {
 	}
 	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
 	for _, v := range rootList {
-		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+		// 按钮权限
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 		v.Button = button
 
 		if existItems, ok := rootChildMap[v.ClassifyId]; ok {
@@ -711,6 +758,13 @@ func (this *EdbClassifyController) ClassifyEdbInfoList() {
 		return
 	}
 
+	classifyInfo, err := data_manage.GetEdbClassifyById(classifyId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
+		return
+	}
+
 	// 获取当前账号的不可见指标
 	obj := data_manage.EdbInfoNoPermissionAdmin{}
 	confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
@@ -732,16 +786,27 @@ func (this *EdbClassifyController) ClassifyEdbInfoList() {
 	}
 
 	list := make([]*data_manage.EdbClassifyItems, 0)
-	for _, v := range allEdbInfo {
-		// 如果指标不可见,那么就不返回该指标
-		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
-			continue
+
+	if len(allEdbInfo) > 0 {
+		// 获取所有有权限的指标和分类
+		permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+			return
 		}
-		button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
-		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-		v.Button = button
+		for _, v := range allEdbInfo {
+			// 如果指标不可见,那么就不返回该指标
+			if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+				continue
+			}
+			v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+			button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE, v.HaveOperaAuth)
+			button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+			v.Button = button
 
-		list = append(list, v)
+			list = append(list, v)
+		}
 	}
 
 	resp := new(data_manage.ClassifyEdbInfoListResp)
@@ -781,16 +846,30 @@ func (this *EdbClassifyController) ItemsV3() {
 		br.ErrMsg = "获取数据失败,Err:" + err.Error()
 		return
 	}
+	// 已授权分类id
+	permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+		return
+	}
+
 	rootTwoMap := make(map[int][]*data_manage.EdbClassifyItems)
 	for _, v := range rootTwoList {
-		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+		// 按钮权限
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 		v.Button = button
 
 		rootTwoMap[v.ParentId] = append(rootTwoMap[v.ParentId], v)
 	}
 	rootTwoChildMap := make(map[int][]*data_manage.EdbClassifyItems)
 	for _, v := range classifyAll {
-		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+		// 按钮权限
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 		v.Button = button
 		if v.Level == 3 {
 			rootTwoChildMap[v.ParentId] = append(rootTwoChildMap[v.ParentId], v)
@@ -799,18 +878,27 @@ func (this *EdbClassifyController) ItemsV3() {
 
 	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
 	for _, v := range rootList {
-		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+		// 数据权限
+		v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+		// 按钮权限
+		button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 		v.Button = button
 
 		if existItems, ok := rootTwoMap[v.ClassifyId]; ok {
 			v.Children = existItems
 			for _, item := range existItems {
-				button := data.GetEdbClassifyOpButton(this.SysUser, item.SysUserId)
+				// 数据权限
+				v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+				// 按钮权限
+				button := data.GetEdbClassifyOpButton(this.SysUser, item.SysUserId, v.HaveOperaAuth)
 				item.Button = button
 
 				if existItems, ok := rootTwoChildMap[item.ClassifyId]; ok {
 					for _, existItem := range existItems {
-						button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+						// 数据权限
+						v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+						// 按钮权限
+						button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 						button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
 						existItem.Button = button
 					}
@@ -839,11 +927,10 @@ func (this *EdbClassifyController) ItemsV3() {
 			}
 		}
 	}
-	// 是否允许添加一级分类
 
 	// 是否允许添加一级分类
 	canOpClassify := true
-	button := data.GetEdbClassifyOpButton(this.SysUser, 0)
+	button := data.GetEdbClassifyOpButton(this.SysUser, 0, true)
 	if !button.AddButton {
 		canOpClassify = false
 	}
@@ -889,21 +976,6 @@ func (this *EdbClassifyController) SimpleList() {
 
 	var sortList data_manage.EdbClassifyItemList
 	if parentId > 0 {
-		// 查询当前分类信息
-		currClassify, err := data_manage.GetEdbClassifyById(parentId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取当前分类信息失败,Err:" + err.Error()
-			return
-		}
-		// 获取所有有权限的指标和分类
-		permissionEdbIdList, permissionClassifyIdList, err := data.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
-		if err != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
-			return
-		}
-
 		// 查询挂在当前分类上的指标列表
 		// 获取当前账号的不可见指标
 		obj := data_manage.EdbInfoNoPermissionAdmin{}
@@ -924,23 +996,51 @@ func (this *EdbClassifyController) SimpleList() {
 			return
 		}
 
-		for _, v := range allEdbInfo {
-			// 如果指标不可见,那么就不返回该指标
-			if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
-				continue
+		if len(allEdbInfo) > 0 {
+			// 查询当前分类信息
+			currClassify, err := data_manage.GetEdbClassifyById(parentId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取当前分类信息失败,Err:" + err.Error()
+				return
+			}
+			// 获取所有有权限的指标和分类
+			permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+				return
+			}
+			for _, v := range allEdbInfo {
+				// 如果指标不可见,那么就不返回该指标
+				if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+					continue
+				}
+				v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+				button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE, v.HaveOperaAuth)
+				button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+				v.Button = button
+				v.Children = make([]*data_manage.EdbClassifyItems, 0)
+				v.ParentId = parentId
+				nodeAll = append(nodeAll, v)
 			}
-			button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
-			button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-			v.Button = button
-			v.Children = make([]*data_manage.EdbClassifyItems, 0)
-			v.ParentId = parentId
-			v.HaveOperaAuth = data.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
-			nodeAll = append(nodeAll, v)
 		}
+
 	}
 	if len(rootList) > 0 {
+		// 已授权分类id
+		permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}
+
 		for _, v := range rootList {
-			button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+			// 数据权限
+			v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+			// 按钮权限
+			button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 			v.Button = button
 			v.Children = make([]*data_manage.EdbClassifyItems, 0)
 			nodeAll = append(nodeAll, v)
@@ -968,7 +1068,7 @@ func (this *EdbClassifyController) SimpleList() {
 
 	// 是否允许添加一级分类
 	canOpClassify := true
-	button := data.GetEdbClassifyOpButton(this.SysUser, 0)
+	button := data.GetEdbClassifyOpButton(this.SysUser, 0, true)
 	if !button.AddButton {
 		canOpClassify = false
 	}
@@ -1005,8 +1105,19 @@ func (this *EdbClassifyController) ClassifyTree() {
 	var sortList data_manage.EdbClassifyItemList
 
 	if len(allList) > 0 {
+		// 已授权分类id
+		permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}
+
 		for k, v := range allList {
-			button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
+			// 数据权限
+			v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+			// 按钮权限
+			button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 			allList[k].Button = button
 		}
 		nodeAll = data.GetClassifyTreeRecursive(allList, 0)
@@ -1030,7 +1141,7 @@ func (this *EdbClassifyController) ClassifyTree() {
 
 	// 是否允许添加一级分类
 	canOpClassify := true
-	button := data.GetEdbClassifyOpButton(this.SysUser, 0)
+	button := data.GetEdbClassifyOpButton(this.SysUser, 0, true)
 	if !button.AddButton {
 		canOpClassify = false
 	}

+ 101 - 44
controllers/data_manage/edb_info.go

@@ -12,6 +12,7 @@ import (
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/alarm_msg"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	excel2 "eta/eta_api/services/data/excel"
 	"eta/eta_api/services/data_stat"
 	"eta/eta_api/services/elastic"
@@ -2056,6 +2057,39 @@ func (this *EdbInfoController) EdbInfoList() {
 
 	//获取英文频度
 	edbInfoItem.FrequencyEn = data.GetFrequencyEn(edbInfoItem.Frequency)
+
+	//查询目录
+	classifyList, err, errMsg := data.GetFullClassifyByClassifyId(edbInfoItem.ClassifyId)
+	if err != nil {
+		br.Msg = err.Error()
+		br.ErrMsg = errMsg
+		return
+	}
+
+	// 权限校验
+	{
+		var currClassify *data_manage.EdbClassifyIdItems
+		for _, v := range classifyList {
+			if edbInfoItem.ClassifyId == v.ClassifyId {
+				currClassify = v
+				break
+			}
+		}
+		if currClassify != nil {
+			edbInfoItem.HaveOperaAuth, err = data_manage_permission.CheckEdbPermission(edbInfoItem.IsJoinPermission, currClassify.IsJoinPermission, this.SysUser.AdminId, edbInfoItem.EdbInfoId, edbInfoItem.ClassifyId)
+			if err != nil {
+				br.Msg = err.Error()
+				br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+				return
+			}
+		}
+	}
+
+	// 按钮校验
+	button := data.GetEdbOpButton(this.SysUser, edbInfoItem.SysUserId, edbInfoItem.EdbType, edbInfoItem.EdbInfoType, edbInfoItem.HaveOperaAuth)
+	button.AddButton = false
+	edbInfoItem.Button = button
+
 	//获取指标数据
 	var dataCondition string
 	var dataPars []interface{}
@@ -2131,39 +2165,8 @@ func (this *EdbInfoController) EdbInfoList() {
 		}
 	}
 
-	// 按钮校验
-	button := data.GetEdbOpButton(this.SysUser, edbInfoItem.SysUserId, edbInfoItem.EdbType, edbInfoItem.EdbInfoType)
-	button.AddButton = false
-	edbInfoItem.Button = button
-
-	// 权限校验
-	{
-		currClassify, err := data_manage.GetEdbClassifyById(edbInfoItem.EdbInfoId)
-		if err != nil && err.Error() != utils.ErrNoRow() {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取当前分类信息失败,Err:" + err.Error()
-			return
-		}
-		if currClassify != nil {
-			haveOperaAuth, err := data.CheckEdbPermission(edbInfoItem.IsJoinPermission, currClassify.IsJoinPermission, this.SysUser.AdminId, edbInfoItem.EdbInfoId, edbInfoItem.ClassifyId)
-			if err != nil {
-				br.Msg = err.Error()
-				br.ErrMsg = "校验指标权限失败,err:" + err.Error()
-				return
-			}
-			edbInfoItem.HaveOperaAuth = haveOperaAuth
-		}
-	}
-
 	//是否展示英文标识
 	edbInfoItem.IsEnEdb = data.CheckIsEnEdb(edbInfoItem.EdbNameEn, edbInfoItem.Unit, edbInfoItem.UnitEn)
-	//查询目录
-	classifyList, err, errMsg := data.GetFullClassifyByClassifyId(edbInfoItem.ClassifyId)
-	if err != nil {
-		br.Msg = err.Error()
-		br.ErrMsg = errMsg
-		return
-	}
 
 	resp.Paging = page
 	resp.Item = edbInfoItem
@@ -2396,8 +2399,19 @@ func (this *EdbInfoController) EdbInfoEdit() {
 		return
 	}
 
+	var haveOperaAuth bool
+	// 权限校验
+	{
+		haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.EdbInfoId, edbInfo.ClassifyId, edbInfo.IsJoinPermission, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+			return
+		}
+	}
+
 	// 编辑权限校验
-	button := data.GetEdbOpButton(this.SysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType)
+	button := data.GetEdbOpButton(this.SysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType, haveOperaAuth)
 	if !button.OpButton {
 		br.Msg = "无权限操作"
 		br.IsSendEmail = false
@@ -2732,8 +2746,19 @@ func (this *EdbInfoController) EdbInfoMove() {
 		return
 	}
 
+	var haveOperaAuth bool
+	// 权限校验
+	{
+		haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.IsJoinPermission, edbInfo.EdbInfoId, edbInfo.ClassifyId, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+			return
+		}
+	}
+
 	// 移动权限校验
-	button := data.GetEdbOpButton(this.SysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType)
+	button := data.GetEdbOpButton(this.SysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType, haveOperaAuth)
 	if !button.MoveButton {
 		br.Msg = "无权限操作"
 		br.IsSendEmail = false
@@ -2881,6 +2906,24 @@ func (this *EdbInfoController) EdbInfoDetail() {
 		br.ErrMsg = errMsg
 		return
 	}
+
+	// 权限校验
+	{
+		classifyMap := make(map[int]*data_manage.EdbClassifyIdItems)
+		for _, v := range classifyList {
+			classifyMap[v.ClassifyId] = v
+		}
+		if currClassify, ok := classifyMap[edbInfo.ClassifyId]; ok {
+			haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassify.IsJoinPermission, this.SysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
+			if err != nil {
+				br.Msg = err.Error()
+				br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+				return
+			}
+			resp.HaveOperaAuth = haveOperaAuth
+		}
+	}
+
 	resp.EdbInfo = edbInfo
 	resp.ClassifyList = classifyList
 
@@ -3176,7 +3219,7 @@ func (this *EdbInfoController) EdbInfoFilterByEs() {
 		}
 
 		// 获取所有有权限的指标和分类
-		permissionEdbIdList, permissionClassifyIdList, err := data.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+		permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
 		if err != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
@@ -3186,7 +3229,7 @@ func (this *EdbInfoController) EdbInfoFilterByEs() {
 		for i := 0; i < edbInfoListLen; i++ {
 			tmpEdbInfo := edbInfoList[i]
 			if currClassify, ok := classifyMap[tmpEdbInfo.ClassifyId]; ok {
-				edbInfoList[i].HaveOperaAuth = data.CheckEdbPermissionByPermissionIdList(tmpEdbInfo.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfo.EdbInfoId, tmpEdbInfo.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+				edbInfoList[i].HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(tmpEdbInfo.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfo.EdbInfoId, tmpEdbInfo.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
 			}
 		}
 	}
@@ -3470,7 +3513,7 @@ func (this *ChartInfoController) EdbInfoData() {
 		}
 	}
 	if currClassifyItem != nil {
-		haveOperaAuth, err := data.CheckEdbPermission(edbInfo.IsJoinPermission, currClassifyItem.IsJoinPermission, sysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
+		haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassifyItem.IsJoinPermission, sysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
 		if err != nil {
 			br.Msg = err.Error()
 			br.ErrMsg = "校验指标权限失败,err:" + err.Error()
@@ -4031,7 +4074,7 @@ func (this *EdbInfoController) MoveEdbChartList() {
 	//	return
 	//}
 
-	list, total, err := data.GetMoveEdbChartList(source, subSource, userId, keyword, classify, startSize, pageSize)
+	list, total, err := data_manage_permission.GetMoveEdbChartList(source, subSource, userId, keyword, classify, startSize, pageSize)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "获取失败"
@@ -4104,7 +4147,7 @@ func (this *EdbInfoController) MoveEdbChartUser() {
 		return
 	}
 
-	err, errMsg := data.MoveEdbChart(req.Source, req.SubSource, req.UserId, req.NewUserId, req.IsSelectAll, req.DataIdList, req.NoDataIdList, req.Keyword, req.ClassifyId)
+	err, errMsg := data_manage_permission.MoveEdbChart(req.Source, req.SubSource, req.UserId, req.NewUserId, req.IsSelectAll, req.DataIdList, req.NoDataIdList, req.Keyword, req.ClassifyId)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "移动失败"
@@ -4624,7 +4667,7 @@ func (this *EdbInfoController) AllEdbInfoByEs() {
 		}
 
 		// 获取所有有权限的指标和分类
-		permissionEdbIdList, permissionClassifyIdList, err := data.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+		permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
 		if err != nil {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
@@ -4634,7 +4677,7 @@ func (this *EdbInfoController) AllEdbInfoByEs() {
 		for i := 0; i < edbInfoListLen; i++ {
 			tmpEdbInfo := edbInfoList[i]
 			if currClassify, ok := classifyMap[tmpEdbInfo.ClassifyId]; ok {
-				edbInfoList[i].HaveOperaAuth = data.CheckEdbPermissionByPermissionIdList(tmpEdbInfo.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfo.EdbInfoId, tmpEdbInfo.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+				edbInfoList[i].HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(tmpEdbInfo.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfo.EdbInfoId, tmpEdbInfo.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
 			}
 		}
 	}
@@ -5162,7 +5205,6 @@ func (this *EdbInfoController) EdbChartList() {
 		classifyIdList := make([]int, 0)
 		for _, v := range list {
 			classifyIdList = append(classifyIdList, v.ClassifyId)
-			v.Button = data.GetEdbOpButton(sysUser, v.SysUserId, v.EdbType, v.EdbInfoType)
 		}
 
 		// 指标权限
@@ -5183,7 +5225,7 @@ func (this *EdbInfoController) EdbChartList() {
 			}
 
 			// 获取所有有权限的指标和分类
-			permissionEdbIdList, permissionClassifyIdList, err := data.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+			permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
 			if err != nil {
 				br.Msg = "获取失败"
 				br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
@@ -5192,10 +5234,13 @@ func (this *EdbInfoController) EdbChartList() {
 
 			for _, v := range list {
 				if currClassify, ok := classifyMap[v.ClassifyId]; ok {
-					v.HaveOperaAuth = data.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+					v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+
+					v.Button = data.GetEdbOpButton(sysUser, v.SysUserId, v.EdbType, v.EdbInfoType, v.HaveOperaAuth)
 				}
 			}
 		}
+
 		page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
 	}
 
@@ -5251,8 +5296,20 @@ func (this *EdbInfoController) Modify() {
 		br.ErrMsg = "获取指标信息失败, Err:" + err.Error()
 		return
 	}
+
+	var haveOperaAuth bool
+	// 权限校验
+	{
+		haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.EdbInfoId, edbInfo.ClassifyId, edbInfo.IsJoinPermission, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+			return
+		}
+	}
+
 	// 编辑权限校验
-	button := data.GetEdbOpButton(this.SysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType)
+	button := data.GetEdbOpButton(this.SysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType, haveOperaAuth)
 	if !button.OpButton {
 		br.Msg = "无权限操作"
 		return

+ 2 - 1
controllers/data_manage/edb_info_calculate.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_api/models"
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -247,7 +248,7 @@ func (this *ChartInfoController) CalculateDetail() {
 		}
 	}
 	if currClassifyItem != nil {
-		haveOperaAuth, err := data.CheckEdbPermission(edbInfo.IsJoinPermission, currClassifyItem.IsJoinPermission, sysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
+		haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassifyItem.IsJoinPermission, sysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
 		if err != nil {
 			br.Msg = err.Error()
 			br.ErrMsg = "校验指标权限失败,err:" + err.Error()

+ 335 - 270
controllers/data_manage/predict_edb_classify.go

@@ -7,6 +7,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
 	"sort"
 )
@@ -22,109 +23,109 @@ type PredictEdbClassifyController struct {
 // @Param   IsOnlyMe   query   bool  false       "是否只看我的"
 // @Success 200 {object} data_manage.EdbClassifyListResp
 // @router /predict_classify/list [get]
-func (this *PredictEdbClassifyController) List() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	isOnlyMe, _ := this.GetBool("IsOnlyMe")
-
-	rootList, err := data_manage.GetEdbClassifyByParentId(0, 1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
-	}
-	// 获取当前账号的不可见指标
-	obj := data_manage.EdbInfoNoPermissionAdmin{}
-	confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
-		return
-	}
-	noPermissionEdbInfoIdMap := make(map[int]bool)
-	for _, v := range confList {
-		noPermissionEdbInfoIdMap[v.EdbInfoId] = true
-	}
-
-	allEdbInfo, err := data_manage.GetPredictEdbInfoAll(1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
-	}
-	edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
-	for _, v := range allEdbInfo {
-		// 如果指标不可见,那么就不返回该指标
-		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
-			continue
-		}
-		button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
-		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-		button.OpButton = false
-		button.DeleteButton = false
-		v.Button = button
-		if isOnlyMe {
-			if v.SysUserId == this.SysUser.AdminId {
-				edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
-			}
-		} else {
-			edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
-		}
-	}
-	rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
-	for _, v := range rootList {
-		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
-		v.Button = button
-
-		rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
-		if existItems, ok := edbInfoMap[v.ClassifyId]; ok {
-			v.Children = existItems
-		} else {
-			items := make([]*data_manage.EdbClassifyItems, 0)
-			v.Children = items
-		}
-	}
-	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
-	for _, v := range rootList {
-		nodeAll = append(nodeAll, v)
-	}
-
-	// 是否允许添加分类
-	canOpClassify := true
-
-	// 如果不是 超管 或者 ficc管理员 或者 ficc研究员,那么就没有权限
-	//if !utils.InArrayByStr([]string{utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_RESEARCHR, utils.ROLE_TYPE_CODE_FICC_RESEARCHR}, this.SysUser.RoleTypeCode) {
-	//	canOpClassify = false
-	//}
-
-	language := `CN`
-	// 指标显示的语言
-	{
-		configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.PredictEdbLanguageVar)
-		if configDetail != nil {
-			language = configDetail.ConfigValue
-		} else {
-			configDetail, _ = system.GetDefaultConfigDetailByCode(system.PredictEdbLanguageVar)
-			if configDetail != nil {
-				language = configDetail.ConfigValue
-			}
-		}
-	}
-
-	resp := data_manage.EdbClassifyListResp{
-		AllNodes:      nodeAll,
-		CanOpClassify: canOpClassify,
-		Language:      language,
-	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}
+//func (this *PredictEdbClassifyController) List() {
+//	br := new(models.BaseResponse).Init()
+//	defer func() {
+//		this.Data["json"] = br
+//		this.ServeJSON()
+//	}()
+//
+//	isOnlyMe, _ := this.GetBool("IsOnlyMe")
+//
+//	rootList, err := data_manage.GetEdbClassifyByParentId(0, 1)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+//		return
+//	}
+//	// 获取当前账号的不可见指标
+//	obj := data_manage.EdbInfoNoPermissionAdmin{}
+//	confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
+//		return
+//	}
+//	noPermissionEdbInfoIdMap := make(map[int]bool)
+//	for _, v := range confList {
+//		noPermissionEdbInfoIdMap[v.EdbInfoId] = true
+//	}
+//
+//	allEdbInfo, err := data_manage.GetPredictEdbInfoAll(1)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+//		return
+//	}
+//	edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
+//	for _, v := range allEdbInfo {
+//		// 如果指标不可见,那么就不返回该指标
+//		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+//			continue
+//		}
+//		button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
+//		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+//		button.OpButton = false
+//		button.DeleteButton = false
+//		v.Button = button
+//		if isOnlyMe {
+//			if v.SysUserId == this.SysUser.AdminId {
+//				edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+//			}
+//		} else {
+//			edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+//		}
+//	}
+//	rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
+//	for _, v := range rootList {
+//		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+//		v.Button = button
+//
+//		rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
+//		if existItems, ok := edbInfoMap[v.ClassifyId]; ok {
+//			v.Children = existItems
+//		} else {
+//			items := make([]*data_manage.EdbClassifyItems, 0)
+//			v.Children = items
+//		}
+//	}
+//	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
+//	for _, v := range rootList {
+//		nodeAll = append(nodeAll, v)
+//	}
+//
+//	// 是否允许添加分类
+//	canOpClassify := true
+//
+//	// 如果不是 超管 或者 ficc管理员 或者 ficc研究员,那么就没有权限
+//	//if !utils.InArrayByStr([]string{utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_RESEARCHR, utils.ROLE_TYPE_CODE_FICC_RESEARCHR}, this.SysUser.RoleTypeCode) {
+//	//	canOpClassify = false
+//	//}
+//
+//	language := `CN`
+//	// 指标显示的语言
+//	{
+//		configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.PredictEdbLanguageVar)
+//		if configDetail != nil {
+//			language = configDetail.ConfigValue
+//		} else {
+//			configDetail, _ = system.GetDefaultConfigDetailByCode(system.PredictEdbLanguageVar)
+//			if configDetail != nil {
+//				language = configDetail.ConfigValue
+//			}
+//		}
+//	}
+//
+//	resp := data_manage.EdbClassifyListResp{
+//		AllNodes:      nodeAll,
+//		CanOpClassify: canOpClassify,
+//		Language:      language,
+//	}
+//	br.Ret = 200
+//	br.Success = true
+//	br.Msg = "获取成功"
+//	br.Data = resp
+//}
 
 // Items
 // @Title 获取所有预测指标分类接口-不包含指标
@@ -181,7 +182,28 @@ func (this *PredictEdbClassifyController) Add() {
 		return
 	}
 
-	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0)
+	haveOperaAuth := true
+
+	if req.ParentId > 0 {
+		parentClassify, err := data_manage.GetEdbClassifyById(req.ParentId)
+		if err != nil {
+			br.Msg = "获取父级分类失败"
+			br.ErrMsg = "获取父级分类失败,Err:" + err.Error()
+			return
+		}
+
+		// 已授权分类id
+		permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, parentClassify.ClassifyId)
+		if err != nil {
+			br.Msg = "添加失败"
+			br.ErrMsg = "获取父级分类失败,Err:" + err.Error()
+			return
+		}
+		// 数据权限
+		haveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(parentClassify.IsJoinPermission, parentClassify.ClassifyId, permissionClassifyIdList)
+	}
+
+	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0, haveOperaAuth)
 	if !button.AddButton {
 		br.Msg = "不允许添加分类"
 		br.IsSendEmail = false
@@ -505,156 +527,156 @@ func (this *PredictEdbClassifyController) Move() {
 // @Param   IsOnlyMe   query   bool  false       "是否只看我的"
 // @Success 200 {object} data_manage.EdbClassifyListResp
 // @router /predict_classify/list/v2 [get]
-func (this *PredictEdbClassifyController) ListV2() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		this.Data["json"] = br
-		this.ServeJSON()
-	}()
-
-	isOnlyMe, _ := this.GetBool("IsOnlyMe")
-
-	rootList, err := data_manage.GetEdbClassifyByParentId(0, 1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
-	}
-	// 获取当前账号的不可见指标
-	obj := data_manage.EdbInfoNoPermissionAdmin{}
-	confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
-		return
-	}
-	noPermissionEdbInfoIdMap := make(map[int]bool)
-	for _, v := range confList {
-		noPermissionEdbInfoIdMap[v.EdbInfoId] = true
-	}
-
-	allEdbInfo, err := data_manage.GetPredictEdbInfoAll(1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
-	}
-	edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
-	for _, v := range allEdbInfo {
-		// 如果指标不可见,那么就不返回该指标
-		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
-			continue
-		}
-		button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
-		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-		button.OpButton = false
-		button.DeleteButton = false
-		v.Button = button
-		if isOnlyMe {
-			if v.SysUserId == this.SysUser.AdminId {
-				edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
-			}
-		} else {
-			edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
-		}
-	}
-	rootTwoList, err := data_manage.GetEdbClassifyByParentIdTwo(1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
-	}
-	classifyAll, err := data_manage.GetEdbClassifyAllV2(1)
-	if err != nil && err.Error() != utils.ErrNoRow() {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取数据失败,Err:" + err.Error()
-		return
-	}
-	rootTwoMap := make(map[int][]*data_manage.EdbClassifyItems)
-	for _, v := range rootTwoList {
-		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
-		v.Button = button
-		rootTwoMap[v.ParentId] = append(rootTwoMap[v.ParentId], v)
-	}
-	rootTwoChildMap := make(map[int][]*data_manage.EdbClassifyItems)
-	for _, v := range classifyAll {
-		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
-		v.Button = button
-		if v.Level == 3 {
-			rootTwoChildMap[v.ParentId] = append(rootTwoChildMap[v.ParentId], v)
-		}
-	}
-
-	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
-	for _, v := range rootList {
-		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
-		v.Button = button
-
-		if existItems, ok := rootTwoMap[v.ClassifyId]; ok {
-			v.Children = existItems
-			for _, item := range existItems {
-				item.Button = button
-
-				if existItems, ok := rootTwoChildMap[item.ClassifyId]; ok {
-					item.Children = existItems
-					for _, existItem := range existItems {
-						if _, ok := noPermissionEdbInfoIdMap[existItem.EdbInfoId]; ok {
-							continue
-						}
-						button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
-						button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-						existItem.Button = button
-						if isOnlyMe {
-							if existItem.SysUserId == this.SysUser.AdminId {
-								edbInfoMap[existItem.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
-							}
-						} else {
-							edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
-						}
-					}
-				} else {
-					items := make([]*data_manage.EdbClassifyItems, 0)
-					item.Children = items
-				}
-			}
-		} else {
-			items := make([]*data_manage.EdbClassifyItems, 0)
-			v.Children = items
-		}
-		nodeAll = append(nodeAll, v)
-	}
-
-	// 是否允许添加一级分类
-	canOpClassify := true
-	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0)
-	if !button.AddButton {
-		canOpClassify = false
-	}
-
-	language := `CN`
-	// 指标显示的语言
-	{
-		configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.PredictEdbLanguageVar)
-		if configDetail != nil {
-			language = configDetail.ConfigValue
-		} else {
-			configDetail, _ = system.GetDefaultConfigDetailByCode(system.PredictEdbLanguageVar)
-			if configDetail != nil {
-				language = configDetail.ConfigValue
-			}
-		}
-	}
-
-	resp := data_manage.EdbClassifyListResp{
-		AllNodes:      nodeAll,
-		CanOpClassify: canOpClassify,
-		Language:      language,
-	}
-	br.Ret = 200
-	br.Success = true
-	br.Msg = "获取成功"
-	br.Data = resp
-}
+//func (this *PredictEdbClassifyController) ListV2() {
+//	br := new(models.BaseResponse).Init()
+//	defer func() {
+//		this.Data["json"] = br
+//		this.ServeJSON()
+//	}()
+//
+//	isOnlyMe, _ := this.GetBool("IsOnlyMe")
+//
+//	rootList, err := data_manage.GetEdbClassifyByParentId(0, 1)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+//		return
+//	}
+//	// 获取当前账号的不可见指标
+//	obj := data_manage.EdbInfoNoPermissionAdmin{}
+//	confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
+//		return
+//	}
+//	noPermissionEdbInfoIdMap := make(map[int]bool)
+//	for _, v := range confList {
+//		noPermissionEdbInfoIdMap[v.EdbInfoId] = true
+//	}
+//
+//	allEdbInfo, err := data_manage.GetPredictEdbInfoAll(1)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+//		return
+//	}
+//	edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
+//	for _, v := range allEdbInfo {
+//		// 如果指标不可见,那么就不返回该指标
+//		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+//			continue
+//		}
+//		button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
+//		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+//		button.OpButton = false
+//		button.DeleteButton = false
+//		v.Button = button
+//		if isOnlyMe {
+//			if v.SysUserId == this.SysUser.AdminId {
+//				edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+//			}
+//		} else {
+//			edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+//		}
+//	}
+//	rootTwoList, err := data_manage.GetEdbClassifyByParentIdTwo(1)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+//		return
+//	}
+//	classifyAll, err := data_manage.GetEdbClassifyAllV2(1)
+//	if err != nil && err.Error() != utils.ErrNoRow() {
+//		br.Msg = "获取失败"
+//		br.ErrMsg = "获取数据失败,Err:" + err.Error()
+//		return
+//	}
+//	rootTwoMap := make(map[int][]*data_manage.EdbClassifyItems)
+//	for _, v := range rootTwoList {
+//		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+//		v.Button = button
+//		rootTwoMap[v.ParentId] = append(rootTwoMap[v.ParentId], v)
+//	}
+//	rootTwoChildMap := make(map[int][]*data_manage.EdbClassifyItems)
+//	for _, v := range classifyAll {
+//		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+//		v.Button = button
+//		if v.Level == 3 {
+//			rootTwoChildMap[v.ParentId] = append(rootTwoChildMap[v.ParentId], v)
+//		}
+//	}
+//
+//	nodeAll := make([]*data_manage.EdbClassifyItems, 0)
+//	for _, v := range rootList {
+//		button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+//		v.Button = button
+//
+//		if existItems, ok := rootTwoMap[v.ClassifyId]; ok {
+//			v.Children = existItems
+//			for _, item := range existItems {
+//				item.Button = button
+//
+//				if existItems, ok := rootTwoChildMap[item.ClassifyId]; ok {
+//					item.Children = existItems
+//					for _, existItem := range existItems {
+//						if _, ok := noPermissionEdbInfoIdMap[existItem.EdbInfoId]; ok {
+//							continue
+//						}
+//						button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+//						button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+//						existItem.Button = button
+//						if isOnlyMe {
+//							if existItem.SysUserId == this.SysUser.AdminId {
+//								edbInfoMap[existItem.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+//							}
+//						} else {
+//							edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
+//						}
+//					}
+//				} else {
+//					items := make([]*data_manage.EdbClassifyItems, 0)
+//					item.Children = items
+//				}
+//			}
+//		} else {
+//			items := make([]*data_manage.EdbClassifyItems, 0)
+//			v.Children = items
+//		}
+//		nodeAll = append(nodeAll, v)
+//	}
+//
+//	// 是否允许添加一级分类
+//	canOpClassify := true
+//	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0)
+//	if !button.AddButton {
+//		canOpClassify = false
+//	}
+//
+//	language := `CN`
+//	// 指标显示的语言
+//	{
+//		configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.PredictEdbLanguageVar)
+//		if configDetail != nil {
+//			language = configDetail.ConfigValue
+//		} else {
+//			configDetail, _ = system.GetDefaultConfigDetailByCode(system.PredictEdbLanguageVar)
+//			if configDetail != nil {
+//				language = configDetail.ConfigValue
+//			}
+//		}
+//	}
+//
+//	resp := data_manage.EdbClassifyListResp{
+//		AllNodes:      nodeAll,
+//		CanOpClassify: canOpClassify,
+//		Language:      language,
+//	}
+//	br.Ret = 200
+//	br.Success = true
+//	br.Msg = "获取成功"
+//	br.Data = resp
+//}
 
 // SimpleList
 // @Title 单层分类列表
@@ -708,24 +730,56 @@ func (this *PredictEdbClassifyController) SimpleList() {
 			return
 		}
 
-		for _, v := range allEdbInfo {
-			// 如果指标不可见,那么就不返回该指标
-			if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
-				continue
+		if len(allEdbInfo) > 0 {
+			// 查询当前分类信息
+			currClassify, err := data_manage.GetEdbClassifyById(parentId)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取当前分类信息失败,Err:" + err.Error()
+				return
+			}
+			// 获取所有有权限的指标和分类
+			permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+				return
+			}
+
+			for _, v := range allEdbInfo {
+				// 如果指标不可见,那么就不返回该指标
+				if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+					continue
+				}
+				// 数据权限
+				v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+				// 按钮权限
+				button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
+				button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+				button.OpButton = false
+				button.DeleteButton = false
+				v.Button = button
+				v.ParentId = parentId
+				v.Children = make([]*data_manage.EdbClassifyItems, 0)
+				nodeAll = append(nodeAll, v)
 			}
-			button := data.GetPredictEdbOpButton(this.SysUser, v.SysUserId)
-			button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-			button.OpButton = false
-			button.DeleteButton = false
-			v.Button = button
-			v.Children = make([]*data_manage.EdbClassifyItems, 0)
-			v.ParentId = parentId
-			nodeAll = append(nodeAll, v)
 		}
+
 	}
 	if len(rootList) > 0 {
+		// 已授权分类id
+		permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}
+
 		for _, v := range rootList {
-			button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+			// 数据权限
+			v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+			// 按钮权限
+			button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 			v.Button = button
 			v.Children = make([]*data_manage.EdbClassifyItems, 0)
 			nodeAll = append(nodeAll, v)
@@ -739,7 +793,7 @@ func (this *PredictEdbClassifyController) SimpleList() {
 
 	// 是否允许添加一级分类
 	canOpClassify := true
-	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0)
+	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0, true)
 	if !button.AddButton {
 		canOpClassify = false
 	}
@@ -790,8 +844,19 @@ func (this *PredictEdbClassifyController) ClassifyTree() {
 	var sortList data_manage.EdbClassifyItemList
 
 	if len(allList) > 0 {
+		// 已授权分类id
+		permissionClassifyIdList, err := data_manage_permission.GetUserEdbClassifyPermissionList(this.SysUser.AdminId, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
+			return
+		}
+
 		for k, v := range allList {
-			button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId)
+			// 数据权限
+			v.HaveOperaAuth = data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(v.IsJoinPermission, v.ClassifyId, permissionClassifyIdList)
+			// 按钮权限
+			button := data.GetPredictEdbClassifyOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
 			allList[k].Button = button
 		}
 		nodeAll = data.GetClassifyTreeRecursive(allList, 0)
@@ -801,7 +866,7 @@ func (this *PredictEdbClassifyController) ClassifyTree() {
 	}
 	// 是否允许添加一级分类
 	canOpClassify := true
-	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0)
+	button := data.GetPredictEdbClassifyOpButton(this.SysUser, 0, true)
 	if !button.AddButton {
 		canOpClassify = false
 	}

+ 206 - 19
controllers/data_manage/predict_edb_info.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/models/data_manage/request"
 	"eta/eta_api/models/data_manage/response"
 	"eta/eta_api/services/data"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/services/elastic"
 	"eta/eta_api/utils"
 	"fmt"
@@ -127,6 +128,44 @@ func (this *PredictEdbInfoController) EdbChartList() {
 	if list == nil || len(list) <= 0 || (err != nil && err.Error() == utils.ErrNoRow()) {
 		list = make([]*data_manage.EdbInfoList, 0)
 	} else {
+		classifyIdList := make([]int, 0)
+		for _, v := range list {
+			classifyIdList = append(classifyIdList, v.ClassifyId)
+		}
+
+		// 指标权限
+		{
+			// 当前的分类
+			classifyMap := make(map[int]*data_manage.EdbClassify)
+			classifyList, err := data_manage.GetEdbClassifyByIdList(classifyIdList)
+			if err != nil {
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取分类列表失败,Err:" + err.Error()
+					return
+				}
+			}
+
+			for _, v := range classifyList {
+				classifyMap[v.ClassifyId] = v
+			}
+
+			// 获取所有有权限的指标和分类
+			permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+				return
+			}
+
+			for _, v := range list {
+				if currClassify, ok := classifyMap[v.ClassifyId]; ok {
+					v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+					v.Button = data.GetEdbOpButton(sysUser, v.SysUserId, v.EdbType, v.EdbInfoType, v.HaveOperaAuth)
+				}
+			}
+		}
+
 		page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
 	}
 
@@ -408,6 +447,23 @@ func (this *PredictEdbInfoController) List() {
 		return
 	}
 
+	// 权限校验
+	{
+		classifyMap := make(map[int]*data_manage.EdbClassifyIdItems)
+		for _, v := range classifyList {
+			classifyMap[v.ClassifyId] = v
+		}
+		if currClassify, ok := classifyMap[edbInfoItem.ClassifyId]; ok {
+			haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfoItem.IsJoinPermission, currClassify.IsJoinPermission, this.SysUser.AdminId, edbInfoItem.EdbInfoId, edbInfoItem.ClassifyId)
+			if err != nil {
+				br.Msg = err.Error()
+				br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+				return
+			}
+			edbInfoItem.HaveOperaAuth = haveOperaAuth
+		}
+	}
+
 	resp.Paging = page
 	resp.Item = edbInfoItem
 	resp.ClassifyList = classifyList
@@ -698,8 +754,20 @@ func (this *PredictEdbInfoController) Edit() {
 		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
 		return
 	}
+
+	var haveOperaAuth bool
+	// 数据权限校验
+	{
+		haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.EdbInfoId, edbInfo.ClassifyId, edbInfo.IsJoinPermission, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+			return
+		}
+	}
+
 	// 编辑权限校验
-	button := data.GetPredictEdbOpButton(this.SysUser, edbInfo.SysUserId)
+	button := data.GetPredictEdbOpButton(this.SysUser, edbInfo.SysUserId, haveOperaAuth)
 	if !button.OpButton {
 		br.Msg = "无权限操作"
 		br.IsSendEmail = false
@@ -984,6 +1052,25 @@ func (this *PredictEdbInfoController) Detail() {
 		return
 	}
 
+	edbInfoFull := new(response.EdbInfoFull)
+	edbInfoFull.EdbInfo = edbInfo
+	// 权限校验
+	{
+		classifyMap := make(map[int]*data_manage.EdbClassifyIdItems)
+		for _, v := range classifyList {
+			classifyMap[v.ClassifyId] = v
+		}
+		if currClassify, ok := classifyMap[edbInfo.ClassifyId]; ok {
+			haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassify.IsJoinPermission, this.SysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
+			if err != nil {
+				br.Msg = err.Error()
+				br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+				return
+			}
+			edbInfoFull.HaveOperaAuth = haveOperaAuth
+		}
+	}
+
 	// 拟合残差计算相关系数
 	var correlationStr string
 	if edbInfo.Source == utils.DATA_SOURCE_PREDICT_CALCULATE_NHCC {
@@ -1028,7 +1115,7 @@ func (this *PredictEdbInfoController) Detail() {
 	}
 
 	resp := response.PredictEdbInfo{
-		EdbInfo:        *edbInfo,
+		EdbInfoFull:    edbInfoFull,
 		RuleType:       ruleType,
 		FixedValue:     fixedValue,
 		CalculateList:  calculateList,
@@ -1168,8 +1255,42 @@ func (this *PredictEdbInfoController) FilterByEs() {
 
 	edbInfoListLen := len(edbInfoList)
 
+	classifyIdList := make([]int, 0)
 	for i := 0; i < edbInfoListLen; i++ {
 		edbInfoList[i].EdbNameAlias = edbInfoList[i].EdbName
+		classifyIdList = append(classifyIdList, edbInfoList[i].ClassifyId)
+	}
+
+	// 当前列表中的分类map
+	classifyMap := make(map[int]*data_manage.EdbClassify)
+	if edbInfoListLen > 0 {
+		classifyList, err := data_manage.GetEdbClassifyByIdList(classifyIdList)
+		if err != nil {
+			if err != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取分类列表失败,Err:" + err.Error()
+				return
+			}
+		}
+
+		for _, v := range classifyList {
+			classifyMap[v.ClassifyId] = v
+		}
+
+		// 获取所有有权限的指标和分类
+		permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+			return
+		}
+
+		for i := 0; i < edbInfoListLen; i++ {
+			tmpEdbInfo := edbInfoList[i]
+			if currClassify, ok := classifyMap[tmpEdbInfo.ClassifyId]; ok {
+				edbInfoList[i].HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(tmpEdbInfo.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfo.EdbInfoId, tmpEdbInfo.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+			}
+		}
 	}
 
 	for i := 0; i < edbInfoListLen; i++ {
@@ -1306,6 +1427,7 @@ func (this *PredictEdbInfoController) DataList() {
 	if dateType == 5 {
 		isTimeBetween = true
 	}
+	fullEdb := new(response.EdbInfoFull)
 
 	// 获取预测指标信息
 	edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
@@ -1314,6 +1436,29 @@ func (this *PredictEdbInfoController) DataList() {
 		br.ErrMsg = "获取预测指标信息失败,Err:" + err.Error()
 		return
 	}
+	fullEdb.EdbInfo = edbInfo
+	classifyList, err, errMsg := data.GetFullClassifyByClassifyId(edbInfo.ClassifyId)
+	if err != nil {
+		br.Msg = err.Error()
+		br.ErrMsg = errMsg
+		return
+	}
+	var currClassifyItem *data_manage.EdbClassifyIdItems
+	for _, v := range classifyList {
+		if v.ClassifyId == edbInfo.ClassifyId {
+			currClassifyItem = v
+			break
+		}
+	}
+	if currClassifyItem != nil {
+		fullEdb.HaveOperaAuth, err = data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassifyItem.IsJoinPermission, sysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+			return
+		}
+	}
+
 	maxYear := 0
 	if edbInfo.LatestDate != "" {
 		latestDateT, _ := time.Parse(utils.FormatDate, edbInfo.LatestDate)
@@ -1330,7 +1475,7 @@ func (this *PredictEdbInfoController) DataList() {
 		endDate = ""
 	}
 	// 按钮校验
-	button := data.GetPredictEdbOpButton(this.SysUser, edbInfo.SysUserId)
+	button := data.GetPredictEdbOpButton(this.SysUser, edbInfo.SysUserId, fullEdb.HaveOperaAuth)
 	button.AddButton = false
 
 	dataList, _, _, err, _ := data.GetPredictDataListByPredictEdbInfo(edbInfo, startDate, endDate, isTimeBetween)
@@ -1356,14 +1501,9 @@ func (this *PredictEdbInfoController) DataList() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
-	classifyList, err, errMsg := data.GetFullClassifyByClassifyId(edbInfo.ClassifyId)
-	if err != nil {
-		br.Msg = err.Error()
-		br.ErrMsg = errMsg
-		return
-	}
+
 	resp := response.PredictEdbInfoDataResp{
-		EdbInfo:      edbInfo,
+		EdbInfo:      fullEdb,
 		DataList:     resultDataList,
 		Button:       button,
 		ClassifyList: classifyList,
@@ -1736,8 +1876,20 @@ func (this *PredictEdbInfoController) Modify() {
 		br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
 		return
 	}
+
+	var haveOperaAuth bool
+	// 数据权限校验
+	{
+		haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.EdbInfoId, edbInfo.ClassifyId, edbInfo.IsJoinPermission, this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = err.Error()
+			br.ErrMsg = "校验指标权限失败,err:" + err.Error()
+			return
+		}
+	}
+
 	// 编辑权限校验
-	button := data.GetPredictEdbOpButton(this.SysUser, edbInfo.SysUserId)
+	button := data.GetPredictEdbOpButton(this.SysUser, edbInfo.SysUserId, haveOperaAuth)
 	if !button.OpButton {
 		br.Msg = "无权限操作"
 		br.IsSendEmail = false
@@ -1880,17 +2032,52 @@ func (this *PredictEdbInfoController) ClassifyEdbInfoItems() {
 	}
 
 	list := make([]*data_manage.EdbClassifyItems, 0)
-	for _, v := range allEdbInfo {
-		// 如果指标不可见,那么就不返回该指标
-		if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
-			continue
+
+	edbInfoNum := len(allEdbInfo)
+	if edbInfoNum > 0 {
+		classifyIdList := make([]int, 0)
+		for _, v := range allEdbInfo {
+			classifyIdList = append(classifyIdList, v.ClassifyId)
 		}
 
-		button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
-		button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
-		v.Button = button
+		classifyList, err := data_manage.GetEdbClassifyByIdList(classifyIdList)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取分类数据失败,Err:" + err.Error()
+			return
+		}
 
-		list = append(list, v)
+		// 分类map
+		classifyMap := make(map[int]*data_manage.EdbClassify)
+		for _, v := range classifyList {
+			classifyMap[v.ClassifyId] = v
+		}
+
+		// 获取所有有权限的指标和分类
+		permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(this.SysUser.AdminId, 0, 0)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
+			return
+		}
+
+		for _, v := range allEdbInfo {
+			// 如果指标不可见,那么就不返回该指标
+			if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
+				continue
+			}
+
+			// 数据权限
+			if classifyInfo, ok := classifyMap[v.ClassifyId]; ok {
+				v.HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(v.IsJoinPermission, classifyInfo.IsJoinPermission, v.EdbInfoId, v.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
+			}
+
+			button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE, v.HaveOperaAuth)
+			button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
+			v.Button = button
+
+			list = append(list, v)
+		}
 	}
 
 	resp := new(data_manage.ClassifyEdbInfoListResp)

+ 1 - 1
models/data_manage/data_manage_permission.go → models/data_manage/data_manage_permission/data_manage_permission.go

@@ -1,4 +1,4 @@
-package data_manage
+package data_manage_permission
 
 import (
 	"eta/eta_api/utils"

+ 7 - 2
models/data_manage/response/predit_edb_info.go

@@ -19,15 +19,20 @@ type PredictEdbInfoListResp struct {
 
 // PredictEdbInfoDataResp 预测指标数据返回
 type PredictEdbInfoDataResp struct {
-	EdbInfo      *data_manage.EdbInfo
+	EdbInfo      *EdbInfoFull
 	Button       data_manage.EdbClassifyItemsButton
 	DataList     interface{}
 	ClassifyList []*data_manage.EdbClassifyIdItems `description:"父级分类列表"`
 }
 
+type EdbInfoFull struct {
+	*data_manage.EdbInfo
+	HaveOperaAuth bool `description:"是否有数据权限,默认:false"`
+}
+
 // PredictEdbInfo 预测指标详情
 type PredictEdbInfo struct {
-	data_manage.EdbInfo
+	*EdbInfoFull
 	RuleType       int                                   `description:"预测规则,1:最新,2:固定值,3:同比,4:同差,5:环比,6:环差,7:N期移动均值,8:N期段线性外推值"`
 	FixedValue     float64                               `description:"固定值"`
 	CalculateList  []*data_manage.EdbInfoCalculateDetail `description:"关联指标"`

+ 3 - 2
models/db.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/chart_theme"
 	"eta/eta_api/models/data_manage/cross_variety"
+	"eta/eta_api/models/data_manage/data_manage_permission"
 	"eta/eta_api/models/data_manage/edb_refresh"
 	"eta/eta_api/models/data_manage/excel"
 	future_good2 "eta/eta_api/models/data_manage/future_good"
@@ -559,7 +560,7 @@ func initEdbRefresh() {
 // @datetime 2024-03-27 14:03:11
 func initDataMangePerMission() {
 	orm.RegisterModel(
-		new(data_manage.EdbInfoPermission),     // 指标权限表
-		new(data_manage.EdbClassifyPermission), // 指标分类权限表
+		new(data_manage_permission.EdbInfoPermission),     // 指标权限表
+		new(data_manage_permission.EdbClassifyPermission), // 指标分类权限表
 	)
 }

+ 0 - 18
routers/commentsRouter.go

@@ -4237,24 +4237,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:PredictEdbClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:PredictEdbClassifyController"],
-        beego.ControllerComments{
-            Method: "List",
-            Router: `/predict_classify/list`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
-    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:PredictEdbClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:PredictEdbClassifyController"],
-        beego.ControllerComments{
-            Method: "ListV2",
-            Router: `/predict_classify/list/v2`,
-            AllowHTTPMethods: []string{"get"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:PredictEdbClassifyController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:PredictEdbClassifyController"],
         beego.ControllerComments{
             Method: "Move",

+ 401 - 0
services/data/data_manage_permission/data_move.go

@@ -0,0 +1,401 @@
+package data_manage_permission
+
+import (
+	"errors"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/excel"
+	"eta/eta_api/models/system"
+	"eta/eta_api/utils"
+	"strconv"
+)
+
+// GetMoveEdbChartList 获取待转移的指标/图表列表
+// @param source 来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
+func GetMoveEdbChartList(source, subSource, userId int, keyword, classify string, startSize, pageSize int) (list []data_manage.MoveEdbChartList, total int, err error) {
+	var condition string
+	var pars []interface{}
+	switch source {
+	case 1: //手工数据指标
+		if keyword != "" {
+			condition += ` AND (a.SEC_NAME LIKE ? OR a.TRADE_CODE like ? ) `
+			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
+		}
+		if userId > 0 {
+			condition += ` AND a.user_id = ? `
+			pars = append(pars, userId)
+		}
+
+		if classify != "" {
+			condition += ` AND a.classify_id IN (` + classify + `) `
+		}
+
+		total, err = models.GetEdbinfoListCount(condition, pars, "", 0)
+		if err != nil {
+			return
+		}
+		tmpList, tmpErr := models.GetEdbinfoList(condition, pars, startSize, pageSize, "", 0)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		if len(tmpList) > 0 {
+			adminIdList := make([]int, 0)
+			for _, v := range tmpList {
+				adminIdList = append(adminIdList, v.UserId)
+			}
+			adminList, tmpErr := system.GetAdminListByIdListWithoutEnable(adminIdList)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			adminMap := make(map[int]string)
+			for _, adminInfo := range adminList {
+				adminMap[adminInfo.AdminId] = adminInfo.RealName
+			}
+
+			for _, v := range tmpList {
+				list = append(list, data_manage.MoveEdbChartList{
+					DataId:         v.TradeCode,
+					Code:           v.TradeCode,
+					Name:           v.SecName,
+					ClassifyName:   v.ClassifyName,
+					CreateUserId:   v.UserId,
+					CreateUserName: adminMap[v.UserId],
+				})
+			}
+		}
+
+	case 2: //钢联化工数据库
+		if keyword != `` {
+			condition += " AND (index_name like ? OR index_code like ? OR sys_user_real_name like ? ) "
+			pars = utils.GetLikeKeywordPars(pars, keyword, 3)
+		}
+		if userId > 0 {
+			condition += ` AND sys_user_id = ? `
+			pars = append(pars, userId)
+		}
+
+		if classify != "" {
+			condition += ` AND base_from_mysteel_chemical_classify_id IN (` + classify + `) `
+		}
+
+		total, err = data_manage.GetMysteelChemicalIndexCount(condition, pars)
+		if err != nil {
+			return
+		}
+		tmpList, tmpErr := data_manage.GetMysteelChemicalIndexList(condition, pars, startSize, pageSize)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		for _, v := range tmpList {
+			list = append(list, data_manage.MoveEdbChartList{
+				DataId: strconv.Itoa(v.BaseFromMysteelChemicalIndexId),
+				Code:   v.IndexCode,
+				Name:   v.IndexName,
+				//ClassifyName: v.,
+				CreateUserId:   v.SysUserId,
+				CreateUserName: v.SysUserRealName,
+			})
+		}
+	case 3, 4: //ETA指标库、ETA预测指标
+		if keyword != `` {
+			condition += " AND (edb_code like ? OR edb_name like ? OR sys_user_real_name like ? ) "
+			pars = utils.GetLikeKeywordPars(pars, keyword, 3)
+		}
+		if userId > 0 {
+			condition += ` AND sys_user_id = ? `
+			pars = append(pars, userId)
+		}
+		if classify != "" {
+			condition += ` AND classify_id IN (` + classify + `) `
+		}
+
+		edbInfoType := 0 //ETA指标库
+		if source == 4 { //ETA预测指标
+			edbInfoType = 1
+		}
+		condition += ` AND edb_info_type = ? `
+		pars = append(pars, edbInfoType)
+
+		total, err = data_manage.GetEdbInfoByConditionCount(condition, pars)
+		if err != nil {
+			return
+		}
+		tmpList, tmpErr := data_manage.GetEdbInfoListByCondition(condition, pars, startSize, pageSize)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		for _, v := range tmpList {
+			list = append(list, data_manage.MoveEdbChartList{
+				DataId: strconv.Itoa(v.EdbInfoId),
+				Code:   v.EdbCode,
+				Name:   v.EdbName,
+				//ClassifyName: v.,
+				CreateUserId:   v.SysUserId,
+				CreateUserName: v.SysUserRealName,
+			})
+		}
+	case 5: //图库
+		if keyword != `` {
+			condition += " AND (chart_name like ?  OR sys_user_real_name like ? ) "
+			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
+		}
+		if userId > 0 {
+			condition += ` AND sys_user_id = ? `
+			pars = append(pars, userId)
+		}
+		if classify != "" {
+			condition += ` AND chart_classify_id IN (` + classify + `) `
+		}
+
+		total, err = data_manage.GetChartInfoCountByCondition(condition, pars)
+		if err != nil {
+			return
+		}
+		tmpList, tmpErr := data_manage.GetChartInfoListByCondition(condition, pars, startSize, pageSize)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		// 获取所有的图表分类
+		firstClassifyList, tmpErr := data_manage.GetChartClassifyByParentId(0, 1)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		firstClassifyNameMap := make(map[int]string)
+		for _, v := range firstClassifyList {
+			firstClassifyNameMap[v.ChartClassifyId] = v.ChartClassifyName
+		}
+		secondClassList, tmpErr := data_manage.GetChartClassifyAll(1)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		secondClassifyNameMap := make(map[int]string)
+		for _, v := range secondClassList {
+			firstName := firstClassifyNameMap[v.ParentId]
+			if firstName != `` {
+				firstName = firstName + " / "
+			}
+			secondClassifyNameMap[v.ChartClassifyId] = firstName + v.ChartClassifyName
+		}
+
+		for _, v := range tmpList {
+			list = append(list, data_manage.MoveEdbChartList{
+				DataId:         strconv.Itoa(v.ChartInfoId),
+				Name:           v.ChartName,
+				ClassifyName:   secondClassifyNameMap[v.ChartClassifyId],
+				CreateUserId:   v.SysUserId,
+				CreateUserName: v.SysUserRealName,
+			})
+		}
+	case 6: //ETA表格
+		if keyword != `` {
+			condition += " AND (excel_name like ?  OR sys_user_real_name like ? ) "
+			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
+		}
+		if userId > 0 {
+			condition += ` AND sys_user_id = ? `
+			pars = append(pars, userId)
+		}
+		if classify != "" {
+			condition += ` AND excel_classify_id IN (` + classify + `) `
+		}
+
+		condition += " AND source = ? "
+		pars = append(pars, subSource)
+
+		total, err = excel.GetExcelInfoCountByCondition(condition, pars)
+		if err != nil {
+			return
+		}
+		tmpList, tmpErr := excel.GetNoContentExcelInfoListByCondition(condition, pars, startSize, pageSize)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		// 获取所有的图表分类
+		firstClassifyList, tmpErr := excel.GetExcelClassifyByParentId(0, subSource)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		firstClassifyNameMap := make(map[int]string)
+		for _, v := range firstClassifyList {
+			firstClassifyNameMap[v.ExcelClassifyId] = v.ExcelClassifyName
+		}
+		secondClassList, tmpErr := excel.GetExcelClassifyBySource(subSource)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		secondClassifyNameMap := make(map[int]string)
+		for _, v := range secondClassList {
+			firstName := firstClassifyNameMap[v.ParentId]
+			if firstName != `` {
+				firstName = firstName + " / "
+			}
+			secondClassifyNameMap[v.ExcelClassifyId] = firstName + v.ExcelClassifyName
+		}
+
+		for _, v := range tmpList {
+			list = append(list, data_manage.MoveEdbChartList{
+				DataId:         strconv.Itoa(v.ExcelInfoId),
+				Name:           v.ExcelClassifyName,
+				ClassifyName:   secondClassifyNameMap[v.ExcelClassifyId],
+				CreateUserId:   v.SysUserId,
+				CreateUserName: v.SysUserRealName,
+			})
+		}
+	default:
+		return
+	}
+
+	return
+}
+
+// TODO 资产转移要通知到用户(被转移的用户和新用户)
+
+// MoveEdbChart 转移指标/图表创建人
+// @param source 来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
+func MoveEdbChart(source, subSource, oldUserId, newUserId int, isSelectAll bool, dataId, noDataId []string, keyword, classify string) (err error, errMsg string) {
+	adminInfo, err := system.GetSysAdminById(newUserId)
+	if err != nil {
+		return
+	}
+
+	// 如果勾选全部数据,那么
+	if isSelectAll {
+		// 找出不要的指标ID列表
+		noDataIdMap := make(map[string]string, 0)
+		for _, v := range noDataId {
+			noDataIdMap[v] = v
+		}
+
+		// 需要转义的指标/图表ID列表
+		dataId = make([]string, 0)
+		// 获取所有指标/图表
+		list, _, tmpErr := GetMoveEdbChartList(source, subSource, oldUserId, keyword, classify, 0, 100000)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		for _, v := range list {
+			if _, ok := noDataIdMap[v.DataId]; !ok {
+				dataId = append(dataId, v.DataId)
+			}
+		}
+	}
+
+	switch source {
+	case 1: //手工数据指标
+		tmpList, tmpErr := models.GetEdbinfoListByCodeListGroupByUserId(dataId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+
+		if len(tmpList) > 0 {
+			for _, v := range tmpList {
+				if v.UserId == newUserId {
+					errMsg = "新创建人不可和原创建人一致"
+					err = errors.New(errMsg)
+					return
+				}
+			}
+			// 修改创建人
+			err = models.ModifyEdbinfoUserIdByCodeList(dataId, newUserId)
+		}
+
+	case 2: //钢联化工数据库
+		tmpList, tmpErr := data_manage.GetMysteelChemicalIndexListGroupByUserId(dataId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if len(tmpList) > 0 {
+			for _, v := range tmpList {
+				if v.SysUserId == newUserId {
+					errMsg = "新创建人不可和原创建人一致"
+					err = errors.New(errMsg)
+					return
+				}
+			}
+			// 修改创建人
+			err = data_manage.ModifyMysteelChemicalIndexUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
+		}
+	case 3, 4: //ETA指标库、ETA预测指标
+		tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if len(tmpList) > 0 {
+			for _, v := range tmpList {
+				if v.SysUserId == newUserId {
+					errMsg = "新创建人不可和原创建人一致"
+					err = errors.New(errMsg)
+					return
+				}
+			}
+			// 修改创建人
+			err = data_manage.ModifyEdbInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
+
+			// 移除当前用户的不可操作权限
+			{
+				obj := data_manage.EdbInfoNoPermissionAdmin{}
+				for _, v := range dataId {
+					edbInfoId, _ := strconv.Atoi(v)
+					go obj.DeleteByEdbInfoIdAndAdminId(edbInfoId, adminInfo.AdminId)
+				}
+			}
+		}
+	case 5: //图库
+		tmpList, tmpErr := data_manage.GetChartInfoListGroupByUserId(dataId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if len(tmpList) > 0 {
+			for _, v := range tmpList {
+				if v.SysUserId == newUserId {
+					errMsg = "新创建人不可和原创建人一致"
+					err = errors.New(errMsg)
+					return
+				}
+			}
+			// 修改创建人
+			err = data_manage.ModifyChartInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
+		}
+	case 6: // ETA表格
+		tmpList, tmpErr := excel.GetNoContentExcelListGroupByUserId(dataId)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		if len(tmpList) > 0 {
+			for _, v := range tmpList {
+				if v.SysUserId == newUserId {
+					errMsg = "新创建人不可和原创建人一致"
+					err = errors.New(errMsg)
+					return
+				}
+			}
+			// 修改创建人
+			err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
+		}
+	default:
+		return
+	}
+
+	return
+}

+ 105 - 38
services/data/data_manage_permission.go → services/data/data_manage_permission/edb_permission.go

@@ -1,7 +1,8 @@
-package data
+package data_manage_permission
 
 import (
 	"eta/eta_api/models/data_manage"
+	"eta/eta_api/models/data_manage/data_manage_permission"
 	"eta/eta_api/utils"
 	"fmt"
 )
@@ -61,7 +62,7 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 		//if len(tmpList) > 0 {
 		//}
 		// 重新设置权限
-		err = data_manage.SetPermissionEdbChartByEdbIdList(dataId, userList)
+		err = data_manage_permission.SetPermissionEdbChartByEdbIdList(dataId, userList)
 	//case 5: //图库
 	//	tmpList, tmpErr := data_manage.GetChartInfoListGroupByUserId(dataId)
 	//	if tmpErr != nil {
@@ -125,7 +126,7 @@ func SetDataIsPermission(source, subSource int, classifyIdList []int) (err error
 		//if len(tmpList) > 0 {
 		//}
 		// 重新设置权限
-		err = data_manage.SetIsPermissionEdbChartByEdbClassifyIdList(classifyIdList)
+		err = data_manage_permission.SetIsPermissionEdbChartByEdbClassifyIdList(classifyIdList)
 	//case 5: //图库
 
 	//case 6: // ETA表格
@@ -164,7 +165,7 @@ func SetEdbChartClassifyPermission(source, subSource int, userList []int, classi
 		//if len(tmpList) > 0 {
 		//}
 		// 重新设置权限
-		err = data_manage.SetPermissionEdbChartClassifyIdByClassifyIdList(classifyIdList, userList)
+		err = data_manage_permission.SetPermissionEdbChartClassifyIdByClassifyIdList(classifyIdList, userList)
 	//case 5: //图库
 	//	tmpList, tmpErr := data_manage.GetChartInfoListGroupByUserId(dataId)
 	//	if tmpErr != nil {
@@ -206,6 +207,63 @@ func SetEdbChartClassifyPermission(source, subSource int, userList []int, classi
 	return
 }
 
+// CheckEdbPermissionByPermissionIdList
+// @Description: 检查EDB指标(含预测指标)权限
+// @author: Roc
+// @datetime 2024-03-28 16:12:08
+// @param edbIsJoinPermission int
+// @param edbClassifyIsJoinPermission int
+// @param edbInfoId int
+// @param edbClassifyId int
+// @param permissionEdbInfoIdList []int
+// @param permissionEdbClassifyIdList []int
+// @return hasAuth bool
+func CheckEdbPermissionByPermissionIdList(edbIsJoinPermission, edbClassifyIsJoinPermission, edbInfoId, edbClassifyId int, permissionEdbInfoIdList, permissionEdbClassifyIdList []int) (hasAuth bool) {
+	//hasAuth = true
+
+	// 判断 分类是否纳入权限管控
+	if edbClassifyIsJoinPermission == 1 {
+		// 不属于已授权的分类,那么就无权限
+		if !utils.InArrayByInt(permissionEdbClassifyIdList, edbClassifyId) {
+			return false
+		}
+	}
+
+	// 判断 指标是否纳入权限管控
+	if edbIsJoinPermission == 1 {
+		// 不属于已授权的指标,那么就无权限
+		if !utils.InArrayByInt(permissionEdbInfoIdList, edbInfoId) {
+			return false
+		}
+	}
+
+	hasAuth = true
+
+	return
+}
+
+// CheckEdbClassifyPermissionByPermissionIdList
+// @Description: 检查EDB分类权限
+// @author: Roc
+// @datetime 2024-03-29 14:35:19
+// @param edbClassifyIsJoinPermission int
+// @param edbClassifyId int
+// @param permissionEdbClassifyIdList []int
+// @return hasAuth bool
+func CheckEdbClassifyPermissionByPermissionIdList(edbClassifyIsJoinPermission, edbClassifyId int, permissionEdbClassifyIdList []int) (hasAuth bool) {
+	// 判断 分类是否纳入权限管控
+	if edbClassifyIsJoinPermission == 1 {
+		// 不属于已授权的分类,那么就无权限
+		if !utils.InArrayByInt(permissionEdbClassifyIdList, edbClassifyId) {
+			return
+		}
+	}
+
+	hasAuth = true
+
+	return
+}
+
 // GetUserEdbAndClassifyPermissionList
 // @Description: 根据用户获取已经授权指标ID列表和指标分类ID列表
 // @author: Roc
@@ -217,12 +275,15 @@ func SetEdbChartClassifyPermission(source, subSource int, userList []int, classi
 // @return classifyIdList []int
 // @return err error
 func GetUserEdbAndClassifyPermissionList(userId, edbInfoId, classifyId int) (edbIdList, classifyIdList []int, err error) {
-	edbIdList, err = data_manage.GetPermissionEdbIdList(userId, edbInfoId)
+	// 获取有权限的指标ID列表
+	edbIdList, err = data_manage_permission.GetPermissionEdbIdList(userId, edbInfoId)
 	if err != nil {
 		fmt.Println("获取授权指标列表失败, err:", err)
 		return
 	}
-	classifyIdList, err = data_manage.GetPermissionEdbClassifyIdList(userId, classifyId)
+
+	// 获取有权限的指标分类ID列表
+	classifyIdList, err = data_manage_permission.GetPermissionEdbClassifyIdList(userId, classifyId)
 	if err != nil {
 		fmt.Println("获取授权指标分类列表失败, err:", err)
 		return
@@ -231,58 +292,64 @@ func GetUserEdbAndClassifyPermissionList(userId, edbInfoId, classifyId int) (edb
 	return
 }
 
-// CheckEdbPermission
-// @Description: 检查EDB指标(含预测指标)权限(方法内部自己获取所有的指标和指标分类权限,不用额外传递)
+// GetUserEdbClassifyPermissionList
+// @Description: 根据用户获取已经授权指标分类ID列表
 // @author: Roc
-// @datetime 2024-03-28 16:12:08
-// @param edbIsJoinPermission int
-// @param edbClassifyIsJoinPermission int
+// @datetime 2024-03-28 17:20:36
+// @param userId int
+// @param classifyId int  classifyId,则只返回该classifyId的权限列表(其实也就是为了判断是否存在该指标分类权限了,目的是为了少获取数据)
+// @return classifyIdList []int
+// @return err error
+func GetUserEdbClassifyPermissionList(userId, classifyId int) (classifyIdList []int, err error) {
+	// 获取有权限的指标分类ID列表
+	classifyIdList, err = data_manage_permission.GetPermissionEdbClassifyIdList(userId, classifyId)
+	if err != nil {
+		fmt.Println("获取授权指标分类列表失败, err:", err)
+		return
+	}
+
+	return
+}
+
+// CheckEdbPermissionByEdbInfoId
+// @Description: 根据指标id和指标分类id,检查EDB指标(含预测指标)权限(方法内部自己获取所有的指标和指标分类权限,不用额外传递)
+// @author: Roc
+// @datetime 2024-03-29 13:28:06
 // @param edbInfoId int
 // @param edbClassifyId int
+// @param edbIsJoinPermission int
+// @param userId int
 // @return hasAuth bool
-func CheckEdbPermission(edbIsJoinPermission, edbClassifyIsJoinPermission, userId, edbInfoId, edbClassifyId int) (hasAuth bool, err error) {
-	edbIdList, classifyIdList, err := GetUserEdbAndClassifyPermissionList(userId, edbInfoId, edbClassifyId)
+// @return err error
+func CheckEdbPermissionByEdbInfoId(edbInfoId, edbClassifyId, edbIsJoinPermission, userId int) (hasAuth bool, err error) {
+	currClassify, err := data_manage.GetEdbClassifyById(edbClassifyId)
 	if err != nil {
-		fmt.Println("GetUserEdbAndClassifyPermissionList err:", err)
 		return
 	}
-
-	hasAuth = CheckEdbPermissionByPermissionIdList(edbIsJoinPermission, edbClassifyIsJoinPermission, edbInfoId, edbClassifyId, edbIdList, classifyIdList)
+	if currClassify != nil {
+		return CheckEdbPermission(edbIsJoinPermission, currClassify.IsJoinPermission, userId, edbInfoId, edbClassifyId)
+	}
 
 	return
 }
 
-// CheckEdbPermissionByPermissionIdList
-// @Description: 检查EDB指标(含预测指标)权限
+// CheckEdbPermission
+// @Description: 检查EDB指标(含预测指标)权限(方法内部自己获取所有的指标和指标分类权限,不用额外传递)
 // @author: Roc
 // @datetime 2024-03-28 16:12:08
 // @param edbIsJoinPermission int
 // @param edbClassifyIsJoinPermission int
 // @param edbInfoId int
 // @param edbClassifyId int
-// @param permissionEdbInfoIdList []int
-// @param permissionEdbClassifyIdList []int
 // @return hasAuth bool
-func CheckEdbPermissionByPermissionIdList(edbIsJoinPermission, edbClassifyIsJoinPermission, edbInfoId, edbClassifyId int, permissionEdbInfoIdList, permissionEdbClassifyIdList []int) (hasAuth bool) {
-	//hasAuth = true
-
-	// 判断 分类是否纳入权限管控
-	if edbClassifyIsJoinPermission == 1 {
-		// 不属于已授权的分类,那么就无权限
-		if !utils.InArrayByInt(permissionEdbClassifyIdList, edbClassifyId) {
-			return false
-		}
-	}
-
-	// 判断 指标是否纳入权限管控
-	if edbIsJoinPermission == 1 {
-		// 不属于已授权的指标,那么就无权限
-		if !utils.InArrayByInt(permissionEdbInfoIdList, edbInfoId) {
-			return false
-		}
+func CheckEdbPermission(edbIsJoinPermission, edbClassifyIsJoinPermission, userId, edbInfoId, edbClassifyId int) (hasAuth bool, err error) {
+	edbIdList, classifyIdList, err := GetUserEdbAndClassifyPermissionList(userId, edbInfoId, edbClassifyId)
+	if err != nil {
+		fmt.Println("GetUserEdbAndClassifyPermissionList err:", err)
+		return
 	}
 
-	hasAuth = true
+	hasAuth = CheckEdbPermissionByPermissionIdList(edbIsJoinPermission, edbClassifyIsJoinPermission, edbInfoId, edbClassifyId, edbIdList, classifyIdList)
 
 	return
 }

+ 85 - 13
services/data/edb_classify.go

@@ -8,6 +8,7 @@ import (
 	"eta/eta_api/models/data_manage/excel"
 	"eta/eta_api/models/system"
 	"eta/eta_api/services/alarm_msg"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/services/data_stat"
 	"eta/eta_api/utils"
 	"fmt"
@@ -333,15 +334,25 @@ func EditEdbClassify(classifyId int, classifyName string, sysUser *system.Admin)
 
 	// 权限校验
 	{
+		// 已授权分类id
+		permissionClassifyIdList, tmpErr := data_manage_permission.GetUserEdbClassifyPermissionList(sysUser.AdminId, classifyId)
+		if tmpErr != nil {
+			errMsg = "保存失败"
+			err = errors.New("获取已授权分类id数据失败,Err:" + tmpErr.Error())
+			return
+		}
+		// 数据权限
+		haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ClassifyId, permissionClassifyIdList)
+
 		if item.ClassifyType == 0 { // 普通指标
-			button := GetEdbClassifyOpButton(sysUser, item.SysUserId)
+			button := GetEdbClassifyOpButton(sysUser, item.SysUserId, haveOperaAuth)
 			if !button.OpButton {
 				errMsg = "无操作权限"
 				err = errors.New(errMsg)
 				return
 			}
 		} else if item.ClassifyType == 1 { // 预测指标
-			button := GetPredictEdbClassifyOpButton(sysUser, item.SysUserId)
+			button := GetPredictEdbClassifyOpButton(sysUser, item.SysUserId, haveOperaAuth)
 			if !button.OpButton {
 				errMsg = "无操作权限"
 				err = errors.New(errMsg)
@@ -386,17 +397,27 @@ func DeleteCheck(classifyId, edbInfoId int, sysUser *system.Admin) (deleteStatus
 			err = tmpErr
 			return
 		}
+		// 已授权分类id
+		permissionClassifyIdList, tmpErr := data_manage_permission.GetUserEdbClassifyPermissionList(sysUser.AdminId, classifyId)
+		if tmpErr != nil {
+			errMsg = "删除检测失败"
+			err = errors.New("获取已授权分类id数据失败,Err:" + tmpErr.Error())
+			return
+		}
 		// 权限校验
 		{
+			// 数据权限
+			haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ClassifyId, permissionClassifyIdList)
+
 			if item.ClassifyType == 0 { // 普通指标
-				button := GetEdbClassifyOpButton(sysUser, item.SysUserId)
+				button := GetEdbClassifyOpButton(sysUser, item.SysUserId, haveOperaAuth)
 				if !button.DeleteButton {
 					errMsg = "无操作权限"
 					err = errors.New(errMsg)
 					return
 				}
 			} else if item.ClassifyType == 1 { // 预测指标
-				button := GetPredictEdbClassifyOpButton(sysUser, item.SysUserId)
+				button := GetPredictEdbClassifyOpButton(sysUser, item.SysUserId, haveOperaAuth)
 				if !button.DeleteButton {
 					errMsg = "无操作权限"
 					err = errors.New(errMsg)
@@ -538,17 +559,27 @@ func Delete(classifyId, edbInfoId int, sysUser *system.Admin, requestBody, reque
 			err = tmpErr
 			return
 		}
+		// 已授权分类id
+		permissionClassifyIdList, tmpErr := data_manage_permission.GetUserEdbClassifyPermissionList(sysUser.AdminId, classifyId)
+		if tmpErr != nil {
+			errMsg = "删除失败"
+			err = errors.New("获取已授权分类id数据失败,Err:" + tmpErr.Error())
+			return
+		}
 		// 权限校验
 		{
+			// 数据权限
+			haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ClassifyId, permissionClassifyIdList)
+
 			if item.ClassifyType == 0 { // 普通指标
-				button := GetEdbClassifyOpButton(sysUser, item.SysUserId)
+				button := GetEdbClassifyOpButton(sysUser, item.SysUserId, haveOperaAuth)
 				if !button.DeleteButton {
 					errMsg = "无操作权限"
 					err = errors.New(errMsg)
 					return
 				}
 			} else if item.ClassifyType == 1 { // 预测指标
-				button := GetPredictEdbClassifyOpButton(sysUser, item.SysUserId)
+				button := GetPredictEdbClassifyOpButton(sysUser, item.SysUserId, haveOperaAuth)
 				if !button.DeleteButton {
 					errMsg = "无操作权限"
 					err = errors.New(errMsg)
@@ -815,15 +846,25 @@ func MoveEdbClassify(req data_manage.MoveEdbClassifyReq, sysUser *system.Admin,
 
 		// 权限校验
 		{
+			// 已授权分类id
+			permissionClassifyIdList, tmpErr := data_manage_permission.GetUserEdbClassifyPermissionList(sysUser.AdminId, classifyId)
+			if tmpErr != nil {
+				errMsg = "移动失败"
+				err = errors.New("获取已授权分类id数据失败,Err:" + tmpErr.Error())
+				return
+			}
+			// 数据权限
+			haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(edbClassifyInfo.IsJoinPermission, edbClassifyInfo.ClassifyId, permissionClassifyIdList)
+
 			if edbClassifyInfo.ClassifyType == 0 { // 普通指标
-				button := GetEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId)
+				button := GetEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId, haveOperaAuth)
 				if !button.MoveButton {
 					errMsg = "无操作权限"
 					err = errors.New(errMsg)
 					return
 				}
 			} else if edbClassifyInfo.ClassifyType == 1 { // 预测指标
-				button := GetPredictEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId)
+				button := GetPredictEdbClassifyOpButton(sysUser, edbClassifyInfo.SysUserId, haveOperaAuth)
 				if !button.MoveButton {
 					errMsg = "无操作权限"
 					err = errors.New(errMsg)
@@ -849,8 +890,20 @@ func MoveEdbClassify(req data_manage.MoveEdbClassifyReq, sysUser *system.Admin,
 			err = errors.New(errMsg)
 			return
 		}
+
+		var haveOperaAuth bool
+		// 权限校验
+		{
+			haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.EdbInfoId, edbInfo.ClassifyId, edbInfo.IsJoinPermission, sysUser.AdminId)
+			if err != nil {
+				errMsg = "移动失败"
+				err = errors.New("获取指标权限信息失败,Err:" + err.Error())
+				return
+			}
+		}
+
 		// 移动权限校验
-		button := GetEdbOpButton(sysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType)
+		button := GetEdbOpButton(sysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType, haveOperaAuth)
 		if !button.MoveButton {
 			errMsg = "无操作权限"
 			err = errors.New(errMsg)
@@ -1190,7 +1243,11 @@ func moveEdbClassify(parentEdbClassifyInfo, edbClassifyInfo, prevClassify, nextC
 }
 
 // GetEdbOpButton 获取ETA指标的操作权限
-func GetEdbOpButton(sysUser *system.Admin, belongUserId, edbType, edbInfoType int) (button data_manage.EdbClassifyItemsButton) {
+func GetEdbOpButton(sysUser *system.Admin, belongUserId, edbType, edbInfoType int, haveOperaAuth bool) (button data_manage.EdbClassifyItemsButton) {
+	// 没有数据权限就直接返回
+	if !haveOperaAuth {
+		return
+	}
 	//2、用户对于自己添加的分类,有权限编辑、移动和删除该分类;
 	//3、ficc管理员和超管对所有分类有编辑、移动和删除权限;
 	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || sysUser.AdminId == belongUserId || sysUser.EdbPermission == 1 {
@@ -1210,7 +1267,12 @@ func GetEdbOpButton(sysUser *system.Admin, belongUserId, edbType, edbInfoType in
 }
 
 // GetEdbClassifyOpButton 获取ETA指标分类的操作权限
-func GetEdbClassifyOpButton(sysUser *system.Admin, belongUserId int) (button data_manage.EdbClassifyItemsButton) {
+func GetEdbClassifyOpButton(sysUser *system.Admin, belongUserId int, haveOperaAuth bool) (button data_manage.EdbClassifyItemsButton) {
+	// 没有数据权限就直接返回
+	if !haveOperaAuth {
+		return
+	}
+
 	//ficc管理员和超管和ficc研究员有权限创建和管理分类,可以编辑分类名称(分类名称不允许重复),可以拖动分类,改变分类顺序,可以拖动分类下模型,改变顺序,可以删除分类,若分类下有预测指标,则不允许删除;
 	//if utils.InArrayByStr([]string{utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_RESEARCHR, utils.ROLE_TYPE_CODE_FICC_RESEARCHR}, sysUser.RoleTypeCode) {
 	button.AddButton = true
@@ -1223,7 +1285,12 @@ func GetEdbClassifyOpButton(sysUser *system.Admin, belongUserId int) (button dat
 }
 
 // GetPredictEdbOpButton 获取ETA预测指标的操作权限
-func GetPredictEdbOpButton(sysUser *system.Admin, belongUserId int) (button data_manage.EdbClassifyItemsButton) {
+func GetPredictEdbOpButton(sysUser *system.Admin, belongUserId int, haveOperaAuth bool) (button data_manage.EdbClassifyItemsButton) {
+	// 没有数据权限就直接返回
+	if !haveOperaAuth {
+		return
+	}
+
 	//预测指标的添加人对该预测指标有全部操作权限,ficc管理员、超管对所有预测指标有全部操作权限;
 	if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || sysUser.AdminId == belongUserId || sysUser.PredictEdbPermission == 1 {
 		button.AddButton = true
@@ -1238,7 +1305,12 @@ func GetPredictEdbOpButton(sysUser *system.Admin, belongUserId int) (button data
 }
 
 // GetPredictEdbClassifyOpButton 获取ETA预测指标分类的操作权限
-func GetPredictEdbClassifyOpButton(sysUser *system.Admin, belongUserId int) (button data_manage.EdbClassifyItemsButton) {
+func GetPredictEdbClassifyOpButton(sysUser *system.Admin, belongUserId int, haveOperaAuth bool) (button data_manage.EdbClassifyItemsButton) {
+	// 没有数据权限就直接返回
+	if !haveOperaAuth {
+		return
+	}
+
 	//ficc管理员和超管和ficc研究员有权限创建和管理分类,可以编辑分类名称(分类名称不允许重复),可以拖动分类,改变分类顺序,可以拖动分类下模型,改变顺序,可以删除分类,若分类下有预测指标,则不允许删除;
 	//if utils.InArrayByStr([]string{utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_RESEARCHR, utils.ROLE_TYPE_CODE_FICC_RESEARCHR}, sysUser.RoleTypeCode) {
 	button.AddButton = true

+ 0 - 390
services/data/edb_info.go

@@ -1719,396 +1719,6 @@ func getRefreshEdbInfoListByIds(edbInfoIdList []int) (newBaseEdbInfoArr, newBase
 	return
 }
 
-// GetMoveEdbChartList 获取待转移的指标/图表列表
-// @param source 来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
-func GetMoveEdbChartList(source, subSource, userId int, keyword, classify string, startSize, pageSize int) (list []data_manage.MoveEdbChartList, total int, err error) {
-	var condition string
-	var pars []interface{}
-	switch source {
-	case 1: //手工数据指标
-		if keyword != "" {
-			condition += ` AND (a.SEC_NAME LIKE ? OR a.TRADE_CODE like ? ) `
-			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
-		}
-		if userId > 0 {
-			condition += ` AND a.user_id = ? `
-			pars = append(pars, userId)
-		}
-
-		if classify != "" {
-			condition += ` AND a.classify_id IN (` + classify + `) `
-		}
-
-		total, err = models.GetEdbinfoListCount(condition, pars, "", 0)
-		if err != nil {
-			return
-		}
-		tmpList, tmpErr := models.GetEdbinfoList(condition, pars, startSize, pageSize, "", 0)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-
-		if len(tmpList) > 0 {
-			adminIdList := make([]int, 0)
-			for _, v := range tmpList {
-				adminIdList = append(adminIdList, v.UserId)
-			}
-			adminList, tmpErr := system.GetAdminListByIdListWithoutEnable(adminIdList)
-			if tmpErr != nil {
-				err = tmpErr
-				return
-			}
-			adminMap := make(map[int]string)
-			for _, adminInfo := range adminList {
-				adminMap[adminInfo.AdminId] = adminInfo.RealName
-			}
-
-			for _, v := range tmpList {
-				list = append(list, data_manage.MoveEdbChartList{
-					DataId:         v.TradeCode,
-					Code:           v.TradeCode,
-					Name:           v.SecName,
-					ClassifyName:   v.ClassifyName,
-					CreateUserId:   v.UserId,
-					CreateUserName: adminMap[v.UserId],
-				})
-			}
-		}
-
-	case 2: //钢联化工数据库
-		if keyword != `` {
-			condition += " AND (index_name like ? OR index_code like ? OR sys_user_real_name like ? ) "
-			pars = utils.GetLikeKeywordPars(pars, keyword, 3)
-		}
-		if userId > 0 {
-			condition += ` AND sys_user_id = ? `
-			pars = append(pars, userId)
-		}
-
-		if classify != "" {
-			condition += ` AND base_from_mysteel_chemical_classify_id IN (` + classify + `) `
-		}
-
-		total, err = data_manage.GetMysteelChemicalIndexCount(condition, pars)
-		if err != nil {
-			return
-		}
-		tmpList, tmpErr := data_manage.GetMysteelChemicalIndexList(condition, pars, startSize, pageSize)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-
-		for _, v := range tmpList {
-			list = append(list, data_manage.MoveEdbChartList{
-				DataId: strconv.Itoa(v.BaseFromMysteelChemicalIndexId),
-				Code:   v.IndexCode,
-				Name:   v.IndexName,
-				//ClassifyName: v.,
-				CreateUserId:   v.SysUserId,
-				CreateUserName: v.SysUserRealName,
-			})
-		}
-	case 3, 4: //ETA指标库、ETA预测指标
-		if keyword != `` {
-			condition += " AND (edb_code like ? OR edb_name like ? OR sys_user_real_name like ? ) "
-			pars = utils.GetLikeKeywordPars(pars, keyword, 3)
-		}
-		if userId > 0 {
-			condition += ` AND sys_user_id = ? `
-			pars = append(pars, userId)
-		}
-		if classify != "" {
-			condition += ` AND classify_id IN (` + classify + `) `
-		}
-
-		edbInfoType := 0 //ETA指标库
-		if source == 4 { //ETA预测指标
-			edbInfoType = 1
-		}
-		condition += ` AND edb_info_type = ? `
-		pars = append(pars, edbInfoType)
-
-		total, err = data_manage.GetEdbInfoByConditionCount(condition, pars)
-		if err != nil {
-			return
-		}
-		tmpList, tmpErr := data_manage.GetEdbInfoListByCondition(condition, pars, startSize, pageSize)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-
-		for _, v := range tmpList {
-			list = append(list, data_manage.MoveEdbChartList{
-				DataId: strconv.Itoa(v.EdbInfoId),
-				Code:   v.EdbCode,
-				Name:   v.EdbName,
-				//ClassifyName: v.,
-				CreateUserId:   v.SysUserId,
-				CreateUserName: v.SysUserRealName,
-			})
-		}
-	case 5: //图库
-		if keyword != `` {
-			condition += " AND (chart_name like ?  OR sys_user_real_name like ? ) "
-			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
-		}
-		if userId > 0 {
-			condition += ` AND sys_user_id = ? `
-			pars = append(pars, userId)
-		}
-		if classify != "" {
-			condition += ` AND chart_classify_id IN (` + classify + `) `
-		}
-
-		total, err = data_manage.GetChartInfoCountByCondition(condition, pars)
-		if err != nil {
-			return
-		}
-		tmpList, tmpErr := data_manage.GetChartInfoListByCondition(condition, pars, startSize, pageSize)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-
-		// 获取所有的图表分类
-		firstClassifyList, tmpErr := data_manage.GetChartClassifyByParentId(0, 1)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		firstClassifyNameMap := make(map[int]string)
-		for _, v := range firstClassifyList {
-			firstClassifyNameMap[v.ChartClassifyId] = v.ChartClassifyName
-		}
-		secondClassList, tmpErr := data_manage.GetChartClassifyAll(1)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		secondClassifyNameMap := make(map[int]string)
-		for _, v := range secondClassList {
-			firstName := firstClassifyNameMap[v.ParentId]
-			if firstName != `` {
-				firstName = firstName + " / "
-			}
-			secondClassifyNameMap[v.ChartClassifyId] = firstName + v.ChartClassifyName
-		}
-
-		for _, v := range tmpList {
-			list = append(list, data_manage.MoveEdbChartList{
-				DataId:         strconv.Itoa(v.ChartInfoId),
-				Name:           v.ChartName,
-				ClassifyName:   secondClassifyNameMap[v.ChartClassifyId],
-				CreateUserId:   v.SysUserId,
-				CreateUserName: v.SysUserRealName,
-			})
-		}
-	case 6: //ETA表格
-		if keyword != `` {
-			condition += " AND (excel_name like ?  OR sys_user_real_name like ? ) "
-			pars = utils.GetLikeKeywordPars(pars, keyword, 2)
-		}
-		if userId > 0 {
-			condition += ` AND sys_user_id = ? `
-			pars = append(pars, userId)
-		}
-		if classify != "" {
-			condition += ` AND excel_classify_id IN (` + classify + `) `
-		}
-
-		condition += " AND source = ? "
-		pars = append(pars, subSource)
-
-		total, err = excel.GetExcelInfoCountByCondition(condition, pars)
-		if err != nil {
-			return
-		}
-		tmpList, tmpErr := excel.GetNoContentExcelInfoListByCondition(condition, pars, startSize, pageSize)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-
-		// 获取所有的图表分类
-		firstClassifyList, tmpErr := excel.GetExcelClassifyByParentId(0, subSource)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		firstClassifyNameMap := make(map[int]string)
-		for _, v := range firstClassifyList {
-			firstClassifyNameMap[v.ExcelClassifyId] = v.ExcelClassifyName
-		}
-		secondClassList, tmpErr := excel.GetExcelClassifyBySource(subSource)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		secondClassifyNameMap := make(map[int]string)
-		for _, v := range secondClassList {
-			firstName := firstClassifyNameMap[v.ParentId]
-			if firstName != `` {
-				firstName = firstName + " / "
-			}
-			secondClassifyNameMap[v.ExcelClassifyId] = firstName + v.ExcelClassifyName
-		}
-
-		for _, v := range tmpList {
-			list = append(list, data_manage.MoveEdbChartList{
-				DataId:         strconv.Itoa(v.ExcelInfoId),
-				Name:           v.ExcelClassifyName,
-				ClassifyName:   secondClassifyNameMap[v.ExcelClassifyId],
-				CreateUserId:   v.SysUserId,
-				CreateUserName: v.SysUserRealName,
-			})
-		}
-	default:
-		return
-	}
-
-	return
-}
-
-// TODO 资产转移要通知到用户(被转移的用户和新用户)
-
-// MoveEdbChart 转移指标/图表创建人
-// @param source 来源 :1:手工数据指标 2:钢联化工数据库 3:ETA指标库 4:ETA预测指标 5:图库 6:ETA表格
-func MoveEdbChart(source, subSource, oldUserId, newUserId int, isSelectAll bool, dataId, noDataId []string, keyword, classify string) (err error, errMsg string) {
-	adminInfo, err := system.GetSysAdminById(newUserId)
-	if err != nil {
-		return
-	}
-
-	// 如果勾选全部数据,那么
-	if isSelectAll {
-		// 找出不要的指标ID列表
-		noDataIdMap := make(map[string]string, 0)
-		for _, v := range noDataId {
-			noDataIdMap[v] = v
-		}
-
-		// 需要转义的指标/图表ID列表
-		dataId = make([]string, 0)
-		// 获取所有指标/图表
-		list, _, tmpErr := GetMoveEdbChartList(source, subSource, oldUserId, keyword, classify, 0, 100000)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		for _, v := range list {
-			if _, ok := noDataIdMap[v.DataId]; !ok {
-				dataId = append(dataId, v.DataId)
-			}
-		}
-	}
-
-	switch source {
-	case 1: //手工数据指标
-		tmpList, tmpErr := models.GetEdbinfoListByCodeListGroupByUserId(dataId)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-
-		if len(tmpList) > 0 {
-			for _, v := range tmpList {
-				if v.UserId == newUserId {
-					errMsg = "新创建人不可和原创建人一致"
-					err = errors.New(errMsg)
-					return
-				}
-			}
-			// 修改创建人
-			err = models.ModifyEdbinfoUserIdByCodeList(dataId, newUserId)
-		}
-
-	case 2: //钢联化工数据库
-		tmpList, tmpErr := data_manage.GetMysteelChemicalIndexListGroupByUserId(dataId)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		if len(tmpList) > 0 {
-			for _, v := range tmpList {
-				if v.SysUserId == newUserId {
-					errMsg = "新创建人不可和原创建人一致"
-					err = errors.New(errMsg)
-					return
-				}
-			}
-			// 修改创建人
-			err = data_manage.ModifyMysteelChemicalIndexUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-		}
-	case 3, 4: //ETA指标库、ETA预测指标
-		tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		if len(tmpList) > 0 {
-			for _, v := range tmpList {
-				if v.SysUserId == newUserId {
-					errMsg = "新创建人不可和原创建人一致"
-					err = errors.New(errMsg)
-					return
-				}
-			}
-			// 修改创建人
-			err = data_manage.ModifyEdbInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-
-			// 移除当前用户的不可操作权限
-			{
-				obj := data_manage.EdbInfoNoPermissionAdmin{}
-				for _, v := range dataId {
-					edbInfoId, _ := strconv.Atoi(v)
-					go obj.DeleteByEdbInfoIdAndAdminId(edbInfoId, adminInfo.AdminId)
-				}
-			}
-		}
-	case 5: //图库
-		tmpList, tmpErr := data_manage.GetChartInfoListGroupByUserId(dataId)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		if len(tmpList) > 0 {
-			for _, v := range tmpList {
-				if v.SysUserId == newUserId {
-					errMsg = "新创建人不可和原创建人一致"
-					err = errors.New(errMsg)
-					return
-				}
-			}
-			// 修改创建人
-			err = data_manage.ModifyChartInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-		}
-	case 6: // ETA表格
-		tmpList, tmpErr := excel.GetNoContentExcelListGroupByUserId(dataId)
-		if tmpErr != nil {
-			err = tmpErr
-			return
-		}
-		if len(tmpList) > 0 {
-			for _, v := range tmpList {
-				if v.SysUserId == newUserId {
-					errMsg = "新创建人不可和原创建人一致"
-					err = errors.New(errMsg)
-					return
-				}
-			}
-			// 修改创建人
-			err = excel.ModifyExcelInfoUserIdByCodeList(dataId, adminInfo.AdminId, adminInfo.RealName)
-		}
-	default:
-		return
-	}
-
-	return
-}
-
 func GetEdbChartClassifyList(source, subSource int) (resp data_manage.EdbChartClassifyResp, err error) {
 	switch source {
 	case 1: //手工数据指标

+ 13 - 2
services/data/predict_edb_info.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_api/models/data_manage"
 	"eta/eta_api/models/data_manage/request"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services/data/data_manage_permission"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/shopspring/decimal"
@@ -452,13 +453,23 @@ func MovePredictEdbInfo(edbInfoId, classifyId, prevEdbInfoId, nextEdbInfoId int,
 		return
 	}
 
+	var haveOperaAuth bool
+	// 权限校验
+	{
+		haveOperaAuth, err = data_manage_permission.CheckEdbPermissionByEdbInfoId(edbInfo.EdbInfoId, edbInfo.ClassifyId, edbInfo.IsJoinPermission, sysUser.AdminId)
+		if err != nil {
+			errMsg = "移动失败"
+			err = errors.New("校验指标权限失败,Err:" + err.Error())
+			return
+		}
+	}
+
 	// 移动权限校验
-	button := GetEdbOpButton(sysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType)
+	button := GetEdbOpButton(sysUser, edbInfo.SysUserId, edbInfo.EdbType, edbInfo.EdbInfoType, haveOperaAuth)
 	if !button.MoveButton {
 		errMsg = "无权限操作"
 		err = nil
 		return
-		return
 	}
 
 	//如果改变了分类,那么移动该指标数据