diff --git a/api/controller/user.go b/api/controller/user.go index 6fd0980..83e030e 100644 --- a/api/controller/user.go +++ b/api/controller/user.go @@ -6,6 +6,7 @@ import ( "hospital-admin-api/api/requests" "hospital-admin-api/api/responses" "hospital-admin-api/api/responses/userResponse" + "hospital-admin-api/api/service" "hospital-admin-api/global" "hospital-admin-api/utils" "strconv" @@ -46,60 +47,7 @@ func (r *User) GetUserPage(c *gin.Context) { } // 处理返回值 - getUserPageResponses := make([]userResponse.GetUserPage, len(adminUser)) - - if len(adminUser) > 0 { - for i, v := range adminUser { - var Role *userResponse.GetUserPageRole - if v.Role != nil { - Role = &userResponse.GetUserPageRole{ - RoleId: strconv.FormatInt(v.Role.RoleId, 10), - RoleName: v.Role.RoleName, - } - } - - var Dept *userResponse.GetUserPageDept - if v.Dept != nil { - Dept = &userResponse.GetUserPageDept{ - DeptId: strconv.FormatInt(v.Dept.DeptId, 10), - DeptName: v.Dept.DeptName, - } - } - - var Post *userResponse.GetUserPagePost - if v.Post != nil { - Post = &userResponse.GetUserPagePost{ - PostId: strconv.FormatInt(v.Post.PostId, 10), - PostName: v.Post.PostName, - } - } - - // 将原始结构体转换为新结构体 - getUserPageResponse := userResponse.GetUserPage{ - UserID: strconv.Itoa(int(v.UserID)), - Access: v.Access, - Status: v.Status, - IsDeleted: v.IsDeleted, - IsDisabled: v.IsDisabled, - NickName: v.NickName, - Phone: v.Phone, - Avatar: v.Avatar, - Sex: v.Sex, - Email: v.Email, - RoleID: strconv.Itoa(int(v.RoleID)), - DeptID: strconv.Itoa(int(v.DeptID)), - PostID: strconv.Itoa(int(v.PostID)), - CreatedAt: v.CreatedAt, - UpdatedAt: v.UpdatedAt, - Role: Role, - Dept: Dept, - Post: Post, - } - - // 将转换后的结构体添加到新切片中 - getUserPageResponses[i] = getUserPageResponse - } - } + getUserPageResponses := userResponse.GetUserPageResponse(adminUser) result := make(map[string]interface{}) result["page"] = UserRequest.GetUserPage.Page @@ -112,14 +60,76 @@ func (r *User) GetUserPage(c *gin.Context) { // AddUser 新增用户 func (r *User) AddUser(c *gin.Context) { UserRequest := requests.UserRequest{} - if err := c.ShouldBind(&UserRequest.GetUserPage); err != nil { + if err := c.ShouldBind(&UserRequest.AddUser); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 - if err := global.Validate.Struct(UserRequest.GetUserPage); err != nil { + if err := global.Validate.Struct(UserRequest.AddUser); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } + + // 业务处理 + UserService := service.UserService{} + _, err := UserService.AddUser(c, UserRequest.AddUser) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.Ok(c) +} + +// GetUser 用户详情 +func (r *User) GetUser(c *gin.Context) { + id := c.Param("user_id") + if id == "" { + responses.FailWithMessage("缺少参数", c) + return + } + + // 将 id 转换为 int64 类型 + userId, err := strconv.ParseInt(id, 10, 64) + if err != nil { + responses.Fail(c) + return + } + + // 获取用户详情 + AdminUserDao := dao.AdminUserDao{} + adminUser, err := AdminUserDao.GetAdminUserFirstById(userId) + if err != nil || adminUser == nil { + responses.FailWithMessage("用户数据错误", c) + return + } + + // 处理返回值 + getUserResponses := userResponse.GetUserResponse(adminUser) + + responses.OkWithData(getUserResponses, c) +} + +// DeleteUser 删除用户-批量 +func (r *User) DeleteUser(c *gin.Context) { + userRequest := requests.UserRequest{} + if err := c.ShouldBindJSON(&userRequest.DeleteUser); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(userRequest.DeleteUser); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + // 业务处理 + userService := service.UserService{} + _, err := userService.DeleteUser(c, userRequest.DeleteUser) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.Ok(c) } diff --git a/api/dao/adminDept.go b/api/dao/adminDept.go new file mode 100644 index 0000000..da4a8ec --- /dev/null +++ b/api/dao/adminDept.go @@ -0,0 +1,18 @@ +package dao + +import ( + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type AdminDeptDao struct { +} + +// GetAdminDeptFirstById 获取部门数据-部门id +func (r *AdminDeptDao) GetAdminDeptFirstById(deptId int64) (m *model.AdminDept, err error) { + err = global.Db.First(&m, deptId).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dao/adminPost.go b/api/dao/adminPost.go new file mode 100644 index 0000000..392933b --- /dev/null +++ b/api/dao/adminPost.go @@ -0,0 +1,18 @@ +package dao + +import ( + "hospital-admin-api/api/model" + "hospital-admin-api/global" +) + +type AdminPostDao struct { +} + +// GetAdminPostFirstById 获取岗位数据-部门id +func (r *AdminPostDao) GetAdminPostFirstById(postId int64) (m *model.AdminPost, err error) { + err = global.Db.First(&m, postId).Error + if err != nil { + return nil, err + } + return m, nil +} diff --git a/api/dao/adminUser.go b/api/dao/adminUser.go index 8b9fe22..c987381 100644 --- a/api/dao/adminUser.go +++ b/api/dao/adminUser.go @@ -21,8 +21,17 @@ func (r *AdminUserDao) GetAdminUserFirstById(userId int64) (m *model.AdminUser, } // GetAdminUserFirstByAccess 获取用户数据-用户账号 -func (r *AdminUserDao) GetAdminUserFirstByAccess(username string) (m *model.AdminUser, err error) { - err = global.Db.Where("access = ?", username).First(&m).Error +func (r *AdminUserDao) GetAdminUserFirstByAccess(access string) (m *model.AdminUser, err error) { + err = global.Db.Where("access = ?", access).First(&m).Error + if err != nil { + return nil, err + } + return m, nil +} + +// GetAdminUserFirstByPhone 获取用户数据-手机号 +func (r *AdminUserDao) GetAdminUserFirstByPhone(phone string) (m *model.AdminUser, err error) { + err = global.Db.Where("phone = ?", phone).First(&m).Error if err != nil { return nil, err } @@ -38,6 +47,14 @@ func (r *AdminUserDao) DeleteAdminUser(tx *gorm.DB, maps interface{}) error { return nil } +// DeleteAdminUserById 删除用户-用户id +func (r *AdminUserDao) DeleteAdminUserById(tx *gorm.DB, userId int64) error { + if err := tx.Delete(&model.AdminUser{}, userId).Error; err != nil { + return err + } + return nil +} + // EditAdminUser 修改用户 func (r *AdminUserDao) EditAdminUser(tx *gorm.DB, maps interface{}, data interface{}) error { err := tx.Model(&model.AdminUser{}).Where(maps).Updates(data).Error @@ -116,11 +133,11 @@ func (r *AdminUserDao) GetAdminUserPageSearch(getUserPage requests.GetUserPage, query = query.Where("status = ?", getUserPage.Status) } - if getUserPage.DeptId != 0 { + if getUserPage.DeptId != "" { query = query.Where("dept_id = ?", getUserPage.DeptId) } - if getUserPage.PostId != 0 { + if getUserPage.PostId != "" { query = query.Where("post_id = ?", getUserPage.PostId) } @@ -135,3 +152,11 @@ func (r *AdminUserDao) GetAdminUserPageSearch(getUserPage requests.GetUserPage, } return m, totalRecords, nil } + +// AddAdminUser 新增用户 +func (r *AdminUserDao) AddAdminUser(tx *gorm.DB, model *model.AdminUser) (*model.AdminUser, error) { + if err := tx.Create(model).Error; err != nil { + return nil, err + } + return model, nil +} diff --git a/api/model/adminUser.go b/api/model/adminUser.go index 9289fd9..0031bf4 100644 --- a/api/model/adminUser.go +++ b/api/model/adminUser.go @@ -18,6 +18,8 @@ type AdminUser struct { RoleID int64 `gorm:"column:role_id;type:bigint(19);comment:'角色id'" json:"role_id"` DeptID int64 `gorm:"column:dept_id;type:bigint(19);comment:'部门id'" json:"dept_id"` PostID int64 `gorm:"column:post_id;type:bigint(19);comment:'岗位id'" json:"post_id"` + CreateBy int64 `gorm:"column:create_by;type:bigint(19);comment:'创建者id(用户表id)'" json:"create_by"` + UpdateBy int64 `gorm:"column:update_by;type:bigint(19);comment:'更新者id(用户表id)'" json:"update_by"` Role *AdminRole `gorm:"foreignKey:RoleID"` // 角色 Dept *AdminDept `gorm:"foreignKey:DeptID"` // 部门 Post *AdminPost `gorm:"foreignKey:PostID"` // 岗位 diff --git a/api/model/model.go b/api/model/model.go index e6cbb6c..8bc9b9e 100644 --- a/api/model/model.go +++ b/api/model/model.go @@ -60,28 +60,6 @@ func (t *LocalTime) String() string { return fmt.Sprintf("hhh:%s", time.Time(*t).String()) } -// BeforeCreate 注册 BeforeCreate 回调函数 -// func (m *Model) BeforeCreate(tx *gorm.DB) (err error) { -// // 动态访问 YourModel 结构体本身 -// model := tx.Statement.Dest -// -// // 设置创建时间 -// layout := "2006-01-02 15:04:05" -// strTime := "2019-08-09 11:35:52" -// parsedTime, err := time.Parse(layout, strTime) -// if err != nil { -// return err -// } -// -// // 使用反射设置创建时间字段 -// createdAtField := reflect.ValueOf(model).Elem().FieldByName("CreatedAt") -// if createdAtField.CanSet() { -// createdAtField.Set(reflect.ValueOf(parsedTime)) -// } -// -// return nil -// } - func (m *Model) BeforeUpdate(tx *gorm.DB) (err error) { m.UpdatedAt = LocalTime(time.Now()) tx.Statement.SetColumn("UpdatedAt", m.UpdatedAt) diff --git a/api/requests/user.go b/api/requests/user.go index 276c108..2ee6e8b 100644 --- a/api/requests/user.go +++ b/api/requests/user.go @@ -2,6 +2,8 @@ package requests type UserRequest struct { GetUserPage // 获取用户列表-分页 + AddUser // 新增用户 + DeleteUser // 删除用户-批量 } // GetUserPage 获取用户列表-分页 @@ -11,27 +13,30 @@ type GetUserPage struct { NickName string `json:"nick_name" form:"nick_name" label:"用户昵称"` Phone string `json:"phone" form:"phone" label:"手机号"` Status int `json:"status" form:"status" label:"用户状态"` // (1:正常 2:审核中 3:审核失败) - DeptId int64 `json:"dept_id" form:"dept_id" label:"部门"` - PostId int64 `json:"post_id" form:"post_id" label:"岗位"` + DeptId string `json:"dept_id" form:"dept_id" label:"部门"` + PostId string `json:"post_id" form:"post_id" label:"岗位"` Page int `json:"page" form:"page" label:"页码"` PageSize int `json:"page_size" form:"page_size" label:"每页个数"` } // AddUser 新增用户 type AddUser struct { - Access string `json:"access" form:"access" label:"账号"` - Password string `json:"password" form:"password" label:"密码"` - Status string `json:"status" form:"status" label:"状态"` // (1:正常 2:审核中 3:审核失败) - // - // Status int `gorm:"column:status;type:tinyint(1);default:2;comment:'状态(1:正常 2:审核中 3:审核失败)'" json:"status"` - // IsDeleted int `gorm:"column:is_deleted;type:tinyint(1);default:0;comment:'是否被删除(0:否 1:是)'" json:"is_deleted"` - // IsDisabled int `gorm:"column:is_disabled;type:tinyint(1);default:0;comment:'是否被禁用(0:否 1:是)'" json:"is_disabled"` - // NickName string `gorm:"column:nick_name;type:varchar(255);comment:'昵称'" json:"nick_name"` - // Phone string `gorm:"column:phone;type:varchar(11);comment:'手机号'" json:"phone"` - // Avatar string `gorm:"column:avatar;type:varchar(255);comment:'头像'" json:"avatar"` - // Sex int `gorm:"column:sex;type:tinyint(1);comment:'性别(1:男 2:女)'" json:"sex"` - // Email string `gorm:"column:email;type:varchar(100);comment:'邮箱'" json:"email"` - // RoleID int64 `gorm:"column:role_id;type:bigint(19);comment:'角色id'" json:"role_id"` - // DeptID int64 `gorm:"column:dept_id;type:bigint(19);comment:'部门id'" json:"dept_id"` - // PostID int64 `gorm:"column:post_id;type:bigint(19);comment:'岗位id'" json:"post_id"` + Access string `json:"access" form:"access" validate:"required" label:"账号"` + Password string `json:"password" form:"password" validate:"required" label:"密码"` + Status int `json:"status" form:"status" validate:"oneof=1 2 3" label:"状态"` // (1:正常 2:审核中 3:审核失败) + IsDeleted int `json:"is_deleted" form:"is_deleted" validate:"oneof=0 1" label:"删除状态"` // 是否被删除(0:否 1:是) + IsDisabled int `json:"is_disabled" form:"is_disabled" validate:"oneof=0 1" label:"禁用状态"` // 是否被禁用(0:否 1:是) + NickName string `json:"nick_name" form:"nick_name" validate:"required" label:"昵称"` + Phone string `json:"phone" form:"phone" validate:"required" label:"手机号"` + Avatar string `json:"avatar" form:"avatar" label:"头像"` + Sex int `json:"sex" form:"sex" validate:"required,oneof=1 2" label:"性别"` // (1:男 2:女) + Email string `json:"email" form:"email" label:"邮箱"` + RoleID string `json:"role_id" form:"role_id" validate:"required" label:"角色"` + DeptID string `json:"dept_id" form:"dept_id" validate:"required" label:"部门"` + PostID string `json:"post_id" form:"post_id" validate:"required" label:"岗位"` +} + +// DeleteUser 删除用户-批量 +type DeleteUser struct { + UserIds []string `json:"user_ids" form:"user_ids" validate:"required" label:"用户id"` } diff --git a/api/responses/userResponse/user.go b/api/responses/userResponse/user.go index 23e522d..3117a09 100644 --- a/api/responses/userResponse/user.go +++ b/api/responses/userResponse/user.go @@ -1,9 +1,13 @@ package userResponse -import "hospital-admin-api/api/model" +import ( + "hospital-admin-api/api/model" + "hospital-admin-api/config" + "strconv" +) -// GetUserPage 获取用户列表-分页 -type GetUserPage struct { +// getUserPage 获取用户列表-分页 +type getUserPage struct { UserID string `json:"user_id"` // 主键id Access string `json:"access"` // 账号 Status int `json:"status"` // 状态(1:正常 2:审核中 3:审核失败) @@ -19,22 +23,123 @@ type GetUserPage struct { PostID string `json:"post_id"` // 岗位id CreatedAt model.LocalTime `json:"created_at"` // 创建时间 UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 - Role *GetUserPageRole `json:"role"` // 角色 - Dept *GetUserPageDept `json:"dept"` // 部门 - Post *GetUserPagePost `json:"post"` // 岗位 + Role *getUserPageRole `json:"role"` // 角色 + Dept *getUserPageDept `json:"dept"` // 部门 + Post *getUserPagePost `json:"post"` // 岗位 } -type GetUserPageRole struct { +type getUserPageRole struct { RoleId string `json:"role_id"` // 角色id RoleName string `json:"role_name"` // 角色名称 } -type GetUserPageDept struct { +type getUserPageDept struct { DeptId string `json:"dept_id"` // 部门id DeptName string `json:"dept_name"` // 部门名称 } -type GetUserPagePost struct { +type getUserPagePost struct { PostId string `json:"post_id"` // 岗位id PostName string `json:"post_name"` // 岗位名称 } + +// getUser 用户详情 +type getUser struct { + UserID string `json:"user_id"` + Access string `json:"access"` + Status int `json:"status"` + IsDeleted int `json:"is_deleted"` + IsDisabled int `json:"is_disabled"` + NickName string `json:"nick_name"` + Phone string `json:"phone"` + Avatar string `json:"avatar"` + Sex int `json:"sex"` + Email string `json:"email"` + RoleID string `json:"role_id"` + DeptID string `json:"dept_id"` + PostID string `json:"post_id"` + CreatedAt model.LocalTime `json:"created_at"` // 创建时间 + UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间 +} + +// GetUserPageResponse 获取用户列表-分页 +func GetUserPageResponse(adminUser []*model.AdminUser) []getUserPage { + // 处理返回值 + getUserPageResponses := make([]getUserPage, len(adminUser)) + + if len(adminUser) > 0 { + for i, v := range adminUser { + var role *getUserPageRole + if v.Role != nil { + role = &getUserPageRole{ + RoleId: strconv.FormatInt(v.Role.RoleId, 10), + RoleName: v.Role.RoleName, + } + } + + var dept *getUserPageDept + if v.Dept != nil { + dept = &getUserPageDept{ + DeptId: strconv.FormatInt(v.Dept.DeptId, 10), + DeptName: v.Dept.DeptName, + } + } + + var post *getUserPagePost + if v.Post != nil { + post = &getUserPagePost{ + PostId: strconv.FormatInt(v.Post.PostId, 10), + PostName: v.Post.PostName, + } + } + + // 将原始结构体转换为新结构体 + getUserPageResponse := getUserPage{ + UserID: strconv.Itoa(int(v.UserID)), + Access: v.Access, + Status: v.Status, + IsDeleted: v.IsDeleted, + IsDisabled: v.IsDisabled, + NickName: v.NickName, + Phone: v.Phone, + Avatar: config.C.Oss.OssCustomDomainName + "/" + v.Avatar, + Sex: v.Sex, + Email: v.Email, + RoleID: strconv.Itoa(int(v.RoleID)), + DeptID: strconv.Itoa(int(v.DeptID)), + PostID: strconv.Itoa(int(v.PostID)), + CreatedAt: v.CreatedAt, + UpdatedAt: v.UpdatedAt, + Role: role, + Dept: dept, + Post: post, + } + + // 将转换后的结构体添加到新切片中 + getUserPageResponses[i] = getUserPageResponse + } + } + + return getUserPageResponses +} + +// GetUserResponse 用户详情 +func GetUserResponse(adminUser *model.AdminUser) *getUser { + return &getUser{ + UserID: strconv.FormatInt(adminUser.UserID, 10), + Access: adminUser.Access, + Status: adminUser.Status, + IsDeleted: adminUser.IsDeleted, + IsDisabled: adminUser.IsDisabled, + NickName: adminUser.NickName, + Phone: adminUser.Phone, + Avatar: config.C.Oss.OssCustomDomainName + "/" + adminUser.Avatar, + Sex: adminUser.Sex, + Email: adminUser.Email, + RoleID: strconv.FormatInt(adminUser.RoleID, 10), + DeptID: strconv.FormatInt(adminUser.DeptID, 10), + PostID: strconv.FormatInt(adminUser.PostID, 10), + CreatedAt: adminUser.CreatedAt, + UpdatedAt: adminUser.UpdatedAt, + } +} diff --git a/api/router/router.go b/api/router/router.go index a3abd0b..7cb2316 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -122,10 +122,10 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 新增用户 userGroup.POST("", api.User.AddUser) - // 修改用户 - userGroup.PUT("/:menu_id", api.User.GetUserPage) + // 用户详情 + userGroup.GET("/:user_id", api.User.GetUser) // 删除用户-批量 - userGroup.DELETE("", api.User.GetUserPage) + userGroup.DELETE("", api.User.DeleteUser) } } diff --git a/api/service/role.go b/api/service/role.go index f923de4..30b5174 100644 --- a/api/service/role.go +++ b/api/service/role.go @@ -141,7 +141,7 @@ func (r *RoleService) AddRole(c *gin.Context, AddRoleRequest requests.AddRole) ( return false, errors.New("数据错误") } - // 获取当前登陆用户数据 + // 获取当前登陆用户角色数据 AdminRoleDao := dao.AdminRoleDao{} adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId) if err != nil || adminRole == nil { @@ -149,7 +149,7 @@ func (r *RoleService) AddRole(c *gin.Context, AddRoleRequest requests.AddRole) ( } if AddRoleRequest.IsAdmin == 1 && adminRole.IsAdmin == 0 { - return false, errors.New("您当前为普通用户,无法添加管理员用户") + return false, errors.New("您当前为普通用户,无法添加管理员角色") } AdminMenuDao := dao.AdminMenuDao{} diff --git a/api/service/user.go b/api/service/user.go index 73fe424..86a4d93 100644 --- a/api/service/user.go +++ b/api/service/user.go @@ -1,4 +1,204 @@ package service -type AdminUserService struct { +import ( + "crypto/md5" + "encoding/hex" + "errors" + "github.com/gin-gonic/gin" + "github.com/google/uuid" + "hospital-admin-api/api/dao" + "hospital-admin-api/api/model" + "hospital-admin-api/api/requests" + "hospital-admin-api/global" + "strconv" +) + +type UserService struct { +} + +// AddUser 新增用户 +func (r *UserService) AddUser(c *gin.Context, AddUserRequest requests.AddUser) (bool, error) { + // 当前登陆用户id + loginUserId := c.GetInt64("UserId") + if loginUserId == 0 { + return false, errors.New("新增失败") + } + + loginRoleId := c.GetInt64("RoleId") + if loginRoleId == 0 { + return false, errors.New("新增失败") + } + + // 获取当前登陆用户角色数据 + adminRoleDao := dao.AdminRoleDao{} + adminRole, err := adminRoleDao.GetAdminRoleFirstById(loginRoleId) + if err != nil || adminRole == nil { + return false, errors.New("非法操作") + } + + if adminRole.IsAdmin == 0 { + return false, errors.New("您当前为普通用户,无法添加用户") + } + + adminUserDao := dao.AdminUserDao{} + AdminDeptDao := dao.AdminDeptDao{} + AdminPostDao := dao.AdminPostDao{} + + // 检测账号名 + AdminUser, err := adminUserDao.GetAdminUserFirstByAccess(AddUserRequest.Access) + if AdminUser != nil { + return false, errors.New("账号名重复") + } + + // 检测手机号 + AdminUser, err = adminUserDao.GetAdminUserFirstByPhone(AddUserRequest.Phone) + if AdminUser != nil { + return false, errors.New("手机号重复") + } + + // 检测角色 + roleID, err := strconv.ParseInt(AddUserRequest.RoleID, 10, 64) + if err != nil { + return false, errors.New("角色错误") + } + + adminRole, err = adminRoleDao.GetAdminRoleFirstById(roleID) + if err != nil || adminRole == nil { + return false, errors.New("角色错误") + } + + // 检测部门 + deptID, err := strconv.ParseInt(AddUserRequest.DeptID, 10, 64) + if err != nil { + return false, errors.New("部门错误") + } + + adminDept, err := AdminDeptDao.GetAdminDeptFirstById(deptID) + if err != nil || adminDept == nil { + return false, errors.New("部门错误") + } + + // 检测岗位 + postID, err := strconv.ParseInt(AddUserRequest.PostID, 10, 64) + if err != nil { + return false, errors.New("岗位错误") + } + + adminPost, err := AdminPostDao.GetAdminPostFirstById(postID) + if err != nil || adminPost == nil { + return false, errors.New("岗位错误") + } + + // 处理密码 + salt := uuid.New().String() + password := md5.Sum([]byte(AddUserRequest.Password + salt)) + // 将哈希值转换为16进制字符串 + passwordString := hex.EncodeToString(password[:]) + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 新增用户 + AdminUserModel := &model.AdminUser{ + Access: AddUserRequest.Access, + Password: passwordString, + Salt: salt, + Status: AddUserRequest.Status, + IsDeleted: AddUserRequest.IsDeleted, + IsDisabled: AddUserRequest.IsDisabled, + NickName: AddUserRequest.NickName, + Phone: AddUserRequest.Phone, + Avatar: AddUserRequest.Avatar, + Sex: AddUserRequest.Sex, + Email: AddUserRequest.Email, + RoleID: roleID, + DeptID: deptID, + PostID: postID, + CreateBy: loginUserId, + } + + adminUser, _ := adminUserDao.AddAdminUser(tx, AdminUserModel) + if adminUser == nil { + tx.Rollback() + return false, errors.New("新增失败") + } + + tx.Commit() + + return true, nil +} + +// DeleteUser 删除用户-批量 +func (r *UserService) DeleteUser(c *gin.Context, DeleteUserRequest requests.DeleteUser) (bool, error) { + // 获取当前登陆用户数据 + userId := c.GetInt64("UserId") + if userId == 0 { + return false, errors.New("数据错误") + } + + AdminUserDao := dao.AdminUserDao{} + adminUser, err := AdminUserDao.GetAdminUserFirstById(userId) + if err != nil || adminUser == nil { + return false, errors.New("用户数据错误") + } + + // 获取当前登陆用户角色数据 + roleId := c.GetInt64("RoleId") + if roleId == 0 { + return false, errors.New("数据错误") + } + + AdminRoleDao := dao.AdminRoleDao{} + adminRole, err := AdminRoleDao.GetAdminRoleFirstById(roleId) + if err != nil || adminRole == nil { + return false, errors.New("非法操作") + } + + if adminRole.IsAdmin == 0 { + return false, errors.New("暂无权限,请联系管理员删除") + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + for _, v := range DeleteUserRequest.UserIds { + // 将字符串转换为int64类型 + v, err := strconv.ParseInt(v, 10, 64) + if err != nil { + return false, errors.New("菜单错误") + } + + if v == adminUser.UserID { + tx.Rollback() + return false, errors.New("非法操作,请勿删除自己") + } + + // 检测删除用户 + adminUser, err := AdminUserDao.GetAdminUserFirstById(userId) + if err != nil || adminUser == nil { + tx.Rollback() + return false, errors.New("删除失败") + } + + // 删除用户 + err = AdminUserDao.DeleteAdminUserById(tx, v) + if err != nil { + tx.Rollback() + return false, errors.New("删除失败") + } + } + + tx.Commit() + + return true, nil }