init...
This commit is contained in:
@@ -0,0 +1,334 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"cutego/core/api/v1/request"
|
||||
"cutego/core/api/v1/response"
|
||||
models2 "cutego/core/entity"
|
||||
service2 "cutego/core/service"
|
||||
"cutego/pkg/common"
|
||||
"cutego/pkg/excels"
|
||||
"cutego/pkg/page"
|
||||
"cutego/pkg/resp"
|
||||
"cutego/pkg/util"
|
||||
"github.com/druidcaesa/gotool"
|
||||
"github.com/gin-gonic/gin"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// UserApi 用户操作api
|
||||
type UserApi struct {
|
||||
userService service2.UserService
|
||||
roleService service2.RoleService
|
||||
postService service2.PostService
|
||||
}
|
||||
|
||||
// Find 查询用户列表
|
||||
func (a UserApi) Find(c *gin.Context) {
|
||||
query := request.UserQuery{}
|
||||
if c.BindQuery(&query) == nil {
|
||||
list, i := a.userService.FindList(query)
|
||||
success := resp.Success(page.Page{
|
||||
Size: query.PageSize,
|
||||
Total: i,
|
||||
List: list,
|
||||
}, "查询成功")
|
||||
c.JSON(http.StatusOK, success)
|
||||
} else {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "参数错误"))
|
||||
}
|
||||
}
|
||||
|
||||
// GetInfo 查询用户信息
|
||||
func (a UserApi) GetInfo(c *gin.Context) {
|
||||
param := c.Param("userId")
|
||||
r := new(response.UserInfo)
|
||||
// 查询角色
|
||||
roleAll, _ := a.roleService.FindAll(nil)
|
||||
// 岗位所有数据
|
||||
postAll := a.postService.FindAll()
|
||||
// 判断id传入的是否为空
|
||||
if !gotool.StrUtils.HasEmpty(param) {
|
||||
parseInt, err := strconv.ParseInt(param, 10, 64)
|
||||
if err == nil {
|
||||
// 判断当前登录用户是否是admin
|
||||
m := new(models2.SysUser)
|
||||
if m.IsAdmin(parseInt) {
|
||||
r.Roles = roleAll
|
||||
} else {
|
||||
roles := make([]*models2.SysRole, 0)
|
||||
for _, role := range roleAll {
|
||||
if role.RoleId != 1 {
|
||||
roles = append(roles, role)
|
||||
}
|
||||
}
|
||||
r.Roles = roles
|
||||
}
|
||||
// 根据id获取用户数据
|
||||
r.User = a.userService.GetUserById(parseInt)
|
||||
// 根据用户ID查询岗位id集合
|
||||
r.PostIds = a.postService.FindPostListByUserId(parseInt)
|
||||
// 根据用户ID查询角色id集合
|
||||
r.RoleIds = a.roleService.FindRoleListByUserId(parseInt)
|
||||
}
|
||||
} else {
|
||||
//id为空不取管理员角色
|
||||
roles := make([]*models2.SysRole, 0)
|
||||
for _, role := range roleAll {
|
||||
if role.RoleId != 1 {
|
||||
roles = append(roles, role)
|
||||
}
|
||||
}
|
||||
r.Roles = roles
|
||||
}
|
||||
r.Posts = postAll
|
||||
c.JSON(http.StatusOK, resp.Success(r, "操作成功"))
|
||||
}
|
||||
|
||||
// AuthRole 根据用户编号获取授权角色
|
||||
func (a UserApi) AuthRole(c *gin.Context) {
|
||||
m := make(map[string]interface{})
|
||||
userId := c.Param("userId")
|
||||
parseInt, err := strconv.ParseInt(userId, 10, 64)
|
||||
if err != nil {
|
||||
common.ErrorLog(err)
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp(err))
|
||||
}
|
||||
user := a.userService.GetUserById(parseInt)
|
||||
// 查询角色
|
||||
roles := a.roleService.GetRoleListByUserId(parseInt)
|
||||
flag := models2.SysUser{}.IsAdmin(parseInt)
|
||||
if flag {
|
||||
m["roles"] = roles
|
||||
} else {
|
||||
roleList := make([]models2.SysRole, 0)
|
||||
for _, role := range *roles {
|
||||
if role.RoleId != 1 {
|
||||
roleList = append(roleList, role)
|
||||
}
|
||||
}
|
||||
m["roles"] = roleList
|
||||
}
|
||||
m["user"] = user
|
||||
c.JSON(http.StatusOK, resp.Success(m))
|
||||
}
|
||||
|
||||
// Add 新增用户
|
||||
func (a UserApi) Add(c *gin.Context) {
|
||||
userBody := request.UserBody{}
|
||||
if c.BindJSON(&userBody) == nil {
|
||||
// 根据用户名查询用户
|
||||
user := a.userService.GetUserByUserName(userBody.UserName)
|
||||
if user != nil {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 登录账号已存在"))
|
||||
return
|
||||
} else if a.userService.CheckPhoneNumUnique(userBody) != nil {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 手机号码已存在"))
|
||||
return
|
||||
} else if a.userService.CheckEmailUnique(userBody) != nil {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 邮箱已存在"))
|
||||
return
|
||||
}
|
||||
// 进行密码加密
|
||||
userBody.Password = gotool.BcryptUtils.Generate(userBody.Password)
|
||||
// 添加用户
|
||||
if a.userService.Save(userBody) {
|
||||
c.JSON(http.StatusOK, resp.Success(nil))
|
||||
} else {
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp("保存失败"))
|
||||
}
|
||||
} else {
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数错误"))
|
||||
}
|
||||
}
|
||||
|
||||
// Edit 修改用户
|
||||
func (a UserApi) Edit(c *gin.Context) {
|
||||
userBody := request.UserBody{}
|
||||
if c.BindJSON(&userBody) == nil {
|
||||
if a.userService.CheckPhoneNumUnique(userBody) != nil {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 手机号码已存在"))
|
||||
return
|
||||
} else if a.userService.CheckEmailUnique(userBody) != nil {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "失败, 邮箱已存在"))
|
||||
return
|
||||
}
|
||||
// 进行用户修改操作
|
||||
if a.userService.Edit(userBody) > 0 {
|
||||
resp.OK(c)
|
||||
return
|
||||
} else {
|
||||
resp.Error(c)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
resp.ParamError(c)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Remove 删除用户
|
||||
func (a UserApi) Remove(c *gin.Context) {
|
||||
param := c.Param("userId")
|
||||
userId, err := strconv.ParseInt(param, 10, 64)
|
||||
if err != nil {
|
||||
common.ErrorLog(err)
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数错误"))
|
||||
return
|
||||
}
|
||||
if a.userService.Remove(userId) > 0 {
|
||||
c.JSON(http.StatusOK, resp.Success(nil))
|
||||
return
|
||||
} else {
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp("删除失败"))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// ResetPwd 修改重置密码
|
||||
func (a UserApi) ResetPwd(c *gin.Context) {
|
||||
userBody := request.UserBody{}
|
||||
if c.BindJSON(&userBody) == nil {
|
||||
if a.userService.CheckUserAllowed(userBody) {
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp("不允许操作超级管理员用户"))
|
||||
return
|
||||
}
|
||||
userBody.Password = gotool.BcryptUtils.Generate(userBody.Password)
|
||||
if a.userService.ResetPwd(userBody) > 0 {
|
||||
c.JSON(http.StatusOK, resp.Success(nil))
|
||||
} else {
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp("重置失败"))
|
||||
}
|
||||
} else {
|
||||
c.JSON(http.StatusInternalServerError, resp.ErrorResp("参数错误"))
|
||||
}
|
||||
}
|
||||
|
||||
// Export 导出excel
|
||||
func (a UserApi) Export(c *gin.Context) {
|
||||
query := request.UserQuery{}
|
||||
if c.BindQuery(&query) == nil {
|
||||
items := make([]interface{}, 0)
|
||||
list, _ := a.userService.FindList(query)
|
||||
for _, userResponse := range list {
|
||||
items = append(items, *userResponse)
|
||||
}
|
||||
_, file := excels.ExportExcel(items, "用户表")
|
||||
c.Header("Content-Type", "application/octet-stream")
|
||||
c.Header("Content-Disposition", "attachment; filename="+gotool.IdUtils.IdUUIDToRan(false)+".xlsx")
|
||||
c.Header("Content-Transfer-Encoding", "binary")
|
||||
c.Header("FileName", gotool.IdUtils.IdUUIDToRan(false)+".xlsx")
|
||||
file.Write(c.Writer)
|
||||
} else {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "参数错误"))
|
||||
}
|
||||
}
|
||||
|
||||
// Profile 查询个人信息
|
||||
func (a UserApi) Profile(c *gin.Context) {
|
||||
m := make(map[string]interface{})
|
||||
info := util.GetUserInfo(c)
|
||||
u := a.userService.GetUserById(info.UserId)
|
||||
m["user"] = u
|
||||
// 查询所属角色组
|
||||
m["roleGroup"] = a.roleService.GetRolesByUserName(info.UserName)
|
||||
m["postGroup"] = a.postService.FindPostByUserName(info.UserName)
|
||||
resp.OK(c, m)
|
||||
}
|
||||
|
||||
// UpdateProfile 修改个人数据
|
||||
func (a UserApi) UpdateProfile(c *gin.Context) {
|
||||
user := request.UserBody{}
|
||||
if c.Bind(&user) != nil {
|
||||
resp.ParamError(c)
|
||||
return
|
||||
}
|
||||
if a.userService.CheckEmailUnique(user) != nil {
|
||||
resp.Error(c, "修改用户'"+user.UserName+"'失败, 邮箱账号已存在")
|
||||
return
|
||||
}
|
||||
if a.userService.CheckPhoneNumUnique(user) != nil {
|
||||
resp.Error(c, "修改用户'"+user.UserName+"'失败, 手机号已存在")
|
||||
return
|
||||
}
|
||||
if a.userService.EditProfile(user) > 0 {
|
||||
resp.OK(c)
|
||||
} else {
|
||||
resp.Error(c)
|
||||
}
|
||||
}
|
||||
|
||||
// UpdatePwd 修改个人密码
|
||||
func (a UserApi) UpdatePwd(c *gin.Context) {
|
||||
oldPassword := c.Query("oldPassword")
|
||||
newPassword := c.Query("newPassword")
|
||||
info := util.GetUserInfo(c)
|
||||
name := a.userService.GetUserByUserName(info.UserName)
|
||||
hash := gotool.BcryptUtils.CompareHash(name.Password, oldPassword)
|
||||
if !hash {
|
||||
resp.Error(c, "修改密码失败, 旧密码错误")
|
||||
return
|
||||
}
|
||||
generate := gotool.BcryptUtils.Generate(oldPassword)
|
||||
compareHash := gotool.BcryptUtils.CompareHash(generate, newPassword)
|
||||
if compareHash {
|
||||
resp.Error(c, "新密码不能与旧密码相同")
|
||||
return
|
||||
}
|
||||
pwd := a.userService.EditPwd(info.UserId, gotool.BcryptUtils.Generate(newPassword))
|
||||
if pwd {
|
||||
resp.OK(c)
|
||||
} else {
|
||||
resp.Error(c)
|
||||
}
|
||||
}
|
||||
|
||||
// Avatar 修改头像
|
||||
func (a UserApi) Avatar(c *gin.Context) {
|
||||
dirPath := common.GetDirPath("avatar")
|
||||
file, _, err := c.Request.FormFile("avatarFile")
|
||||
fileName := gotool.IdUtils.IdUUIDToRan(true) + ".jpg"
|
||||
filePath := dirPath + fileName
|
||||
fileAppend, err := gotool.FileUtils.OpenFileAppend(filePath)
|
||||
defer fileAppend.Close()
|
||||
if err != nil {
|
||||
common.ErrorLog(err)
|
||||
resp.Error(c)
|
||||
return
|
||||
}
|
||||
_, err = io.Copy(fileAppend, file)
|
||||
if err != nil {
|
||||
common.ErrorLog(err)
|
||||
resp.Error(c)
|
||||
return
|
||||
}
|
||||
info := util.GetUserInfo(c)
|
||||
info.Avatar = filePath
|
||||
avatar := a.userService.EditAvatar(info)
|
||||
if avatar {
|
||||
m := make(map[string]interface{})
|
||||
m["imgUrl"] = filePath
|
||||
resp.OK(c, m)
|
||||
} else {
|
||||
resp.Error(c)
|
||||
}
|
||||
}
|
||||
|
||||
// 修改可用状态
|
||||
func (a UserApi) ChangeStatus(c *gin.Context) {
|
||||
user := request.UserBody{}
|
||||
if c.Bind(&user) != nil {
|
||||
resp.ParamError(c)
|
||||
return
|
||||
}
|
||||
if user.UserId == 1 && user.Status == "1" {
|
||||
c.JSON(http.StatusOK, resp.ErrorResp(http.StatusInternalServerError, "不可禁用admin账号"))
|
||||
return
|
||||
}
|
||||
if a.userService.EditStatus(user) {
|
||||
resp.OK(c)
|
||||
} else {
|
||||
resp.Error(c)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user