yxh 4 лет назад
Родитель
Сommit
250426b6a5

+ 10 - 0
api/v1/system/sys_dept.go

@@ -9,6 +9,7 @@ package system
 
 import (
 	"github.com/gogf/gf/v2/frame/g"
+	"github.com/tiger1103/gfast/v3/internal/app/system/model"
 	"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
 )
 
@@ -59,3 +60,12 @@ type DeptDeleteReq struct {
 
 type DeptDeleteRes struct {
 }
+
+type DeptTreeSelectReq struct {
+	g.Meta `path:"/dept/treeSelect" tags:"部门管理" method:"get" summary:"获取部门树形菜单"`
+}
+
+type DeptTreeSelectRes struct {
+	g.Meta `mime:"application/json"`
+	Deps   []*model.SysDeptTreeRes `json:"deps"`
+}

+ 17 - 0
api/v1/system/sys_user.go

@@ -2,6 +2,7 @@ package system
 
 import (
 	"github.com/gogf/gf/v2/frame/g"
+	commonApi "github.com/tiger1103/gfast/v3/api/v1/common"
 	"github.com/tiger1103/gfast/v3/internal/app/system/model"
 )
 
@@ -31,3 +32,19 @@ type UserMenusRes struct {
 	MenuList    []*model.UserMenus `json:"menuList"`
 	Permissions []string           `json:"permissions"`
 }
+
+// UserSearchReq 用户搜索请求参数
+type UserSearchReq struct {
+	g.Meta   `path:"/user/list" tags:"用户管理" method:"get" summary:"用户列表"`
+	DeptIds  []int64 //所属部门id数据
+	Mobile   string  `p:"mobile"`
+	Status   string  `p:"status"`
+	KeyWords string  `p:"userName"`
+	commonApi.PageReq
+}
+
+type UserSearchRes struct {
+	g.Meta   `mime:"application/json"`
+	UserList []*model.SysUserRoleDeptRes `json:"userList"`
+	commonApi.ListRes
+}

+ 16 - 0
internal/app/system/controller/sys_dept.go

@@ -10,6 +10,7 @@ package controller
 import (
 	"context"
 	"github.com/tiger1103/gfast/v3/api/v1/system"
+	"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
 	"github.com/tiger1103/gfast/v3/internal/app/system/service"
 )
 
@@ -38,7 +39,22 @@ func (c *sysDeptController) Edit(ctx context.Context, req *system.DeptEditReq) (
 	return
 }
 
+// Delete 删除部门
 func (c *sysDeptController) Delete(ctx context.Context, req *system.DeptDeleteReq) (res *system.DeptDeleteRes, err error) {
 	err = service.Dept().Delete(ctx, req.Id)
 	return
 }
+
+// TreeSelect 获取部门数据结构数据
+func (c *sysDeptController) TreeSelect(ctx context.Context, req *system.DeptTreeSelectReq) (res *system.DeptTreeSelectRes, err error) {
+	var deptList []*entity.SysDept
+	deptList, err = service.Dept().GetList(ctx, &system.DeptSearchReq{
+		Status: "1", //正常状态数据
+	})
+	if err != nil {
+		return
+	}
+	res = new(system.DeptTreeSelectRes)
+	res.Deps = service.Dept().GetListTree(0, deptList)
+	return
+}

+ 16 - 0
internal/app/system/controller/sys_user.go

@@ -10,6 +10,7 @@ import (
 	"github.com/tiger1103/gfast/v3/api/v1/system"
 	commonService "github.com/tiger1103/gfast/v3/internal/app/common/service"
 	"github.com/tiger1103/gfast/v3/internal/app/system/model"
+	"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
 	"github.com/tiger1103/gfast/v3/internal/app/system/service"
 	"github.com/tiger1103/gfast/v3/library/libUtils"
 )
@@ -102,3 +103,18 @@ func (c *userController) GetUserMenus(ctx context.Context, req *system.UserMenus
 	}
 	return
 }
+
+// List 用户列表
+func (c *userController) List(ctx context.Context, req *system.UserSearchReq) (res *system.UserSearchRes, err error) {
+	var (
+		total    int
+		userList []*entity.SysUser
+	)
+	total, userList, err = service.User().List(ctx, req)
+	if err != nil || total == 0 {
+		return
+	}
+	res = new(system.UserSearchRes)
+	res.UserList, err = service.User().GetUsersRoleDept(ctx, userList)
+	return
+}

