Roc 11 сар өмнө
parent
commit
d37a064948

+ 2 - 2
controllers/data_manage/data_manage_permission/data_manage_permission.go

@@ -120,7 +120,7 @@ func (c *DataMangePermissionController) SetPermissionEdbChartClassifyIsPermissio
 		return
 	}
 
-	err, errMsg := data_manage_permission.SetDataIsPermission(req.Source, req.SubSource, req.ClassifyIdList)
+	err, errMsg := data_manage_permission.SetDataClassifyIsPermission(req.Source, req.SubSource, req.ClassifyIdList, sysUser.AdminId)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "设置失败"
@@ -184,7 +184,7 @@ func (c *DataMangePermissionController) SetEdbChartClassifyPermission() {
 		return
 	}
 
-	err, errMsg := data_manage_permission.SetEdbChartClassifyPermission(req.Source, req.SubSource, req.UserList, req.ClassifyIdList)
+	err, errMsg := data_manage_permission.SetEdbChartClassifyPermission(req.Source, req.SubSource, req.UserList, req.ClassifyIdList, sysUser.AdminId)
 	if err != nil {
 		//br.Success = true
 		br.Msg = "设置失败"

+ 15 - 0
models/data_manage/chart_classify.go

@@ -347,3 +347,18 @@ func GetChartClassifyByIdList(classifyIdList []int) (items []*ChartClassify, err
 
 	return
 }
+
+// GetChartClassifyBySourceAndIsJoinPermission
+// @Description: 根据分类类型和是否涉密获取分类列表
+// @author: Roc
+// @datetime 2024-03-29 10:30:21
+// @param source int
+// @param isJoinPermission int
+// @return items []*ChartClassify
+// @return err error
+func GetChartClassifyBySourceAndIsJoinPermission(source, isJoinPermission int) (items []*ChartClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_classify WHERE source = ? AND is_join_permission = ? `
+	_, err = o.Raw(sql, source, isJoinPermission).QueryRows(&items)
+	return
+}

+ 331 - 1
models/data_manage/data_manage_permission/classify_no_auth_record.go

@@ -1,6 +1,11 @@
 package data_manage_permission
 
-import "time"
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
 
 // DataPermissionClassifyNoAuthRecord
 // @Description: 资产分类数据权限未授权记录表
@@ -14,3 +19,328 @@ type DataPermissionClassifyNoAuthRecord struct {
 	SysUserId                            int32     `json:"sys_user_id"`                                                                                            // 系统用户id
 	CreateTime                           time.Time `json:"create_time"`                                                                                            // 创建时间
 }
+
+type ClassifyDataItem struct {
+	ClassifyId   int    // 资产分类id(指标、图表、表格)
+	ClassifyName string // 资产名称(指标、图表、表格)
+}
+
+// AddClassifyNoAuthRecordBySourceAndClassifyIdList
+// @Description: 根据分类添加用户分类未授权记录
+// @author: Roc
+// @datetime 2024-04-07 16:44:21
+// @param source int
+// @param subSource int
+// @param classifyInfoList []ClassifyDataItem
+// @param noAuthUserIdList []int
+// @param uniqueCode string
+// @param content string
+// @param opUserId int
+// @return err error
+func AddClassifyNoAuthRecordBySourceAndClassifyIdList(source, subSource int, classifyInfoList []ClassifyDataItem, noAuthUserIdList []int, uniqueCode, content string, opUserId int) (err error) {
+	num := len(classifyInfoList)
+	if num <= 0 {
+		return
+	}
+	// 分类id
+	classifyIdList := make([]int, 0)
+	for _, v := range classifyInfoList {
+		classifyIdList = append(classifyIdList, v.ClassifyId)
+	}
+
+	userNum := len(noAuthUserIdList)
+	if userNum <= 0 {
+		return
+	}
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 根据分类获取已经存在的未授权记录
+	var existList []*DataPermissionClassifyNoAuthRecord
+	sql := `SELECT * FROM data_permission_classify_no_auth_record WHERE source = ? AND sub_source = ? AND classify_id in (` + utils.GetOrmInReplace(num) + `)`
+	_, err = o.Raw(sql, source, subSource, classifyIdList).QueryRows(&existList)
+	if err != nil {
+		return
+	}
+
+	// 已经标记了的数据
+	existMap := make(map[int32]map[string]*DataPermissionClassifyNoAuthRecord)
+	for _, v := range existList {
+		tmpUserExistMap, ok := existMap[v.SysUserId]
+		if !ok {
+			tmpUserExistMap = make(map[string]*DataPermissionClassifyNoAuthRecord)
+		}
+
+		key := fmt.Sprint(v.Source, "_", v.SubSource, "_", v.ClassifyId)
+		tmpUserExistMap[key] = v
+		existMap[v.SysUserId] = tmpUserExistMap
+	}
+
+	addMessageList := make([]*DataPermissionMessage, 0)
+	addRecordList := make([]*DataPermissionClassifyNoAuthRecord, 0)
+	for _, userId := range noAuthUserIdList {
+		isAdd := false
+
+		tmpUserExistMap, userExistOk := existMap[int32(userId)]
+
+		for _, dataItem := range classifyInfoList {
+			// 判断是否已经存在,已经存在就过滤
+			if userExistOk {
+				key := fmt.Sprint(source, "_", subSource, "_", dataItem.ClassifyId)
+				_, ok := tmpUserExistMap[key]
+				if ok {
+					continue
+				}
+			}
+
+			isAdd = true
+			addRecordList = append(addRecordList, &DataPermissionClassifyNoAuthRecord{
+				DataPermissionClassifyNoAuthRecordId: 0,
+				Source:                               int32(source),
+				SubSource:                            int32(subSource),
+				OpUniqueCode:                         uniqueCode,
+				ClassifyId:                           fmt.Sprint(dataItem.ClassifyId),
+				ClassifyName:                         dataItem.ClassifyName,
+				SysUserId:                            int32(userId),
+				CreateTime:                           time.Now(),
+			})
+		}
+
+		// 有记录的话,需要添加消息
+		if isAdd {
+			addMessageList = append(addMessageList, &DataPermissionMessage{
+				DataPermissionMessageId: 0,
+				SendUserId:              int32(opUserId),
+				ReceiveUserId:           int32(userId),
+				Content:                 content,
+				Remark:                  content,
+				OpType:                  4,
+				Source:                  int32(source),
+				SubSource:               int32(subSource),
+				OpUniqueCode:            uniqueCode,
+				IsRead:                  0,
+				CreateTime:              time.Now(),
+				ModifyTime:              time.Now(),
+			})
+		}
+	}
+
+	// 添加消息
+	if len(addMessageList) > 0 {
+		_, err = o.InsertMulti(500, addMessageList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 添加记录
+	if len(addRecordList) > 0 {
+		_, err = o.InsertMulti(500, addRecordList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 移除已经公开了的分类权限,需要删除未授权记录
+	authUserIdNum := len(classifyIdList)
+	if authUserIdNum > 0 {
+		sql = `DELETE FROM data_permission_classify_no_auth_record WHERE source = ? AND sub_source = ? AND classify_id not in (` + utils.GetOrmInReplace(num) + `)`
+		_, err = o.Raw(sql, source, subSource, classifyIdList).Exec()
+	}
+
+	return
+}
+
+// AddClassifyNoAuthRecordBySourceAndUserIdList
+// @Description: 根据用户添加用户分类未授权记录
+// @author: Roc
+// @datetime 2024-04-07 20:12:44
+// @param source int
+// @param subSource int
+// @param noAuthClassifyMap map[int]ClassifyDataItem
+// @param configUserIdList []int
+// @param uniqueCode string
+// @param content string
+// @param opUserId int
+// @return err error
+func AddClassifyNoAuthRecordBySourceAndUserIdList(source, subSource int, noAuthClassifyMap map[int]ClassifyDataItem, configUserIdList []int, uniqueCode, content string, opUserId int) (err error) {
+	// 当前配置用户
+	configUserNum := len(configUserIdList)
+	if configUserNum <= 0 {
+		return
+	}
+
+	//// 总共的涉密分类
+	//noAuthClassifyInfoNum := len(noAuthClassifyMap)
+	//if noAuthClassifyInfoNum <= 0 {
+	//	return
+	//}
+
+	o, err := orm.NewOrmUsingDB("data").Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = o.Rollback()
+		} else {
+			_ = o.Commit()
+		}
+	}()
+
+	// 根据当前配置用户获取已经存在的未授权记录
+	var existList []*DataPermissionClassifyNoAuthRecord
+	sql := `SELECT * FROM data_permission_classify_no_auth_record WHERE source = ? AND sub_source = ? AND sys_user_id in (` + utils.GetOrmInReplace(configUserNum) + `)`
+	_, err = o.Raw(sql, source, subSource, configUserIdList).QueryRows(&existList)
+	if err != nil {
+		return
+	}
+
+	// 已经标记了的数据
+	existMap := make(map[int32]map[string]*DataPermissionClassifyNoAuthRecord)
+	delRecordIdMap := make(map[int64]int64)
+	for _, v := range existList {
+		tmpUserExistMap, ok := existMap[v.SysUserId]
+		if !ok {
+			tmpUserExistMap = make(map[string]*DataPermissionClassifyNoAuthRecord)
+		}
+
+		tmpUserExistMap[v.ClassifyId] = v
+		existMap[v.SysUserId] = tmpUserExistMap
+
+		// 已经配置了的记录id
+		delRecordIdMap[v.DataPermissionClassifyNoAuthRecordId] = v.DataPermissionClassifyNoAuthRecordId
+	}
+
+	addMessageList := make([]*DataPermissionMessage, 0)
+	addRecordList := make([]*DataPermissionClassifyNoAuthRecord, 0)
+	for _, userId := range configUserIdList {
+		isAdd := false
+
+		tmpUserExistMap, userExistOk := existMap[int32(userId)]
+
+		for _, dataItem := range noAuthClassifyMap {
+			// 判断是否已经存在,已经存在就过滤
+			if userExistOk {
+				key := fmt.Sprint(dataItem.ClassifyId)
+				tmpUserRecord, ok := tmpUserExistMap[key]
+				if ok {
+					delete(delRecordIdMap, tmpUserRecord.DataPermissionClassifyNoAuthRecordId)
+					continue
+				}
+			}
+
+			isAdd = true
+			addRecordList = append(addRecordList, &DataPermissionClassifyNoAuthRecord{
+				DataPermissionClassifyNoAuthRecordId: 0,
+				Source:                               int32(source),
+				SubSource:                            int32(subSource),
+				OpUniqueCode:                         uniqueCode,
+				ClassifyId:                           fmt.Sprint(dataItem.ClassifyId),
+				ClassifyName:                         dataItem.ClassifyName,
+				SysUserId:                            int32(userId),
+				CreateTime:                           time.Now(),
+			})
+		}
+
+		// 有记录的话,需要添加消息
+		if isAdd {
+			addMessageList = append(addMessageList, &DataPermissionMessage{
+				DataPermissionMessageId: 0,
+				SendUserId:              int32(opUserId),
+				ReceiveUserId:           int32(userId),
+				Content:                 content,
+				Remark:                  content,
+				OpType:                  4,
+				Source:                  int32(source),
+				SubSource:               int32(subSource),
+				OpUniqueCode:            uniqueCode,
+				IsRead:                  0,
+				CreateTime:              time.Now(),
+				ModifyTime:              time.Now(),
+			})
+		}
+	}
+
+	// 添加消息
+	if len(addMessageList) > 0 {
+		_, err = o.InsertMulti(500, addMessageList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 添加记录
+	if len(addRecordList) > 0 {
+		_, err = o.InsertMulti(500, addRecordList)
+		if err != nil {
+			return
+		}
+	}
+
+	// 需要删除未授权记录
+	delRecordIdNum := len(delRecordIdMap)
+	if delRecordIdNum > 0 {
+		delRecordIdList := make([]int64, 0)
+		for _, v := range delRecordIdMap {
+			delRecordIdList = append(delRecordIdList, v)
+		}
+		sql = `DELETE FROM data_permission_classify_no_auth_record WHERE data_permission_classify_no_auth_record_id in (` + utils.GetOrmInReplace(delRecordIdNum) + `) `
+		_, err = o.Raw(sql, delRecordIdList).Exec()
+	}
+
+	return
+}
+
+// DeleteClassifyNoAuthRecordBySourceAndClassifyIdList
+// @Description: 根据来源和删除分类授权记录
+// @author: Roc
+// @datetime 2024-04-07 14:47:37
+// @param source int
+// @param subSource int
+// @return err error
+func DeleteClassifyNoAuthRecordBySourceAndClassifyIdList(source, subSource int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+
+	sql := `DELETE FROM data_permission_classify_no_auth_record WHERE source = ? AND sub_source = ?`
+	_, err = o.Raw(sql, source, subSource).Exec()
+
+	return
+}
+
+// GetDataPermissionClassifyNoAuthRecordListByUserId
+// @Description: 根据用户获取未授权的资产分类记录
+// @author: Roc
+// @datetime 2024-04-07 20:14:49
+// @param userId int
+// @param source int
+// @param subSource int
+// @param startSize int
+// @param pageSize int
+// @return total int
+// @return items []*DataPermissionClassifyNoAuthRecord
+// @return err error
+func GetDataPermissionClassifyNoAuthRecordListByUserId(userId int32, source, subSource, startSize, pageSize int) (total int, items []*DataPermissionClassifyNoAuthRecord, err error) {
+	o := orm.NewOrmUsingDB("data")
+
+	// 获取总数
+	sql := `SELECT count(1) AS total FROM data_permission_classify_no_auth_record WHERE sys_user_id = ? AND source = ? AND sub_source = ? `
+	err = o.Raw(sql, userId, source, subSource).QueryRow(&total)
+	if err != nil {
+		return
+	}
+
+	sql = `SELECT * FROM data_permission_classify_no_auth_record WHERE op_unique_code = ? AND source = ? AND sub_source = ? ORDER BY data_permission_classify_no_auth_record_id desc LIMIT ?,? `
+	_, err = o.Raw(sql, userId, source, subSource, startSize, pageSize).QueryRows(&items)
+
+	return
+}

+ 12 - 5
models/data_manage/data_manage_permission/move_record.go

@@ -56,12 +56,19 @@ func AddDataPermissionMoveRecord(dataPermissionMoveRecordList []*DataPermissionM
 	return
 }
 
-// GetListByOpUniqueCode
+// GetDataPermissionMoveRecordListByOpUniqueCode
 // @Description: 根据操作唯一编码获取操作记录
-// @param opUniqueCode
-// @return items
-// @return err
-func GetListByOpUniqueCode(opUniqueCode string, source, subSource, startSize, pageSize int) (total int, items []*DataPermissionMoveRecord, err error) {
+// @author: Roc
+// @datetime 2024-04-07 20:15:22
+// @param opUniqueCode string
+// @param source int
+// @param subSource int
+// @param startSize int
+// @param pageSize int
+// @return total int
+// @return items []*DataPermissionMoveRecord
+// @return err error
+func GetDataPermissionMoveRecordListByOpUniqueCode(opUniqueCode string, source, subSource, startSize, pageSize int) (total int, items []*DataPermissionMoveRecord, err error) {
 	o := orm.NewOrmUsingDB("data")
 
 	// 获取总数

+ 41 - 8
models/data_manage/data_manage_permission/no_auth_record.go

@@ -28,23 +28,27 @@ type DataItem struct {
 }
 
 // AddRecordBySourceAndDataIdList
-// @Description: 添加记录
+// @Description: 添加未授权用户记录
 // @author: Roc
 // @datetime 2024-04-07 15:25:49
 // @param source int
 // @param subSource int
-// @param dataIdList []string
 // @param dataList []DataItem
-// @param authUserIdList []int
+// @param noAuthUserIdList []int 未授权用户
+// @param authUserIdList []int 已授权用户
 // @param uniqueCode
 // @param content string
 // @param opUserId int
 // @return err error
-func AddRecordBySourceAndDataIdList(source, subSource int, dataIdList []string, dataList []DataItem, noAuthUserIdList, authUserIdList []int, uniqueCode, content string, opUserId int) (err error) {
+func AddRecordBySourceAndDataIdList(source, subSource int, dataList []DataItem, noAuthUserIdList, authUserIdList []int, uniqueCode, content string, opUserId int) (err error) {
 	num := len(dataList)
 	if num <= 0 {
 		return
 	}
+	dataIdList := make([]string, 0)
+	for _, v := range dataList {
+		dataIdList = append(dataIdList, v.DataId)
+	}
 	userNum := len(noAuthUserIdList)
 	if userNum <= 0 {
 		return
@@ -113,6 +117,7 @@ func AddRecordBySourceAndDataIdList(source, subSource int, dataIdList []string,
 			})
 		}
 
+		// 有记录的话,需要添加消息
 		if isAdd {
 			addMessageList = append(addMessageList, &DataPermissionMessage{
 				DataPermissionMessageId: 0,
@@ -120,7 +125,7 @@ func AddRecordBySourceAndDataIdList(source, subSource int, dataIdList []string,
 				ReceiveUserId:           int32(userId),
 				Content:                 content,
 				Remark:                  content,
-				OpType:                  1,
+				OpType:                  3,
 				Source:                  int32(source),
 				SubSource:               int32(subSource),
 				OpUniqueCode:            uniqueCode,
@@ -147,11 +152,11 @@ func AddRecordBySourceAndDataIdList(source, subSource int, dataIdList []string,
 		}
 	}
 
-	// 删除未授权记录
+	// 已经授权了的用户,需要删除未授权记录
 	authUserIdNum := len(authUserIdList)
 	if authUserIdNum > 0 {
-		sql = `DELETE FROM data_permission_no_auth_record WHERE sys_user_id in (` + utils.GetOrmInReplace(authUserIdNum) + `) AND data_id in (` + utils.GetOrmInReplace(num) + `)`
-		_, err = o.Raw(sql, authUserIdList, dataIdList).Exec()
+		sql = `DELETE FROM data_permission_no_auth_record WHERE  source = ? AND sub_source = ? AND sys_user_id in (` + utils.GetOrmInReplace(authUserIdNum) + `) AND data_id in (` + utils.GetOrmInReplace(num) + `)`
+		_, err = o.Raw(sql, source, subSource, authUserIdList, dataIdList).Exec()
 	}
 
 	return
@@ -177,3 +182,31 @@ func DeleteRecordBySourceAndDataIdList(source, subSource int, dataIdList []strin
 
 	return
 }
+
+// GetDataPermissionNoAuthRecordListByUserId
+// @Description: 根据用户获取未授权的资产记录
+// @author: Roc
+// @datetime 2024-04-07 20:15:01
+// @param userId int
+// @param source int
+// @param subSource int
+// @param startSize int
+// @param pageSize int
+// @return total int
+// @return items []*DataPermissionNoAuthRecord
+// @return err error
+func GetDataPermissionNoAuthRecordListByUserId(userId int32, source, subSource, startSize, pageSize int) (total int, items []*DataPermissionNoAuthRecord, err error) {
+	o := orm.NewOrmUsingDB("data")
+
+	// 获取总数
+	sql := `SELECT count(1) AS total FROM data_permission_no_auth_record WHERE sys_user_id = ? AND source = ? AND sub_source = ? `
+	err = o.Raw(sql, userId, source, subSource).QueryRow(&total)
+	if err != nil {
+		return
+	}
+
+	sql = `SELECT * FROM data_permission_no_auth_record WHERE op_unique_code = ? AND source = ? AND sub_source = ? ORDER BY data_permission_no_auth_record_id desc LIMIT ?,? `
+	_, err = o.Raw(sql, userId, source, subSource, startSize, pageSize).QueryRows(&items)
+
+	return
+}

+ 15 - 0
models/data_manage/edb_classify.go

@@ -575,3 +575,18 @@ func GetEdbClassifyByIdList(classifyIdList []int) (item []*EdbClassify, err erro
 	_, err = o.Raw(sql, classifyIdList).QueryRows(&item)
 	return
 }
+
+// GetEdbClassifyByClassifyTypeAndIsJoinPermission
+// @Description: 根据分类类型和是否涉密获取分类列表
+// @author: Roc
+// @datetime 2024-03-29 10:30:21
+// @param classifyType int
+// @param isJoinPermission int
+// @return items []*EdbClassify
+// @return err error
+func GetEdbClassifyByClassifyTypeAndIsJoinPermission(classifyType, isJoinPermission int) (items []*EdbClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM edb_classify WHERE   classify_type = ? AND is_join_permission = ? `
+	_, err = o.Raw(sql, classifyType, isJoinPermission).QueryRows(&items)
+	return
+}

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

@@ -51,6 +51,39 @@ func GetExcelClassifyById(classifyId int) (item *ExcelClassify, err error) {
 	return
 }
 
+// GetExcelClassifyByIdList
+// @Description: 根据分类id列表获取所有分类信息
+// @author: Roc
+// @datetime 2024-04-07 16:24:04
+// @param classifyIdList []int
+// @return items []*ExcelClassify
+// @return err error
+func GetExcelClassifyByIdList(classifyIdList []int) (items []*ExcelClassify, err error) {
+	num := len(classifyIdList)
+	if num <= 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM excel_classify WHERE excel_classify_id in (` + utils.GetOrmInReplace(num) + `) AND is_delete=0 `
+	_, err = o.Raw(sql, classifyIdList).QueryRows(&items)
+	return
+}
+
+// GetExcelClassifyBySourceAndIsJoinPermission
+// @Description: 根据分类id列表获取所有分类信息
+// @author: Roc
+// @datetime 2024-04-07 16:24:04
+// @param classifyIdList []int
+// @return items []*ExcelClassify
+// @return err error
+func GetExcelClassifyBySourceAndIsJoinPermission(source, isJoinPermission int) (items []*ExcelClassify, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM excel_classify WHERE source = ? AND is_join_permission = ? `
+	_, err = o.Raw(sql, source, isJoinPermission).QueryRows(&items)
+
+	return
+}
+
 func GetChildClassifyById(classifyId int) (items []*ExcelClassify, err error) {
 	o := orm.NewOrmUsingDB("data")
 	sql := `SELECT * FROM excel_classify WHERE parent_id=? AND is_delete=0 `

+ 2 - 2
services/data/data_manage_permission/data_move.go

@@ -956,7 +956,7 @@ func MoveAllEdbChartOld(sourceList, oldUserIdList []int, userId, opUserId int) (
 		ReceiveUserId:           int32(adminInfo.AdminId),
 		Content:                 content,
 		Remark:                  content,
-		OpType:                  1,
+		OpType:                  2,
 		OpUniqueCode:            uniqueCode,
 		IsRead:                  0,
 		CreateTime:              time.Now(),
@@ -1205,7 +1205,7 @@ func MoveAllEdbChart(sourceList, oldUserIdList []int, userId, opUserId int) (err
 		ReceiveUserId:           int32(adminInfo.AdminId),
 		Content:                 content,
 		Remark:                  content,
-		OpType:                  1,
+		OpType:                  2,
 		OpUniqueCode:            uniqueCode,
 		IsRead:                  0,
 		CreateTime:              time.Now(),

+ 212 - 48
services/data/data_manage_permission/edb_permission.go

@@ -18,7 +18,7 @@ import (
 // @param source int
 // @param subSource int
 // @param userId int
-// @param userList []int
+// @param authUserList []int
 // @param isSelectAll bool
 // @param dataId []string
 // @param noDataId []string
@@ -27,7 +27,7 @@ import (
 // @param opUserId int 操作人
 // @return err error
 // @return errMsg string
-func SetEdbChartPermission(source, subSource, userId int, userList []int, isSelectAll bool, dataIdList, noDataIdList []string, keyword, classify string, opUserId int) (err error, errMsg string) {
+func SetEdbChartPermission(source, subSource, userId int, authUserList []int, isSelectAll bool, dataIdList, noDataIdList []string, keyword, classify string, opUserId int) (err error, errMsg string) {
 	// 如果勾选全部数据,那么
 	if isSelectAll {
 		// 找出不要的指标ID列表
@@ -51,7 +51,7 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 		}
 	}
 
-	if len(userList) <= 0 {
+	if len(authUserList) <= 0 {
 		// 说明是取消权限管控
 	}
 
@@ -60,7 +60,8 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 	dataList := make([]data_manage_permission.DataItem, 0)
 
 	switch source {
-	case 3, 4: //ETA指标库、ETA预测指标
+	case 3, 4:
+		//ETA指标库、ETA预测指标
 		if source == 3 {
 			content += `(ETA指标库)`
 		} else {
@@ -87,10 +88,11 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 			if source == 4 {
 				edbInfoType = 1
 			}
-			err = data_manage_permission.SetPermissionByEdbIdList(dataIdList, userList, edbInfoType)
+			err = data_manage_permission.SetPermissionByEdbIdList(dataIdList, authUserList, edbInfoType)
 		}
 
-	case 5: //图库
+	case 5:
+		//图库
 		content += `(ETA图库)`
 		tmpList, tmpErr := data_manage.GetChartInfoListByChartIdList(dataIdList)
 		if tmpErr != nil {
@@ -110,10 +112,11 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 
 			// 重新设置权限
 			chartSource := utils.CHART_SOURCE_DEFAULT
-			err = data_manage_permission.SetPermissionByChartIdList(dataIdList, userList, chartSource)
+			err = data_manage_permission.SetPermissionByChartIdList(dataIdList, authUserList, chartSource)
 		}
 
-	case 6: // ETA表格
+	case 6:
+		// ETA表格
 		content += `(ETA表格)`
 		tmpList, tmpErr := excel.GetNoContentExcelListByExcelInfoIdList(dataIdList)
 		if tmpErr != nil {
@@ -132,7 +135,7 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 			}
 
 			// 重新设置权限
-			err = data_manage_permission.SetPermissionByExcelIdList(dataIdList, userList, subSource)
+			err = data_manage_permission.SetPermissionByExcelIdList(dataIdList, authUserList, subSource)
 		}
 	default:
 		return
@@ -145,7 +148,7 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 	var authRecordErr error
 	defer func() {
 		if authRecordErr != nil {
-			utils.FileLog.Error(fmt.Sprintf("记录未设置记录资产权限的记录失败:%s;source:%d;sub_source:%d;数据ID列表:%s;授权人列表:%v", authRecordErr.Error(), source, subSource, strings.Join(dataIdList, ","), userList))
+			utils.FileLog.Error(fmt.Sprintf("记录未设置记录资产权限的记录失败:%s;source:%d;sub_source:%d;数据ID列表:%s;授权人列表:%v", authRecordErr.Error(), source, subSource, strings.Join(dataIdList, ","), authUserList))
 
 		}
 	}()
@@ -160,13 +163,13 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 	}
 
 	// 如果没有授权人,那么就删除未授权记录
-	if len(userList) < 0 {
+	if len(authUserList) < 0 {
 		authRecordErr = data_manage_permission.DeleteRecordBySourceAndDataIdList(source, subSource, dataIdList)
 		return
 	}
 
 	userIdMap := make(map[int]int)
-	for _, tmpUserId := range userList {
+	for _, tmpUserId := range authUserList {
 		userIdMap[tmpUserId] = tmpUserId
 	}
 
@@ -177,32 +180,52 @@ func SetEdbChartPermission(source, subSource, userId int, userList []int, isSele
 		}
 	}
 
-	authRecordErr = data_manage_permission.AddRecordBySourceAndDataIdList(source, subSource, dataIdList, dataList, noAuthUserIdList, userList, uniqueCode, content, opUserId)
+	content += "已关闭"
+
+	// 添加未授权记录
+	authRecordErr = data_manage_permission.AddRecordBySourceAndDataIdList(source, subSource, dataList, noAuthUserIdList, authUserList, uniqueCode, content, opUserId)
 
 	return
 }
 
-// SetDataIsPermission
+// SetDataClassifyIsPermission
 // @Description:  设置资产(指标、图表、ETA表格)分类是否涉密
 // @author: Roc
 // @datetime 2024-03-27 10:52:32
 // @param source int
 // @param subSource int
 // @param dataId []string
+// @param opUserId int 操作人id
 // @return err error
 // @return errMsg string
-func SetDataIsPermission(source, subSource int, classifyIdList []int) (err error, errMsg string) {
-	// TODO 消息通知
+func SetDataClassifyIsPermission(source, subSource int, classifyIdList []int, opUserId int) (err error, errMsg string) {
+	uniqueCode := uuid.NewUUID().Hex32()
+	content := `分类权限`
+	classifyDataList := make([]data_manage_permission.ClassifyDataItem, 0)
 
 	switch source {
-	case 3, 4: //ETA指标库、ETA预测指标
-		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
-		//if tmpErr != nil {
-		//	err = tmpErr
-		//	return
-		//}
-		//if len(tmpList) > 0 {
-		//}
+	case 3, 4:
+		//ETA指标库、ETA预测指标
+		if source == 3 {
+			content += `(ETA指标库)`
+		} else {
+			content += `(ETA预测指标)`
+		}
+		{
+			// 分类信息
+			classifyInfoList, tmpErr := data_manage.GetEdbClassifyByIdList(classifyIdList)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			for _, v := range classifyInfoList {
+				classifyDataList = append(classifyDataList, data_manage_permission.ClassifyDataItem{
+					ClassifyId:   v.ClassifyId,
+					ClassifyName: v.ClassifyName,
+				})
+			}
+		}
+
 		// 重新设置权限
 		classifyType := 0
 		if source == 4 {
@@ -210,19 +233,85 @@ func SetDataIsPermission(source, subSource int, classifyIdList []int) (err error
 		}
 		err = data_manage_permission.SetIsPermissionEdbChartByEdbClassifyIdList(classifyIdList, classifyType)
 
-	case 5: //图库
+	case 5:
+		//图库
+		content += `(ETA图库)`
+		{
+			// 分类信息
+			classifyInfoList, tmpErr := data_manage.GetChartClassifyByIdList(classifyIdList)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			for _, v := range classifyInfoList {
+				classifyDataList = append(classifyDataList, data_manage_permission.ClassifyDataItem{
+					ClassifyId:   v.ChartClassifyId,
+					ClassifyName: v.ChartClassifyName,
+				})
+			}
+		}
+
 		// 重新设置权限
 		chartClassifySource := utils.CHART_SOURCE_DEFAULT
 		err = data_manage_permission.SetIsPermissionByChartClassifyIdList(classifyIdList, chartClassifySource)
 
 	case 6:
 		// ETA表格
+		content += `(ETA表格)`
+		{
+			// 分类信息
+			classifyInfoList, tmpErr := excel.GetExcelClassifyByIdList(classifyIdList)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			for _, v := range classifyInfoList {
+				classifyDataList = append(classifyDataList, data_manage_permission.ClassifyDataItem{
+					ClassifyId:   v.ExcelClassifyId,
+					ClassifyName: v.ExcelClassifyName,
+				})
+			}
+		}
 		// 重新设置权限
 		err = data_manage_permission.SetIsPermissionByExcelClassifyIdList(classifyIdList, subSource)
 
 	default:
 		return
 	}
+	if err != nil {
+		return
+	}
+
+	var authRecordErr error
+	defer func() {
+		if authRecordErr != nil {
+			utils.FileLog.Error(fmt.Sprintf("记录未设置记录资产权限的记录失败:%s;source:%d;sub_source:%d;分类ID列表:%v", authRecordErr.Error(), source, subSource, classifyIdList))
+
+		}
+	}()
+
+	// 如果没有涉密的分类,那么就移除所有删除未授权记录
+	if len(classifyIdList) <= 0 {
+		authRecordErr = data_manage_permission.DeleteClassifyNoAuthRecordBySourceAndClassifyIdList(source, subSource)
+		return
+	}
+
+	// 获取所有在用的用户
+	cond := ` AND enabled = 1`
+	pars := make([]interface{}, 0)
+
+	adminList, authRecordErr := system.GetSysAdminList(cond, pars, []string{}, "")
+	if authRecordErr != nil {
+		return
+	}
+	noAuthUserIdList := make([]int, 0)
+	for _, v := range adminList {
+		noAuthUserIdList = append(noAuthUserIdList, v.AdminId)
+	}
+
+	content += "已关闭"
+	// 添加未授权记录
+	authRecordErr = data_manage_permission.AddClassifyNoAuthRecordBySourceAndClassifyIdList(source, subSource, classifyDataList, noAuthUserIdList, uniqueCode, content, opUserId)
 
 	return
 }
@@ -233,51 +322,126 @@ func SetDataIsPermission(source, subSource int, classifyIdList []int) (err error
 // @datetime 2024-03-28 14:22:30
 // @param source int
 // @param subSource int
-// @param userList []int
+// @param authUserList []int
 // @param classifyIdList []int
+// @param opUserId int 操作人id
 // @return err error
 // @return errMsg string
-func SetEdbChartClassifyPermission(source, subSource int, userList []int, classifyIdList []int) (err error, errMsg string) {
-	// TODO 消息通知
+func SetEdbChartClassifyPermission(source, subSource int, authUserList []int, classifyIdList []int, opUserId int) (err error, errMsg string) {
+	uniqueCode := uuid.NewUUID().Hex32()
+	content := `分类权限`
+	secretClassifyInfoList := make([]data_manage_permission.ClassifyDataItem, 0)
 
 	if len(classifyIdList) <= 0 {
 		// 说明是取消权限管控
 	}
 
+	// 先获取所有的涉密分类,然后根据用户去判断那些分类给权限了
+
 	switch source {
 	case 3, 4: //ETA指标库、ETA预测指标
-		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
-		//if tmpErr != nil {
-		//	err = tmpErr
-		//	return
-		//}
-		//if len(tmpList) > 0 {
-		//}
-		// 重新设置权限
+
+		//ETA指标库、ETA预测指标
+		if source == 3 {
+			content += `(ETA指标库)`
+		} else {
+			content += `(ETA预测指标)`
+		}
+
 		classifyType := 0
 		if source == 4 {
 			classifyType = 1
 		}
-		err = data_manage_permission.SetPermissionByEdbClassifyIdList(classifyIdList, userList, classifyType)
-	case 5: //图库
 
-		//tmpList, tmpErr := data_manage.GetEdbInfoListGroupByUserId(dataId)
-		//if tmpErr != nil {
-		//	err = tmpErr
-		//	return
-		//}
-		//if len(tmpList) > 0 {
-		//}
+		{
+			// 获取已经设置加密的分类信息
+			classifyInfoList, tmpErr := data_manage.GetEdbClassifyByClassifyTypeAndIsJoinPermission(classifyType, 1)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			for _, v := range classifyInfoList {
+				secretClassifyInfoList = append(secretClassifyInfoList, data_manage_permission.ClassifyDataItem{
+					ClassifyId:   v.ClassifyId,
+					ClassifyName: v.ClassifyName,
+				})
+			}
+		}
 		// 重新设置权限
-		chartClassifySource := utils.CHART_SOURCE_DEFAULT
-		err = data_manage_permission.SetPermissionByChartClassifyIdList(classifyIdList, userList, chartClassifySource)
+		err = data_manage_permission.SetPermissionByEdbClassifyIdList(classifyIdList, authUserList, classifyType)
+	case 5:
+		subSource = utils.CHART_SOURCE_DEFAULT
+		//图库
+		content += `(ETA图库)`
+		{
+			// 分类信息
+			classifyInfoList, tmpErr := data_manage.GetChartClassifyBySourceAndIsJoinPermission(subSource, 1)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			for _, v := range classifyInfoList {
+				secretClassifyInfoList = append(secretClassifyInfoList, data_manage_permission.ClassifyDataItem{
+					ClassifyId:   v.ChartClassifyId,
+					ClassifyName: v.ChartClassifyName,
+				})
+			}
+		}
+
+		// 重新设置权限
+		err = data_manage_permission.SetPermissionByChartClassifyIdList(classifyIdList, authUserList, subSource)
 	case 6:
 		// ETA表格
-		err = data_manage_permission.SetPermissionByExcelClassifyIdList(classifyIdList, userList, subSource)
+		content += `(ETA表格)`
+		{
+			// 分类信息
+			classifyInfoList, tmpErr := excel.GetExcelClassifyBySourceAndIsJoinPermission(subSource, 1)
+			if tmpErr != nil {
+				err = tmpErr
+				return
+			}
+			for _, v := range classifyInfoList {
+				secretClassifyInfoList = append(secretClassifyInfoList, data_manage_permission.ClassifyDataItem{
+					ClassifyId:   v.ExcelClassifyId,
+					ClassifyName: v.ExcelClassifyName,
+				})
+			}
+		}
+
+		err = data_manage_permission.SetPermissionByExcelClassifyIdList(classifyIdList, authUserList, subSource)
 	default:
 		return
 	}
 
+	if err != nil {
+		return
+	}
+
+	var authRecordErr error
+	defer func() {
+		if authRecordErr != nil {
+			utils.FileLog.Error(fmt.Sprintf("记录未设置记录资产权限的记录失败:%s;source:%d;sub_source:%d;分类ID列表:%v", authRecordErr.Error(), source, subSource, classifyIdList))
+
+		}
+	}()
+
+	content += "已关闭"
+
+	authClassifyIdMap := make(map[int]int)
+	for _, v := range classifyIdList {
+		authClassifyIdMap[v] = v
+	}
+
+	noAuthClassifyMap := make(map[int]data_manage_permission.ClassifyDataItem)
+	for _, classifyInfo := range secretClassifyInfoList {
+		if _, ok := authClassifyIdMap[classifyInfo.ClassifyId]; !ok {
+			noAuthClassifyMap[classifyInfo.ClassifyId] = classifyInfo
+		}
+	}
+
+	// 添加未授权记录
+	authRecordErr = data_manage_permission.AddClassifyNoAuthRecordBySourceAndUserIdList(source, subSource, noAuthClassifyMap, authUserList, uniqueCode, content, opUserId)
+
 	return
 }
 

+ 84 - 3
services/data/data_manage_permission/message.go

@@ -35,20 +35,43 @@ func GetMessageDetail(messageInfo *data_manage_permission.DataPermissionMessage,
 	switch messageInfo.OpType {
 	// 操作类型,1:单个资产转移,2:资产模块转移,3:资产授权,4:资产分类授权
 	case 1, 2:
-		tmpTotal, list, tmpErr := data_manage_permission.GetListByOpUniqueCode(messageInfo.OpUniqueCode, source, subSource, startSize, pageSize)
+		tmpTotal, list, tmpErr := data_manage_permission.GetDataPermissionMoveRecordListByOpUniqueCode(messageInfo.OpUniqueCode, source, subSource, startSize, pageSize)
 		if tmpErr != nil {
 			err = tmpErr
 			return
 		}
 		total = tmpTotal
-		resp, err = formatMessageDetailItem(list)
+		resp, err = formatMessageDetailItemByDataPermissionMoveRecord(list)
+	case 3:
+		tmpTotal, list, tmpErr := data_manage_permission.GetDataPermissionNoAuthRecordListByUserId(messageInfo.ReceiveUserId, source, subSource, startSize, pageSize)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		total = tmpTotal
+		resp, err = formatMessageDetailItemByDataPermissionNoAuthRecord(list)
+	case 4:
+		tmpTotal, list, tmpErr := data_manage_permission.GetDataPermissionClassifyNoAuthRecordListByUserId(messageInfo.ReceiveUserId, source, subSource, startSize, pageSize)
+		if tmpErr != nil {
+			err = tmpErr
+			return
+		}
+		total = tmpTotal
+		resp, err = formatMessageDetailItemByDataPermissionClassifyNoAuthRecord(list)
 
 	}
 
 	return
 }
 
-func formatMessageDetailItem(items []*data_manage_permission.DataPermissionMoveRecord) (resp []*MessageDetailItem, err error) {
+// formatMessageDetailItemByDataPermissionMoveRecord
+// @Description: 根据转移指标权限数据格式化列表数据
+// @author: Roc
+// @datetime 2024-04-07 20:20:09
+// @param items []*data_manage_permission.DataPermissionMoveRecord
+// @return resp []*MessageDetailItem
+// @return err error
+func formatMessageDetailItemByDataPermissionMoveRecord(items []*data_manage_permission.DataPermissionMoveRecord) (resp []*MessageDetailItem, err error) {
 	resp = make([]*MessageDetailItem, 0)
 	for _, v := range items {
 		resp = append(resp, &MessageDetailItem{
@@ -69,3 +92,61 @@ func formatMessageDetailItem(items []*data_manage_permission.DataPermissionMoveR
 
 	return
 }
+
+// formatMessageDetailItemByDataPermissionNoAuthRecord
+// @Description: 根据资产授权数据权限格式化列表数据
+// @author: Roc
+// @datetime 2024-04-07 20:20:00
+// @param items []*data_manage_permission.DataPermissionNoAuthRecord
+// @return resp []*MessageDetailItem
+// @return err error
+func formatMessageDetailItemByDataPermissionNoAuthRecord(items []*data_manage_permission.DataPermissionNoAuthRecord) (resp []*MessageDetailItem, err error) {
+	resp = make([]*MessageDetailItem, 0)
+	for _, v := range items {
+		resp = append(resp, &MessageDetailItem{
+			DataPermissionMoveRecordId: v.DataPermissionNoAuthRecordId,
+			Source:                     v.Source,
+			SubSource:                  v.SubSource,
+			OpUniqueCode:               v.OpUniqueCode,
+			DataId:                     v.DataId,
+			DataCode:                   v.DataCode,
+			DataName:                   v.DataName,
+			//OriginalUserId:             v.OriginalUserId,
+			//OriginalUserName:           v.OriginalUserName,
+			//NewUserId:                  v.NewUserId,
+			//NewUserName:                v.NewUserName,
+			CreateTime: utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
+		})
+	}
+
+	return
+}
+
+// formatMessageDetailItemByDataPermissionClassifyNoAuthRecord
+// @Description: 根据资产分类授权数据权限格式化列表数据
+// @author: Roc
+// @datetime 2024-04-07 20:19:39
+// @param items []*data_manage_permission.DataPermissionClassifyNoAuthRecord
+// @return resp []*MessageDetailItem
+// @return err error
+func formatMessageDetailItemByDataPermissionClassifyNoAuthRecord(items []*data_manage_permission.DataPermissionClassifyNoAuthRecord) (resp []*MessageDetailItem, err error) {
+	resp = make([]*MessageDetailItem, 0)
+	for _, v := range items {
+		resp = append(resp, &MessageDetailItem{
+			DataPermissionMoveRecordId: v.DataPermissionClassifyNoAuthRecordId,
+			Source:                     v.Source,
+			SubSource:                  v.SubSource,
+			OpUniqueCode:               v.OpUniqueCode,
+			DataId:                     v.ClassifyId,
+			DataCode:                   v.ClassifyId,
+			DataName:                   v.ClassifyName,
+			//OriginalUserId:             v.OriginalUserId,
+			//OriginalUserName:           v.OriginalUserName,
+			//NewUserId:                  v.NewUserId,
+			//NewUserName:                v.NewUserName,
+			CreateTime: utils.TimeTransferString(utils.FormatDateTime, v.CreateTime),
+		})
+	}
+
+	return
+}