Browse Source

fix:指标共享时,添加逻辑校验

Roc 3 months ago
parent
commit
b75a42ddff
2 changed files with 186 additions and 91 deletions
  1. 170 91
      controllers/data_manage/edb_info_share.go
  2. 16 0
      models/data_manage/edb_info_share.go

+ 170 - 91
controllers/data_manage/edb_info_share.go

@@ -132,6 +132,7 @@ func (c *EdbInfoShareController) Save() {
 		br.IsSendEmail = false
 		return
 	}
+	obj := data_manage.EdbInfoShare{}
 
 	// 如果指标未公开,则判断是否被其他用户使用
 	if edbItem.PublicStatus != utils.DataPublicSuccess {
@@ -139,6 +140,19 @@ func (c *EdbInfoShareController) Save() {
 		if len(req.UserIdList) > 0 {
 			checkUserIdList = append(checkUserIdList, req.UserIdList...)
 		}
+
+		{
+			userIdList, err := obj.GetAllUserIdListByEdbInfoIdAndNoShareType(req.EdbInfoId, req.ShareType)
+			if err != nil {
+				br.Msg = "设置失败!"
+				br.ErrMsg = "设置失败,Err:" + err.Error()
+				return
+			}
+			if len(userIdList) > 0 {
+				checkUserIdList = append(checkUserIdList, userIdList...)
+			}
+		}
+
 		noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(edbItem.EdbInfoType, []int{edbItem.EdbInfoId}, checkUserIdList)
 		if err != nil {
 			br.Msg = "保存失败"
@@ -165,7 +179,7 @@ func (c *EdbInfoShareController) Save() {
 				for _, userInfo := range userList {
 					userNameList = append(userNameList, userInfo.RealName)
 				}
-				userNameStr = strings.Join(userNameList, ",")
+				userNameStr = strings.Join(userNameList, "")
 			}
 			msg := `指标被其他用户使用,无法设置共享`
 			if userNameStr != "" {
@@ -181,7 +195,6 @@ func (c *EdbInfoShareController) Save() {
 		}
 	}
 
-	obj := data_manage.EdbInfoShare{}
 	err = obj.SaveEdbInfoShare([]int{req.EdbInfoId}, req.UserIdList, req.ShareType)
 	if err != nil {
 		br.Msg = `保存失败`
@@ -670,119 +683,185 @@ func (c *EdbInfoShareController) BatchSave() {
 		return
 	}
 
-	{
-		checkBaseEdbInfoIdList := make([]int, 0)
-		checkCalculateEdbInfoIdList := make([]int, 0)
+	obj := data_manage.EdbInfoShare{}
 
+	{
+		//checkBaseEdbInfoIdList := make([]int, 0)
+		//checkCalculateEdbInfoIdList := make([]int, 0)
+		//
+		//for _, edbItem := range edbInfoList {
+		//	// 设置公开的可以忽略
+		//	if edbItem.PublicStatus == utils.DataPublicSuccess {
+		//		continue
+		//	}
+		//
+		//	if edbItem.EdbInfoType == utils.EDB_INFO_TYPE {
+		//		checkBaseEdbInfoIdList = append(checkBaseEdbInfoIdList, edbItem.EdbInfoId)
+		//	} else if edbItem.EdbInfoType == utils.PREDICT_EDB_INFO_TYPE {
+		//		checkCalculateEdbInfoIdList = append(checkCalculateEdbInfoIdList, edbItem.EdbInfoId)
+		//	}
+		//}
+		//
+		//checkUserIdList := []int{sysUser.AdminId}
+		//if len(req.UserIdList) > 0 {
+		//	checkUserIdList = append(checkUserIdList, req.UserIdList...)
+		//}
+		//
+		//// 普通指标
+		//{
+		//	noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(utils.EDB_INFO_TYPE, checkBaseEdbInfoIdList, checkUserIdList)
+		//	if err != nil {
+		//		br.Msg = "保存失败"
+		//		if tips != "" {
+		//			br.Msg = tips
+		//		}
+		//		br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
+		//		return
+		//	}
+		//
+		//	if !noReferenced {
+		//		userNameStr := ``
+		//		if len(otherUserIdList) > 0 {
+		//			userNameList := make([]string, 0)
+		//			userList, err := system.GetAdminListByIdList(otherUserIdList)
+		//			if err != nil {
+		//				br.Msg = "保存失败"
+		//				if tips != "" {
+		//					br.Msg = tips
+		//				}
+		//				br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
+		//				return
+		//			}
+		//			for _, userInfo := range userList {
+		//				userNameList = append(userNameList, userInfo.RealName)
+		//			}
+		//			userNameStr = strings.Join(userNameList, "、")
+		//		}
+		//		msg := `指标被其他用户使用,无法设置共享`
+		//		if userNameStr != "" {
+		//			msg = fmt.Sprintf(`指标被用户%s使用,无法设置共享`, userNameStr)
+		//		}
+		//		if tips != "" {
+		//			msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
+		//		}
+		//		br.Msg = msg
+		//		br.ErrMsg = "指标被其他用户共享,无法设置共享"
+		//		br.IsSendEmail = false
+		//		return
+		//	}
+		//}
+		//
+		//// 预测指标
+		//{
+		//	noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(utils.PREDICT_EDB_INFO_TYPE, checkCalculateEdbInfoIdList, checkUserIdList)
+		//	if err != nil {
+		//		br.Msg = "保存失败"
+		//		if tips != "" {
+		//			br.Msg = tips
+		//		}
+		//		br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
+		//		return
+		//	}
+		//
+		//	if !noReferenced {
+		//		userNameStr := ``
+		//		if len(otherUserIdList) > 0 {
+		//			userNameList := make([]string, 0)
+		//			userList, err := system.GetAdminListByIdList(otherUserIdList)
+		//			if err != nil {
+		//				br.Msg = "保存失败"
+		//				if tips != "" {
+		//					br.Msg = tips
+		//				}
+		//				br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
+		//				return
+		//			}
+		//			for _, userInfo := range userList {
+		//				userNameList = append(userNameList, userInfo.RealName)
+		//			}
+		//			userNameStr = strings.Join(userNameList, "、")
+		//		}
+		//		msg := `指标被其他用户使用,无法设置共享`
+		//		if userNameStr != "" {
+		//			msg = fmt.Sprintf(`指标被用户%s使用,无法设置共享`, userNameStr)
+		//		}
+		//		if tips != "" {
+		//			msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
+		//		}
+		//		br.Msg = msg
+		//		br.ErrMsg = "指标被其他用户共享,无法设置共享"
+		//		br.IsSendEmail = false
+		//		return
+		//	}
+		//}
 		for _, edbItem := range edbInfoList {
-			// 设置公开的可以忽略
+			// 如果指标已公开,则不判断是否被其他用户使用
 			if edbItem.PublicStatus == utils.DataPublicSuccess {
 				continue
 			}
-
-			if edbItem.EdbInfoType == utils.EDB_INFO_TYPE {
-				checkBaseEdbInfoIdList = append(checkBaseEdbInfoIdList, edbItem.EdbInfoId)
-			} else if edbItem.EdbInfoType == utils.PREDICT_EDB_INFO_TYPE {
-				checkCalculateEdbInfoIdList = append(checkCalculateEdbInfoIdList, edbItem.EdbInfoId)
-			}
-		}
-
-		checkUserIdList := []int{sysUser.AdminId}
-		if len(req.UserIdList) > 0 {
-			checkUserIdList = append(checkUserIdList, req.UserIdList...)
-		}
-
-		// 普通指标
-		{
-			noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(utils.EDB_INFO_TYPE, checkBaseEdbInfoIdList, checkUserIdList)
-			if err != nil {
-				br.Msg = "保存失败"
-				if tips != "" {
-					br.Msg = tips
+			if edbItem.PublicStatus != utils.DataPublicSuccess {
+				checkUserIdList := []int{sysUser.AdminId}
+				if len(req.UserIdList) > 0 {
+					checkUserIdList = append(checkUserIdList, req.UserIdList...)
 				}
-				br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
-				return
-			}
 
-			if !noReferenced {
-				userNameStr := ``
-				if len(otherUserIdList) > 0 {
-					userNameList := make([]string, 0)
-					userList, err := system.GetAdminListByIdList(otherUserIdList)
+				{
+					userIdList, err := obj.GetAllUserIdListByEdbInfoIdAndNoShareType(edbItem.EdbInfoId, req.ShareType)
 					if err != nil {
-						br.Msg = "保存失败"
-						if tips != "" {
-							br.Msg = tips
-						}
-						br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
+						br.Msg = "设置失败!"
+						br.ErrMsg = "设置失败,Err:" + err.Error()
 						return
 					}
-					for _, userInfo := range userList {
-						userNameList = append(userNameList, userInfo.RealName)
+					if len(userIdList) > 0 {
+						checkUserIdList = append(checkUserIdList, userIdList...)
 					}
-					userNameStr = strings.Join(userNameList, ",")
-				}
-				msg := `指标被其他用户使用,无法设置共享`
-				if userNameStr != "" {
-					msg = fmt.Sprintf(`指标被用户%s使用,无法设置共享`, userNameStr)
 				}
-				if tips != "" {
-					msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
-				}
-				br.Msg = msg
-				br.ErrMsg = "指标被其他用户共享,无法设置共享"
-				br.IsSendEmail = false
-				return
-			}
-		}
 
-		// 预测指标
-		{
-			noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(utils.PREDICT_EDB_INFO_TYPE, checkCalculateEdbInfoIdList, checkUserIdList)
-			if err != nil {
-				br.Msg = "保存失败"
-				if tips != "" {
-					br.Msg = tips
+				noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(edbItem.EdbInfoType, []int{edbItem.EdbInfoId}, checkUserIdList)
+				if err != nil {
+					br.Msg = "保存失败"
+					if tips != "" {
+						br.Msg = tips
+					}
+					br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
+					return
 				}
-				br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
-				return
-			}
 
-			if !noReferenced {
-				userNameStr := ``
-				if len(otherUserIdList) > 0 {
-					userNameList := make([]string, 0)
-					userList, err := system.GetAdminListByIdList(otherUserIdList)
-					if err != nil {
-						br.Msg = "保存失败"
-						if tips != "" {
-							br.Msg = tips
+				if !noReferenced {
+					userNameStr := ``
+					if len(otherUserIdList) > 0 {
+						userNameList := make([]string, 0)
+						userList, err := system.GetAdminListByIdList(otherUserIdList)
+						if err != nil {
+							br.Msg = "保存失败"
+							if tips != "" {
+								br.Msg = tips
+							}
+							br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
+							return
 						}
-						br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
-						return
+						for _, userInfo := range userList {
+							userNameList = append(userNameList, userInfo.RealName)
+						}
+						userNameStr = strings.Join(userNameList, "、")
 					}
-					for _, userInfo := range userList {
-						userNameList = append(userNameList, userInfo.RealName)
+					msg := fmt.Sprintf(`指标《%s》被其他用户使用,无法设置共享`, edbItem.EdbName)
+					if userNameStr != "" {
+						msg = fmt.Sprintf(`指标《%s》被用户%s使用,无法设置共享`, edbItem.EdbName, userNameStr)
 					}
-					userNameStr = strings.Join(userNameList, ",")
-				}
-				msg := `指标被其他用户使用,无法设置共享`
-				if userNameStr != "" {
-					msg = fmt.Sprintf(`指标被用户%s使用,无法设置共享`, userNameStr)
-				}
-				if tips != "" {
-					msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
+					if tips != "" {
+						msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
+					}
+					br.Msg = msg
+					br.ErrMsg = "指标被其他用户共享,无法设置共享,EdbInfoId:" + strconv.Itoa(edbItem.EdbInfoId)
+					br.IsSendEmail = false
+					return
 				}
-				br.Msg = msg
-				br.ErrMsg = "指标被其他用户共享,无法设置共享"
-				br.IsSendEmail = false
-				return
 			}
 		}
 	}
 
 	// 设置
-	obj := data_manage.EdbInfoShare{}
 	err = obj.SaveEdbInfoShare(selectEdbInfoIdList, req.UserIdList, req.ShareType)
 	if err != nil {
 		br.Msg = `保存失败`

+ 16 - 0
models/data_manage/edb_info_share.go

@@ -178,6 +178,22 @@ ORDER BY share_time DESC`
 	return
 }
 
+// GetAllUserIdListByEdbInfoIdAndNoShareType
+// @Description: 根据指标id和共享类型,获取所有用户id
+// @author: Roc
+// @receiver m
+// @datetime 2024-12-27 15:33:16
+// @param edbInfoId int
+// @param shareType int8
+// @return list []int
+// @return err error
+func (m EdbInfoShare) GetAllUserIdListByEdbInfoIdAndNoShareType(edbInfoId int, shareType int8) (list []int, err error) {
+	sql := `SELECT a.sys_user_id  FROM edb_info_share AS a 
+	  WHERE 1=1 AND a.edb_info_id = ? AND a.share_type != ? GROUP BY a.sys_user_id `
+	err = global.DmSQL["data"].Raw(sql, edbInfoId, shareType).Scan(&list).Error
+	return
+}
+
 // GetAllEditSharedEdbInfoIdListByReceivedUserId
 // @Description: 获取所有我收到的共享的、可以编辑的指标id列表
 // @author: Roc