diff --git a/features/sys_user_role/model_sys_user_role.go b/features/sys_user_role/model_sys_user_role.go new file mode 100644 index 00000000..bc493eb0 --- /dev/null +++ b/features/sys_user_role/model_sys_user_role.go @@ -0,0 +1,15 @@ +package sysuserrole + +// SysUserRole 用户和角色关联对象 sys_user_role +type SysUserRole struct { + UserID string `json:"userId"` // 用户ID + RoleID string `json:"roleId"` // 角色ID +} + +// NewSysUserRole 创建用户和角色关联对象的构造函数 +func NewSysUserRole(userID string, roleID string) SysUserRole { + return SysUserRole{ + UserID: userID, + RoleID: roleID, + } +} diff --git a/features/sys_user_role/repo_sys_user_role.go b/features/sys_user_role/repo_sys_user_role.go new file mode 100644 index 00000000..1c63c294 --- /dev/null +++ b/features/sys_user_role/repo_sys_user_role.go @@ -0,0 +1,72 @@ +package sysuserrole + +import ( + "fmt" + "strings" + + "ems.agt/lib/core/datasource" + "ems.agt/lib/core/utils/parse" + "github.com/go-admin-team/go-admin-core/logger" +) + +// 实例化数据层 RepoSysUserRole 结构体 +var NewRepoSysUserRole = &RepoSysUserRole{} + +// RepoSysUserRole 用户与角色关联表 数据层处理 +type RepoSysUserRole struct{} + +// CountUserRoleByRoleId 通过角色ID查询角色使用数量 +func (r *RepoSysUserRole) CountUserRoleByRoleId(roleId string) int64 { + querySql := "select count(1) as total from sys_user_role where role_id = ?" + results, err := datasource.RawDB("", querySql, []any{roleId}) + if err != nil { + logger.Errorf("query err => %v", err) + return 0 + } + if len(results) > 0 { + return parse.Number(results[0]["total"]) + } + return 0 +} + +// BatchUserRole 批量新增用户角色信息 +func (r *RepoSysUserRole) BatchUserRole(sysUserRoles []SysUserRole) int64 { + keyValues := make([]string, 0) + for _, item := range sysUserRoles { + keyValues = append(keyValues, fmt.Sprintf("(%s,%s)", item.UserID, item.RoleID)) + } + sql := "insert into sys_user_role(user_id, role_id) values " + strings.Join(keyValues, ",") + results, err := datasource.ExecDB("", sql, nil) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} + +// DeleteUserRole 批量删除用户和角色关联 +func (r *RepoSysUserRole) DeleteUserRole(userIds []string) int64 { + placeholder := datasource.KeyPlaceholderByQuery(len(userIds)) + sql := "delete from sys_user_role where user_id in (" + placeholder + ")" + parameters := datasource.ConvertIdsSlice(userIds) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +} + +// DeleteUserRoleByRoleId 批量取消授权用户角色 +func (r *RepoSysUserRole) DeleteUserRoleByRoleId(roleId string, userIds []string) int64 { + placeholder := datasource.KeyPlaceholderByQuery(len(userIds)) + sql := "delete from sys_user_role where role_id= ? and user_id in (" + placeholder + ")" + parameters := datasource.ConvertIdsSlice(userIds) + parameters = append([]any{roleId}, parameters...) + results, err := datasource.ExecDB("", sql, parameters) + if err != nil { + logger.Errorf("delete err => %v", err) + return 0 + } + return results +}