diff --git a/api/controller/user.go b/api/controller/user.go index 83e030e..b099b1c 100644 --- a/api/controller/user.go +++ b/api/controller/user.go @@ -133,3 +133,40 @@ func (r *User) DeleteUser(c *gin.Context) { } responses.Ok(c) } + +// PutUser 修改用户 +func (r *User) PutUser(c *gin.Context) { + UserRequest := requests.UserRequest{} + if err := c.ShouldBind(&UserRequest.PutUser); err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + + // 参数验证 + if err := global.Validate.Struct(UserRequest.PutUser); err != nil { + responses.FailWithMessage(utils.Translate(err), c) + return + } + + 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 + } + + // 业务处理 + userService := service.UserService{} + _, err = userService.PutUser(c, userId, UserRequest.PutUser) + if err != nil { + responses.FailWithMessage(err.Error(), c) + return + } + responses.Ok(c) +} diff --git a/api/requests/user.go b/api/requests/user.go index 2ee6e8b..4abc40a 100644 --- a/api/requests/user.go +++ b/api/requests/user.go @@ -4,6 +4,7 @@ type UserRequest struct { GetUserPage // 获取用户列表-分页 AddUser // 新增用户 DeleteUser // 删除用户-批量 + PutUser // 修改用户 } // GetUserPage 获取用户列表-分页 @@ -40,3 +41,18 @@ type AddUser struct { type DeleteUser struct { UserIds []string `json:"user_ids" form:"user_ids" validate:"required" label:"用户id"` } + +// PutUser 修改用户 +type PutUser struct { + Access string `json:"access" form:"access" validate:"required" label:"账号"` + 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:"岗位"` +} diff --git a/api/router/router.go b/api/router/router.go index 7cb2316..382c689 100644 --- a/api/router/router.go +++ b/api/router/router.go @@ -127,5 +127,8 @@ func privateRouter(r *gin.Engine, api controller.Api) { // 删除用户-批量 userGroup.DELETE("", api.User.DeleteUser) + + // 修改用户 + userGroup.PUT("/:user_id", api.User.PutUser) } } diff --git a/api/service/user.go b/api/service/user.go index 86a4d93..de23226 100644 --- a/api/service/user.go +++ b/api/service/user.go @@ -202,3 +202,137 @@ func (r *UserService) DeleteUser(c *gin.Context, DeleteUserRequest requests.Dele return true, nil } + +// PutUser 修改用户 +func (r *UserService) PutUser(c *gin.Context, requestUserId int64, putUserRequest requests.PutUser) (bool, error) { + // 获取当前登陆用户数据 + loginUserId := c.GetInt64("UserId") + if loginUserId == 0 { + return false, errors.New("数据错误") + } + + adminUserDao := dao.AdminUserDao{} + loginAdminUser, err := adminUserDao.GetAdminUserFirstById(loginUserId) + if err != nil || loginAdminUser == nil { + return false, errors.New("用户数据错误") + } + + if loginUserId == requestUserId && putUserRequest.IsDisabled == 1 { + return false, errors.New("不可把自己置为禁用") + } + + if loginUserId == requestUserId && putUserRequest.IsDeleted == 1 { + return false, errors.New("不可把自己置为删除") + } + + // 获取需修改用户数据 + adminUser, err := adminUserDao.GetAdminUserFirstById(requestUserId) + if err != nil || adminUser == nil { + 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 && loginUserId != requestUserId { + return false, errors.New("普通用户只可修改自己的用户数据") + } + + if putUserRequest.Access != adminUser.Access { + // 检测账号名 + res, err := adminUserDao.GetAdminUserFirstByAccess(putUserRequest.Access) + if res != nil || err != nil { + return false, errors.New("账号名重复") + } + } + + if putUserRequest.Phone != adminUser.Phone { + // 检测手机号 + res, err := adminUserDao.GetAdminUserFirstByPhone(putUserRequest.Phone) + if res != nil || err != nil { + return false, errors.New("手机号重复") + } + } + + // 检测角色 + roleID, err := strconv.ParseInt(putUserRequest.RoleID, 10, 64) + if err != nil { + return false, errors.New("角色错误") + } + + if roleID != adminUser.RoleID { + res, err := adminRoleDao.GetAdminRoleFirstById(roleID) + if err != nil || res == nil { + return false, errors.New("角色错误") + } + } + + // 检测部门 + deptID, err := strconv.ParseInt(putUserRequest.DeptID, 10, 64) + if err != nil { + return false, errors.New("部门错误") + } + + if deptID != adminUser.DeptID { + adminDeptDao := dao.AdminDeptDao{} + res, err := adminDeptDao.GetAdminDeptFirstById(deptID) + if err != nil || res == nil { + return false, errors.New("部门错误") + } + } + + // 检测岗位 + postID, err := strconv.ParseInt(putUserRequest.PostID, 10, 64) + if err != nil { + return false, errors.New("岗位错误") + } + + if postID != adminUser.PostID { + adminPostDao := dao.AdminPostDao{} + res, err := adminPostDao.GetAdminPostFirstById(postID) + if err != nil || res == nil { + return false, errors.New("岗位错误") + } + } + + // 开始事务 + tx := global.Db.Begin() + defer func() { + if r := recover(); r != nil { + tx.Rollback() + } + }() + + // 修改角色 + data := make(map[string]interface{}) + data["access"] = putUserRequest.Access + data["is_deleted"] = putUserRequest.IsDeleted + data["is_disabled"] = putUserRequest.IsDisabled + data["nick_name"] = putUserRequest.NickName + data["phone"] = putUserRequest.Phone + data["avatar"] = putUserRequest.Avatar + data["sex"] = putUserRequest.Sex + data["email"] = putUserRequest.Email + data["role_id"] = roleID + data["dept_id"] = deptID + data["post_id"] = postID + data["update_by"] = loginUserId + err = adminUserDao.EditAdminUserById(tx, requestUserId, data) + if err != nil { + tx.Rollback() + return false, errors.New("修改失败") + } + + tx.Commit() + + return true, nil +}