\App\Services\AdminMaintainOrganizationService

组织服务(公司 + 部门)

职责:公司 CRUD(删除前校验公司下是否存在部门);部门树(ancestors 祖级路径 0/3/8/),调整父级时级联重算全部后代的 ancestors;列表/详情统一加载法人关联 (legalPerson)。部门岗位目录已迁 ConfigPostService,此处仅保留组织/部门的 CRUD 与组织树聚合。缓存走 CacheManager(org_companies/org_depts 注册表, 表变更自动失效,写入点无需手动 forget)。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 公司查询(读) paginate / companyIds 分区 2 · 公司写操作 createCompany / updateCompany / reorderCompanies / destroyCompany 分区 3 · 部门查询(读) deptTree 分区 4 · 部门写操作 createDept / updateDept / destroyDept 分区 5 · 组织树查询(读)orgTree 分区 6 · 内部辅助 queryDeptTree / resolveAncestors / cascadeAncestors buildOrgTree / buildOrgDeptTree └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
paginate()
companyIds()
createCompany()
updateCompany()
reorderCompanies()
destroyCompany()
deptTree()
createDept()
updateDept()
destroyDept()
orgTree()
No public properties found
No constants found
No protected methods found
No protected properties found
N/A
queryDeptTree()
resolveAncestors()
cascadeAncestors()
buildOrgTree()
buildOrgDeptTree()
No private properties found
N/A

Methods

paginate()

paginate(array  $filters, int  $perPage = 15) : mixed

公司分页列表(search 按名称/编码模糊匹配;org_kind 按组织类型筛选,0/空=全部)。

Parameters

array $filters
int $perPage

Returns

mixed —

companyIds()

companyIds() : array

公司全量 id 清单(拖拽重排专用,绕过列表分页上限——重排须拿到全部公司 才能全量重编号;与列表同序 sort asc, id asc;低频端点不缓存)。

Returns

array —

createCompany()

createCompany(array  $data) : \App\Models\SysCompany

创建公司:过滤 null 后落库(显式插 null 不触发列 DEFAULT),随后失效公司缓存

Parameters

array $data

Returns

\App\Models\SysCompany —

updateCompany()

updateCompany(\App\Models\SysCompany  $company, array  $data) : \App\Models\SysCompany

更新公司:可清空字段按列语义落空值,随后失效公司缓存

Parameters

\App\Models\SysCompany $company
array $data

Returns

\App\Models\SysCompany —

reorderCompanies()

reorderCompanies(int[]  $ids) : void

公司批量重排:按 ids 顺序重编号 sort=1..n(事务)。

Parameters

int[] $ids

全量新顺序(须含全部公司 id)

destroyCompany()

destroyCompany(\App\Models\SysCompany  $company) : void

删除公司:校验无部门、无范围引用后删除,随后失效公司缓存

Parameters

\App\Models\SysCompany $company

deptTree()

deptTree(?int  $companyId) : array

部门树(按 parent_id 组树)。

传 company_id 只取该公司;缺省时全量平铺组树(各公司根节点并列)。

Parameters

?int $companyId

Returns

array —

createDept()

createDept(array  $data) : \App\Models\SysDept

创建部门:解析祖级路径 ancestors 后落库,随后失效部门缓存

Parameters

array $data

Returns

\App\Models\SysDept —

updateDept()

updateDept(\App\Models\SysDept  $dept, array  $data) : \App\Models\SysDept

更新部门:父级变更时级联重算后代 ancestors,事务提交后失效部门缓存

Parameters

\App\Models\SysDept $dept
array $data

Returns

\App\Models\SysDept —

destroyDept()

destroyDept(\App\Models\SysDept  $dept) : void

删除部门:校验无子部门/无任职/无岗位后,级联清理范围引用并删除

Parameters

\App\Models\SysDept $dept

orgTree()

orgTree() : array

完整组织树:公司 → 部门(树) → 岗位(该部门岗位目录的岗位详情)。

每层附带负责人信息(公司 leader_info / 部门 leader_info)与状态。 供「完整组织树」展示与组织选择器使用,一次取全量(后台数据量小)。

Returns

array —

queryDeptTree()

queryDeptTree(?int  $companyId) : array

实际查部门树(缓存未命中时调用)

Parameters

?int $companyId

Returns

array —

resolveAncestors()

resolveAncestors(int  $companyId, int  $parentId, int|null  $excludeId = null) : string

计算节点的祖级路径:parent_id=0 → '0/',否则 parent.ancestors + parent.id + '/'。 路径拼接单源:AncestorsPath::childPath(父查询与防环保留在本服务)。

Parameters

int $companyId
int $parentId
int|null $excludeId

更新时的自身ID,用于拦截「把后代设为父级」

Returns

string —

cascadeAncestors()

cascadeAncestors(\App\Models\SysDept  $dept, string  $newAncestors) : void

级联重算后代 ancestors:把后代路径中的旧前缀替换为新前缀。 批量 UPDATE 单源:AncestorsPath::cascadeUpdate(前缀区间走 btree 索引)。

Parameters

\App\Models\SysDept $dept
string $newAncestors

buildOrgTree()

buildOrgTree() : array

组织树构建:公司/部门/岗位各取一次全量,内存内组树与映射

Returns

array —

buildOrgDeptTree()

buildOrgDeptTree(array  $items, int  $parentId, mixed  $deptPosts, mixed  $posts) : array

组织树专用部门子树构建:children 为子部门树,posts 为该部门岗位目录(岗位 id/name/code/status)。

Parameters

array $items
int $parentId
mixed $deptPosts
mixed $posts

Returns

array —