+ 15 - 0
internal/app/system/model/sys_dept.go

@@ -0,0 +1,15 @@
+/*
+* @desc:部门model
+* @company:云南奇讯科技有限公司
+* @Author: yixiaohu<yxh669@qq.com>
+* @Date:   2022/4/11 9:07
+ */
+
+package model
+
+import "github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
+
+type SysDeptTreeRes struct {
+	*entity.SysDept
+	Children []*SysDeptTreeRes `json:"children"`
+}

+ 16 - 0
internal/app/system/model/sys_user.go

@@ -7,6 +7,8 @@
 
 package model
 
+import "github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
+
 // LoginUserRes 登录返回
 type LoginUserRes struct {
 	Id           uint64 `orm:"id,primary"       json:"id"`           //
@@ -19,3 +21,17 @@ type LoginUserRes struct {
 	Avatar       string `orm:"avatar" json:"avatar"`                 //头像
 	DeptId       uint64 `orm:"dept_id"       json:"deptId"`          //部门id
 }
+
+// SysUserRoleDeptRes 带有部门、角色、岗位信息的用户数据
+type SysUserRoleDeptRes struct {
+	*entity.SysUser
+	Dept     *entity.SysDept `json:"dept"`
+	RoleInfo []*struct {
+		RoleId uint   `json:"roleId"`
+		Name   string `json:"name"`
+	} `json:"roleInfo"`
+	Post []*struct {
+		PostId   int64  `json:"postId"`
+		PostName string `json:"postName"`
+	} `json:"post"`
+}

+ 20 - 0
internal/app/system/service/sys_dept.go

@@ -15,6 +15,7 @@ import (
 	"github.com/tiger1103/gfast/v3/api/v1/system"
 	commonService "github.com/tiger1103/gfast/v3/internal/app/common/service"
 	"github.com/tiger1103/gfast/v3/internal/app/system/consts"
+	"github.com/tiger1103/gfast/v3/internal/app/system/model"
 	"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
 	"github.com/tiger1103/gfast/v3/internal/app/system/service/internal/dao"
 	"github.com/tiger1103/gfast/v3/internal/app/system/service/internal/do"
@@ -27,6 +28,7 @@ type IDept interface {
 	Edit(ctx context.Context, req *system.DeptEditReq) (err error)
 	GetFromCache(ctx context.Context) (list []*entity.SysDept, err error)
 	Delete(ctx context.Context, id int64) (err error)
+	GetListTree(pid int64, list []*entity.SysDept) (deptTree []*model.SysDeptTreeRes)
 }
 
 var deptService = deptImpl{}
@@ -147,3 +149,21 @@ func (s *deptImpl) FindSonByParentId(deptList []*entity.SysDept, deptId int64) [
 	}
 	return children
 }
+
+// GetListTree 部门树形菜单
+func (s *deptImpl) GetListTree(pid int64, list []*entity.SysDept) (deptTree []*model.SysDeptTreeRes) {
+	deptTree = make([]*model.SysDeptTreeRes, 0, len(list))
+	for _, v := range list {
+		if v.ParentId == pid {
+			t := &model.SysDeptTreeRes{
+				SysDept: v,
+			}
+			child := s.GetListTree(v.DeptId, list)
+			if len(child) > 0 {
+				t.Children = child
+			}
+			deptTree = append(deptTree, t)
+		}
+	}
+	return
+}

+ 1 - 0
internal/app/system/service/sys_post.go

@@ -58,6 +58,7 @@ func (s *postImpl) List(ctx context.Context, req *system.PostSearchReq) (res *sy
 		if req.PageSize == 0 {
 			req.PageSize = consts.PageSize
 		}
+		res.CurrentPage = req.PageNum
 		err = m.Page(req.PageNum, req.PageSize).Order("post_sort asc,post_id asc").Scan(&res.PostList)
 		liberr.ErrIsNil(ctx, err, "获取岗位失败")
 	})

+ 73 - 0
internal/app/system/service/sys_user.go

