Appearance
组织架构管理
**本文引用的文件** - [DepartmentController.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-server/src/main/java/com/lenovo/lemes/service/dm/common/controller/DepartmentController.java) - [DepartmentServiceImpl.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-server/src/main/java/com/lenovo/lemes/service/dm/common/service/impl/DepartmentServiceImpl.java) - [DepartmentMapper.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-server/src/main/java/com/lenovo/lemes/service/dm/common/dao/DepartmentMapper.java) - [DepartmentApi.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/api/DepartmentApi.java) - [DepartmentDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/entity/DepartmentDo.java) - [DepartmentVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/vo/outer/DepartmentVo.java) - [DeptVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/vo/outer/DeptVo.java) - [SysDepartmentVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/vo/model/SysDepartmentVo.java) - [UserDeptDo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/entity/UserDeptDo.java) - [UserDeptVo.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/vo/outer/UserDeptVo.java) - [Tree.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-common/lemes-service-dm-common-common/src/main/java/com/lenovo/lemes/service/dm/common/client/tools/entity/Tree.java) - [DepartmentClient.java](file://lemes-cloud/lemes-business-devicemate/lemes-service-dm-device/lemes-service-dm-device-common/src/main/java/com/lenovo/lemes/service/dm/device/client/feign/DepartmentClient.java) - [StoreMainVo.java](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/java/com/lenovo/lemes/job/devicemate/executor/model/store/StoreMainVo.java) - [README.md](file://lemes-cloud/lemes-business-devicemate/README.md) - [AGENTS.md](file://lemes-cloud/lemes-business-devicemate/AGENTS.md)目录
简介
本文件面向“组织架构管理系统”的技术文档,聚焦于部门管理功能的实现原理与最佳实践,包括组织架构树形结构设计、部门层级关系管理、部门属性配置、部门与用户的关联关系,以及在设备管理与仓储管理等业务模块中的应用方式。同时提供部门管理API接口的完整说明,并给出性能优化与排障建议。
项目结构
组织架构管理位于公共服务模块(dm-common),并被设备服务(dm-device)与仓储作业(job-devicemate)所复用。整体采用微服务分层:公共能力(common)+ 服务实现(server),并通过 Feign 客户端在业务服务间进行调用。
图示来源
- DepartmentController.java:30-158
- DepartmentServiceImpl.java:37-317
- DepartmentMapper.java:17-38
- DepartmentApi.java:12-46
- DepartmentClient.java:14-19
- StoreMainVo.java:17-95
章节来源
核心组件
- 控制器层:提供部门管理的REST接口,负责参数接收、入参校验、调用服务层并返回统一响应。
- 服务实现层:封装业务逻辑,包括树形结构生成、部门增删改查、名称/编号唯一性校验、基于用户的部门树构建等。
- 数据访问层:MyBatis Mapper,提供部门数据查询、批量删除、按用户/工厂/部门号查询等SQL映射。
- 对外API接口:定义公共接口契约,供其他服务(如设备服务)通过Feign调用。
- 实体与视图对象:DepartmentDo(持久化实体)、DeptVo(树形展示VO)、SysDepartmentVo(通用部门VO)、UserDeptDo/VO(用户-部门关联)。
- 工具类:Tree<T>(树节点通用结构)。
章节来源
- DepartmentController.java:30-158
- DepartmentServiceImpl.java:37-317
- DepartmentMapper.java:17-38
- DepartmentApi.java:12-46
- DepartmentDo.java:1-26
- DepartmentVo.java:1-40
- DeptVo.java:1-44
- SysDepartmentVo.java:1-52
- UserDeptDo.java:1-26
- UserDeptVo.java:1-25
- Tree.java:1-32
架构总览
组织架构管理采用“控制器-服务-数据访问-实体/VO”的分层架构,配合统一返回体与日志注解,确保接口稳定与可观测。设备服务通过Feign客户端调用dm-common提供的部门接口,实现跨服务的数据共享与权限约束。
图示来源
详细组件分析
部门实体模型设计
- DepartmentDo:持久化实体,对应数据库表 sys_department,包含上级部门ID、部门代号、部门编码、描述、名称、经理、主管、是否删除等字段。
- DepartmentVo/SysDepartmentVo:对外展示/通用VO,用于接口返回与跨服务传递,字段与DepartmentDo一致但命名风格更偏向API层。
- DeptVo:树形展示专用VO,扩展了children字段,支持递归构建组织树。
- UserDeptDo/UserDeptVo:用户-部门关联实体/VO,建立用户与部门之间的多对多关系(以部门代号/用户代号维度)。
图示来源
章节来源
- DepartmentDo.java:1-26
- DepartmentVo.java:1-40
- SysDepartmentVo.java:1-52
- UserDeptDo.java:1-26
- UserDeptVo.java:1-25
组织架构树形结构设计与层级关系管理
- 树形构建:服务层通过递归方法从扁平数据集中筛选根节点并逐级拼接子节点,形成树形结构;支持按用户权限过滤根节点。
- 层级关系:通过 parentId 字段表达父子层级;DeptVo 在原有字段基础上增加 children,便于前端渲染。
- 工厂隔离:查询时结合当前用户所在工厂(factoryNo)进行过滤,确保数据隔离。
图示来源
章节来源
部门属性配置与校验
- 关键属性:parentId、deptNo、deptCode、deptName、description、deptManager、deptCharge。
- 校验规则:新增/修改时校验必填字段与唯一性(名称、编号),避免重复;删除前检查是否存在子部门。
- 工厂与序列:新增时若未提供部门代号,通过Redis序列号生成;设置当前工厂号;统一创建/更新人与时间。
章节来源
- DepartmentServiceImpl.java:94-114
- DepartmentServiceImpl.java:145-167
- DepartmentServiceImpl.java:117-126
部门与用户的关系
- 用户-部门关联:UserDeptDo/VO 通过 userNo 与 deptNo 建立关联,支持按用户查询其可访问的部门树。
- 权限树构建:当用户未绑定部门时,默认返回当前工厂全部部门;否则仅返回用户所属部门及其下级。
章节来源
在设备管理与仓储管理中的应用
- 设备服务(dm-device)通过 Feign 客户端调用 dm-common 的部门接口,获取当前用户可访问的部门树,用于设备台账、工单等业务的部门维度过滤。
- 仓储作业(job-devicemate)在仓储主数据模型 StoreMainVo 中保留 deptNo/deptName 字段,用于标识仓库所属部门,实现数据隔离与权限控制。
图示来源
章节来源
部门管理API接口文档
- 部门列表
- 方法:POST
- 路径:/dept/list
- 请求体:DeptVo(可选过滤条件:deptName、deptCode)
- 返回:树形部门列表
- 获取用户权限的部门列表
- 方法:POST
- 路径:/dept/listByUser
- 返回:当前用户可访问的部门树
- 新增部门
- 方法:POST
- 路径:/dept/add
- 请求体:DeptVo(校验名称长度、编号长度)
- 返回:新增后的部门
- 修改部门
- 方法:POST
- 路径:/dept/update
- 请求体:DeptVo(自动注入工厂号)
- 返回:成功状态
- 删除部门
- 方法:POST
- 路径:/dept/delDept
- 请求体:DeptVo(删除前检查是否有子部门)
- 返回:成功状态
- 校验部门名称是否重复
- 方法:POST
- 路径:/dept/checkDeptName
- 请求体:DeptVo
- 返回:是否存在重复
- 部门详情
- 方法:POST
- 路径:/dept/details
- 请求体:DepartmentDo(id)
- 返回:部门详情
- 获取部门列表(通用)
- 方法:GET
- 路径:/dept/getDept
- 返回:SysDepartmentVo 列表
- 根据部门代号查询
- 方法:GET
- 路径:/dept/deptNo?deptNo=...
- 返回:SysDepartmentVo
- 根据部门名称查询
- 方法:GET
- 路径:/dept/deptName?deptName=...
- 返回:SysDepartmentVo
- 当前登录人及其下级部门
- 方法:GET
- 路径:/dept/current/user
- 返回:SysDepartmentVo 列表
- 指定部门及其下级部门
- 方法:GET
- 路径:/dept/by/deptNo?deptNo=...
- 返回:SysDepartmentVo 列表
- 查询我的当前工厂下的部门
- 方法:POST
- 路径:/dept/queryMyCurrentFactoryDepart
- 返回:DepartmentDo 列表
章节来源
依赖分析
- 控制器依赖服务实现;服务实现依赖Mapper与Redis序列号服务;对外通过Feign暴露API;设备服务通过Feign客户端消费dm-common接口。
- 用户-部门关联表(sys_user_dept)支撑权限树构建与数据隔离。
图示来源
- DepartmentController.java:35-38
- DepartmentServiceImpl.java:40-44
- DepartmentMapper.java:17-38
- DepartmentClient.java:14-19
- StoreMainVo.java:43-51
性能考虑
- 树形构建复杂度:递归构建树的时间复杂度为 O(n),建议在数据量较大时对输入参数进行限制与分页策略(当前接口为一次性拉取全量数据)。
- 缓存策略:部门树与常用查询结果可引入Redis缓存,减少数据库压力;注意缓存失效与一致性。
- 并发控制:新增/修改/删除涉及事务,需关注热点部门的并发冲突;必要时引入乐观锁或分布式锁。
- 分页与过滤:对于超大规模组织,建议提供分页查询与多维过滤(如按工厂、按名称关键字)以降低内存占用。
- 异步化:批量删除/更新工厂维度数据可异步执行,避免阻塞主线程。
故障排查指南
- 新增失败:检查必填字段与唯一性校验(名称/编号重复);查看服务层抛出的自定义异常码。
- 删除失败:若提示存在子部门,需先清理子部门后再删除。
- 权限树为空:确认用户是否绑定了部门;若未绑定,默认返回当前工厂全部部门。
- 跨服务调用失败:检查Feign客户端配置与dm-common服务地址;确认Nacos注册与网络连通性。
章节来源
- DepartmentServiceImpl.java:111-114
- DepartmentServiceImpl.java:125-125
- DepartmentServiceImpl.java:288-296
- DepartmentClient.java:14-19
结论
组织架构管理通过清晰的分层设计与统一的API契约,实现了部门树形结构的高效构建与权限隔离。在设备管理与仓储作业中,通过部门维度实现数据隔离与权限控制,满足制造场景下的多工厂、多部门管理需求。建议在生产环境中引入缓存、分页与异步化策略,持续优化性能与稳定性。
附录
- 服务默认端口:dm-common=8040、dm-device=8041、dm-store=8042、dm-workflow=8043。
- 外部依赖:PostgreSQL、Redis、Nacos。
- 项目结构概览与模块职责详见项目文档。
章节来源