Browse Source

Merge remote-tracking branch 'origin/eta/2.3' into debug

Roc 2 months ago
parent
commit
afa1344ec3

+ 8 - 1
controllers/data_manage/chart_classify.go

@@ -950,8 +950,15 @@ func (this *ChartClassifyController) ChartClassifyChartListV2() {
 	// 移除没有权限的图表
 	allNodes := data.HandleNoPermissionChart(allChartInfo, noPermissionChartIdMap, this.SysUser.AdminId)
 
+	editShareChartInfoIdMap, err := data.GetAllEditSharedChartInfoIdMapByReceivedUserId(this.SysUser.AdminId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取所有有编辑权限的分享图表失败,Err:" + err.Error()
+		return
+	}
+
 	for k, item := range allNodes {
-		item.Button = data.GetChartOpButton(this.SysUser, item.SysUserId, item.HaveOperaAuth)
+		item.Button = data.GetChartOpButton(this.SysUser, item.SysUserId, item.ChartInfoId, item.HaveOperaAuth, editShareChartInfoIdMap)
 		item.Button.AddButton = false
 		item.Button.OpButton = false
 		item.Button.DeleteButton = false

+ 5 - 0
controllers/data_manage/chart_info_share.go

@@ -501,11 +501,16 @@ func (c *ChartInfoShareController) ListByEs() {
 			// 分享人
 			shareUserName := ``
 			shareUserNameList := make([]string, 0)
+			shareUserNameMap := make(map[int]bool)
 			for _, userId := range v.SharedUserIdList {
 				userName, ok := sysUserMap[userId]
 				if !ok {
 					continue
 				}
+				if _, ok = shareUserNameMap[userId]; ok {
+					continue
+				}
+				shareUserNameMap[userId] = true
 				shareUserNameList = append(shareUserNameList, userName)
 			}
 			if len(shareUserNameList) > 0 {

+ 9 - 1
controllers/data_manage/correlation/correlation_chart_classify.go

@@ -111,10 +111,18 @@ func (this *CorrelationChartClassifyController) ChartClassifyList() {
 			br.ErrMsg = fmt.Sprintf("获取图表信息失败, Err: %v", e)
 			return
 		}
+
+		editShareChartInfoIdMap, err := data.GetAllEditSharedChartInfoIdMapByReceivedUserId(this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有编辑权限的分享图表失败,Err:" + err.Error()
+			return
+		}
+
 		for _, v := range charts {
 			// 操作按钮权限
 			v.HaveOperaAuth = data_manage_permission.CheckChartPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.ChartInfoId, v.ChartClassifyId, permissionEdbIdList, permissionClassifyIdList)
-			button := data.GetChartOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
+			button := data.GetChartOpButton(this.SysUser, v.SysUserId, v.ChartInfoId, v.HaveOperaAuth, editShareChartInfoIdMap)
 			button.AddButton = false //不管有没有权限,图表都是没有添加按钮的
 			v.Button = button
 			v.ParentId = parentId

+ 3 - 3
controllers/data_manage/edb_info.go

@@ -634,7 +634,7 @@ func (this *EdbInfoController) EdbInfoList() {
 		}
 	}
 
-	editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserId(this.SysUser.AdminId)
+	editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserIdAndEdbInfoIdList(this.SysUser.AdminId, []int{edbInfoItem.EdbInfoId})
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取所有有编辑权限的分享指标失败,Err:" + err.Error()
@@ -901,7 +901,7 @@ func (this *EdbInfoController) EdbInfoEdit() {
 		}
 	}
 
-	editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserId(this.SysUser.AdminId)
+	editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserIdAndEdbInfoIdList(this.SysUser.AdminId, []int{edbInfo.EdbInfoId})
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取所有有编辑权限的分享指标失败,Err:" + err.Error()
@@ -1423,7 +1423,7 @@ func (this *EdbInfoController) EdbInfoMove() {
 			return
 		}
 	}
-	editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserId(this.SysUser.AdminId)
+	editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserIdAndEdbInfoIdList(this.SysUser.AdminId, []int{edbInfo.EdbInfoId})
 	if err != nil {
 		br.Msg = "获取失败"
 		br.ErrMsg = "获取所有有编辑权限的分享指标失败,Err:" + err.Error()

+ 6 - 0
controllers/data_manage/edb_info_share.go

@@ -511,13 +511,19 @@ func (c *EdbInfoShareController) ListByEs() {
 			// 分享人
 			shareUserName := ``
 			shareUserNameList := make([]string, 0)
+			shareUserNameMap := make(map[int]bool)
 			for _, userId := range v.SharedUserIdList {
 				userName, ok := sysUserMap[userId]
 				if !ok {
 					continue
 				}
+				if _, ok = shareUserNameMap[userId]; ok {
+					continue
+				}
+				shareUserNameMap[userId] = true
 				shareUserNameList = append(shareUserNameList, userName)
 			}
+
 			if len(shareUserNameList) > 0 {
 				shareUserName = strings.Join(shareUserNameList, `,`)
 			}

+ 8 - 1
controllers/data_manage/public_chart_classify.go

@@ -55,10 +55,17 @@ func (c *ChartPublicClassifyController) SimpleList() {
 			return
 		}
 
+		editShareChartInfoIdMap, err := data.GetAllEditSharedChartInfoIdMapByReceivedUserId(c.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有编辑权限的分享图表失败,Err:" + err.Error()
+			return
+		}
+
 		// 查询当前公共分类信息
 		for _, v := range allChartInfo {
 			v.HaveOperaAuth = true
-			button := data.GetChartOpButton(c.SysUser, v.SysUserId, v.HaveOperaAuth)
+			button := data.GetChartOpButton(c.SysUser, v.SysUserId, v.ChartInfoId, v.HaveOperaAuth, editShareChartInfoIdMap)
 			button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
 			v.Button = button
 			v.Children = make([]*data_manage.ChartClassifyItems, 0)

+ 9 - 1
controllers/data_manage/range_analysis/chart_classify.go

@@ -110,10 +110,18 @@ func (this *RangeChartClassifyController) ChartClassifyList() {
 			br.ErrMsg = fmt.Sprintf("获取图表信息失败, Err: %v", e)
 			return
 		}
+
+		editShareChartInfoIdMap, err := data.GetAllEditSharedChartInfoIdMapByReceivedUserId(this.SysUser.AdminId)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取所有有编辑权限的分享图表失败,Err:" + err.Error()
+			return
+		}
+
 		for _, v := range charts {
 			// 操作按钮权限
 			v.HaveOperaAuth = data_manage_permission.CheckChartPermissionByPermissionIdList(v.IsJoinPermission, currClassify.IsJoinPermission, v.ChartInfoId, v.ChartClassifyId, permissionEdbIdList, permissionClassifyIdList)
-			button := data.GetChartOpButton(this.SysUser, v.SysUserId, v.HaveOperaAuth)
+			button := data.GetChartOpButton(this.SysUser, v.SysUserId, v.ChartInfoId, v.HaveOperaAuth, editShareChartInfoIdMap)
 			button.AddButton = false //不管有没有权限,图表都是没有添加按钮的
 			v.Button = button
 			v.ParentId = parentId

+ 22 - 0
models/data_manage/chart_info_share.go

@@ -168,6 +168,28 @@ ORDER BY share_time DESC`
 	return
 }
 
+// GetAllEditSharedChartInfoIdListByReceivedUserId
+// @Description: 获取所有我收到的共享的、可以编辑的图表id列表
+// @author: Roc
+// @receiver m
+// @datetime 2024-12-03 09:56:41
+// @param sysUserId int
+// @return list []*ShareChartInfoQuery
+// @return err error
+func (m ChartInfoShare) GetAllEditSharedChartInfoIdListByReceivedUserId(sysUserId int, chartInfoIdList []int) (list []int, err error) {
+	sql := `SELECT a."chart_info_id" FROM chart_info_share AS a 
+            WHERE 1=1 AND a.sys_user_id = ? AND share_type = ? `
+	pars := []interface{}{sysUserId, utils.ShareTypeEdit}
+
+	if len(chartInfoIdList) > 0 {
+		sql += ` AND a.chart_info_id in (?) `
+		pars = append(pars, chartInfoIdList)
+	}
+	sql += ` GROUP BY a.chart_info_id `
+	err = global.DmSQL["data"].Raw(sql, pars...).Scan(&list).Error
+	return
+}
+
 // GetShareChartInfoListPageList
 // @Description: 获取分享的指标列表(分页)
 // @author: Roc

+ 10 - 2
models/data_manage/edb_info_share.go

@@ -186,9 +186,17 @@ ORDER BY share_time DESC`
 // @param sysUserId int
 // @return list []*ShareEdbInfoQuery
 // @return err error
-func (m EdbInfoShare) GetAllEditSharedEdbInfoIdListByReceivedUserId(sysUserId int) (list []int, err error) {
+func (m EdbInfoShare) GetAllEditSharedEdbInfoIdListByReceivedUserId(sysUserId int, edbInfoIdList []int) (list []int, err error) {
 	sql := `SELECT a."edb_info_id" FROM edb_info_share AS a 
-            WHERE 1=1 AND a.sys_user_id = ? AND share_type = ?   GROUP BY a.edb_info_id`
+            WHERE 1=1 AND a.sys_user_id = ? AND share_type = ? `
+	pars := []interface{}{sysUserId, utils.ShareTypeEdit}
+
+	if len(edbInfoIdList) > 0 {
+		sql += ` AND a.edb_info_id in (?) `
+		pars = append(pars, edbInfoIdList)
+	}
+	sql += ` GROUP BY a.edb_info_id `
+
 	err = global.DmSQL["data"].Raw(sql, sysUserId, utils.ShareTypeEdit).Scan(&list).Error
 	return
 }

+ 17 - 5
services/data/chart_classify.go

@@ -110,17 +110,22 @@ func GetChartClassifyOpButton(sysUser *system.Admin, belongUserId int, haveOpera
 }
 
 // GetChartOpButton 获取ETA图库的操作权限
-func GetChartOpButton(sysUser *system.Admin, belongUserId int, haveOperaAuth bool) (button data_manage.ChartClassifyItemsButton) {
+func GetChartOpButton(sysUser *system.Admin, belongUserId, chartInfoId int, haveOperaAuth bool, editShareChartMap map[int]bool) (button data_manage.ChartClassifyItemsButton) {
 	// 数据权限判断
 	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
+
+	if sysUser.AdminId == belongUserId {
+		//button.AddButton = true
 		button.OpButton = true
 		button.DeleteButton = true
 		button.MoveButton = true
+	} else {
+		// 拥有别人分享的操作权限
+		if _, ok := editShareChartMap[chartInfoId]; ok {
+			button.OpButton = true
+		}
 	}
 
 	return
@@ -526,8 +531,15 @@ func MoveChartClassify(req data_manage.MoveChartClassifyReq, sysUser *system.Adm
 			}
 		}
 
+		editShareChartInfoIdMap, tmpErr := GetAllEditSharedChartInfoIdMapByReceivedUserIdAndChartInfoIdList(sysUser.AdminId, []int{chartInfo.ChartInfoId})
+		if tmpErr != nil {
+			errMsg = "移动失败"
+			err = errors.New("获取所有有编辑权限的分享图表失败,Err:" + tmpErr.Error())
+			return
+		}
+
 		// 移动权限校验
-		button := GetChartOpButton(sysUser, chartInfo.SysUserId, haveOperaAuth)
+		button := GetChartOpButton(sysUser, chartInfo.SysUserId, chartInfo.ChartInfoId, haveOperaAuth, editShareChartInfoIdMap)
 		if !button.MoveButton {
 			errMsg = "无操作权限"
 			err = errors.New(errMsg)

+ 59 - 3
services/data/chart_info_share.go

@@ -7,7 +7,7 @@ import (
 )
 
 // GetAllShareChartListByFromUserId
-// @Description: 根据共享人id获取所有的指标列表
+// @Description: 根据共享人id获取所有的图表列表
 // @author: Roc
 // @datetime 2024-12-03 10:01:49
 // @param sysUserId int
@@ -24,7 +24,7 @@ func GetAllShareChartListByFromUserId(sysUserId int) (item []*data_manage.ShareC
 }
 
 // GetAllShareChartListByReceivedUserId
-// @Description: 根据接收人id获取所有的指标列表
+// @Description: 根据接收人id获取所有的图表列表
 // @author: Roc
 // @datetime 2024-12-03 10:01:49
 // @param sysUserId int
@@ -41,7 +41,7 @@ func GetAllShareChartListByReceivedUserId(sysUserId int) (item []*data_manage.Sh
 }
 
 // GetChartClassifyItemListByShareChartInfoQueryList
-// @Description: 根据共享的指标来获取分类和指标的树形结构
+// @Description: 根据共享的图表来获取分类和图表的树形结构
 // @author: Roc
 // @datetime 2024-12-03 11:12:26
 // @param items []*data_manage.ShareChartInfoQuery
@@ -131,3 +131,59 @@ func GetChartClassifyItemListByShareChartInfoQueryList(items []*data_manage.Shar
 
 	return
 }
+
+// GetAllEditSharedChartInfoIdListByReceivedUserId
+// @Description: 获取所有我收到的共享的、可以编辑的图表id列表
+// @author: Roc
+// @datetime 2024-12-25 14:17:10
+// @param userId int
+// @return editShareChartInfoIdList []int
+// @return err error
+func GetAllEditSharedChartInfoIdListByReceivedUserId(userId int, chartInfoIdList []int) (editShareChartInfoIdList []int, err error) {
+	shareObj := data_manage.ChartInfoShare{}
+	editShareChartInfoIdList, err = shareObj.GetAllEditSharedChartInfoIdListByReceivedUserId(userId, chartInfoIdList)
+
+	return
+}
+
+// GetAllEditSharedChartInfoIdMapByReceivedUserId
+// @Description: 获取所有我收到的共享的、可以编辑的图表id map
+// @author: Roc
+// @datetime 2024-12-25 14:19:22
+// @param userId int
+// @return editShareChartInfoIdMap map[int]bool
+// @return err error
+func GetAllEditSharedChartInfoIdMapByReceivedUserId(userId int) (editShareChartInfoIdMap map[int]bool, err error) {
+	editShareChartInfoIdMap = make(map[int]bool)
+	idList, err := GetAllEditSharedChartInfoIdListByReceivedUserId(userId, []int{})
+	if err != nil {
+		return
+	}
+
+	for _, v := range idList {
+		editShareChartInfoIdMap[v] = true
+	}
+
+	return
+}
+
+// GetAllEditSharedChartInfoIdMapByReceivedUserIdAndChartInfoIdList
+// @Description: 获取所有我收到的共享的、可以编辑的图表id map
+// @author: Roc
+// @datetime 2024-12-25 14:19:22
+// @param userId int
+// @return editShareChartInfoIdMap map[int]bool
+// @return err error
+func GetAllEditSharedChartInfoIdMapByReceivedUserIdAndChartInfoIdList(userId int, chartInfoIdList []int) (editShareChartInfoIdMap map[int]bool, err error) {
+	editShareChartInfoIdMap = make(map[int]bool)
+	idList, err := GetAllEditSharedChartInfoIdListByReceivedUserId(userId, chartInfoIdList)
+	if err != nil {
+		return
+	}
+
+	for _, v := range idList {
+		editShareChartInfoIdMap[v] = true
+	}
+
+	return
+}

+ 24 - 3
services/data/edb_info_share.go

@@ -135,9 +135,9 @@ func GetEdbClassifyItemListByShareEdbInfoQueryList(items []*data_manage.ShareEdb
 // @param userId int
 // @return editShareEdbInfoIdList []int
 // @return err error
-func GetAllEditSharedEdbInfoIdListByReceivedUserId(userId int) (editShareEdbInfoIdList []int, err error) {
+func GetAllEditSharedEdbInfoIdListByReceivedUserId(userId int, edbInfoIdList []int) (editShareEdbInfoIdList []int, err error) {
 	shareObj := data_manage.EdbInfoShare{}
-	editShareEdbInfoIdList, err = shareObj.GetAllEditSharedEdbInfoIdListByReceivedUserId(userId)
+	editShareEdbInfoIdList, err = shareObj.GetAllEditSharedEdbInfoIdListByReceivedUserId(userId, edbInfoIdList)
 
 	return
 }
@@ -151,7 +151,28 @@ func GetAllEditSharedEdbInfoIdListByReceivedUserId(userId int) (editShareEdbInfo
 // @return err error
 func GetAllEditSharedEdbInfoIdMapByReceivedUserId(userId int) (editShareEdbInfoIdMap map[int]bool, err error) {
 	editShareEdbInfoIdMap = make(map[int]bool)
-	idList, err := GetAllEditSharedEdbInfoIdListByReceivedUserId(userId)
+	idList, err := GetAllEditSharedEdbInfoIdListByReceivedUserId(userId, []int{})
+	if err != nil {
+		return
+	}
+
+	for _, v := range idList {
+		editShareEdbInfoIdMap[v] = true
+	}
+
+	return
+}
+
+// GetAllEditSharedEdbInfoIdMapByReceivedUserIdAndEdbInfoIdList
+// @Description: 获取所有我收到的共享的、可以编辑的指标id map
+// @author: Roc
+// @datetime 2024-12-25 14:19:22
+// @param userId int
+// @return editShareEdbInfoIdMap map[int]bool
+// @return err error
+func GetAllEditSharedEdbInfoIdMapByReceivedUserIdAndEdbInfoIdList(userId int, edbInfoIdList []int) (editShareEdbInfoIdMap map[int]bool, err error) {
+	editShareEdbInfoIdMap = make(map[int]bool)
+	idList, err := GetAllEditSharedEdbInfoIdListByReceivedUserId(userId, edbInfoIdList)
 	if err != nil {
 		return
 	}