@@ -19,6 +19,7 @@ import (
 	"github.com/mssola/user_agent"
 	"github.com/tiger1103/gfast/v3/api/v1/system"
 	"github.com/tiger1103/gfast/v3/internal/app/common/service"
+	"github.com/tiger1103/gfast/v3/internal/app/system/consts"
 	"github.com/tiger1103/gfast/v3/internal/app/system/model"
 	"github.com/tiger1103/gfast/v3/internal/app/system/model/entity"
 	"github.com/tiger1103/gfast/v3/internal/app/system/service/internal/dao"
@@ -33,6 +34,8 @@ type IUser interface {
 	UpdateLoginInfo(ctx context.Context, id uint64, ip string) (err error)
 	NotCheckAuthAdminIds(ctx context.Context) *gset.Set
 	GetAdminRules(ctx context.Context, userId uint64) (menuList []*model.UserMenus, permissions []string, err error)
+	List(ctx context.Context, req *system.UserSearchReq) (total int, userList []*entity.SysUser, err error)
+	GetUsersRoleDept(ctx context.Context, userList []*entity.SysUser) (users []*model.SysUserRoleDeptRes, err error)
 }
 
 type userImpl struct{}
@@ -300,3 +303,73 @@ func (s *userImpl) GetPermissions(ctx context.Context, roleIds []uint) (userButt
 	})
 	return
 }
+
+// List 用户列表
+func (s *userImpl) List(ctx context.Context, req *system.UserSearchReq) (total int, userList []*entity.SysUser, err error) {
+	err = g.Try(func() {
+		m := dao.SysUser.Ctx(ctx)
+		if req.KeyWords != "" {
+			keyWords := "%" + req.KeyWords + "%"
+			m = m.Where("user_name like ? or  user_nickname like ?", keyWords, keyWords)
+		}
+		if len(req.DeptIds) != 0 {
+			m = m.Where("dept_id in (?)", req.DeptIds)
+		}
+		if req.Status != "" {
+			m = m.Where("user_status", gconv.Int(req.Status))
+		}
+		if req.Mobile != "" {
+			m = m.Where("mobile like ?", "%"+req.Mobile+"%")
+		}
+		if req.BeginTime != "" {
+			m = m.Where("created_at >=?", req.BeginTime)
+		}
+		if req.EndTime != "" {
+			m = m.Where("created_at <=?", req.EndTime)
+		}
+		if req.PageSize == 0 {
+			req.PageSize = consts.PageSize
+		}
+		if req.PageNum == 0 {
+			req.PageNum = 1
+		}
+		total, err = m.Count()
+		liberr.ErrIsNil(ctx, err, "获取用户数据失败")
+		err = m.FieldsEx(dao.SysUser.Columns().UserPassword, dao.SysUser.Columns().UserSalt).
+			Page(req.PageNum, req.PageSize).Order("id asc").Scan(&userList)
+		liberr.ErrIsNil(ctx, err, "获取用户列表失败")
+	})
+	return
+}
+
+// GetUsersRoleDept 获取多个用户角色 部门信息
+func (s *userImpl) GetUsersRoleDept(ctx context.Context, userList []*entity.SysUser) (users []*model.SysUserRoleDeptRes, err error) {
+	err = g.Try(func() {
+		allRoles, e := Role().GetRoleList(ctx)
+		liberr.ErrIsNil(ctx, e)
+		depts, e := Dept().GetFromCache(ctx)
+		liberr.ErrIsNil(ctx, e)
+		users = make([]*model.SysUserRoleDeptRes, len(userList))
+		for k, u := range userList {
+			var dept *entity.SysDept
+			users[k] = &model.SysUserRoleDeptRes{
+				SysUser: u,
+			}
+			for _, d := range depts {
+				if u.DeptId == uint64(d.DeptId) {
+					dept = d
+				}
+			}
+			users[k].Dept = dept
+			roles, e := s.GetAdminRole(ctx, u.Id, allRoles)
+			liberr.ErrIsNil(ctx, e)
+			for _, r := range roles {
+				users[k].RoleInfo = append(users[k].RoleInfo, &struct {
+					RoleId uint   `json:"roleId"`
+					Name   string `json:"name"`
+				}{RoleId: r.Id, Name: r.Name})
+			}
+		}
+	})
+	return
+}