feat: 完善IM后台Kafka与组织架构管理

This commit is contained in:
richjohnrambo
2026-09-03 17:11:29 +08:00
parent 5a2ed4b2a4
commit 25abba8eeb
23 changed files with 652 additions and 142 deletions
+24 -34
View File
@@ -9,6 +9,7 @@ import (
"hotgo/internal/service"
"hotgo/utility/convert"
"hotgo/utility/excel"
"net/url"
"strings"
"github.com/gogf/gf/v2/database/gdb"
@@ -34,33 +35,28 @@ func (s *sSysImOrg) DepartmentList(ctx context.Context, in *sysin.ImOrgDepartmen
if err = in.Filter(ctx); err != nil {
return
}
db, tenant, err := resolveImTenantDB(ctx, in.TenantId)
tenant, err := resolveImAdminTenant(ctx, in.TenantId)
if err != nil {
return
}
mod := s.departmentModel(ctx, db)
values := addPageQuery(url.Values{}, in.Page, in.PerPage)
if in.DepartmentId != "" {
mod = mod.Where("d.department_id", strings.TrimSpace(in.DepartmentId))
values.Set("department_id", strings.TrimSpace(in.DepartmentId))
}
if in.ParentId != "" {
mod = mod.Where("d.parent_id", strings.TrimSpace(in.ParentId))
values.Set("parent_id", strings.TrimSpace(in.ParentId))
}
if in.Name != "" {
mod = mod.WhereLike("d.name", "%"+strings.TrimSpace(in.Name)+"%")
values.Set("name", strings.TrimSpace(in.Name))
}
if in.State != "" {
mod = mod.Where("d.state", strings.TrimSpace(in.State))
values.Set("state", strings.TrimSpace(in.State))
}
mod = mod.Page(in.Page, in.PerPage).OrderAsc("d.sort_order").OrderAsc("d.id")
if err = mod.ScanAndCount(&list, &totalCount, false); err != nil {
err = gerror.Wrap(err, "获取IM组织部门失败,请稍后重试!")
return
}
for _, item := range list {
item.TenantId = tenant.Id
item.TenantName = tenant.Name
}
return
return imAdminQueryList[sysin.ImOrgDepartmentModel](ctx, tenant,
"/internal/admin-query/tenants/"+url.PathEscape(tenant.Code)+"/org/departments",
values,
nil,
)
}
func (s *sSysImOrg) DepartmentExport(ctx context.Context, in *sysin.ImOrgDepartmentListInp) (err error) {
@@ -195,34 +191,28 @@ func (s *sSysImOrg) MemberList(ctx context.Context, in *sysin.ImOrgMemberListInp
if err = in.Filter(ctx); err != nil {
return
}
db, tenant, err := resolveImTenantDB(ctx, in.TenantId)
tenant, err := resolveImAdminTenant(ctx, in.TenantId)
if err != nil {
return
}
mod := s.memberModel(ctx, db)
values := addPageQuery(url.Values{}, in.Page, in.PerPage)
if in.DepartmentId != "" {
mod = mod.Where("m.department_id", strings.TrimSpace(in.DepartmentId))
values.Set("department_id", strings.TrimSpace(in.DepartmentId))
}
if in.UserId > 0 {
mod = mod.Where("m.user_id", in.UserId)
values.Set("user_id", int64ToString(in.UserId))
}
if in.EmploymentState != "" {
mod = mod.Where("m.employment_state", strings.TrimSpace(in.EmploymentState))
values.Set("employment_state", strings.TrimSpace(in.EmploymentState))
}
if q := strings.TrimSpace(in.Query); q != "" {
like := "%" + q + "%"
mod = mod.Where("(m.display_name LIKE ? OR m.mobile LIKE ? OR m.email LIKE ? OR CAST(m.user_id AS CHAR) LIKE ?)", like, like, like, like)
if in.Query != "" {
values.Set("q", strings.TrimSpace(in.Query))
}
mod = mod.Page(in.Page, in.PerPage).OrderAsc("m.sort_order").OrderAsc("m.id")
if err = mod.ScanAndCount(&list, &totalCount, false); err != nil {
err = gerror.Wrap(err, "获取IM组织成员失败,请稍后重试!")
return
}
for _, item := range list {
item.TenantId = tenant.Id
item.TenantName = tenant.Name
}
return
return imAdminQueryList[sysin.ImOrgMemberModel](ctx, tenant,
"/internal/admin-query/tenants/"+url.PathEscape(tenant.Code)+"/org/members",
values,
nil,
)
}
func (s *sSysImOrg) MemberExport(ctx context.Context, in *sysin.ImOrgMemberListInp) (err error) {