76 lines
3.8 KiB
Markdown
76 lines
3.8 KiB
Markdown
# 需求
|
||
|
||
> 本文只描述要什么与怎么算达成,用产品 / 用户语言表达。技术方案、数据结构、字段定义见 [架构设计](04-architecture.md)。
|
||
|
||
## 一、业务现状
|
||
|
||
| 项 | 状态 |
|
||
| --- | --- |
|
||
| 用户 | 内部管理员、HR / 行政人员需要查看多站点钉钉组织和人员数据 |
|
||
| 数据 | 旧 Python 脚本可从钉钉 OpenAPI 拉取部门、部门用户 ID、用户详情,并保存为 JSON |
|
||
| 现有系统 | 当前仓库尚未有应用代码;旧项目位于 `D:\PythonP\snippets\DingtalkHRM` |
|
||
| 约束 | 钉钉 OpenAPI 有 CORS 和密钥安全限制,必须由后端代理调用 |
|
||
|
||
## 二、用户角色
|
||
|
||
- 管理员:配置站点、维护 app_key / app_secret、触发同步、查看同步日志。
|
||
- 查询用户:浏览部门树、搜索人员、导出当前人员数据。
|
||
- 未登录用户:MVP 暂不做登录,默认运行在本地或受信内网。
|
||
|
||
## 三、功能清单
|
||
|
||
### 第一版 MVP(最小闭环)
|
||
|
||
| 功能 | 用户能做什么 | 优先级 |
|
||
| --- | --- | --- |
|
||
| 站点配置 | 新增、修改、删除梅州 / 东莞 / 合肥等站点配置 | P0 |
|
||
| 手动全量同步 | 对指定站点拉取部门和人员详情并写入 SQLite | P0 |
|
||
| 部门浏览 | 选择站点后查看部门树,点击部门查看成员 | P0 |
|
||
| 人员搜索筛选 | 按姓名、手机号、工号关键词搜索,按部门和状态筛选 | P0 |
|
||
| 分页列表 | 以表格分页展示人员核心字段 | P0 |
|
||
| 数据导出 | 导出当前站点或筛选结果为 JSON / CSV | P0 |
|
||
| 同步日志 | 查看最近同步时间、状态和错误信息 | P0 |
|
||
|
||
### 后续迭代
|
||
|
||
| 功能 | 描述 | 阶段 |
|
||
| --- | --- | --- |
|
||
| 定时同步 | 按配置周期自动同步站点数据 | V2 |
|
||
| 登录权限 | 增加管理员账号和访问控制 | V2 |
|
||
| 增量同步 | 优先同步变更数据,减少 OpenAPI 调用 | V3 |
|
||
| 变更历史 | 记录部门和人员字段变化 | V3 |
|
||
|
||
## 四、核心用户故事(MVP)
|
||
|
||
1. 作为管理员,我打开系统后能看到已配置站点和每个站点的同步状态。
|
||
2. 我可以选择一个站点并点击同步,系统会拉取钉钉部门和人员数据。
|
||
3. 我可以打开部门页面,看到树形部门结构,并查看某个部门下的人员。
|
||
4. 我可以在人员页面输入姓名、手机号或工号,快速定位员工。
|
||
5. 我可以导出当前站点或当前筛选条件下的人员数据。
|
||
6. 当钉钉接口失败或密钥错误时,系统会展示失败状态和可读错误信息。
|
||
|
||
## 五、验收标准(MVP)
|
||
|
||
- 站点配置:新增站点后刷新页面仍存在;密钥字段不在列表页明文展示。
|
||
- 手动同步:点击同步后生成同步日志;成功后部门和人员数据可查询;失败时保存错误信息。
|
||
- 部门浏览:选中站点后展示部门层级;点击部门后右侧人员列表随之过滤。
|
||
- 人员搜索筛选:关键词、部门、状态、分页参数可组合使用;结果数量和列表一致。
|
||
- 数据导出:JSON 返回 UTF-8 JSON;CSV 可用 Excel 打开且包含表头。
|
||
- 静态前端:访问 `/` 可打开应用;所有前端请求使用同源 `/api/*`。
|
||
|
||
## 六、范围边界与决策
|
||
|
||
| 问题 | 决策 |
|
||
| --- | --- |
|
||
| 第一版平台 | 本地 / 内网 Web 应用 |
|
||
| 是否需要账号 | MVP 不做登录,后续再评估 |
|
||
| 第一版范围 | 站点配置、同步、浏览、搜索、导出 |
|
||
| 暂不支持 | 前端框架、云部署、多用户权限、钉钉回调 |
|
||
|
||
## 七、待确认 / 风险点
|
||
|
||
- 钉钉接口配额:需要在同步服务中记录错误和失败位置,避免静默丢数据。
|
||
- 部门与用户关系:用户可能属于多个部门,MVP 需保留 `dept_id_list` 原始 JSON 字段。
|
||
- 旧 JSON 迁移:是否需要导入旧 JSON 作为初始数据,待实现同步前确认。
|
||
- 密钥存储:MVP 先存 SQLite,后续可评估本机加密或环境变量覆盖。
|