Merge branch 'dev' of http://gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss into dev
正在显示
8 个修改的文件
包含
58 行增加
和
4 行删除
| @@ -60,6 +60,7 @@ type ( | @@ -60,6 +60,7 @@ type ( | ||
| 60 | Page int `json:"page"` | 60 | Page int `json:"page"` |
| 61 | Size int `json:"size"` | 61 | Size int `json:"size"` |
| 62 | IncludeRootCompany bool `json:"includeRootCompany,optional"` // 包含公司(把公司当作部门作为顶级节点 部门ID:0) | 62 | IncludeRootCompany bool `json:"includeRootCompany,optional"` // 包含公司(把公司当作部门作为顶级节点 部门ID:0) |
| 63 | + IncludeDefaultDepartment bool `json:"includeDefaultDepartment,optional"` // 包含默认分组 | ||
| 63 | } | 64 | } |
| 64 | 65 | ||
| 65 | DepartmentListResponse { | 66 | DepartmentListResponse { |
| @@ -286,6 +286,7 @@ type( | @@ -286,6 +286,7 @@ type( | ||
| 286 | ParentId int64 `json:"parentId"` // 父级ID | 286 | ParentId int64 `json:"parentId"` // 父级ID |
| 287 | Name string `json:"name"` // 部门名称 | 287 | Name string `json:"name"` // 部门名称 |
| 288 | UserIds []int64 `json:"userIds"` // 部门下的用户 | 288 | UserIds []int64 `json:"userIds"` // 部门下的用户 |
| 289 | + TotalUser int `json:"totalUser"` // 累计用户 | ||
| 289 | } | 290 | } |
| 290 | UserSearchRequest{ | 291 | UserSearchRequest{ |
| 291 | Page int `json:"page,optional"` | 292 | Page int `json:"page,optional"` |
| @@ -478,7 +479,7 @@ type( | @@ -478,7 +479,7 @@ type( | ||
| 478 | Phone string `json:"phone,optional"` // 手机号 唯一 | 479 | Phone string `json:"phone,optional"` // 手机号 唯一 |
| 479 | Position string `json:"position,optional"` // 职位 | 480 | Position string `json:"position,optional"` // 职位 |
| 480 | Enable int `json:"enable,optional"` // 启用状态 1:启用 2:禁用 | 481 | Enable int `json:"enable,optional"` // 启用状态 1:启用 2:禁用 |
| 481 | - DepartmentId int64 `json:"departmentId,optional"` // 所属部门 | 482 | + DepartmentId *int64 `json:"departmentId,optional"` // 所属部门 |
| 482 | } | 483 | } |
| 483 | SystemUserSearchResponse{ | 484 | SystemUserSearchResponse{ |
| 484 | List []SystemUser `json:"list"` | 485 | List []SystemUser `json:"list"` |
| @@ -2,6 +2,7 @@ package department | @@ -2,6 +2,7 @@ package department | ||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "context" | 4 | "context" |
| 5 | + "github.com/samber/lo" | ||
| 5 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | 6 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" |
| 6 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" |
| 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | 8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" |
| @@ -39,6 +40,28 @@ func (l *SystemListLogic) SystemList(req *types.DepartmentListRequest) (resp *ty | @@ -39,6 +40,28 @@ func (l *SystemListLogic) SystemList(req *types.DepartmentListRequest) (resp *ty | ||
| 39 | Total: total, | 40 | Total: total, |
| 40 | List: make([]types.Department, 0), | 41 | List: make([]types.Department, 0), |
| 41 | } | 42 | } |
| 43 | + | ||
| 44 | + _, users, _ := l.svcCtx.UserRepository.Find(l.ctx, conn, domain.NewQueryOptions(). | ||
| 45 | + MustWithKV("companyId", userToken.CompanyId). | ||
| 46 | + WithKV("auditStatus", []int{domain.UserAuditStatusPassed})) | ||
| 47 | + var counterByDepartment = make(map[int64]int) | ||
| 48 | + lo.ForEach(users, func(item *domain.User, index int) { | ||
| 49 | + if len(item.Departments) == 0 { | ||
| 50 | + if _, ok := counterByDepartment[domain.DefaultDepartmentId]; ok { | ||
| 51 | + counterByDepartment[domain.DefaultDepartmentId]++ | ||
| 52 | + } else { | ||
| 53 | + counterByDepartment[domain.DefaultDepartmentId] = 1 | ||
| 54 | + } | ||
| 55 | + return | ||
| 56 | + } | ||
| 57 | + for _, dep := range item.Departments { | ||
| 58 | + if _, ok := counterByDepartment[dep]; ok { | ||
| 59 | + counterByDepartment[dep]++ | ||
| 60 | + } else { | ||
| 61 | + counterByDepartment[dep] = 1 | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + }) | ||
| 42 | if req.IncludeRootCompany { | 65 | if req.IncludeRootCompany { |
| 43 | company, _ := l.svcCtx.CompanyRepository.FindOne(l.ctx, conn, userToken.CompanyId) | 66 | company, _ := l.svcCtx.CompanyRepository.FindOne(l.ctx, conn, userToken.CompanyId) |
| 44 | if company != nil { | 67 | if company != nil { |
| @@ -47,9 +70,23 @@ func (l *SystemListLogic) SystemList(req *types.DepartmentListRequest) (resp *ty | @@ -47,9 +70,23 @@ func (l *SystemListLogic) SystemList(req *types.DepartmentListRequest) (resp *ty | ||
| 47 | CompanyId: company.Id, | 70 | CompanyId: company.Id, |
| 48 | ParentId: -1, | 71 | ParentId: -1, |
| 49 | Name: company.Name, | 72 | Name: company.Name, |
| 73 | + TotalUser: len(users), | ||
| 50 | }) | 74 | }) |
| 51 | } | 75 | } |
| 76 | + if req.IncludeDefaultDepartment { | ||
| 77 | + to := types.Department{ | ||
| 78 | + Id: domain.DefaultDepartmentId, | ||
| 79 | + CompanyId: company.Id, | ||
| 80 | + ParentId: 0, | ||
| 81 | + Name: "默认分组", | ||
| 82 | + } | ||
| 83 | + if v, ok := counterByDepartment[domain.DefaultDepartmentId]; ok { | ||
| 84 | + to.TotalUser = v | ||
| 85 | + } | ||
| 86 | + resp.List = append(resp.List, to) | ||
| 52 | } | 87 | } |
| 88 | + } | ||
| 89 | + | ||
| 53 | for _, item := range list { | 90 | for _, item := range list { |
| 54 | to := types.Department{ | 91 | to := types.Department{ |
| 55 | Id: item.Id, | 92 | Id: item.Id, |
| @@ -57,6 +94,9 @@ func (l *SystemListLogic) SystemList(req *types.DepartmentListRequest) (resp *ty | @@ -57,6 +94,9 @@ func (l *SystemListLogic) SystemList(req *types.DepartmentListRequest) (resp *ty | ||
| 57 | ParentId: item.ParentId, | 94 | ParentId: item.ParentId, |
| 58 | Name: item.Name, | 95 | Name: item.Name, |
| 59 | } | 96 | } |
| 97 | + if v, ok := counterByDepartment[item.Id]; ok { | ||
| 98 | + to.TotalUser = v | ||
| 99 | + } | ||
| 60 | resp.List = append(resp.List, to) | 100 | resp.List = append(resp.List, to) |
| 61 | } | 101 | } |
| 62 | return resp, nil | 102 | return resp, nil |
| @@ -61,7 +61,7 @@ func (l *MiniUserDepartmentUsersLogic) MiniUserDepartmentUsers(req *types.MiniUs | @@ -61,7 +61,7 @@ func (l *MiniUserDepartmentUsersLogic) MiniUserDepartmentUsers(req *types.MiniUs | ||
| 61 | groupUserSet := collection.NewSet() | 61 | groupUserSet := collection.NewSet() |
| 62 | for _, user := range users { | 62 | for _, user := range users { |
| 63 | // 未分配部门的归类到公司底下 | 63 | // 未分配部门的归类到公司底下 |
| 64 | - if len(user.Departments) == 0 { | 64 | + if item.Id == 0 && len(user.Departments) == 0 { |
| 65 | if !groupUserSet.Contains(user.Id) { | 65 | if !groupUserSet.Contains(user.Id) { |
| 66 | group.Users = append(group.Users, &domain.User{ | 66 | group.Users = append(group.Users, &domain.User{ |
| 67 | Id: user.Id, | 67 | Id: user.Id, |
| @@ -41,8 +41,11 @@ func (l *SystemUserSearchLogic) SystemUserSearch(req *types.SystemUserSearchRequ | @@ -41,8 +41,11 @@ func (l *SystemUserSearchLogic) SystemUserSearch(req *types.SystemUserSearchRequ | ||
| 41 | WithKV("likePhone", req.Phone). | 41 | WithKV("likePhone", req.Phone). |
| 42 | WithKV("position", req.Position). | 42 | WithKV("position", req.Position). |
| 43 | WithKV("enable", req.Enable). | 43 | WithKV("enable", req.Enable). |
| 44 | - WithKV("departmentId", req.DepartmentId). | ||
| 45 | WithKV("auditStatus", []int{domain.UserAuditStatusPassed}) | 44 | WithKV("auditStatus", []int{domain.UserAuditStatusPassed}) |
| 45 | + | ||
| 46 | + if req.DepartmentId != nil { | ||
| 47 | + queryOptions.MustWithKV("departmentId", *req.DepartmentId) | ||
| 48 | + } | ||
| 46 | if total, users, err = l.svcCtx.UserRepository.Find(l.ctx, conn, queryOptions); err != nil { | 49 | if total, users, err = l.svcCtx.UserRepository.Find(l.ctx, conn, queryOptions); err != nil { |
| 47 | return nil, xerr.NewErr(err) | 50 | return nil, xerr.NewErr(err) |
| 48 | } | 51 | } |
| @@ -659,6 +659,7 @@ type Department struct { | @@ -659,6 +659,7 @@ type Department struct { | ||
| 659 | ParentId int64 `json:"parentId"` // 父级ID | 659 | ParentId int64 `json:"parentId"` // 父级ID |
| 660 | Name string `json:"name"` // 部门名称 | 660 | Name string `json:"name"` // 部门名称 |
| 661 | UserIds []int64 `json:"userIds"` // 部门下的用户 | 661 | UserIds []int64 `json:"userIds"` // 部门下的用户 |
| 662 | + TotalUser int `json:"totalUser"` // 累计用户 | ||
| 662 | } | 663 | } |
| 663 | 664 | ||
| 664 | type UserSearchRequest struct { | 665 | type UserSearchRequest struct { |
| @@ -808,7 +809,7 @@ type SystemUserSearchRequest struct { | @@ -808,7 +809,7 @@ type SystemUserSearchRequest struct { | ||
| 808 | Phone string `json:"phone,optional"` // 手机号 唯一 | 809 | Phone string `json:"phone,optional"` // 手机号 唯一 |
| 809 | Position string `json:"position,optional"` // 职位 | 810 | Position string `json:"position,optional"` // 职位 |
| 810 | Enable int `json:"enable,optional"` // 启用状态 1:启用 2:禁用 | 811 | Enable int `json:"enable,optional"` // 启用状态 1:启用 2:禁用 |
| 811 | - DepartmentId int64 `json:"departmentId,optional"` // 所属部门 | 812 | + DepartmentId *int64 `json:"departmentId,optional"` // 所属部门 |
| 812 | } | 813 | } |
| 813 | 814 | ||
| 814 | type SystemUserSearchResponse struct { | 815 | type SystemUserSearchResponse struct { |
| @@ -1773,6 +1774,7 @@ type DepartmentListRequest struct { | @@ -1773,6 +1774,7 @@ type DepartmentListRequest struct { | ||
| 1773 | Page int `json:"page"` | 1774 | Page int `json:"page"` |
| 1774 | Size int `json:"size"` | 1775 | Size int `json:"size"` |
| 1775 | IncludeRootCompany bool `json:"includeRootCompany,optional"` // 包含公司(把公司当作部门作为顶级节点 部门ID:0) | 1776 | IncludeRootCompany bool `json:"includeRootCompany,optional"` // 包含公司(把公司当作部门作为顶级节点 部门ID:0) |
| 1777 | + IncludeDefaultDepartment bool `json:"includeDefaultDepartment,optional"` // 包含默认分组 | ||
| 1776 | } | 1778 | } |
| 1777 | 1779 | ||
| 1778 | type DepartmentListResponse struct { | 1780 | type DepartmentListResponse struct { |
| @@ -174,8 +174,13 @@ func (repository *UserRepository) Find(ctx context.Context, conn transaction.Con | @@ -174,8 +174,13 @@ func (repository *UserRepository) Find(ctx context.Context, conn transaction.Con | ||
| 174 | tx.Where("position = ? ", v) | 174 | tx.Where("position = ? ", v) |
| 175 | } | 175 | } |
| 176 | if v, ok := queryOptions["departmentId"]; ok { | 176 | if v, ok := queryOptions["departmentId"]; ok { |
| 177 | + // 未分组用户部门ID=0 | ||
| 178 | + if vi, okVi := v.(int64); okVi && vi == domain.DefaultDepartmentId { | ||
| 179 | + tx.Where(fmt.Sprintf("departments = '[]'")) | ||
| 180 | + } else { | ||
| 177 | tx.Where(fmt.Sprintf("departments @>'[%v]'", v)) | 181 | tx.Where(fmt.Sprintf("departments @>'[%v]'", v)) |
| 178 | } | 182 | } |
| 183 | + } | ||
| 179 | if v, ok := queryOptions["roleId"]; ok { | 184 | if v, ok := queryOptions["roleId"]; ok { |
| 180 | tx.Where(fmt.Sprintf("roles @>'[%v]'", v)) | 185 | tx.Where(fmt.Sprintf("roles @>'[%v]'", v)) |
| 181 | } | 186 | } |
-
请 注册 或 登录 后发表评论