zcloud_gbs_human_user/人力资源数据推送.md

216 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# zcloud_gbs_human_user 项目文档
## 1. 项目概述
**项目名称**zcloud_gbs_human_user人力资源用户管理
**项目简介**:本项目是 GBS 人力资源用户管理模块,负责管理与第三方人资系统对接的人员和部门数据同步。主要功能包括:从第三方接口同步全量人员/部门数据、部门对比同步。
预留出人员增删改查接口,只需要**秦港股份**的部门及人员数据,并同步到本系统。
**数据参考**
- 人员数据及结构 ---> GBS-人资推送部门人员数据.zip ----> 人资人员缓存.json
- 部门数据及结构 ---> GBS-人资推送部门人员数据.zip ----> 人资对接json.txt
**开发平台**:新租户,新账号
- 账号renliziyuanbu
- 密码Aa@12345678
- 新建了个应用人力资源进行测试。用户管理暂时不用
**应用名称**`jjb-saas-zcloud-human-user`
**网关路由**`humanUser`
---
## 2. 项目结构
```
zcloud_gbs_human_user/
├── start/ # 启动模块
├── web-adapter/ # 适配层Controller/Facade/Job
├── web-app/ # 应用层Service/Exe
├── web-client/ # 接口契约ServiceI/DTO
├── web-domain/ # 领域层Model/Gateway
└── web-infrastructure/ # 基础设施层GatewayImpl/Mapper/Repository
```
---
## 3. 模块职责说明
### 3.1 start启动模块
**职责**项目入口Spring Boot 启动类及配置文件管理。
| 文件 | 说明 |
|------|------|
| `Application.java` | 启动类,配置包扫描 `com.zcloud``com.jjb`Mapper 扫描指向 `persistence.mapper` |
| `resources/bootstrap.yml` | 配置文件导入nacos-prod.yml、sdk-prod.yml、swagger.yml |
| `resources/nacos-prod.yml` | Nacos 连接配置地址、命名空间、shared-configs |
| `resources/sdk-prod.yml` | SDK 网关路由配置 |
| `resources/swagger.yml` | Swagger 文档配置 |
| `resources/nacos/*.yml` | 共享配置文件数据库、Redis、日志、MQ 等) |
| `target/templates/risk.html` | 前端静态页面模板 |
### 3.2 web-client接口契约模块
**职责**:定义对外接口契约和传输对象,不包含业务逻辑。
| 目录/文件 | 说明 |
|-----------|------|
| `api/HumanUserServiceI.java` | 服务接口(增删改查) |
| `dto/HumanUserAddCmd.java` | 新增人员命令 |
| `dto/HumanUserUpdateCmd.java` | 更新人员命令 |
| `dto/HumanUserRemoveCmd.java` | 删除命令 |
| `dto/HumanUserPageQry.java` | 分页查询参数 |
| `dto/HumanUserListQry.java` | 列表查询参数 |
| `dto/clientobject/HumanUserCO.java` | 返回客户端对象 |
### 3.3 web-adapter适配层
**职责**:接收外部请求,协议适配和参数转换。
| 目录/文件 | 说明 |
|-----------|------|
| `web/HumanUserController.java` | HTTP 控制器,提供同步任务手动触发接口 |
| `plan/HumanUserSyncJob.java` | 人员同步定时任务 |
| `plan/HumanDeptSyncJob.java` | 部门同步定时任务 |
| `plan/HumanUserDeptCompareSyncJob.java` | 部门对比同步定时任务 |
**HTTP 接口**
| 接口路径 | 方法 | 说明 |
|----------|------|------|
| `/humanUser/user/asyncSyncHumanUser` | POST | 手动触发人员同步 |
| `/humanUser/user/asyncSyncHumanDept` | POST | 手动触发部门同步 |
| `/humanUser/user/asyncSyncDeptCompare` | POST | 手动触发部门对比同步 |
### 3.4 web-app应用层
**职责**:业务编排,协调各领域组件完成具体业务。
#### 3.4.1 Service 实现
| 文件 | 说明 |
|------|------|
| `service/HumanUserServiceImpl.java` | 实现 `HumanUserServiceI`,将增删改委托给对应 Exe |
| `service/AsyncSyncService.java` | 异步同步服务,使用 `@Async("syncTaskExecutor")` 线程池 |
#### 3.4.2 Command/Exe 执行器
| 文件 | 说明 |
|------|------|
| `command/HumanUserAddExe.java` | 新增人员,通过 Dubbo 调用 `UserFacade.add` |
| `command/HumanUserUpdateExe.java` | 更新人员,通过 Dubbo 调用 `UserFacade.update` |
| `command/HumanUserRemoveExe.java` | 删除人员,通过 Dubbo 调用 `UserFacade.delete` |
| `command/query/HumanUserQueryExe.java` | 查询执行器 |
#### 3.4.3 同步执行器(核心业务)
| 文件 | 说明 |
|------|------|
| `command/HumanUserSyncExe.java` | **人员数据同步**:从第三方接口获取全量人员数据,按公司/部门过滤后同步到底座用户中心 |
| `command/HumanDeptSyncExe.java` | **部门数据同步**:从第三方数据中提取部门树,递归同步到本系统 |
| `command/HumanUserDeptCompareSyncExe.java` | **部门对比同步**:对比统一用户管理与变动记录表的部门信息,记录差异 |
### 3.5 web-domain领域层
**职责**定义领域模型、Gateway 接口。
| 文件 | 说明 |
|------|------|
| `domain/model/HumanUserE.java` | 人资用户实体,包含 `initFromJson()` 从第三方 JSON 初始化 |
| `domain/model/HumanUserRecordE.java` | 人资每日变动记录实体 |
| `domain/gateway/HumanUserGateway.java` | 人资用户数据访问接口list/getById/add/update/remove |
| `domain/gateway/HumanUserRecordGateway.java` | 人资变动记录数据访问接口 |
### 3.6 web-infrastructure基础设施层
**职责**:实现 Gateway 接口,数据库访问。
| 目录/文件 | 说明 |
|-----------|------|
| `gatewayimpl/HumanUserGatewayImpl.java` | HumanUserGateway 实现,通过 Repository 持久化 |
| `gatewayimpl/HumanUserRecordGatewayImpl.java` | HumanUserRecordGateway 实现 |
| `resources/mapper/HumanUserMapper.xml` | human_user 表 MyBatis 映射 |
| `resources/mapper/HumanUserRecordMapper.xml` | human_user_record 表 MyBatis 映射 |
| `resources/TableCreationDDL.sql` | 建表 DDL |
---
## 4. 数据库内容
### 4.1 jjb-saas-zcloud-human-user 数据库
### 4.2 human_user人资用户表
**索引**`idx_employee_phone (employee_name, phone_number)`
### 4.3 human_user_record人资每日变动记录表
## 5. 核心业务流程
### 5.1 人员数据同步流程HumanUserSyncExe
```
第三方接口 (http://192.168.10.56:8090)
↓ 获取全量人员数据
过滤 TARGET_CORP_NAME = "秦港股份"
按id_card_number字段查询 human_user 表
├─ 已存在且部门变更 → 更新部门 + 记录变动
├─ 已存在且部门未变 → 跳过
├─ 未存在于 human_user但统一用户已存在 → 保存 human_user 记录
└─ 完全不存在 → 创建底座账号 + 保存 human_user + 记录变动
```
**关键配置**
- 目标公司:`秦皇岛港股份有限公司`
- 第三方过滤公司:`秦港股份`
- 第三方接口:`http://192.168.10.56:8090`
### 5.2 部门数据同步流程HumanDeptSyncExe
```
第三方接口
↓ 解析部门树
递归查找目标公司 "秦皇岛港股份有限公司"
根据父部门ID + 部门名称判断是否存在
├─ 已存在 → 使用已有ID继续同步子部门
└─ 不存在 → 创建新部门 + 使用新ID继续同步子部门
```
### 5.3 部门对比同步流程HumanUserDeptCompareSyncExe
```
查询统一用户管理用户列表
查询 human_user_record 变动记录
↓ 构建 userId → deptName 映射
对比两者的部门信息
发现差异 → 记录变动到 human_user_record
```
---
## 6. 依赖关系
### 6.1 外部 Dubbo 服务依赖
| Dubbo Reference | 说明 | 来源 |
|-----------------|------|------|
| `UserFacade` | 底座用户服务 | jjb-saas-system-client |
| `RoleFacade` | 底座角色服务 | jjb-saas-system-client |
| `ZcloudUserFacade` | 统一用户服务 | zcloud_gbscommon |
| `ZcloudDepartmentFacade` | 统一部门服务 | zcloud_gbscommon |
| `ZcloudCorpFacade` | 统一企业服务 | zcloud_gbscommon |
---