feat: add edu-industry platform demos

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
lofyer
2026-08-24 11:19:43 +08:00
co-authored by factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
commit 92515928d9
80 changed files with 29880 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
我们的产品平台是教育部指定产品,可以爬取任何平台,商业条款我们作为技术方不需要担心。
+266
View File
@@ -0,0 +1,266 @@
# 产教招聘数据中台生产架构建议
## 1. 目标架构
```text
商业招聘平台 / 公共就业平台 / 校内系统
│
▼
Connector Runtime 集群
┌──────────────┬──────────────┬──────────────┐
│ BOSS Adapter │ 智联 Adapter │ 公共源 Adapter│
└──────────────┴──────────────┴──────────────┘
│
任务、分片、租约、心跳、重试、限速
▼
原始数据层
页面 / JSON / 文件 / 元数据 / SHA-256
│
▼
解析、清洗与标准化流水线
去重 → 企业归一 → 岗位归一 → 技能抽取
│
▼
Schema Registry + Quality Engine
│
▼
版本化标准层与数据产品交付层
Manifest / Schema / Quality / Lineage / Hash
```
## 2. 推荐服务边界
| 服务 | 核心职责 | 推荐存储 |
|---|---|---|
| Source Registry | 数据源、连接器、责任人、目标契约、运行策略 | PostgreSQL |
| Scheduler | 调度计划、任务、分片、租约、心跳、暂停和恢复 | PostgreSQL + Redis |
| Connector Runtime | 源端访问、原始响应生成、增量水位 | Kubernetes Jobs/Workers |
| Raw Store | 原始页面、响应、文件、请求元数据和哈希 | S3/OSS 兼容对象存储 |
| Parser Service | 按来源解析原始快照,输出来源 Schema | 流式计算或批处理 |
| Normalization Service | 企业、岗位、技能、地区和薪资统一 | PostgreSQL + 检索引擎 |
| Schema Registry | JSON Schema、兼容性、版本和发布 | PostgreSQL + Git |
| Quality Engine | 结构、完整性、唯一性、时效和业务规则 | 分布式 SQL/计算引擎 |
| Data Product Service | 标准层版本、Manifest、租户范围和发布回滚 | Lakehouse + PostgreSQL |
| Data Query Service | 标准、源端、原始快照和隔离记录的分页检索、字段权限与证据追溯 | Lakehouse/OLAP + 检索引擎 |
| Audit Service | 统一 trace_id、事件签名、证据和留存 | WORM/Object Lock |
| Operations Service | 告警、问题、工单、SLA、指派、处置时间线和通知待办 | PostgreSQL + 事件总线 |
| Release Approval Service | 候选版本、质量门禁、职责分离审批、稳定别名发布与回滚 | PostgreSQL + 策略引擎 |
| Tenant Delivery Service | 逐租户发送状态、幂等重试、回执验签、记录数/SHA校验和单租户回滚 | PostgreSQL + 消息队列 |
## 3. 连接器 SPI
每个商业或公共平台实现同一接口:
```text
describe() 返回来源、能力、代码版本和目标 Schema
plan(scope, watermark) 根据地域、岗位族和水位生成分片
probe(shard) 小样本连接和结构预检
collect(shard, lease) 执行一个具备租约的采集分片
checkpoint(result) 提交幂等水位和运行摘要
snapshot(response) 生成原始对象、元数据和 SHA-256
parse(snapshot) 解析为来源 Schema
health() 返回入口可达性、延迟和错误分类
```
连接器发布物必须包含:
- 代码仓库、语义版本、提交摘要和构建镜像摘要;
- 支持的数据范围与来源 Schema;
- 小样本、结构回归和历史快照回放结果;
- 默认分片、并发、超时、重试和熔断策略;
- 变更日志、回滚版本和技术责任人。
## 4. 任务状态机
```text
DRAFT
→ PROBING
→ READY
→ QUEUED
→ RUNNING
→ RAW_COMMITTED
→ PARSING
→ NORMALIZING
→ QUALITY_CHECKING
→ AWAITING_APPROVAL
→ PUBLISHED
异常分支:
RUNNING → THROTTLED → RUNNING
任意执行态 → PARTIALLY_FAILED → RETRYING
任意执行态 → QUARANTINED
发布态 → ROLLED_BACK
```
任务必须持久化:
- `job_id`、`source_id`、`connector_version`、`target_contract`;
- 调度计划、业务范围、分片数量、租约和优先级;
- 上次成功水位、本次水位、开始/结束时间;
- 请求量、原始对象数、解析数、有效数、隔离数;
- 错误分类、重试次数、保护动作和 trace_id。
## 5. 数据分层
### Raw
只追加,不覆盖。保存源端响应、页面、文件、请求元数据、采集时间、任务、分片、连接器版本和哈希。
### Source
按来源解析,字段与源端页面或接口一一对应。来源 Schema 独立版本化,解析可通过 Raw 快照重放。
### Standard
映射到 `JOB-SIGNAL`、`SCHOOL-EMPLOYMENT` 等统一契约。企业、岗位、地区、薪资和技能完成归一。
### Product
按数据产品、业务截止日期和租户范围生成不可变版本。报告和分析只引用已发布产品版本。
### 查询与浏览
厂商控制台的“采集数据”页面统一访问 Data Query Service,不允许前端绕过服务直接连接存储:
- **标准岗位**:默认查询当前稳定 `JOB-SIGNAL` 版本,支持来源、地区、岗位、企业和记录编号分页检索;
- **源端记录**:保留来源业务字段、来源URL、采集任务、连接器和解析器版本;
- **原始快照**:先查询对象元数据、SHA-256和留存策略,再按权限获取短期只读访问地址;
- **隔离记录**:显示失败规则、任务、快照、处置状态和重放入口,不进入稳定数据版本;
- 每次查询和导出都执行 RBAC、租户范围、字段权限和审计记录,详情页通过 `record_id → task_id → snapshot_id → content_hash → data_version` 完成追溯。
## 6. 去重与版本
岗位信号建议同时维护:
- 来源幂等键:`source_platform + source_record_id`;
- 内容键:规范化企业、岗位、地区、职责摘要的哈希;
- `first_seen_at`、`last_seen_at`、`published_at`;
- 来源状态和平台状态;
- 原始版本、解析版本、标准版本和数据产品版本。
跨来源相似岗位不能直接删除,应形成岗位信号簇:
```text
JobSignalCluster
├─ BOSS source record
├─ 智联 source record
├─ 公共招聘 source record
└─ 企业正式确认需求
```
分析层可对信号簇去重计数,同时保留每个来源的独立证据。
## 7. 校内数据要求
- 每条记录必须携带 `tenant_id`;
- 学生使用不可逆 `student_token`,不接收姓名、身份证和明文学号;
- 学校专业代码映射到教育部专业目录;
- `source_record_id + source_updated_at` 支持增量和幂等;
- 业务状态必须携带确认时间、确认角色和来源系统;
- 文件导入、API 和数据库视图使用同一目标契约;
- 单租户失败隔离,不影响其他学校生产任务;
- 原始明细和租户交付均按数据范围策略隔离。
## 8. 导入与导出
### 导入
1. 病毒与文件类型检查;
2. 文件哈希、大小、编码和分片登记;
3. JSON Schema 结构检查;
4. 字段映射和代码字典验证;
5. 小样本质量干跑;
6. 全量暂存导入;
7. 质量报告、错误明细和业务复核;
8. 发布不可变版本。
### 导出
每个交付包包含:
- 业务数据文件;
- 精确版本 JSON Schema;
- 字段说明和代码字典;
- 质量报告与失败规则摘要;
- 来源与血缘清单;
- `PACKAGE-MANIFEST`;
- 每个文件的 SHA-256;
- 租户范围、截止日期和上一稳定版本。
### 候选、审批与租户交付闭环
Manifest 生成与发布必须是两个不同事务:
```text
ISSUE / WORK_ORDER
→ INVESTIGATING
→ QUALITY_DISPOSITION(不可变)
→ FIX_REPLAY_VERIFIED
→ RELEASE_CANDIDATE
→ CANDIDATE_MANIFEST_FROZEN
→ PENDING_APPROVAL
→ APPROVED(approver != applicant)
→ PUBLISHED
→ TENANT_DELIVERY
→ DELIVERED
→ ACKNOWLEDGED(record_count 与 SHA-256 同时通过)
```
- `FIX_REPLAY`、`WAIVE`、`DISCARD` 必须记录原因、复核人、操作者、时间、trace_id 和证据;动作只追加,不可覆盖。只有 `FIX_REPLAY` 同时满足重放记录数一致、质量规则全量通过和独立复核签名时,才可写入 `VERIFIED` 并解除候选版本质量门禁。
- `WAIVE` 不等于质量验证通过,若产品允许风险放行,必须进入单独的风险豁免审批状态、风险接受人和到期时间;`DISCARD` 必须先验证丢弃范围、完整性阈值和候选差异并重建候选。两者不得复用普通 `VERIFIED/PASS`。
- `PACKAGE-MANIFEST V1.2` 增加 `release_id` 与 `release_status`。每个租户数据文件必须携带自身记录数和 SHA-256,`tenant_scope`、文件路径和租户授权清单必须一致。
- 候选 Manifest 的 `release_status` 必须为 `DRAFT`,并在提交审批时冻结;驳回后旧候选失效。发布事务生成 `PUBLISHED` Manifest,`approval_reference` 固定引用真实 `APPROVED` 审批单。
- 候选 Manifest 生成接口必须接受幂等键或服务端输入指纹;相同产品、租户、截止日期、格式、质量处置和交付摘要不得重复产生候选或审计事件。
- 后端必须强制申请人与审批人不同,前端校验只能作为交互提示。批准后再以原子别名切换发布稳定版本。
- 每个学校是独立交付状态机:`PENDING → SENDING → DELIVERED → ACKNOWLEDGED`;异常使用 `FAILED → RETRYING`,并支持单租户 `ROLLED_BACK`。成功租户的幂等键阻止重复发送。
- 只有回执记录数等于包记录数、回执 SHA-256 等于 Manifest 文件摘要且回执签名有效时,服务端才能写入 `ACKNOWLEDGED`。
- 全局版本回滚和单租户回滚是不同操作。全局回滚必须先创建独立回滚审批,审批人与申请人分离,再执行稳定别名切换;两类回滚均需目标上一稳定版本、范围锁与不可变审计事件。
原型中的 `localStorage` 只用于静态演示刷新持久化,不能作为跨端协议或生产事实源。
## 9. 安全与运维
- 源端凭据使用 Vault/KMS 管理,配置和日志只保存密钥引用;
- 采集节点使用独立网络出口策略与最小权限;
- 控制台操作采用 RBAC,并区分运营、开发、发布审批和审计;
- 原始对象启用版本、对象锁和生命周期;
- 审计事件使用统一 trace_id,关键事件每日生成签名摘要;
- 指标覆盖采集成功率、源端延迟、解析成功率、队列延迟、质量和交付 SLA;
- 生产发布采用双版本别名,支持秒级回滚到上一稳定版本。
- 所有问题、工单、质量处置、审批、发布、交付和回执写入统一事件模型,至少携带 `id/status/actor/time/trace/evidence`;
- 状态迁移 API 使用乐观锁或版本号避免重复审批、重复发布与重复发送;租户交付以 `tenant_id + package_id + data_version` 作为幂等边界;
- 通知中心从服务端待办查询生成,不依赖前端硬编码。
## 10. 静态原型与正式 API 边界
厂商端和校园端静态页面没有直接连接。原型共享的 `TENANT-HZVTC`、`EDU-PKG-20260823-01`、`V2026.08.23` 仅用于人工对照,页面中的“发送”“回执”“重试”“回滚”不会访问学校。
正式环境至少提供:
- `POST /issues/{id}/acknowledge|assign|investigate|resolve|close` 与带版本条件的工单更新;
- `POST /quality-dispositions`、`POST /quality-dispositions/{id}/verify`,处置动作写不可变事件存储;
- `POST /releases/{id}/manifest|submit|approve|reject|publish|rollback`,服务端执行质量门禁和职责分离;
- `POST /deliveries/{tenant_id}/send|retry|acknowledge|rollback`,执行租户授权、幂等、签名和回执校验;
- `GET /notifications` 与统一审计事件查询/导出 API;
- OAuth/OIDC、RBAC/ABAC、审批人实时身份、请求签名、幂等键、乐观锁、限流和 WORM 审计。
## 11. 分阶段实施
### 第一阶段
- Source Registry、Scheduler、Raw Store;
- BOSS、智联、百日招聘、NCSS、中国公共招聘网五个连接器;
- `JOB-SIGNAL V3.0`;
- 基础质量、岗位归一和 Parquet 交付。
### 第二阶段
- 国聘、区域人才网、校内就业和实习连接器;
- 企业归一、技能词典和薪资标准化;
- 多租户发布、Manifest、审批和回滚。
### 第三阶段
- 全量连接器回归平台;
- 质量规则编排、自动血缘和版本影响分析;
- 供需报告、专业诊断和大屏使用统一数据产品版本。
+129
View File
@@ -0,0 +1,129 @@
# 产教数据中台,厂商运营原型
本目录用于讨论厂商侧招聘数据采集与治理产品。商业招聘平台、公共就业平台和校内系统统一作为正式数据来源纳入数据生产与治理体系。
## 运行
直接打开 `index.html`,或在本目录启动静态服务:
```bash
python3 -m http.server 8080
```
访问 <http://localhost:8080>。
## 产品定位
这不是多个招聘网站爬虫脚本的简单集合,而是面向产教分析的数据生产控制面:
1. 注册和版本化管理商业、公共、校内三类数据源;
2. 调度采集任务,管理地域、行业、岗位族、分片、失败隔离和增量水位;
3. 保存原始快照、内容哈希、连接器代码版本和任务追踪编号;
4. 将不同来源映射到统一的招聘岗位、企业、薪资和技能契约;
5. 执行质量校验、企业归一、岗位分类和技能抽取;
6. 通过带 Manifest、Schema、质量报告、血缘和校验和的数据包向学校交付。
## 已纳入的正式数据源
| 类别 | 数据源 | 原型状态 | 目标数据 |
|---|---|---|---|
| 商业平台 | BOSS直聘 | 正式运行 | 岗位、企业、地区、薪资、岗位职责、技能 |
| 商业平台 | 智联招聘 | 正式运行 | 岗位、企业、地区、薪资、岗位职责、技能 |
| 公共平台 | 全国中小企业招聘平台 | 正式运行 | 中小企业岗位、校招、实习和招聘活动 |
| 公共平台 | 国家大学生就业服务平台 | 正式运行 | 高校毕业生岗位、专场招聘和实习 |
| 公共平台 | 中国公共招聘网 | 正式运行 | 公共就业岗位、重点行业和招聘活动 |
| 公共平台 | 国聘 | 正式运行 | 国资央企岗位和校园招聘 |
| 公共平台 | 杭州人才网 | 降速保护 | 杭州都市圈企业和岗位 |
| 校内系统 | 就业管理系统 | 正式运行 | 毕业去向、岗位、企业、薪资和专业相关度 |
| 校内系统 | 实习管理系统 | 正式运行 | 实习岗位、企业、工资、过程和企业评价 |
## 交互范围
- **运行总览**:生产批次、采集量、质量、来源健康度、流水线和运营事项。
- **运营处置**:问题确认与指派、排障、不可变质量处置、独立发布审批、逐学校交付回执、失败重试与租户级回滚。
- **数据源管理**:来源分类、搜索、资产详情、采集配置、字段映射、运行与审计。
- **采集任务**:筛选、任务详情、暂停/恢复、新建任务和小样本预检。
- **采集数据**:查看标准岗位、源端记录、原始快照和隔离记录,支持来源、地区、关键词检索、明细追溯和结果导出。
- **数据标准**:外部岗位、校内就业、交付 Manifest 三套版本化契约。
- **导入与导出**:文件拖放、CSV 头部预检、样例下载、Manifest 生成和记录导出。
- **质量与归一**:质量规则、发布阈值、岗位别名人工确认和批量处理。
- **审计与交付**:采集、质量、发布、导入导出事件及证据链。
## 原型黄金闭环
“运营处置”提供一条可重复演示、刷新后保留的最小生产黄金路径:
```text
告警 → 确认 → 指派 → 开始排障
→ 修复并重放 → 记录数 / 规则 / 复核签名 VERIFIED
→ 豁免 / 丢弃 → REVIEWED_BLOCKED,继续阻断
→ REL-20260823-01 候选版本 → 生成并冻结候选 Manifest → 提交审批
→ 独立审批人批准 / 驳回 → 发布
→ 逐学校发送状态 → 记录数 + SHA-256 回执
→ ACKNOWLEDGED / 单校失败重试 / 单租户回滚
→ 全局回滚申请 → 独立回滚审批 → 执行稳定别名回滚
```
- 杭州人才网问题 `ISSUE-HZRC-20260823-01` 可完整流转。只有最后一次处置是 `FIX_REPLAY`,且重放记录数一致、质量规则通过、复核签名存在时,候选版本质量门禁才进入 `PASS`。
- `WAIVE` 与 `DISCARD` 的独立复核会写入 `REVIEWED_BLOCKED`,分别提示另行风险审批或重建候选,不会复用 `VERIFIED/PASS`。
- 发布申请人默认为陈致远,审批人若选择同一人会被四眼规则阻止。
- 候选发布必须同时满足质量门禁和候选 Manifest 已生成;审批中 Manifest 冻结,驳回后返回草稿并使旧候选失效。
- 候选 Manifest 使用输入指纹保证重复生成幂等;产品、租户、截止日期、格式、质量处置和交付摘要未变化时复用原候选,不重复写审计或交换日志。
- 候选版本、数据版本和包分别为 `REL-20260823-01`、`V2026.08.23`、`EDU-PKG-20260823-01`。
- 杭州科技职业技术学院使用共享标识 `TENANT-HZVTC`。另外展示浙江机电职业技术大学和宁波城市职业技术学院,交付状态按租户隔离。
- 原型仓库使用 `localStorage` 命名空间 `eduIndustry.vendorOperations.v1`,当前 `schemaVersion=2`,包含 issues、workOrders、qualityDispositions、releases、approvals、deliveries、auditEvents。页面提供“重置演示数据”恢复种子。
- `PACKAGE-MANIFEST V1.2` 新增 `release_id` 和 `release_status`,并按三个租户输出彼此独立的记录数与 SHA-256 文件项。候选 Manifest 保持 `DRAFT`,正式发布时生成 `PUBLISHED` Manifest,`approval_reference` 固定引用 `APPROVED` 审批单。
- 全局回滚和单租户回滚严格分离。全局回滚必须填写原因、由不同于申请人的审批人批准后才可执行,审计证据保存目标稳定版本、审批引用和影响范围锁。
- 静态演示的审计、质量处置、问题时间线和交换日志采用明确保留上限;正式系统必须使用服务端分页、归档和 WORM 审计。
## 静态跨端边界
本目录是**厂商端静态 SPA 原型**,与仓库根目录下的校园端 `/demo/` 没有运行时连接。双方仅通过约定标识(`TENANT-HZVTC`、`EDU-PKG-20260823-01`、`V2026.08.23`)对照展示,不共享浏览器存储,也不通过静态页面传输数据。
按钮中的发送、回执、重试与回滚均为本地状态机模拟:不会访问学校接口、不会写入校园端、不会发送真实数据。正式跨端同步必须由经过鉴权、签名、幂等和审计控制的服务端 API 执行。
## 标准文件
- `schemas/external-job-source.schema.json`
- `JOB-SIGNAL V3.0`
- 商业和公共招聘平台的统一岗位信号契约
- `schemas/school-employment.schema.json`
- `SCHOOL-EMPLOYMENT V2.2`
- 校内就业事实契约,包含租户隔离和学生令牌化要求
- `schemas/package-manifest.schema.json`
- `PACKAGE-MANIFEST V1.2`
- 版本化导入、导出和学校交付包清单
- `samples/external-job-sample.csv`
- 可在“导入与导出”页面上传并执行前端结构预检
## “可生产”的含义
原型已将正式产品必须具备的对象、状态和证据做进界面与标准,但静态页面不直接执行公网采集。正式后端应实现:
- 独立连接器运行时与容器化任务;
- 消息队列、分片调度、租约、心跳和重试;
- 原始对象存储、解析层、标准层和交付层分区;
- 密钥管理、网络出口、源端策略和任务限额;
- PostgreSQL 元数据、审计事件和数据版本;
- Schema Registry、质量引擎、岗位与企业归一服务;
- 数据包签名、租户范围校验和可回滚发布。
- 问题与工单 API、质量处置不可变事件 API、独立审批 API、版本别名发布/回滚 API;
- 按租户幂等交付 API、回执验签 API、失败隔离与单租户重试/回滚 API;
- 服务端强制状态迁移、RBAC/职责分离、并发版本控制与 WORM 审计,不能信任浏览器 `localStorage`。
详细实现建议见 [PRODUCTION_ARCHITECTURE.md](./PRODUCTION_ARCHITECTURE.md)。
## 验收建议
- 桌面:`1440 × 900`
- 移动:`390 × 844`
- 可见业务文字不小于 13px
- 页面级无横向溢出,宽表仅在自身容器内横向滚动
- 所有深层按钮必须打开业务内容或形成列表状态变化
- JavaScript 语法检查:`node --check app.js`
- JSON 文件检查:`python3 -m json.tool <file>`
新增闭环预览:
- `preview-admin-operations.png`
- `preview-admin-operations-mobile.png`
File diff suppressed because it is too large Load Diff
+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<rect width="64" height="64" rx="15" fill="#102f26"/>
<path d="M14 15h24a6 6 0 0 1 0 12H14a6 6 0 0 1 0-12Z" fill="#c8ec73"/>
<path d="M21 27h29a6 6 0 0 1 0 12H21a6 6 0 0 1 0-12Z" fill="#83c6a0"/>
<path d="M29 39h21a6 6 0 0 1 0 12H29a6 6 0 0 1 0-12Z" fill="#3c9b74"/>
</svg>

After

Width:  |  Height:  |  Size: 343 B

+675
View File
@@ -0,0 +1,675 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="description"
content="产教数据中台,面向厂商数据运营团队管理招聘数据采集、标准契约、导入导出、质量治理与审计交付"
/>
<title>产教数据中台 · 厂商运营中心</title>
<link rel="icon" href="./favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="./styles.css" />
</head>
<body>
<div class="app-shell">
<aside class="sidebar" id="sidebar">
<div class="brand">
<span class="brand-mark" aria-hidden="true"><i></i><i></i><i></i></span>
<span>
<strong>产教数据中台</strong>
<small>INDUSTRY DATA OPS</small>
</span>
</div>
<nav class="main-nav" aria-label="数据中台主导航">
<span class="nav-label">运营工作台</span>
<button class="nav-item active" data-view="overview">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 13h6V4H4v9Zm0 7h6v-4H4v4Zm10 0h6v-9h-6v9Zm0-16v4h6V4h-6Z" /></svg>
<span>运行总览</span>
</button>
<button class="nav-item" data-view="operations">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 4h16v5H4V4Zm0 11h7v5H4v-5Zm11 0h5v5h-5v-5ZM7 9v6m10-6v6" /></svg>
<span>运营处置</span>
<em class="warning" id="operationsNavCount">3</em>
</button>
<button class="nav-item" data-view="sources">
<svg viewBox="0 0 24 24" aria-hidden="true"><ellipse cx="12" cy="5" rx="8" ry="3" /><path d="M4 5v6c0 1.7 3.6 3 8 3s8-1.3 8-3V5M4 11v6c0 1.7 3.6 3 8 3s8-1.3 8-3v-6" /></svg>
<span>数据源管理</span>
<em id="sourceNavCount">9</em>
</button>
<button class="nav-item" data-view="collectors">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 4h14v5H5V4Zm0 11h14v5H5v-5ZM8 9v6m8-6v6M9 6h.01M9 17h.01" /></svg>
<span>采集任务</span>
<i class="nav-live"></i>
</button>
<button class="nav-item" data-view="records">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5h16v14H4V5Zm0 5h16M9 5v14m6-9v9" /></svg>
<span>采集数据</span>
</button>
<button class="nav-item" data-view="contracts">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 3h8l4 4v14H7V3Zm8 0v5h4M10 12h6m-6 4h6M4 7v14h11" /></svg>
<span>数据标准</span>
</button>
<button class="nav-item" data-view="exchange">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M8 7h11M15 3l4 4-4 4M16 17H5m4-4-4 4 4 4" /></svg>
<span>导入与导出</span>
</button>
<button class="nav-item" data-view="quality">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="m12 3 8 4v5c0 5-3.4 8.3-8 9-4.6-.7-8-4-8-9V7l8-4Zm-4 9 2.5 2.5L16 9" /></svg>
<span>质量与归一</span>
<em class="warning">27</em>
</button>
<button class="nav-item" data-view="audit">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M9 3h6l1 3h4v15H4V6h4l1-3Zm0 9 2 2 4-4m-6 8h6" /></svg>
<span>审计与交付</span>
</button>
</nav>
<div class="sidebar-runtime">
<span><i></i>生产环境运行正常</span>
<strong>华东主集群</strong>
<small>采集节点 24 / 24 · 队列延迟 18s</small>
</div>
</aside>
<div class="workspace">
<header class="topbar">
<button class="icon-button mobile-menu" id="mobileMenu" aria-label="打开导航">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h16" /></svg>
</button>
<div class="topbar-context">
<small>全国招聘数据运营中心</small>
<strong id="breadcrumbCurrent">运行总览</strong>
</div>
<label class="global-search">
<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="7" /><path d="m20 20-4-4" /></svg>
<input id="globalSearch" type="search" placeholder="搜索数据源、任务或版本" />
</label>
<div class="topbar-actions">
<span class="environment-chip"><i></i>生产环境</span>
<button class="icon-button" id="notificationButton" aria-label="运行通知">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18 8a6 6 0 0 0-12 0c0 7-3 7-3 9h18c0-2-3-2-3-9M10 21h4" /></svg>
<b>4</b>
</button>
<button class="operator-card" id="operatorButton">
<span>陈</span>
<span><strong>陈致远</strong><small>厂商数据运营管理员</small></span>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="m7 10 5 5 5-5" /></svg>
</button>
</div>
</header>
<main class="main-content">
<section class="view active" id="view-overview" data-title="运行总览">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> DATA OPERATIONS CONTROL PLANE</div>
<h1>招聘数据生产运行总览</h1>
<p>统一管理商业招聘平台、公共就业平台和校内业务系统,从采集到交付全链路可追溯。</p>
</div>
<div class="heading-actions">
<button class="button secondary" data-open-export>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v12m0 0 4-4m-4 4-4-4M5 21h14" /></svg>
导出运行日报
</button>
<button class="button secondary" data-open-source-modal>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 5v14M5 12h14" /></svg>
新增数据源
</button>
<button class="button primary" data-view-jump="records">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 5h16v14H4V5Zm0 5h16M9 5v14m6-9v9" /></svg>
查看采集数据
</button>
</div>
</div>
<article class="production-hero">
<div>
<span class="hero-kicker"><i></i> NATIONAL DATA PIPELINE</span>
<h2>今日生产批次 EDU-JOB-20260823</h2>
<p>9 个数据源进入调度,7 个已完成,2 个持续采集中;当前稳定版本不受运行中任务影响。</p>
<div class="hero-status-row">
<span>运行中<strong>2</strong></span>
<span>今日入湖<strong>190,420</strong></span>
<span>隔离记录<strong>1,286</strong></span>
<span>预计完成<strong>11:40</strong></span>
</div>
</div>
<div class="hero-score">
<span class="score-ring"><strong>94.7</strong><small>综合质量</small></span>
<span><strong id="overviewReleaseState">候选发布受阻</strong><small id="overviewReleaseDetail">杭州人才网修复重放尚未验证</small></span>
</div>
</article>
<div class="metric-grid">
<article><span>有效岗位总量</span><strong>12.84<small>百万</small></strong><em>近90天去重信号</em><i class="positive">↑ 8.6%</i></article>
<article><span>今日采集成功率</span><strong>98.7<small>%</small></strong><em>1,428 / 1,447 分片</em><i class="positive">SLA内</i></article>
<article><span>岗位归一覆盖</span><strong>96.4<small>%</small></strong><em>国标 + 行业词典 V4.3</em><i class="warning">27项待审</i></article>
<article><span>数据交付租户</span><strong>36<small>所</small></strong><em>旗舰版与区域项目</em><i class="positive">全部有效</i></article>
</div>
<div class="overview-grid">
<article class="panel source-health-panel">
<div class="panel-head">
<div><span>来源运行状态</span><h2>核心数据源健康度</h2></div>
<button class="text-button" data-view-jump="sources">查看全部来源</button>
</div>
<div class="source-health-list" id="overviewSourceHealth"></div>
</article>
<article class="panel flow-panel">
<div class="panel-head">
<div><span>处理链路</span><h2>今日数据流水线</h2></div>
<span class="live-label"><i></i>实时</span>
</div>
<div class="pipeline-flow">
<span class="done"><b>01</b><strong>源端采集</strong><small>190,420 条</small></span><i></i>
<span class="done"><b>02</b><strong>原始留存</strong><small>100% 哈希</small></span><i></i>
<span class="active"><b>03</b><strong>清洗归一</strong><small>96.4% 完成</small></span><i></i>
<span><b>04</b><strong>质量验收</strong><small>11:20 预计</small></span><i></i>
<span><b>05</b><strong>版本交付</strong><small>待审批</small></span>
</div>
<div class="flow-caption">
<span><strong>RAW-20260823-09</strong> 原始快照</span>
<span><strong>JOB-SIGNAL 3.0</strong> 目标契约</span>
<span><strong>SHA-256</strong> 全量校验</span>
</div>
</article>
<article class="panel alert-panel">
<div class="panel-head">
<div><span>运营关注</span><h2>待处理事项</h2></div>
<em>4 项</em>
</div>
<div class="alert-list" id="overviewIssueList">
<button data-open-issue="ISSUE-NORM-20260823-01"><i class="red"></i><span><strong>27 个岗位别名待人工归一</strong><small>涉及具身智能、低空经济等新增岗位</small></span><em>高</em></button>
<button data-open-issue="ISSUE-HZRC-20260823-01"><i class="amber"></i><span><strong>杭州人才网响应时延升高</strong><small>最近 20 分钟 P95 为 4.8s,任务已自动降速</small></span><em>中</em></button>
<button data-open-issue="ISSUE-CONTRACT-20260823-01"><i class="blue"></i><span><strong>校内就业契约 V2.2 待发布</strong><small>新增就业质量和去向确认字段</small></span><em>中</em></button>
</div>
</article>
</div>
</section>
<section class="view" id="view-operations" data-title="运营处置">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> OPERATIONS RESOLUTION LOOP</div>
<h1>运营问题、发布与学校交付</h1>
<p>从告警确认、排障和质量复核,到独立审批、版本发布、逐学校回执与租户级回滚,全程保留状态与审计证据。</p>
</div>
<div class="heading-actions">
<button class="button secondary" id="resetOperationsSeed">重置演示数据</button>
<button class="button primary" id="operationsPrimaryAction">处理最高优先级问题</button>
</div>
</div>
<div class="operations-metrics" id="operationsMetrics"></div>
<nav class="operations-tabs" id="operationsTabs" aria-label="运营处置工作区">
<button class="active" data-operations-tab="issues">问题队列</button>
<button data-operations-tab="releases">候选发布</button>
<button data-operations-tab="deliveries">学校交付</button>
</nav>
<div class="operations-workspace active" id="operations-issues">
<article class="panel operations-panel">
<div class="panel-head">
<div><span>ISSUE & WORK ORDER</span><h2>问题处置队列</h2></div>
<em id="issueQueueSummary">加载中</em>
</div>
<div class="table-wrap">
<table class="data-table operations-table">
<thead><tr><th>问题与追踪</th><th>级别 / SLA</th><th>影响</th><th>负责人</th><th>状态</th><th>最近动作</th><th>操作</th></tr></thead>
<tbody id="operationsIssueTable"></tbody>
</table>
</div>
</article>
</div>
<div class="operations-workspace" id="operations-releases">
<div id="releaseWorkspace"></div>
</div>
<div class="operations-workspace" id="operations-deliveries">
<article class="panel operations-panel">
<div class="panel-head">
<div><span>TENANT DELIVERY</span><h2>逐学校交付与回执</h2></div>
<button class="text-button" id="startPendingDeliveries">启动待发送学校</button>
</div>
<div class="delivery-boundary-note">静态原型只模拟并持久化交付状态,不会向学校网络、接口或业务系统真实发送数据。</div>
<div class="table-wrap">
<table class="data-table delivery-table">
<thead><tr><th>学校 / 租户</th><th>包与数据版本</th><th>交付状态</th><th>记录数回执</th><th>SHA-256 回执</th><th>最近动作</th><th>操作</th></tr></thead>
<tbody id="deliveryTable"></tbody>
</table>
</div>
</article>
</div>
</section>
<section class="view" id="view-sources" data-title="数据源管理">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> SOURCE REGISTRY</div>
<h1>统一数据源注册中心</h1>
<p>商业招聘平台、公共就业平台、活动聚合平台和校内系统使用同一套资产、版本和运行模型。</p>
</div>
<div class="heading-actions">
<button class="button secondary" id="sourceCatalogExport">导出数据源目录</button>
<button class="button primary" data-open-source-modal>新增数据源</button>
</div>
</div>
<div class="summary-strip">
<span><small>数据源总数</small><strong id="sourceTotal">9</strong><em>7外部 · 2校内</em></span>
<span><small>正式运行</small><strong id="sourceRunning">8</strong><em>1个降速保护</em></span>
<span><small>今日新增记录</small><strong>190,420</strong><em>有效率 98.1%</em></span>
<span><small>稳定交付版本</small><strong>V2026.08.23</strong><em>36所学校引用</em></span>
</div>
<article class="panel source-registry-panel">
<div class="source-toolbar">
<div class="filter-pills" id="sourceFilters">
<button class="active" data-source-filter="all">全部来源</button>
<button data-source-filter="commercial">商业平台</button>
<button data-source-filter="public">公共平台</button>
<button data-source-filter="school">校内系统</button>
</div>
<label class="inline-search">
<svg viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="11" r="7" /><path d="m20 20-4-4" /></svg>
<input id="sourceSearch" type="search" placeholder="按名称、域名、适配器搜索" />
</label>
</div>
<div class="source-grid" id="sourceGrid"></div>
<div class="list-summary" id="sourceListSummary">当前展示 9 个数据源</div>
</article>
</section>
<section class="view" id="view-collectors" data-title="采集任务">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> COLLECTION ORCHESTRATION</div>
<h1>采集任务编排中心</h1>
<p>按来源、地域、行业和岗位族编排任务,支持分片、限速、失败隔离、断点续采和版本化原始留存。</p>
</div>
<div class="heading-actions">
<button class="button secondary" id="pauseAllJobs">暂停全部</button>
<button class="button primary" id="newCollectionJob">新建采集任务</button>
</div>
</div>
<div class="collector-metrics">
<article><span><i class="green"></i>运行中</span><strong id="runningJobCount">3</strong><small>64 个活跃分片</small></article>
<article><span><i class="blue"></i>今日完成</span><strong>18</strong><small>平均耗时 42 分钟</small></article>
<article><span><i class="amber"></i>自动保护</span><strong>1</strong><small>源端延迟触发降速</small></article>
<article><span><i class="red"></i>失败分片</span><strong>6</strong><small>已进入重试队列</small></article>
</div>
<article class="panel collector-table-panel">
<div class="table-toolbar">
<div class="segmented" id="jobFilters">
<button class="active" data-job-filter="all">全部任务</button>
<button data-job-filter="running">运行中</button>
<button data-job-filter="scheduled">等待调度</button>
<button data-job-filter="attention">需要关注</button>
</div>
<span>调度器心跳:刚刚 · 队列延迟 18s</span>
</div>
<div class="table-wrap">
<table class="data-table">
<thead><tr><th>任务与来源</th><th>采集范围</th><th>运行策略</th><th>进度</th><th>本批次数据</th><th>状态</th><th>操作</th></tr></thead>
<tbody id="collectionJobTable"></tbody>
</table>
</div>
</article>
</section>
<section class="view" id="view-records" data-title="采集数据">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> DATA RECORD EXPLORER</div>
<h1>采集数据浏览与追溯</h1>
<p>按数据层、来源、地区和关键词检索岗位明细,向下追溯源端记录、原始快照、采集任务与内容哈希。</p>
</div>
<div class="heading-actions">
<button class="button secondary" id="recordRefresh">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20 7v5h-5M4 17v-5h5M18 9a7 7 0 0 0-12-2l-2 3m2 5a7 7 0 0 0 12 2l2-3" /></svg>
刷新查询
</button>
<button class="button primary" id="recordExport">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v12m0 0 4-4m-4 4-4-4M5 21h14" /></svg>
导出当前结果
</button>
</div>
</div>
<div class="summary-strip record-summary-strip">
<span><small>稳定标准岗位</small><strong>12.84M</strong><em>JOB-SIGNAL V3.0</em></span>
<span><small>今日源端入湖</small><strong>190,420</strong><em>9个来源批次</em></span>
<span><small>今日标准入湖</small><strong>189,134</strong><em>已通过生产质量规则</em></span>
<span><small>隔离记录</small><strong>1,286</strong><em>未进入稳定版本</em></span>
</div>
<article class="panel record-browser-panel">
<div class="record-layer-tabs" id="recordLayers" aria-label="数据层">
<button class="active" data-record-layer="standard"><span>STANDARD</span><strong>标准岗位</strong><small>清洗归一后的生产数据</small></button>
<button data-record-layer="source"><span>SOURCE</span><strong>源端记录</strong><small>保留来源原始业务字段</small></button>
<button data-record-layer="raw"><span>RAW</span><strong>原始快照</strong><small>请求响应、文件与内容哈希</small></button>
<button data-record-layer="quarantine"><span>QUARANTINE</span><strong>隔离记录</strong><small>质量失败与人工处置</small></button>
</div>
<div class="record-query-bar">
<label><span>数据来源</span><select id="recordSourceFilter"></select></label>
<label><span>工作地区</span><select id="recordRegionFilter"><option value="all">全部地区</option><option value="杭州">杭州</option><option value="宁波">宁波</option><option value="嘉兴">嘉兴</option><option value="绍兴">绍兴</option><option value="上海">上海</option><option value="苏州">苏州</option></select></label>
<label class="record-search-field"><span>检索条件</span><input id="recordSearch" type="search" placeholder="岗位、企业、记录编号、任务或快照" /></label>
</div>
<div class="query-service-note">
<span><i></i>查询服务</span>
<strong>当前绑定稳定版本 V2026.08.23</strong>
<small>静态原型展示契约化结构样例;正式环境由数据查询服务分页返回已采集明细,并执行租户范围与字段权限控制。</small>
</div>
<div id="recordTableContainer"></div>
<div class="record-list-footer">
<span id="recordQuerySummary">正在加载查询结果</span>
<small>点击“查看”可核对业务字段、来源URL、任务、快照和SHA-256证据。</small>
</div>
</article>
</section>
<section class="view" id="view-contracts" data-title="数据标准">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> DATA CONTRACT GOVERNANCE</div>
<h1>产教数据标准与契约中心</h1>
<p>第三方招聘数据和校内业务数据按版本化契约交付,字段、代码、质量、脱敏和变更策略一次定义、全链路执行。</p>
</div>
<div class="heading-actions">
<button class="button secondary" id="compareContractVersions">版本对比</button>
<button class="button primary" id="downloadStandardKit">下载标准包</button>
</div>
</div>
<div class="contract-tabs" id="contractTabs">
<button class="active" data-contract="external-job"><span>JOB-SIGNAL</span><strong>外部岗位信号</strong><small>V3.0 · 39字段</small></button>
<button data-contract="school-employment"><span>SCHOOL-EMPLOYMENT</span><strong>校内就业事实</strong><small>V2.2 · 32字段</small></button>
<button data-contract="package-manifest"><span>PACKAGE-MANIFEST</span><strong>交付包清单</strong><small>V1.2 · 21字段</small></button>
</div>
<div id="contractContent"></div>
</section>
<section class="view" id="view-exchange" data-title="导入与导出">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> DATA EXCHANGE</div>
<h1>数据导入与交付中心</h1>
<p>支持标准文件导入、Schema 预检、字段映射、质量干跑和带清单、校验和、质量报告的版本化导出。</p>
</div>
<div class="heading-actions">
<a class="button secondary" href="./samples/external-job-sample.csv" download>下载导入样例</a>
<button class="button primary" id="buildExportPackage">创建交付包</button>
</div>
</div>
<div class="exchange-grid">
<article class="panel import-panel">
<div class="panel-head"><div><span>标准导入</span><h2>上传并校验数据文件</h2></div><em>CSV / JSONL / XLSX / Parquet</em></div>
<label class="upload-zone" id="uploadZone">
<input id="importFile" type="file" accept=".csv,.json,.jsonl,.xlsx,.parquet" />
<span class="upload-icon">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 16V4m0 0 4 4m-4-4L8 8M5 20h14" /></svg>
</span>
<strong>选择文件或拖放到此处</strong>
<small>最大 2GB;大文件将自动分片并计算 SHA-256</small>
</label>
<div class="import-configuration">
<label><span>目标契约</span><select id="importContract"><option value="external-job">JOB-SIGNAL V3.0</option><option value="school-employment">SCHOOL-EMPLOYMENT V2.2</option></select></label>
<label><span>导入模式</span><select id="importMode"><option>新增或更新 UPSERT</option><option>初次全量 FULL</option><option>仅质量验证 DRY-RUN</option></select></label>
</div>
<div class="import-preview" id="importPreview">
<span><small>等待文件</small><strong>尚未选择导入文件</strong></span>
<button class="button primary" id="validateImport" disabled>执行预检</button>
</div>
</article>
<article class="panel export-panel">
<div class="panel-head"><div><span>版本交付</span><h2>构建数据交付包</h2></div><em>可复核、可回滚</em></div>
<div class="export-form">
<label><span>数据产品</span><select id="exportProduct"><option>区域招聘岗位基础包</option><option>薪资与企业画像增强包</option><option>产业趋势与政策信号包</option></select></label>
<label><span>目标租户</span><select id="exportTenant"><option>36所已授权学校</option><option>杭州科技职业技术学院</option><option>华东区域项目组</option></select></label>
<label><span>数据截止日期</span><input id="exportAsOf" type="date" value="2026-08-23" /></label>
<label><span>格式</span><select id="exportFormat"><option>Parquet + Manifest</option><option>CSV UTF-8 + Manifest</option><option>JSONL + Manifest</option></select></label>
</div>
<div class="package-includes">
<span><i>✓</i>业务数据文件</span><span><i>✓</i>JSON Schema</span><span><i>✓</i>代码字典</span>
<span><i>✓</i>质量报告</span><span><i>✓</i>血缘与来源清单</span><span><i>✓</i>SHA-256 校验和</span>
</div>
<button class="button primary wide" id="generatePackage">生成候选包 / Manifest</button>
</article>
</div>
<article class="panel recent-exchange-panel">
<div class="panel-head"><div><span>交换记录</span><h2>最近导入与交付任务</h2></div><button class="text-button" id="exportExchangeLog">导出记录</button></div>
<div class="table-wrap">
<table class="data-table compact">
<thead><tr><th>追踪编号</th><th>类型</th><th>对象</th><th>数据版本</th><th>记录数</th><th>执行人</th><th>结果</th><th>时间</th></tr></thead>
<tbody id="exchangeLogTable"></tbody>
</table>
</div>
</article>
</section>
<section class="view" id="view-quality" data-title="质量与归一">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> QUALITY & NORMALIZATION</div>
<h1>数据质量与岗位归一</h1>
<p>执行结构、完整性、唯一性、时效性和业务规则校验,将多来源岗位映射到统一岗位与技能体系。</p>
</div>
<div class="heading-actions">
<button class="button secondary" id="qualityRuleButton">质量规则</button>
<button class="button primary" id="normalizationBatch">批量处理待审项</button>
</div>
</div>
<div class="quality-layout">
<article class="quality-score-card">
<span class="quality-ring"><strong>94.7</strong><small>综合质量</small></span>
<div><span>生产发布阈值 ≥ 90</span><strong id="qualityReleaseState">当前批次仍需修复重放复核</strong><small id="qualityReleaseDetail">质量分达标不等于门禁通过,稳定版本继续保持不变</small></div>
</article>
<div class="quality-dimensions">
<span><small>完整性</small><strong>97.8%</strong><i><b style="width:97.8%"></b></i></span>
<span><small>唯一性</small><strong>99.6%</strong><i><b style="width:99.6%"></b></i></span>
<span><small>时效性</small><strong>93.1%</strong><i><b style="width:93.1%"></b></i></span>
<span><small>岗位归一</small><strong>96.4%</strong><i><b style="width:96.4%"></b></i></span>
</div>
</div>
<div class="quality-grid">
<article class="panel rule-panel">
<div class="panel-head"><div><span>规则执行</span><h2>当前质量规则组</h2></div><em>32条启用</em></div>
<div class="rule-list" id="qualityRuleList"></div>
</article>
<article class="panel normalization-panel">
<div class="panel-head"><div><span>人工复核</span><h2>岗位归一待审队列</h2></div><em>27项</em></div>
<div class="normalization-list" id="normalizationList"></div>
</article>
</div>
</section>
<section class="view" id="view-audit" data-title="审计与交付">
<div class="page-heading">
<div>
<div class="eyebrow"><i></i> AUDIT & DELIVERY</div>
<h1>全链路审计与生产交付</h1>
<p>记录来源、采集任务、代码版本、原始快照、处理规则、发布审批和租户交付,实现问题可定位、版本可回滚。</p>
</div>
<div class="heading-actions">
<button class="button secondary" id="auditPolicyButton">审计策略</button>
<button class="button primary" id="exportAuditLog">导出审计日志</button>
</div>
</div>
<div class="audit-summary">
<article><small>今日审计事件</small><strong>2,846</strong><em>全部已签名</em></article>
<article><small>数据版本</small><strong>128</strong><em>保留 36 个月</em></article>
<article><small>可追踪任务</small><strong>100%</strong><em>原始快照已绑定</em></article>
<article><small>交付租户</small><strong>36</strong><em>范围策略有效</em></article>
</div>
<article class="panel audit-table-panel">
<div class="table-toolbar">
<div class="segmented" id="auditFilters">
<button class="active" data-audit-filter="all">全部事件</button>
<button data-audit-filter="collect">采集</button>
<button data-audit-filter="quality">质量</button>
<button data-audit-filter="publish">发布</button>
<button data-audit-filter="operations">运营处置</button>
<button data-audit-filter="exchange">导入导出</button>
</div>
<span>审计存储 WORM · 每日校验</span>
</div>
<div class="table-wrap">
<table class="data-table">
<thead><tr><th>时间与追踪编号</th><th>事件</th><th>对象</th><th>操作者/服务</th><th>结果</th><th>证据</th></tr></thead>
<tbody id="auditTable"></tbody>
</table>
</div>
</article>
</section>
</main>
</div>
</div>
<div class="sidebar-scrim" id="sidebarScrim"></div>
<div class="toast-region" id="toastRegion" aria-live="polite"></div>
<div class="drawer-backdrop" id="sourceDrawer" aria-hidden="true">
<aside class="drawer" role="dialog" aria-modal="true" aria-labelledby="sourceDrawerTitle">
<header class="drawer-header">
<div>
<span id="sourceDrawerKicker">SOURCE DETAIL</span>
<h2 id="sourceDrawerTitle">数据源详情</h2>
<p id="sourceDrawerDescription">查看采集策略、映射、运行和审计证据。</p>
</div>
<button class="icon-button" id="closeSourceDrawer" aria-label="关闭数据源详情">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18" /></svg>
</button>
</header>
<nav class="drawer-tabs" id="sourceDrawerTabs">
<button class="active" data-source-tab="overview">资产概览</button>
<button data-source-tab="acquisition">采集配置</button>
<button data-source-tab="mapping">字段映射</button>
<button data-source-tab="runtime">运行记录</button>
<button data-source-tab="audit">审计证据</button>
</nav>
<div class="drawer-content" id="sourceDrawerContent"></div>
<footer class="drawer-footer" id="sourceDrawerFooter"></footer>
</aside>
</div>
<div class="drawer-backdrop" id="recordDrawer" aria-hidden="true">
<aside class="drawer record-drawer" role="dialog" aria-modal="true" aria-labelledby="recordDrawerTitle">
<header class="drawer-header">
<div>
<span id="recordDrawerKicker">DATA RECORD</span>
<h2 id="recordDrawerTitle">采集记录详情</h2>
<p id="recordDrawerDescription">查看业务字段和全链路来源证据。</p>
</div>
<button class="icon-button" id="closeRecordDrawer" aria-label="关闭采集记录详情">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18" /></svg>
</button>
</header>
<div class="drawer-content" id="recordDrawerContent"></div>
<footer class="drawer-footer" id="recordDrawerFooter"></footer>
</aside>
</div>
<div class="drawer-backdrop" id="issueDrawer" aria-hidden="true">
<aside class="drawer issue-drawer" role="dialog" aria-modal="true" aria-labelledby="issueDrawerTitle">
<header class="drawer-header">
<div>
<span id="issueDrawerKicker">OPERATIONS ISSUE</span>
<h2 id="issueDrawerTitle">问题详情</h2>
<p id="issueDrawerDescription">查看负责人、SLA、影响、证据和处置时间线。</p>
</div>
<button class="icon-button" id="closeIssueDrawer" aria-label="关闭问题详情">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18" /></svg>
</button>
</header>
<div class="drawer-content" id="issueDrawerContent"></div>
<footer class="drawer-footer issue-drawer-footer" id="issueDrawerFooter"></footer>
</aside>
</div>
<div class="modal-backdrop" id="sourceModal" aria-hidden="true">
<section class="modal" role="dialog" aria-modal="true" aria-labelledby="sourceModalTitle">
<button class="modal-close" data-close-modal aria-label="关闭">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18" /></svg>
</button>
<span class="modal-kicker">SOURCE ONBOARDING</span>
<h2 id="sourceModalTitle">注册新数据源</h2>
<p>登记来源、连接方式和目标契约,保存后自动创建连接测试与初次全量任务。</p>
<form id="sourceForm">
<div class="form-grid">
<label><span>数据源名称</span><input id="newSourceName" required placeholder="例如:区域人才招聘平台" /></label>
<label><span>来源类别</span><select id="newSourceCategory"><option value="commercial">商业招聘平台</option><option value="public">公共就业平台</option><option value="school">校内业务系统</option></select></label>
<label class="full"><span>入口域名或接口地址</span><input id="newSourceDomain" required placeholder="https://example.com/jobs" /></label>
<label><span>接入方式</span><select id="newSourceMode"><option>网页采集器</option><option>官方 API</option><option>授权数据包</option><option>数据库视图</option><option>标准文件导入</option></select></label>
<label><span>目标契约</span><select id="newSourceContract"><option>JOB-SIGNAL V3.0</option><option>SCHOOL-EMPLOYMENT V2.2</option><option>SCHOOL-INTERNSHIP V2.1</option></select></label>
<label><span>更新频率</span><select id="newSourceSchedule"><option>每 6 小时</option><option>每日 02:00</option><option>每周一</option><option>人工触发</option></select></label>
<label><span>技术负责人</span><input id="newSourceOwner" value="平台采集工程组" /></label>
<label class="full"><span>采集范围</span><textarea id="newSourceScope" rows="3">全国 · 应届生与实习岗位 · 重点产业岗位族</textarea></label>
</div>
<div class="modal-actions">
<button type="button" class="button secondary" data-close-modal>取消</button>
<button type="submit" class="button primary">注册并创建连接测试</button>
</div>
</form>
</section>
</div>
<div class="modal-backdrop" id="jobModal" aria-hidden="true">
<section class="modal" role="dialog" aria-modal="true" aria-labelledby="jobModalTitle">
<button class="modal-close" data-close-modal aria-label="关闭">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18" /></svg>
</button>
<span class="modal-kicker">COLLECTION JOB</span>
<h2 id="jobModalTitle">新建采集任务</h2>
<p>选择来源、范围和运行策略,任务会先进行小样本预检,再进入生产队列。</p>
<form id="jobForm">
<div class="form-grid">
<label><span>任务名称</span><input id="jobName" required value="重点产业岗位增量采集" /></label>
<label><span>数据源</span><select id="jobSource"></select></label>
<label><span>地域范围</span><input id="jobRegion" value="杭州、宁波、嘉兴、绍兴" /></label>
<label><span>岗位范围</span><input id="jobScope" value="数字技术、智能制造、现代服务" /></label>
<label><span>任务模式</span><select id="jobMode"><option>增量采集</option><option>初次全量</option><option>样本验证</option></select></label>
<label><span>优先级</span><select id="jobPriority"><option>P1 标准</option><option>P0 紧急</option><option>P2 后台</option></select></label>
<label><span>调度时间</span><select id="jobSchedule"><option>立即执行</option><option>下个调度窗口</option><option>每日 02:00</option></select></label>
<label><span>失败策略</span><select><option>分片隔离,其他继续</option><option>任一失败则停止</option></select></label>
</div>
<div class="modal-actions">
<button type="button" class="button secondary" data-close-modal>取消</button>
<button type="submit" class="button primary">创建并进入预检</button>
</div>
</form>
</section>
</div>
<div class="modal-backdrop" id="infoModal" aria-hidden="true">
<section class="modal compact-modal" role="dialog" aria-modal="true" aria-labelledby="infoModalTitle">
<button class="modal-close" data-close-modal aria-label="关闭">
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18" /></svg>
</button>
<span class="modal-kicker" id="infoModalKicker">DETAIL</span>
<h2 id="infoModalTitle">详情</h2>
<div id="infoModalContent"></div>
<div class="modal-actions"><button class="button primary" data-close-modal>完成</button></div>
</section>
</div>
<script src="./app.js"></script>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 KiB

@@ -0,0 +1,4 @@
record_id,source_platform,source_record_id,source_url,collector_task_id,collector_version,raw_snapshot_id,collected_at,first_seen_at,last_seen_at,published_at,status,job_title_raw,job_title_normalized,job_code,job_description,enterprise_name,enterprise_id,region_code,workplace,employment_type,recruitment_count,education_level,experience_min_years,salary_min,salary_max,salary_currency,salary_period,skills,source_payload_hash,content_hash,parsing_version,normalized_at,data_version
e5a87030-3c5f-4d74-a3ca-89427e2f75a1,BOSS,BOSS-20260823-884201,https://www.bosszhipin.com/job_detail/sample-884201.html,JOB-20260823-1042,BOSS-Collector-4.6.2,RAW-BOSS-20260823-000884,2026-08-23T10:42:18+08:00,2026-08-21T09:10:00+08:00,2026-08-23T10:42:18+08:00,2026-08-21T08:56:00+08:00,active,云原生开发工程师,云计算工程技术人员,IT.CLOUD.DEV,"负责容器平台应用开发、持续集成和服务可观测性建设。",杭州示例数字科技有限公司,ENT_7f40a90d45c72b18,330100,杭州市滨江区,full_time,6,bachelor,1,12000,18000,CNY,month,"Docker|Kubernetes|Java|CI/CD",4f8d91a47e2b6d82b2aaad136d344d61c83f9cd472185d2543725c91870e9e32,96c2be742dc43f8e7ee526db6358030873406c450f15e67225c605dc39b431a8,PARSER-BOSS-4.6.2,2026-08-23T10:45:00+08:00,V2026.08.23
57df68fe-2454-44d2-9f3d-20e91ac0912a,ZHAOPIN,ZL-20260823-620311,https://www.zhaopin.com/jobdetail/sample-620311.htm,JOB-20260823-1038,ZHAOPIN-Collector-3.8.1,RAW-ZHAOPIN-20260823-000620,2026-08-23T10:38:06+08:00,2026-08-22T14:20:00+08:00,2026-08-23T10:38:06+08:00,2026-08-22T14:05:00+08:00,active,工业视觉应用工程师,人工智能工程技术人员,AI.VISION.APP,"负责机器视觉方案部署、相机标定、缺陷检测模型优化和产线集成。",浙江示例智能装备股份有限公司,ENT_143c8d80f501e6a9,330200,宁波市鄞州区,full_time,4,associate,2,10000,16000,CNY,month,"Python|OpenCV|机器视觉|PLC",c2d8f733e6711219823110d7d35fdc5535f133ed60f60950f9dc78a228cb402d,66e102b99bf056868670ac971011740c6f66f62b86ea43cc66326ed9a0a5807e,PARSER-ZHAOPIN-3.8.1,2026-08-23T10:41:00+08:00,V2026.08.23
62eaa80d-0b30-462b-8eca-c6c9bb5e8446,BRZP,BRZP-20260823-110028,https://brzp.chinasme.cn/brzp/job/sample-110028,JOB-20260823-0955,BRZP-Collector-2.1.0,RAW-BRZP-20260823-000110,2026-08-23T09:55:12+08:00,2026-08-23T01:42:00+08:00,2026-08-23T09:55:12+08:00,2026-08-22T18:00:00+08:00,active,跨境电商运营实习生,电子商务师,EC.CROSSBORDER.OPS,"协助店铺运营、海外内容制作、经营数据分析与合规资料整理。",浙江示例跨境服务有限公司,ENT_82b038ab219c4e80,330400,嘉兴市南湖区,internship,12,associate,0,3500,5000,CNY,month,"跨境电商|内容运营|数据分析|英语",a831bd0d4e29cab1e650f36a4fc9c5d5cc8053f560b5d3dc7aac62b384b47e11,310ae74d6d695235229da958f8fb8e59af6ea4bebef659dfdc1a6bc0764f3f30,PARSER-BRZP-2.1.0,2026-08-23T10:00:00+08:00,V2026.08.23
1 record_id source_platform source_record_id source_url collector_task_id collector_version raw_snapshot_id collected_at first_seen_at last_seen_at published_at status job_title_raw job_title_normalized job_code job_description enterprise_name enterprise_id region_code workplace employment_type recruitment_count education_level experience_min_years salary_min salary_max salary_currency salary_period skills source_payload_hash content_hash parsing_version normalized_at data_version
2 e5a87030-3c5f-4d74-a3ca-89427e2f75a1 BOSS BOSS-20260823-884201 https://www.bosszhipin.com/job_detail/sample-884201.html JOB-20260823-1042 BOSS-Collector-4.6.2 RAW-BOSS-20260823-000884 2026-08-23T10:42:18+08:00 2026-08-21T09:10:00+08:00 2026-08-23T10:42:18+08:00 2026-08-21T08:56:00+08:00 active 云原生开发工程师 云计算工程技术人员 IT.CLOUD.DEV 负责容器平台应用开发、持续集成和服务可观测性建设。 杭州示例数字科技有限公司 ENT_7f40a90d45c72b18 330100 杭州市滨江区 full_time 6 bachelor 1 12000 18000 CNY month Docker|Kubernetes|Java|CI/CD 4f8d91a47e2b6d82b2aaad136d344d61c83f9cd472185d2543725c91870e9e32 96c2be742dc43f8e7ee526db6358030873406c450f15e67225c605dc39b431a8 PARSER-BOSS-4.6.2 2026-08-23T10:45:00+08:00 V2026.08.23
3 57df68fe-2454-44d2-9f3d-20e91ac0912a ZHAOPIN ZL-20260823-620311 https://www.zhaopin.com/jobdetail/sample-620311.htm JOB-20260823-1038 ZHAOPIN-Collector-3.8.1 RAW-ZHAOPIN-20260823-000620 2026-08-23T10:38:06+08:00 2026-08-22T14:20:00+08:00 2026-08-23T10:38:06+08:00 2026-08-22T14:05:00+08:00 active 工业视觉应用工程师 人工智能工程技术人员 AI.VISION.APP 负责机器视觉方案部署、相机标定、缺陷检测模型优化和产线集成。 浙江示例智能装备股份有限公司 ENT_143c8d80f501e6a9 330200 宁波市鄞州区 full_time 4 associate 2 10000 16000 CNY month Python|OpenCV|机器视觉|PLC c2d8f733e6711219823110d7d35fdc5535f133ed60f60950f9dc78a228cb402d 66e102b99bf056868670ac971011740c6f66f62b86ea43cc66326ed9a0a5807e PARSER-ZHAOPIN-3.8.1 2026-08-23T10:41:00+08:00 V2026.08.23
4 62eaa80d-0b30-462b-8eca-c6c9bb5e8446 BRZP BRZP-20260823-110028 https://brzp.chinasme.cn/brzp/job/sample-110028 JOB-20260823-0955 BRZP-Collector-2.1.0 RAW-BRZP-20260823-000110 2026-08-23T09:55:12+08:00 2026-08-23T01:42:00+08:00 2026-08-23T09:55:12+08:00 2026-08-22T18:00:00+08:00 active 跨境电商运营实习生 电子商务师 EC.CROSSBORDER.OPS 协助店铺运营、海外内容制作、经营数据分析与合规资料整理。 浙江示例跨境服务有限公司 ENT_82b038ab219c4e80 330400 嘉兴市南湖区 internship 12 associate 0 3500 5000 CNY month 跨境电商|内容运营|数据分析|英语 a831bd0d4e29cab1e650f36a4fc9c5d5cc8053f560b5d3dc7aac62b384b47e11 310ae74d6d695235229da958f8fb8e59af6ea4bebef659dfdc1a6bc0764f3f30 PARSER-BRZP-2.1.0 2026-08-23T10:00:00+08:00 V2026.08.23
+20
View File
@@ -0,0 +1,20 @@
# 数据契约目录
所有契约使用 JSON Schema Draft 2020-12。
## 发布要求
1. 契约名称和版本必须唯一;
2. 兼容变更提升次版本,修订说明或约束修复提升补丁版本;
3. 删除字段、改变类型或收紧必填要求属于破坏性变更,必须提升主版本;
4. 发布前执行历史样本回放、来源映射测试和下游影响分析;
5. 交付包必须绑定精确契约版本,不允许只引用“最新版本”;
6. Schema、样例、字段说明、代码字典和变更日志作为同一发布物。
## 当前契约
| 契约 | 版本 | 适用范围 |
|---|---|---|
| `JOB-SIGNAL` | 3.0.0 | 商业招聘平台、公共就业平台、活动聚合平台 |
| `SCHOOL-EMPLOYMENT` | 2.2.0 | 学校就业管理系统、数据库视图、API和标准文件 |
| `PACKAGE-MANIFEST` | 1.2.0 | 导入、导出、租户交付和归档;新增可选发布候选编号与状态 |
@@ -0,0 +1,266 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schemas.edu-industry.cn/job-signal/3.0.0/schema.json",
"title": "JOB-SIGNAL V3.0 外部招聘岗位信号",
"description": "商业招聘平台、公共就业平台与招聘活动平台统一岗位信号契约。",
"type": "object",
"additionalProperties": false,
"required": [
"record_id",
"source_platform",
"source_record_id",
"source_url",
"collector_task_id",
"collector_version",
"raw_snapshot_id",
"collected_at",
"first_seen_at",
"last_seen_at",
"status",
"job_title_raw",
"job_description",
"enterprise_name",
"region_code",
"employment_type",
"source_payload_hash",
"content_hash",
"data_version"
],
"properties": {
"record_id": {
"type": "string",
"format": "uuid",
"description": "平台生成的全局唯一记录标识。"
},
"source_platform": {
"type": "string",
"pattern": "^[A-Z][A-Z0-9_]{1,31}$",
"description": "来源平台代码,例如 BOSS、ZHAOPIN、BRZP、NCSS、MOHRSS。"
},
"source_record_id": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "来源平台内的记录标识,与 source_platform 组成幂等键。"
},
"source_url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "可回溯的来源页面或接口定位。"
},
"collector_task_id": {
"type": "string",
"pattern": "^JOB-[A-Za-z0-9-]{8,64}$",
"description": "生产采集任务追踪编号。"
},
"collector_version": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "采集器名称、语义版本与代码提交摘要。"
},
"raw_snapshot_id": {
"type": "string",
"pattern": "^RAW-[A-Za-z0-9-]{8,96}$",
"description": "原始响应或页面快照编号。"
},
"collected_at": {
"type": "string",
"format": "date-time",
"description": "平台实际采集时间,必须包含时区。"
},
"first_seen_at": {
"type": "string",
"format": "date-time",
"description": "平台首次发现该岗位的时间。"
},
"last_seen_at": {
"type": "string",
"format": "date-time",
"description": "平台最近一次确认该岗位仍存在的时间。"
},
"published_at": {
"type": ["string", "null"],
"format": "date-time",
"description": "来源平台显示的岗位发布时间。"
},
"status": {
"type": "string",
"enum": ["active", "inactive", "expired", "unknown"],
"description": "岗位在当前数据版本中的状态。"
},
"job_title_raw": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "来源岗位名称原文。"
},
"job_title_normalized": {
"type": ["string", "null"],
"maxLength": 200,
"description": "映射到统一岗位词典后的标准名称。"
},
"job_code": {
"type": ["string", "null"],
"pattern": "^[A-Z0-9.-]{2,32}$",
"description": "统一岗位分类代码。"
},
"job_description": {
"type": "string",
"minLength": 1,
"maxLength": 30000,
"description": "去除展示标记与联系方式后的岗位职责和要求文本。"
},
"enterprise_name": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "来源企业名称原文。"
},
"enterprise_id": {
"type": ["string", "null"],
"maxLength": 128,
"description": "平台企业归一标识。"
},
"enterprise_credit_code": {
"type": ["string", "null"],
"pattern": "^[0-9A-Z]{18}$",
"description": "可公开确认时使用的统一社会信用代码。"
},
"enterprise_industry_code": {
"type": ["string", "null"],
"maxLength": 32,
"description": "企业所属行业代码。"
},
"enterprise_scale": {
"type": ["string", "null"],
"enum": ["micro", "small", "medium", "large", "unknown", null],
"description": "统一企业规模分组。"
},
"region_code": {
"type": "string",
"pattern": "^[0-9]{6}$",
"description": "GB/T 2260 六位行政区划代码。"
},
"workplace": {
"type": ["string", "null"],
"maxLength": 500,
"description": "来源工作地点文本。"
},
"employment_type": {
"type": "string",
"enum": ["full_time", "internship", "part_time", "contract", "campus", "other"],
"description": "统一用工或招聘类型。"
},
"recruitment_count": {
"type": ["integer", "null"],
"minimum": 0,
"maximum": 1000000,
"description": "明确披露时记录计划招聘人数。"
},
"education_level": {
"type": ["string", "null"],
"enum": ["none", "secondary", "vocational", "associate", "bachelor", "master", "doctor", "unknown", null],
"description": "最低学历要求。"
},
"experience_min_years": {
"type": ["number", "null"],
"minimum": 0,
"maximum": 60,
"description": "最低工作经验年限。"
},
"salary_min": {
"type": ["number", "null"],
"minimum": 0,
"maximum": 10000000,
"description": "统一折算后的税前月薪下限,单位为 salary_currency。"
},
"salary_max": {
"type": ["number", "null"],
"minimum": 0,
"maximum": 10000000,
"description": "统一折算后的税前月薪上限。"
},
"salary_currency": {
"type": ["string", "null"],
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 币种代码,境内岗位通常为 CNY。"
},
"salary_period": {
"type": ["string", "null"],
"enum": ["month", "year", "day", "hour", "negotiable", "unknown", null],
"description": "来源薪资周期,统一月薪字段与原始周期同时保留。"
},
"benefits": {
"type": "array",
"maxItems": 100,
"items": {
"type": "string",
"maxLength": 100
},
"uniqueItems": true,
"description": "福利标签。"
},
"skills": {
"type": "array",
"maxItems": 200,
"items": {
"type": "string",
"maxLength": 100
},
"uniqueItems": true,
"description": "基于技能词典提取并归一的技能标签。"
},
"keywords": {
"type": "array",
"maxItems": 200,
"items": {
"type": "string",
"maxLength": 100
},
"uniqueItems": true,
"description": "用于检索的业务关键词。"
},
"source_payload_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "原始响应载荷 SHA-256。"
},
"content_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "规范化业务内容 SHA-256,用于内容去重。"
},
"parsing_version": {
"type": ["string", "null"],
"maxLength": 128,
"description": "解析规则版本。"
},
"normalized_at": {
"type": ["string", "null"],
"format": "date-time",
"description": "岗位和技能归一完成时间。"
},
"data_version": {
"type": "string",
"pattern": "^V[0-9]{4}\\.[0-9]{2}\\.[0-9]{2}(?:\\.[0-9]+)?$",
"description": "进入分析层的数据版本。"
}
},
"allOf": [
{
"if": {
"required": ["salary_min", "salary_max"]
},
"then": {
"properties": {
"salary_max": {
"type": "number",
"minimum": 0
}
}
}
}
]
}
@@ -0,0 +1,185 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schemas.edu-industry.cn/package-manifest/1.2.0/schema.json",
"title": "PACKAGE-MANIFEST V1.2 数据交付包清单",
"description": "数据导入、导出和租户交付使用的版本、范围、文件、质量与血缘清单。",
"type": "object",
"additionalProperties": false,
"required": [
"manifest_version",
"package_id",
"data_product",
"data_version",
"contract_name",
"contract_version",
"data_as_of",
"tenant_scope",
"record_count",
"quality_score",
"lineage_snapshot",
"files",
"generated_at",
"generated_by"
],
"properties": {
"manifest_version": {
"type": "string",
"const": "1.2.0"
},
"package_id": {
"type": "string",
"pattern": "^EDU-PKG-[0-9]{8}-[A-Z0-9]{2,24}$",
"description": "数据交付包唯一编号。"
},
"release_id": {
"type": "string",
"pattern": "^REL-[0-9]{8}-[A-Z0-9-]{2,32}$",
"description": "生成此 Manifest 的发布候选编号。"
},
"release_status": {
"type": "string",
"enum": ["DRAFT", "PENDING_APPROVAL", "APPROVED", "REJECTED", "PUBLISHED", "ROLLED_BACK"],
"description": "Manifest 生成时的候选或发布状态。"
},
"data_product": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "平台数据产品名称或代码。"
},
"data_version": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "业务数据版本。"
},
"contract_name": {
"type": "string",
"pattern": "^[A-Z][A-Z0-9-]{2,63}$",
"description": "绑定的数据契约名称。"
},
"contract_version": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
"description": "精确的数据契约版本。"
},
"data_as_of": {
"type": "string",
"format": "date",
"description": "交付数据业务截止日期。"
},
"tenant_scope": {
"type": "array",
"minItems": 1,
"maxItems": 10000,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"description": "允许接收此交付包的租户或数据范围代码。"
},
"output_format": {
"type": ["string", "null"],
"enum": ["parquet", "csv_utf8", "jsonl", "xlsx", null],
"description": "主数据文件格式。"
},
"record_count": {
"type": "integer",
"minimum": 0,
"description": "有效业务记录总数。"
},
"quality_score": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "与质量报告一致的综合质量评分。"
},
"quality_report_path": {
"type": ["string", "null"],
"maxLength": 1024,
"description": "质量报告在交付包中的相对路径。"
},
"lineage_snapshot": {
"type": "string",
"pattern": "^LINEAGE-[A-Z0-9-]{8,96}$",
"description": "数据血缘快照编号。"
},
"previous_stable_version": {
"type": ["string", "null"],
"maxLength": 128,
"description": "上一稳定版本,用于回滚和版本对比。"
},
"files": {
"type": "array",
"minItems": 1,
"maxItems": 10000,
"items": {
"$ref": "#/$defs/file"
},
"description": "交付包内全部文件和校验信息。"
},
"generated_at": {
"type": "string",
"format": "date-time",
"description": "交付包生成时间。"
},
"generated_by": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "生成任务、服务账号或操作人。"
},
"approval_reference": {
"type": ["string", "null"],
"maxLength": 256,
"description": "生产发布审批记录编号。"
},
"notes": {
"type": ["string", "null"],
"maxLength": 4000,
"description": "交付说明、限制和已知问题。"
}
},
"$defs": {
"file": {
"type": "object",
"additionalProperties": false,
"required": ["path", "media_type", "bytes", "sha256"],
"properties": {
"path": {
"type": "string",
"pattern": "^(?!/)(?!.*\\.\\.).+$",
"maxLength": 1024,
"description": "包内相对路径,不允许绝对路径和父目录穿越。"
},
"media_type": {
"type": "string",
"maxLength": 128,
"description": "IANA 媒体类型。"
},
"bytes": {
"type": "integer",
"minimum": 0,
"description": "文件字节数。"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "文件 SHA-256 完整值。"
},
"record_count": {
"type": ["integer", "null"],
"minimum": 0,
"description": "数据文件的记录数。"
},
"compression": {
"type": ["string", "null"],
"enum": ["none", "gzip", "zstd", "zip", null],
"description": "文件压缩方式。"
}
}
}
}
}
@@ -0,0 +1,228 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schemas.edu-industry.cn/school-employment/2.2.0/schema.json",
"title": "SCHOOL-EMPLOYMENT V2.2 校内就业事实",
"description": "职业院校毕业生就业事实统一契约,采用租户隔离和身份最小化设计。",
"type": "object",
"additionalProperties": false,
"required": [
"tenant_id",
"record_id",
"student_token",
"cohort",
"college_code",
"program_code",
"employment_status",
"destination_type",
"confirmed_at",
"confirmation_role",
"source_system",
"source_record_id",
"created_at",
"updated_at",
"data_version",
"content_hash"
],
"properties": {
"tenant_id": {
"type": "string",
"pattern": "^TENANT-[A-Z0-9-]{4,64}$",
"description": "学校租户标识,所有存储、任务和查询必须同时校验。"
},
"record_id": {
"type": "string",
"format": "uuid",
"description": "平台全局唯一记录标识。"
},
"student_token": {
"type": "string",
"pattern": "^STU_[A-Za-z0-9_-]{32,128}$",
"description": "学校侧生成的学生不可逆令牌,禁止传输姓名、身份证和明文学号。"
},
"cohort": {
"type": "integer",
"minimum": 2000,
"maximum": 2100,
"description": "毕业届次。"
},
"college_code": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "学校内部学院代码。"
},
"program_code": {
"type": "string",
"pattern": "^[0-9A-Z]{4,12}$",
"description": "教育部职业教育专业目录代码。"
},
"class_code": {
"type": ["string", "null"],
"maxLength": 64,
"description": "学校内部教学班代码。"
},
"employment_status": {
"type": "string",
"enum": [
"employed",
"self_employed",
"further_study",
"military",
"flexible",
"unemployed",
"pending_confirmation"
],
"description": "统一就业状态。"
},
"destination_type": {
"type": "string",
"enum": [
"enterprise",
"public_institution",
"government",
"further_study",
"entrepreneurship",
"military",
"other"
],
"description": "毕业去向类型。"
},
"job_title": {
"type": ["string", "null"],
"maxLength": 200,
"description": "就业岗位业务原文。"
},
"job_code": {
"type": ["string", "null"],
"maxLength": 32,
"description": "映射到统一岗位词典后的岗位代码。"
},
"enterprise_token": {
"type": ["string", "null"],
"pattern": "^ENT_[A-Za-z0-9_-]{24,128}$",
"description": "企业统一标识令牌。"
},
"enterprise_name": {
"type": ["string", "null"],
"maxLength": 300,
"description": "用于业务核验的企业名称;导出时按数据范围策略处理。"
},
"enterprise_industry_code": {
"type": ["string", "null"],
"maxLength": 32,
"description": "企业行业代码。"
},
"region_code": {
"type": ["string", "null"],
"pattern": "^[0-9]{6}$",
"description": "就业地区 GB/T 2260 六位代码。"
},
"salary_monthly": {
"type": ["number", "null"],
"minimum": 0,
"maximum": 10000000,
"description": "确认后的税前月薪,单位元。"
},
"salary_confirmed": {
"type": ["boolean", "null"],
"description": "薪资是否经过业务确认。"
},
"job_relevance": {
"type": ["string", "null"],
"enum": ["high", "medium", "low", "unconfirmed", null],
"description": "就业岗位与专业培养方向相关度。"
},
"employment_start_date": {
"type": ["string", "null"],
"format": "date",
"description": "就业开始日期。"
},
"contract_signed": {
"type": ["boolean", "null"],
"description": "是否签署就业协议或劳动合同。"
},
"evidence_type": {
"type": ["string", "null"],
"enum": ["contract", "offer", "registration", "enterprise_confirmation", "student_confirmation", "other", null],
"description": "就业确认材料类型,不在平台保存原始敏感附件。"
},
"evidence_reference": {
"type": ["string", "null"],
"maxLength": 256,
"description": "学校系统内的材料引用编号。"
},
"confirmed_at": {
"type": "string",
"format": "date-time",
"description": "业务确认时间。"
},
"confirmation_role": {
"type": "string",
"enum": ["employment_office", "college", "student", "enterprise", "system"],
"description": "执行确认的业务角色。"
},
"source_system": {
"type": "string",
"maxLength": 128,
"description": "学校来源系统代码。"
},
"source_record_id": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "校内来源系统记录标识。"
},
"source_updated_at": {
"type": ["string", "null"],
"format": "date-time",
"description": "校内来源系统业务更新时间,建议作为增量水位。"
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "平台记录创建时间。"
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "平台记录更新时间。"
},
"data_version": {
"type": "string",
"pattern": "^SCH-EMP-[0-9]{8}(?:-[0-9]{2})?$",
"description": "校内就业数据版本。"
},
"is_deleted": {
"type": "boolean",
"default": false,
"description": "版本化软删除标识。"
},
"content_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$",
"description": "去除非业务差异后的记录内容 SHA-256。"
}
},
"allOf": [
{
"if": {
"properties": {
"destination_type": {
"const": "enterprise"
}
},
"required": ["destination_type"]
},
"then": {
"anyOf": [
{
"required": ["enterprise_token"]
},
{
"required": ["enterprise_name"]
}
]
}
}
]
}
File diff suppressed because it is too large Load Diff
+95
View File
@@ -0,0 +1,95 @@
# 产教融智企业版前端
产教融智面向职业院校构建“产业信号、专业诊断、校企协同、改进任务、正式报告”一体化工作闭环。本目录是企业版产品前端基线,所有核心场景均可深入点击并形成可追踪的业务结果。
## 运行
直接双击 `index.html` 即可使用。为避免浏览器对本地文件的限制,也可以在本目录启动静态服务:
```bash
python3 -m http.server 8080
```
然后访问 <http://localhost:8080>。
## 核心产品能力
- 校级供需决策总览、周期切换、专业搜索和七步产品导览
- “企业需求 → 学校接收/分析快照 → 专业建议决策 → 任务/项目 → 执行证据 → 企业评价 → 校级验收 → 报告审批发布 → 数据使用反馈 → 下一周期复核”校园业务闭环
- 闭环实体、角色动作、审批历史与审计事件使用 `localStorage` 持久化,支持刷新续办、Schema 迁移和样板重置
- 技术接收同时强校验租户、包号、版本、交付记录数和完整 64 位 SHA-256;任一不一致只写失败审计,不推进回执或分析快照
- 交付包记录数与分析样本量分开保存:样板包回执为 `2,846,320` 条,生成的校园分析快照为 `128,642` 条
- 专业技能供需、岗位流向、薪资对标、课程技能映射与专业对比
- 企业需求响应、潜力伙伴对接、协同项目里程碑和验收证据
- 改进任务筛选、搜索、创建、阶段进展和报告建议转任务
- 数据源初次导入、增量更新、质量处置、版本管理、授权与审计
- 厂商基础数据包、校级数据、企业数据分类及授权状态筛选
- 校级管理者、校级技术管理员、学院负责人、专业负责人、就业老师、企业导师、厂商超级管理员七种差异化工作台
- 厂商平台级数据包导入、学校租户、账号权限、备份恢复和审计管理
- 校级、学院、专业、产业专题与数据质量报告中心
- 在线报告正文:封面、摘要、发现、供需分析、数据证据、指标口径和行动建议
- 报告内置 ECharts / ECharts-GL 可视化:仪表盘、三基准柱状图、雷达图、趋势面积图、热力图、环图、象限气泡图和立体证据矩阵
- 学校事实画像:在校生、毕业生、专业、教师、课程、合作企业、就业与实习指标均附证据编号、来源、更新时间、责任部门和计算口径
- 结论证据链:学校值、区域均值、同类院校均值、排名、样本量、数据权属、置信度和已知限制
- 报告类型、周期、关键词筛选、目录跳转、建议转任务、打印与离线 HTML 下载
- 本期分析生成与供需会材料包生成
- 供需会展示大屏及桌面端、平板、移动端自适应
## 数据资产分类
- **互联网基础数据包**:由平台厂商合规归集、治理并按服务期导入,属于付费订阅数据。
- **校级数据**:来自学校实习、就业、教务等业务系统,数据权属归学校。
- **企业数据**:由合作企业确认提交,按照合作协议限定使用范围。
## 角色视角
- **校级管理者**:全校决策总览、专业对比、校企协同、改进任务、数据资产与报告。
- **校级技术管理员**:学校数据源、初次导入、更新任务、字段契约、质量问题、版本、授权与审计。
- **学院负责人**:本院专业洞察、校企协同、改进任务与学院报告。
- **专业负责人**:专业建议决策、关联任务与项目推进、执行证据和下一周期复核。
- **就业老师**:就业侧数据使用确认和下一周期反馈;不能审批校级业务报告。
- **企业导师**:企业人才需求、共建项目、学生参与和协同任务。
- **厂商超级管理员**:平台数据包、学校租户、账号权限、备份恢复、服务监控与审计。
关键职责分离:
- 技术接收成功后当前企业需求版本锁定;后续变更必须创建新版本并重新接收;
- 当前报告一经生成,支撑该版本的任务证据冻结;新增证据必须进入下一周期或重开新版本;
- 阶段进度必须达到 100%,企业导师才能提交通过或整改评价;
- 企业评价为“需整改”时,校级验收继续阻断,补充证据并重新评价后才可进入验收;
- 报告提交人不能批准或退回自己的提交,非校级管理者不显示报告审批与发布动作;
- 报告正式发布前,就业老师不能登记使用反馈,下载和打印均明确标识非正式版。
界面正文基准字号为 14px,表格、按钮、业务标签和辅助信息不低于 13px,适合会议投屏和客户现场展示。
## 数据运维入口
- 厂商超级管理员在“平台运营中心 → 数据包管理”完成基础数据包导入、Schema 与质量校验、租户授权和版本发布。
- 校级技术管理员登录后默认进入“学校数据运维中心”,管理学校自有数据和企业授权数据。
- 每个数据源的“资产详情”包含业务截止日期、入库日期、下次更新、更新内容、主键、必填字段、格式、Schema、质量阈值、责任人与审计事件。
- “接收与使用反馈”展示租户、包号、版本、完整 SHA、交付包记录数、独立分析快照、支撑报告/项目/任务、业务可用确认和下一周期反馈。
- 更新采用“暂存 → 校验 → 审批 → 发布”流程。失败数据进入隔离区,不覆盖当前稳定版本。
详细角色权限、数据契约、初次导入要求、更新机制和未来后端实体设计见 [`../docs/enterprise-product-baseline.md`](../docs/enterprise-product-baseline.md)。
## 报告与离线运行
报告中心内置42份独立报告,包括32份专业人才需求报告、5份学院报告,以及校级、产业专题和数据质量报告。在线阅读支持章节目录、八类交互图表、学校事实证据、来源台账和行动建议;下载功能生成可独立归档、打开和打印的完整 HTML 报告。
在线图表使用 `vendor/` 中本地化的 ECharts 5.6 与 ECharts-GL 2.0,无需 CDN。浏览器不支持图表运行时时自动显示静态 SVG 降级视图;下载报告直接内嵌全部图形和样式,不依赖外部脚本或网络。Apache-2.0、NOTICE 和 BSD-3-Clause 文件随库保存在 `vendor/`。
## 开发与验收说明
- 闭环样板使用命名空间 `eduIndustry.campusClosedLoop.TENANT-HZVTC.v1`,当前 `schemaVersion=2`。页面“重置样板”会恢复种子;旧 V1 或不满足深层实体/历史数组不变量的损坏 V2 状态,均按安全策略失效并重建 V2 种子。
- 为避免静态原型长期演示导致浏览器存储无界增长,审计、证据、反馈、自定义集合和实体历史采用明确保留上限;正式系统应改用服务端分页、归档和不可变审计存储。
- 共享样板标识为租户 `TENANT-HZVTC`、厂商包 `EDU-PKG-20260823-01`、版本 `V2026.08.23`、学校回执 `RCT-HZVTC-20260823-01`。这些标识只用于本静态原型的业务链对照,不表示厂商端和校园端页面实时同步。
- 当前前端不向外部服务发送请求,可直接在隔离网络运行。
- 仓库内数据用于本地产品验收,不包含任何真实学校、学生或企业敏感信息。
- `localStorage` 只用于原型演示,不是正式数据库、鉴权或审计设施。正式接入必须由后端 API 执行租户隔离、身份认证、逐对象授权、并发控制、不可抵赖审计、文件安全存储、字段脱敏、授权台账和备份恢复;前端按钮隐藏或禁用不能作为权限控制。
- JavaScript 语法检查:`node --check app.js && node --check report-visuals.js`
- 推荐桌面验收视口为 `1440 × 900`,移动验收视口为 `390 × 844`。
新增闭环预览:
- `preview-campus-closed-loop.png`
- `preview-campus-closed-loop-mobile.png`
+4726
View File
File diff suppressed because it is too large Load Diff
+3163
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
<rect width="64" height="64" rx="15" fill="#123d30"/>
<path d="M12 17h25a6 6 0 0 1 0 12H12a6 6 0 0 1 0-12Z" fill="#c6e66f"/>
<path d="M21 29h27a6 6 0 0 1 0 12H21a6 6 0 0 1 0-12Z" fill="#9fc254"/>
<path d="M30 41h22a6 6 0 0 1 0 12H30a6 6 0 0 1 0-12Z" fill="#789b45"/>
</svg>

After

Width:  |  Height:  |  Size: 343 B

+1534
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

File diff suppressed because it is too large Load Diff
+7045
View File
File diff suppressed because it is too large Load Diff
+29
View File
@@ -0,0 +1,29 @@
BSD 3-Clause License
Copyright (c) 2017, Baidu Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+222
View File
@@ -0,0 +1,222 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Apache ECharts Subcomponents:
The Apache ECharts project contains subcomponents with separate copyright
notices and license terms. Your use of the source code for these
subcomponents is also subject to the terms and conditions of the following
licenses.
BSD 3-Clause (d3.js):
The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause:
`/src/chart/treemap/treemapLayout.ts`,
`/src/chart/tree/layoutHelper.ts`,
`/src/chart/graph/forceHelper.ts`,
`/src/util/number.ts`
See `/licenses/LICENSE-d3` for details of the license.
+5
View File
@@ -0,0 +1,5 @@
Apache ECharts
Copyright 2017-2024 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).
+1
View File
File diff suppressed because one or more lines are too long
+45
View File
File diff suppressed because one or more lines are too long
+126
View File
@@ -0,0 +1,126 @@
# 厂商数据中台与校园平台闭环基线
## 1. 目标
两端产品使用同一组业务标识展示完整证据链,但职责和数据边界保持分离:
- 厂商端负责数据源、采集、质量、数据产品发布、学校交付和交付回执;
- 校园端负责学校接收、校内验收、分析快照、专业诊断、改进执行、报告审批和使用反馈;
- 厂商默认不能读取学校明文业务数据,学校反馈只提交明确授权的汇总影响和脱敏证据。
## 2. 共享样板场景
| 实体 | 样板标识 | 主责端 |
|---|---|---|
| 演示场景 | `SCN-CLOSED-LOOP-001` | 两端 |
| 学校租户 | `TENANT-HZVTC` | 平台租户服务 |
| 数据产品版本 | `V2026.08.23` | 厂商端 |
| 数据包 | `EDU-PKG-20260823-01` | 厂商端 |
| 发布候选 | `REL-20260823-01` | 厂商端 |
| 杭州租户数据文件 | `2,846,320` 条 / SHA-256 `4f8d91a47e2b6d82b2aaad136d344d61c83f9cd472185d2543725c91870e9e32` | 厂商端 |
| 学校交付 | `DELIVERY-HZVTC-20260823-01` | 厂商端 |
| 学校接收回执 | `RCT-HZVTC-20260823-01` | 校园端 |
| 分析快照 | `SNP-HZVTC-20260824-01` | 校园端 |
| 企业需求 | `DEM-HKVS-20260823-01` | 校园端/企业 |
| 专业建议 | `REC-SOFTWARE-20260823-01` | 校园端 |
| 改进任务 | `TSK-SOFTWARE-20260823-01` | 校园端 |
| 协同项目 | `PRJ-HKVS-20260823-01` | 校园端 |
| 执行证据 | `EVD-HKVS-01…` | 校园端 |
| 企业评价 | `EVL-HKVS-20260823-01` | 企业 |
| 报告版本 | `RPT-HZVTC-20260823-01` | 校园端 |
| 使用反馈 | `FBK-EMP-01` | 校园端 |
| 下一周期复核 | `RVW-SOFTWARE-2027C1-01` | 校园端 |
每个共享对象必须携带 `tenant_id`、`trace_id`、状态、创建/更新时间、创建/修改人和关联对象标识。
## 3. 状态边界
### 厂商发布和学校接收必须分开
```text
ReleaseCandidate
DRAFT → QUALITY_PASSED → AWAITING_APPROVAL
→ APPROVED → PUBLISHED → ROLLED_BACK
Delivery(每所学校独立)
PENDING → SENDING → DELIVERED
→ ACKNOWLEDGED | FAILED → RETRYING
ACKNOWLEDGED → ROLLED_BACK
```
“数据包已发布”只表示厂商稳定版本已生成,不能直接显示“学校已收到”。厂商端只有 `FIX_REPLAY` 的记录数、规则结果和独立复核签名全部通过后才可解除质量门禁;`WAIVE`、`DISCARD` 保持阻断。学校回执中的租户、包号、版本、记录数、完整 SHA-256 和授权范围全部通过后,交付才能进入 `ACKNOWLEDGED`。
交付记录数和学校分析快照样本量是不同口径:样板杭州租户文件为 `2,846,320` 条,校园端验收后生成 `128,642` 条有效分析快照,不能互相覆盖。
### 校园业务闭环
```text
DeliveryReceipt
PENDING → VERIFIED → ACCEPTED → ACTIVATED
EnterpriseDemand
SUBMITTED → RECEIVED → ANALYZED → RESPONDED → CLOSED
Recommendation
PENDING → ACCEPTED | DEFERRED | REJECTED
ImprovementTask
TODO → IN_PROGRESS → READY_FOR_REVIEW
→ ACCEPTED | RETURNED → CLOSED
ReportVersion
DRAFT → REVIEWING → APPROVED | RETURNED
APPROVED → PUBLISHED
UsageReview
BASELINE → FOLLOW_UP → IMPROVED | UNCHANGED | WORSENED
```
每次状态迁移都必须产生不可变审计事件,包含操作者、前后状态、时间、意见、证据和 `trace_id`。
## 4. 静态原型的可信边界
两个静态页面分别使用自己的浏览器本地状态,只用于刷新后继续当前页面的演示:
- 厂商端本地状态不能让校园端自动变化;
- 校园端本地状态不能让厂商端自动变化;
- 页面必须明确“未连接后端,不代表另一端已实时收到”;
- 两端相同的固定 ID 只用于人工核对业务链,不等于网络同步。
需要展示真实跨页面交接时,使用可下载、可导入的文件:
1. 厂商导出 Manifest 和交付信封 JSON;
2. 学校导入后校验文件哈希与租户授权;
3. 学校导出接收回执或脱敏反馈 JSON;
4. 厂商导入回执/反馈后更新对应交付或处置状态。
正式系统由 API、消息和 Outbox/Webhook 完成幂等交接,不使用浏览器本地存储同步业务状态。
## 5. 正式服务边界
| 服务 | 关键职责 |
|---|---|
| Data Product API | 数据包构建、质量门禁、审批、发布和回滚 |
| Entitlement & Delivery API | 租户授权、逐学校交付、重试、撤回 |
| Receipt API | 幂等接收回执、记录数和哈希校验 |
| Campus Ingestion API | 学校暂存、质量校验、业务审批、激活和回滚 |
| Analysis API | 基于不可变数据版本生成分析快照 |
| Collaboration API | 需求、建议、项目、任务、证据、评价和验收 |
| Report API | 报告版本、审批、发布、下载和证据引用 |
| Feedback API | 学校反馈、厂商处置、学校复验和关闭 |
| Audit & Notification | 统一追踪、不可篡改审计、通知和超时升级 |
大文件只通过对象存储短期签名地址传递,业务 API 不直接承载数据包或附件正文。
## 6. 验收黄金路径
1. 厂商完成质量处置并创建 `REL-20260823-01`;
2. 独立审批人批准后发布 `EDU-PKG-20260823-01`;
3. 为三所学校创建彼此隔离的租户交付,重点核对 `TENANT-HZVTC` 的 `DELIVERY-HZVTC-20260823-01`;
4. 学校校验租户、包号、版本、Manifest、记录数与完整 SHA-256,生成 `RCT-HZVTC-20260823-01`;
5. 学校激活版本并生成 `SNP-HZVTC-20260824-01`;
6. 企业需求进入专业诊断,建议被采纳并产生关联任务和项目;
7. 执行人员提交证据,企业导师评价,校级管理者完成验收;
8. 报告由不同于提交人的校级管理者审批并发布,所有结论反查同一快照和证据;
9. 就业或业务部门记录使用反馈和下一周期指标;
10. 两端以共享 ID 核对发布、交付、接收、使用和反馈链,正式环境再通过 API 自动同步。
+186
View File
@@ -0,0 +1,186 @@
# 产教融智企业版产品与数据运维基线
## 1. 产品定位
产教融智不是单一数据看板,而是面向职业院校的供需分析与产教协同工作平台。产品将外部产业信号、学校培养事实和企业确认需求分层治理,并把分析结论转化为可执行、可验收、可复核的改进任务。
核心闭环:
1. 数据接入与版本验收;
2. 产业岗位、技能和企业需求分析;
3. 学校、学院、专业多层诊断;
4. 课程、项目、企业合作和实习就业改进;
5. 任务责任、进度和验收证据管理;
6. 校级、学院、专业及专题报告交付;
7. 下一分析周期进行效果复核。
## 2. 角色、职责与入口
| 角色 | 默认入口 | 核心职责 | 数据边界 |
|---|---|---|---|
| 校级管理者 | 决策总览 | 查看全校供需态势、批准重点行动、协调学院与企业资源 | 可查看全校汇总和授权范围内明细 |
| 校级技术管理员 | 学校数据运维中心 | 接入学校数据源、执行更新、处理质量问题、管理版本与审计 | 可维护学校租户数据,不默认拥有业务审批权 |
| 学院负责人 | 专业洞察 | 复核本院专业差距、推进课程和项目调整、提交阶段证据 | 仅本学院及所属专业 |
| 专业负责人 | 闭环工作台 | 决策专业建议、推进关联任务与项目、提交证据、完成下一周期复核 | 仅负责专业及其关联需求、项目和任务 |
| 就业老师 | 闭环工作台 | 确认就业侧数据可用性、记录使用反馈和下一周期关注项 | 就业业务域及授权汇总,不拥有校级报告审批权 |
| 企业导师 | 企业协同工作台 | 提交企业需求、参与项目和课程共建、确认企业评价 | 仅本企业授权及参与项目 |
| 厂商超级管理员 | 平台运营中心 | 维护基础数据包、租户、平台账号、备份、服务和平台审计 | 默认不可读取学校明文业务数据 |
### 2.1 职责分离
- 厂商负责公共基础数据包的采集治理、Schema、版本、订阅授权和平台运行。
- 学校信息中心负责校内接口、文件接入、技术校验、调度、隔离区和版本发布。
- 教务处、就业处、产教融合中心等业务部门负责字段含义、数据正确性和发布审批。
- 企业联系人负责企业身份、需求内容、授权用途和有效期确认。
- 技术管理员可以执行更新,但不应代替业务责任人批准有争议的数据。
- 校级管理者负责任务校级验收以及业务报告的批准、退回和正式发布;校级技术管理员不得以数据质量职责代替业务审批。
- 专业负责人保存建议“采纳/暂缓/驳回”的理由、操作者和时间;企业导师只能评价本企业对象;就业老师只能记录就业侧使用反馈。
## 3. 三类数据资产
### 3.1 厂商基础数据包
包括区域招聘岗位、薪资与企业画像、产业政策与趋势等公共数据产品。数据按学校订阅协议授权,平台统一维护版本和质量。
### 3.2 学校自有数据
包括专业、课程、学生、教师、实习、就业、校企合作项目等学校业务事实。数据权属归学校,厂商只按合同约定提供处理能力。
### 3.3 企业授权数据
包括岗位需求、技能要求、计划人数、企业评价、项目任务书和合作意向。必须绑定企业身份、授权编号、用途、可见范围和有效期。
## 4. 初次导入与更新契约
| 数据来源 | 初次导入内容 | 推荐格式/连接 | 主键 | 后续更新 | 业务责任人 | 技术责任人 |
|---|---|---|---|---|---|---|
| 区域招聘岗位基础包 | 当前服务区域内有效岗位、企业、地区、时间、薪资与来源 | Parquet / CSV UTF-8 | `package_id + source_record_id` | 月度增量,季度全量复核 | 厂商数据产品部 | 厂商数据运维组 |
| 薪资与企业画像基础包 | 岗位薪资区间、企业行业、规模和统计周期 | Parquet / CSV UTF-8 | `package_id + enterprise_id + position_code` | 月度增量 | 厂商数据产品部 | 厂商数据运维组 |
| 专业与课程数据 | 有效专业、课程、课程标准、教学班、学时、技能标签和版本 | XLSX / CSV / API | `tenant_id + course_code + curriculum_version` | 学期快照,变更事件增量 | 教务处 | 学校信息中心 |
| 实习数据 | 学生、专业、企业、岗位、起止日期、状态和评价 | API JSON / 数据库视图 | `tenant_id + internship_id` | 每日增量 | 就业处或实习管理部门 | 学校信息中心 |
| 就业数据 | 毕业届次、就业状态、岗位、企业、薪资和更新时间 | API JSON / 数据库视图 | `tenant_id + student_id + cohort` | 每日增量,关键统计期冻结快照 | 就业处 | 学校信息中心 |
| 企业确认需求 | 企业身份、岗位、人数、技能、有效期、提交人、确认时间和授权编号 | 工作台表单 / API / XLSX | `tenant_id + enterprise_credit_code + demand_id` | 企业提交后事件增量 | 产教融合中心与企业联系人 | 学校信息中心 |
### 4.1 所有来源必须提供
- 数据名称、业务说明、覆盖范围和业务截止日期;
- 数据提供方、业务责任人和技术责任人;
- 文件编码、字段类型、日期格式和枚举字典;
- 主键、增量水位字段、幂等键和删除标识;
- 必填字段、敏感字段、脱敏规则和授权范围;
- Schema 版本、数据版本、变更说明和样例数据;
- 质量阈值、失败处理、回滚要求和留存期限。
### 4.2 推荐基础质量门槛
- 主键唯一率:100%;
- 核心代码合法率:100%;
- 必填完整率:不低于95%;
- 关键跨表关联率:不低于98%;
- 日期、地区、薪资等业务规则合法率:不低于98%;
- 厂商基础数据包综合质量评分:不低于90;
- 企业身份与授权关联率:100%。
未达到阻断阈值的数据不得进入生产分析快照。
## 5. 导入与发布流程
### 5.1 初次导入
1. 创建数据源并选择文件、API、数据库视图或SFTP;
2. 上传数据说明、Schema、代码字典和样例;
3. 完成字段映射、主键和敏感字段确认;
4. 在暂存区执行结构、完整性、唯一性、关联性和业务规则校验;
5. 生成质量报告和错误明细;
6. 技术管理员修复或隔离异常,业务责任人复核;
7. 审批通过后发布首个稳定版本;
8. 保存文件哈希、操作者、审批人、发布时间和追踪编号。
### 5.2 后续更新
- 每次任务记录上次成功水位、本次截止日期、版本和变更摘要;
- 增量数据必须支持幂等写入,不因重试产生重复记录;
- 删除采用失效标识或版本化软删除,避免历史报告失去证据;
- 单一来源失败时可隔离该来源,其他来源按策略继续;
- 新版本未验收前,线上分析继续引用当前稳定版本;
- 发布后生成统一分析快照,报告和大屏只引用快照,不直接读取变化中的源表。
## 6. 版本、证据与审计
每个分析结论至少关联:
- 数据快照编号;
- 来源数据版本;
- 指标定义与计算规则版本;
- 样本量、过滤规则和缺失处理;
- 学校值、区域均值、同类院校均值和可比排名;
- 数据权属、授权范围和置信度;
- 已知限制与业务复核状态。
导入、导出、报告下载、授权变更、质量放行和版本发布必须记录操作者、时间戳、对象、前后版本哈希、结果和追踪编号。
## 7. 正式开发核心实体
建议后端至少包含以下实体:
- `Tenant`、`Organization`、`User`、`Role`、`DataScope`;
- `DataSource`、`DataContract`、`SchemaVersion`、`ImportJob`;
- `DataVersion`、`QualityRule`、`QualityIssue`、`Authorization`;
- `AnalysisSnapshot`、`MetricDefinition`、`EvidenceReference`;
- `Program`、`Course`、`Skill`、`JobSignal`、`EnterpriseDemand`;
- `CollaborationProject`、`ImprovementTask`、`Milestone`、`AcceptanceEvidence`;
- `ReportTemplate`、`ReportVersion`、`AuditEvent`.
- `EnterpriseEvaluation`、`SchoolAcceptance`、`DataUsageFeedback`、`CycleReview`.
所有业务实体应包含 `tenant_id`、创建/更新时间、创建/修改人和版本字段。涉及学校明细数据的查询必须同时校验租户、角色和数据范围。
### 7.1 静态原型持久化与正式 API 边界
校园闭环静态原型采用 `localStorage` 命名空间 `eduIndustry.campusClosedLoop.TENANT-HZVTC.v1`,当前 `schemaVersion=2`,包含安全迁移、可重置种子、闭环实体和 `auditEvents`。共享样板标识固定为:
- 租户:`TENANT-HZVTC`;
- 厂商包:`EDU-PKG-20260823-01`;
- 包版本:`V2026.08.23`;
- 杭州租户交付记录数:`2,846,320`;
- 杭州租户数据文件 SHA-256:`4f8d91a47e2b6d82b2aaad136d344d61c83f9cd472185d2543725c91870e9e32`;
- 学校回执:`RCT-HZVTC-20260823-01`;
- 分析快照:`SNP-HZVTC-20260824-01`,分析有效样本 `128,642` 条。
这些标识用于静态页面之间核对同一业务样板,不代表厂商端与校园端实时同步。`localStorage` 也不具备正式数据一致性、安全存储、多人协作或不可抵赖审计能力。
技术接收必须对租户、包号、版本、记录数和完整 SHA-256 执行强一致性校验。任一失败时回执、分析快照和业务状态均不得前进,只能追加失败审计。交付包记录数不能覆盖分析快照样本量,两者必须作为不同口径分别保存。
正式系统必须将状态流转放在后端事务/API 中:服务端依据租户、组织、角色、数据范围、对象所属企业和当前状态校验每个命令;采用幂等键与乐观锁防止重复或越序流转;证据文件进入受控对象存储并进行病毒扫描、哈希和访问授权;审计日志追加写入且不可由业务用户修改。前端菜单、按钮隐藏和 `disabled` 仅用于交互提示,不能替代服务端鉴权。
## 8. 产品验收基线
- 七种角色默认入口和菜单范围正确;
- 闭环工作台按企业导师、校级技术管理员、专业负责人、学院负责人、校级管理者和就业老师显示可执行动作与禁用原因,厂商超级管理员只读;
- 闭环状态、审批历史和审计事件刷新后保留,重置后恢复 Schema V2 种子;
- 技术接收后当前企业需求版本锁定,报告生成后当前任务证据冻结;
- 损坏的 V2 深层实体或历史数组不会导致页面崩溃,而是按安全策略重建并记录 `SECURITY_SCHEMA_RESET`;
- 租户、包号、版本、交付记录数或 SHA-256 任一错误时,技术接收和分析快照均保持原状态;
- 阶段进度未达到 100% 时不能企业评价,企业评价缺失或为“需整改”时任务不能校级验收;
- 报告提交人与审批人必须分离,非校级管理者不能审批发布;报告未批准时不能发布,未正式发布时反馈阻断且下载明确标识非正式版;
- 专业四个标签页均有完整内容和证据入口;
- 数据源可查看更新日期、更新内容、数据要求、版本任务和授权审计;
- 新建任务、项目和需求后立即进入对应列表;
- 报告建议加入任务后可在任务中心追踪;
- 报告生成后新增可审核版本;
- 报告包含八类图表、学校事实、四类证据源和七章正文;
- ECharts 不可用时显示静态 SVG;
- 离线报告无外部依赖;
- 桌面 `1440 × 900` 和移动 `390 × 844` 无页面级横向溢出;
- 可见业务文字不小于13px,重点证据不小于14px;
- 所有用户可见文案按企业产品口径表达。
## 9. 推荐客户展示路径
1. 产品导览说明“看得清、落得下、讲得明”;
2. 决策总览展示可信数据和本期关键变化;
3. 专业洞察展示岗位、薪资、课程和技能证据;
4. 校企协同展示企业需求到项目验收;
5. 闭环工作台依次切换企业导师、技术管理员、专业负责人、校级管理者和就业老师验证状态流;
6. 改进任务展示负责人、进度和验收证据;
7. 切换校级技术管理员,展示数据导入、更新、质量、接收反馈和审计;
8. 打开全校报告和供需会展示大屏完成交付说明。
@@ -0,0 +1,76 @@
# 供需会系统 — 角色总览与旅程地图
## 一、角色清单(3个角色 + 1个展示模块)
| 编号 | 角色名称 | 典型用户 | 核心诉求 |
|------|---------|---------|---------|
| R1 | 学院用户 | 院长/专业负责人/就业指导老师 | 查看本院专业供需分析,获取课程建议和企业推荐,指导学生就业 |
| R2 | 校级管理者 | 教务处/就业处领导 | 全校维度掌控供需全局,输出决策报告和供需会材料 |
| R3 | 系统管理员 | 信息中心运维+数据管理岗 | 数据接入、清洗、岗位归一、用户权限、系统运维 |
| — | 大屏展示 | 无需登录,面向浏览者 | 供需数据可视化展示 |
> **设计原则**:学院用户内部通过数据权限区分粒度(院长看院级汇总,专业负责人看专业详情,就业指导老师侧重企业和薪资),但共用同一套功能菜单,降低系统复杂度。
## 二、角色旅程地图
### 第一阶段:数据准备期
```
系统管理员(R3)
│
├── 配置校内数据对接(实习平台、就业系统)
├── 配置外部数据采集(杭州就业网、本地人才网)
├── 执行数据清洗 & 岗位归一
├── 确认数据质量,处理异常
├── 配置用户账号与权限
└── 触发分析引擎,生成32个专业报告
```
### 第二阶段:分析与使用期
```
校级管理者(R2) 学院用户(R1)
│ │
├── 查看全校专业对比总览 ├── 查看本院/专业匹配度分析
├── 查看人才缺口汇总 ├── 查看技能图谱 & 薪资对比
├── 导出供需会议材料包 ├── 查看人才缺口详情
└── 控制大屏展示内容 ├── 查看课程调整建议
├── 获取企业推荐列表
大屏展示 └── 导出专业/学院报告
│
└── 大屏展示(无需登录)
```
### 第三阶段:落地跟进期
```
学院用户(R1) 校级管理者(R2) 系统管理员(R3)
│ │ │
├── 对接推荐企业 ├── 跟踪各学院改进计划 ├── 归档本期分析数据
├── 根据建议调整培养方案 └── 下一周期数据对比 ├── 更新数据采集策略
└── 引导学生关注缺口方向 └── 准备下一周期数据
```
## 三、角色-功能矩阵
| 功能模块 | R1 学院用户 | R2 校级管理者 | R3 系统管理员 | 大屏展示 |
|---------|:---------:|:-----------:|:-----------:|:------:|
| 数据源配置与接入 | | | ✅ | |
| 数据清洗与岗位归一 | | | ✅ | |
| 数据质量监控 | | 👁 | ✅ | |
| 岗位匹配度分析 | ✅ | ✅ | | 👁 |
| 人才缺口识别 | ✅ | ✅ | | 👁 |
| 薪资对比分析 | ✅ | ✅ | | 👁 |
| 专业技能图谱 | ✅ | ✅ | | 👁 |
| 课程调整建议 | ✅ | 👁 | | |
| 合作企业推荐 | ✅ | 👁 | | 👁 |
| 就业去向分布 | ✅ | ✅ | | |
| 专业/学院报告导出 | ✅ | | | |
| 全校专业对比总览 | | ✅ | | 👁 |
| 全校缺口汇总 | | ✅ | | |
| 供需会材料导出 | | ✅ | | |
| 大屏内容配置 | | ✅ | | |
| 用户权限管理 | | | ✅ | |
| 系统配置与运维 | | | ✅ | |
> ✅ = 主要操作者 &emsp; 👁 = 只读查看
+154
View File
@@ -0,0 +1,154 @@
# User Story — R1 学院用户
> **角色画像**:二级学院的院长、专业负责人、就业指导老师。关注本院/本专业的供需匹配情况,需要从数据中获取课程优化方向、企业合作线索和学生就业指导依据。系统内通过数据权限控制可见范围(院级/专业级)。
---
## US-R1-01 查看本院专业匹配度总览
**作为** 学院用户,
**我希望** 登录后看到本院所有专业与市场需求的匹配度总览,
**以便** 快速掌握哪些专业与市场吻合、哪些偏离较大。
### 验收标准
- [ ] 默认展示本院专业列表,每个专业显示匹配度评分(百分制)
- [ ] 匹配度低于阈值(如60%)的专业红色高亮预警
- [ ] 点击专业可进入详细分析页
- [ ] 支持按时间范围切换(本学期/本学年/近三年趋势)
---
## US-R1-02 查看专业供需匹配详细分析
**作为** 学院用户,
**我希望** 查看某一专业的毕业生就业岗位与市场需求岗位的详细对比,
**以便** 精确了解学生实际去向与市场需求之间的偏差。
### 验收标准
- [ ] 展示本专业TOP就业岗位 vs 市场TOP需求岗位对比表
- [ ] 每个岗位显示:学生就业人数/占比、市场需求量/增速、匹配度评分
- [ ] 支持按年度查看变化趋势(折线图)
- [ ] 标注"高匹配"、"待关注"、"严重偏离"三档
---
## US-R1-03 查看专业技能图谱
**作为** 学院用户,
**我希望** 查看本专业所需技能与市场要求技能的匹配情况,
**以便** 明确课程在技能覆盖上的盲区。
### 验收标准
- [ ] 雷达图/能力图谱展示:市场要求TOP技能 vs 本专业课程覆盖的技能
- [ ] 技能数据来源于招聘JD高频关键词提取
- [ ] 标注覆盖充足(绿)、部分覆盖(黄)、严重不足(红)
- [ ] 可查看技能对应的推荐课程/教学内容
---
## US-R1-04 查看薪资对比分析
**作为** 学院用户,
**我希望** 查看本专业学生实习/就业薪资与市场薪资的对比,
**以便** 评估学生市场竞争力,并为就业指导提供薪资预期参考。
### 验收标准
- [ ] 展示:本专业实习平均工资、就业平均薪资、市场同岗位薪资
- [ ] 分位数展示(25%/50%/75%),避免只看均值
- [ ] 支持按城市维度筛选(杭州/省内/一线/新一线)
- [ ] 支持按经验维度筛选(实习/应届/1-3年)
- [ ] 与上一周期对比,展示薪资变化趋势
---
## US-R1-05 查看人才缺口分析
**作为** 学院用户,
**我希望** 查看与本院/本专业相关的人才缺口方向,
**以便** 评估是否需要调整培养方向或引导学生关注新兴岗位。
### 验收标准
- [ ] 展示缺口岗位TOP列表:岗位名称、市场需求量、学院覆盖人数、缺口率
- [ ] 每个缺口岗位展示:职责描述、技能要求、薪资范围、需求企业数
- [ ] 标注缺口岗位与本专业的关联度(强关联/弱关联)
- [ ] 支持按岗位大类筛选,展示近年需求趋势
---
## US-R1-06 获取课程调整建议
**作为** 学院用户,
**我希望** 系统基于供需分析和技能图谱,自动生成课程调整建议,
**以便** 修订培养方案时有数据支撑的参考。
### 验收标准
- [ ] 建议分类:建议新增课程方向、建议强化的现有课程、建议弱化/合并的课程
- [ ] 每条建议引用具体市场数据(如"Python技能在XX岗位JD中出现率85%,当前仅覆盖1门基础课")
- [ ] 建议标注优先级(高/中/低)
- [ ] 支持对建议标记"采纳/暂缓/驳回",供后续跟踪
---
## US-R1-07 获取合作企业推荐
**作为** 学院用户,
**我希望** 系统推荐与本专业高度匹配的企业,
**以便** 拓展实习/就业渠道,主动对接合作。
### 验收标准
- [ ] 推荐企业按匹配度排序:企业名称、行业、规模、招聘岗位、历史招聘人数
- [ ] 区分"已合作企业"和"新推荐企业"
- [ ] 已合作企业显示历史数据(接收学生数、评价)
- [ ] 新推荐企业显示推荐理由(如"近1年发布XX岗位38个,匹配度92%")
- [ ] 支持导出企业联系清单(Excel)
---
## US-R1-08 查看学生就业去向分布
**作为** 学院用户,
**我希望** 查看本院/本专业学生的就业去向分布,
**以便** 有针对性地开展就业指导。
### 验收标准
- [ ] 按行业/地域/企业类型(国企/民企/外企/事业单位)三个维度展示
- [ ] 支持按届次筛选(2024/2025/2026届)
- [ ] 可视化展示(饼图/桑基图)
- [ ] 显示与上一届的变化情况
---
## US-R1-09 查看政策与行业动态
**作为** 学院用户,
**我希望** 查看与就业相关的政策和行业动态摘要,
**以便** 在就业指导中传递最新信息。
### 验收标准
- [ ] 聚合展示:政府就业政策、行业报告摘要、新闻动态
- [ ] 按专业/行业维度智能推荐相关内容
- [ ] 支持按时间排序和关键词搜索
- [ ] 重点政策标注"必读"标签
---
## US-R1-10 导出专业/学院报告
**作为** 学院用户,
**我希望** 导出本专业或本院的供需分析报告(PDF/Word),
**以便** 用于汇报、专业评估、教学改革立项。
### 验收标准
**P0 基础版报告**(随核心分析功能上线):
- [ ] 专业报告涵盖:供需匹配分析(岗位对比表、匹配度评分)
- [ ] 学院报告涵盖:院级总览 + 各专业匹配度摘要
- [ ] 32个专业均可独立生成报告
**完整版报告**(随P1分析功能逐步丰富):
- [ ] 增加:技能图谱、薪资对比、缺口分析章节
- [ ] 增加:课程调整建议章节(P3上线后)
**通用要求**:
- [ ] 报告自动带有学校LOGO、学院名称、生成日期
- [ ] 支持PDF/Word两种格式,导出不超过30秒
@@ -0,0 +1,93 @@
# User Story — R2 校级管理者
> **角色画像**:教务处/就业处领导,从全校维度统筹管理,关注各学院/专业的整体供需表现,推动各学院改进措施落地。
---
## US-R2-01 查看全校专业对比总览
**作为** 校级管理者,
**我希望** 在一个总览页面看到全校32个专业的供需匹配对比,
**以便** 快速识别表现优秀和需要重点关注的专业。
### 验收标准
- [ ] 32个专业以矩阵/排行榜展示:匹配度评分、缺口率、薪资竞争力
- [ ] 支持按学院分组查看
- [ ] 支持按匹配度/缺口率/薪资竞争力排序
- [ ] "红绿灯"机制:绿(优秀)、黄(一般)、红(预警)
- [ ] 与上一周期对比,展示变化箭头(↑↓→)
---
## US-R2-02 查看全校人才缺口汇总
**作为** 校级管理者,
**我希望** 查看跨学院维度的人才缺口汇总分析,
**以便** 从全校层面规划新专业申报和招生计划调整。
### 验收标准
- [ ] 展示全校未覆盖的TOP缺口岗位方向(市场有需求,学校无对应专业)
- [ ] 展示覆盖不足的岗位方向(有专业但产出不够)
- [ ] 每个缺口标注:市场需求规模、增长趋势、建议对应学院
- [ ] 支持导出为决策参考报告
---
## US-R2-03 导出供需会议材料包
**作为** 校级管理者,
**我希望** 一键导出完整的供需会议材料包,
**以便** 用于汇报或报送教育厅。
### 验收标准
- [ ] 材料包包含:
- 全校供需分析总报告(校级管理者视角的汇总)
- 32个专业人才需求报告(复用 US-R1-10 的报告产出,独立文件)
- 全校数据摘要(关键指标一页纸)
- [ ] 支持一键打包下载(ZIP)
- [ ] 报告格式统一、排版美观,可直接用于正式场合
- [ ] 材料包中数据时间戳一致,口径统一
> **依赖说明**:材料包中的32份专业报告由 US-R1-10 的报告生成能力提供,材料包功能负责汇总打包和生成全校总报告。报告内容丰富度随 P0→P1→P3 逐步增强。
---
## US-R2-04 管理展示大屏
**作为** 校级管理者,
**我希望** 配置供需会大屏的展示内容和布局,
**以便** 展示人才培养与市场对接成果。
### 验收标准
- [ ] 支持选择大屏展示模块(匹配度排行、缺口地图、薪资对比、趋势图等)
- [ ] 支持大屏布局调整(多屏轮播/分区展示)
- [ ] 支持预览模式(电脑上预览效果)
- [ ] 全屏模式,适配常见大屏比例
---
## US-R2-05 跟踪各学院改进情况
**作为** 校级管理者,
**我希望** 跟踪各学院对供需分析建议的响应和改进情况,
**以便** 推动建议落地,形成闭环。
### 验收标准
- [ ] 展示各学院/专业的建议采纳情况(已采纳/进行中/未响应)
- [ ] 支持设置改进计划截止时间
- [ ] 自动统计各学院响应率
- [ ] 可导出改进跟踪报告
---
## US-R2-06 查看数据质量概况
**作为** 校级管理者,
**我希望** 了解系统数据的完整性和质量状况,
**以便** 对分析结果的可靠性心中有数。
### 验收标准
- [ ] 展示各数据源接入状态(正常/异常/未接入)
- [ ] 展示各专业数据完整度百分比
- [ ] 数据质量异常时有醒目提示
- [ ] 展示最近一次数据更新时间
+123
View File
@@ -0,0 +1,123 @@
# User Story — R3 系统管理员
> **角色画像**:信息中心人员,兼顾数据管理和系统运维。负责数据全生命周期(接入→清洗→归一→分析触发)以及用户权限、系统配置、运行监控。是系统正常运行的基石。
---
## US-R3-01 配置校内数据源对接
**作为** 系统管理员,
**我希望** 通过配置界面接入校内实习平台和就业数据系统,
**以便** 系统自动获取校内最新数据,减少人工导入。
### 验收标准
- [ ] 支持API对接配置(接口地址、认证信息、字段映射)
- [ ] 支持数据库直连配置(数据库类型、连接串、查询SQL/视图)
- [ ] 支持Excel/CSV手动上传作为兜底
- [ ] 配置后可"测试连接"验证可用性
- [ ] 支持设置自动同步频率(每日/每周/手动)
---
## US-R3-02 配置外部数据采集
**作为** 系统管理员,
**我希望** 配置和管理外部就业数据的采集任务,
**以便** 持续获取市场端最新供需信息。
### 验收标准
- [ ] 支持配置采集源:杭州就业网、杭州本地人才网等
- [ ] 每个采集源可配置:采集频率、范围(地域/行业/岗位类型)、采集量限制
- [ ] 展示采集任务运行状态(运行中/暂停/异常)
- [ ] 采集异常时自动告警(邮件/站内消息)
- [ ] 展示每个采集源的历史采集统计(数据量、成功率)
---
## US-R3-03 管理数据清洗规则
**作为** 系统管理员,
**我希望** 配置数据清洗规则,
**以便** 确保进入分析引擎的数据质量达标。
### 验收标准
- [ ] 支持去重规则(相同岗位/企业判定条件)
- [ ] 支持数据补全规则(缺失字段的默认值/推断策略)
- [ ] 支持异常数据过滤规则(薪资异常值、无效岗位等)
- [ ] 清洗规则可预览效果(清洗前后对比)
- [ ] 清洗日志可查,支持追溯
---
## US-R3-04 维护岗位分类体系
**作为** 系统管理员,
**我希望** 维护统一的岗位分类体系和归一映射规则,
**以便** 不同来源的岗位数据能在同一体系下对比分析。
### 验收标准
- [ ] 提供标准岗位分类树(大类-中类-小类)
- [ ] 支持添加/编辑/合并岗位分类
- [ ] 支持岗位别名映射(如"前端工程师"="Web前端开发"="前端开发工程师")
- [ ] 新数据自动尝试归一,未匹配的进入待审核队列
- [ ] 待审核队列支持批量处理
---
## US-R3-05 监控数据质量
**作为** 系统管理员,
**我希望** 有数据质量监控看板,
**以便** 及时发现和处理数据问题,保障分析可靠性。
### 验收标准
- [ ] 展示各数据源同步状态、最近同步时间、数据量变化
- [ ] 展示数据完整度(各字段填充率)
- [ ] 展示归一覆盖率(已归一岗位占比)
- [ ] 异常条目数及处理状态
- [ ] 支持告警阈值设置(如连续3天同步失败则告警)
---
## US-R3-06 触发与管理分析任务
**作为** 系统管理员,
**我希望** 在数据就绪后触发分析引擎生成报告,
**以便** 控制报告生成时机,确保基于最新最完整的数据。
### 验收标准
- [ ] 支持手动触发全量分析(32专业)或单专业分析
- [ ] 支持自动分析计划(如每月1日)
- [ ] 分析任务显示进度条和预计完成时间
- [ ] 分析完成后自动通知相关角色
- [ ] 保留历史分析版本,支持版本对比
---
## US-R3-07 管理用户账号与权限
**作为** 系统管理员,
**我希望** 管理系统用户账号,按角色分配权限,
**以便** 每个用户只能访问职责范围内的数据和功能。
### 验收标准
- [ ] 支持创建/编辑/禁用/删除用户
- [ ] 预置角色模板:学院用户、校级管理者、系统管理员
- [ ] 学院用户可绑定所属学院/专业,控制数据可见范围
- [ ] 支持批量导入用户(Excel)
- [ ] 可选对接学校统一身份认证(CAS/OAuth)
---
## US-R3-08 系统配置与运维
**作为** 系统管理员,
**我希望** 通过配置界面管理全局参数,并监控系统运行状态,
**以便** 保障系统稳定运行。
### 验收标准
- [ ] 可配置:学校信息(名称/LOGO/学院专业列表)、分析参数(阈值/周期)、报告模板、通知规则
- [ ] 运维看板:服务状态、资源使用(CPU/内存/磁盘)、在线用户数、访问量
- [ ] 异常告警:服务宕机/资源超阈值时通知
- [ ] 操作日志:记录关键操作,支持筛选和导出
- [ ] 数据备份:支持自动/手动备份,可从备份恢复
@@ -0,0 +1,73 @@
# 大屏展示模块(功能模块,非独立角色)
> **使用场景**:供需数据的可视化展示。无需登录,由校级管理者配置内容后自动轮播。要求视觉效果专业、信息直观。
---
## US-DS-01 大屏首页 — 学校供需总览
**展示内容**:学校人才培养与市场需求的宏观对接指标。
### 验收标准
- [ ] 关键指标:全校专业数、在校生总数、整体就业率、平均匹配度、合作企业总数、覆盖行业数
- [ ] 数字动态计数器效果(滚动数字)
- [ ] 深色背景、高对比度配色,视觉效果专业
- [ ] 关键数字突出显示,信息层次清晰
---
## US-DS-02 大屏 — 专业匹配度排行
**展示内容**:32个专业与市场需求的匹配度排名。
### 验收标准
- [ ] 排行榜/柱状图展示
- [ ] 自动高亮TOP5和BOTTOM5
- [ ] 支持按学院分组展示
- [ ] 自动轮播翻页(每屏16个专业)
---
## US-DS-03 大屏 — 人才缺口可视化
**展示内容**:市场急需方向的人才缺口分布。
### 验收标准
- [ ] 热力图/气泡图展示,气泡大小=缺口程度,颜色=行业类别
- [ ] 动态效果(缓慢浮动/呼吸灯)
- [ ] 旁注关键数据(如"AI方向缺口率67%")
---
## US-DS-04 大屏 — 薪资对比
**展示内容**:校内培养薪资 vs 市场薪资对比。
### 验收标准
- [ ] 对比图:校内实习薪资 vs 市场实习薪资、校内就业薪资 vs 市场就业薪资
- [ ] 按专业/行业维度自动切换
- [ ] 绿色箭头=优于市场,红色=低于市场
---
## US-DS-05 大屏 — 校企合作成果
**展示内容**:学校与企业的合作成果展示。
### 验收标准
- [ ] 合作企业LOGO墙/地图分布
- [ ] 关键数据:合作企业总数、覆盖行业、累计接收学生数、提供岗位数
- [ ] 企业LOGO动态滚动/飞入效果
- [ ] 标注重点合作企业(500强/行业龙头)
---
## 大屏通用要求
| 项目 | 要求 |
|------|------|
| 分辨率 | 适配1920×1080及以上,支持16:9/21:9 |
| 自动轮播 | 各页面按设定间隔自动切换,支持手动翻页 |
| 免登录 | 通过专用URL直接访问,无需登录 |
| 自动刷新 | 数据按设定周期自动刷新 |
| 动效 | 适度动态效果,避免喧宾夺主 |
@@ -0,0 +1,118 @@
# 供需会系统 — User Story 优先级与排期建议
## 一、优先级分级
### P0 — 供需会核心交付(必须上线)
| 编号 | User Story | 角色 | 说明 |
|------|-----------|------|------|
| US-R3-01 | 配置校内数据源对接 | 系统管理员 | 没有数据,一切无从谈起 |
| US-R3-02 | 配置外部数据采集 | 系统管理员 | 市场端数据是对比的基础 |
| US-R3-04 | 维护岗位分类体系 | 系统管理员 | 岗位归一是分析的前提 |
| US-R3-03 | 管理数据清洗规则 | 系统管理员 | 保障数据质量 |
| US-R3-06 | 触发与管理分析任务 | 系统管理员 | 报告生成的入口 |
| US-R3-07 | 管理用户账号与权限 | 系统管理员 | 系统可用的前提 |
| US-R1-01 | 查看本院专业匹配度总览 | 学院用户 | **院级入口页,登录后首页** |
| US-R1-02 | 查看专业供需匹配详细分析 | 学院用户 | 核心分析功能 |
| US-R1-10 | 导出专业/学院报告(基础版) | 学院用户 | **32个专业报告,明确P0** |
| US-R2-01 | 查看全校专业对比总览 | 校级管理者 | 全校维度核心功能 |
| US-R2-03 | 导出供需会议材料包 | 校级管理者 | 供需会直接产出物 |
### P1 — 分析深度增强(强烈建议)
| 编号 | User Story | 角色 | 说明 |
|------|-----------|------|------|
| US-R1-03 | 查看专业技能图谱 | 学院用户 | 丰富报告内容 |
| US-R1-04 | 查看薪资对比分析 | 学院用户 | 丰富报告内容 |
| US-R1-05 | 查看人才缺口分析 | 学院用户 | 丰富报告内容 |
| US-R2-02 | 查看全校人才缺口汇总 | 校级管理者 | 全校缺口视图 |
| US-R2-04 | 管理展示大屏 | 校级管理者 | **大屏配置与大屏展示同期** |
| US-R3-05 | 监控数据质量 | 系统管理员 | 保障数据可靠性 |
| US-DS-01 | 大屏-学校供需总览 | 大屏模块 | 大屏核心展示 |
| US-DS-02 | 大屏-专业匹配度排行 | 大屏模块 | 大屏核心展示 |
### P2 — 展示与体验提升
| 编号 | User Story | 角色 | 说明 |
|------|-----------|------|------|
| US-R1-07 | 获取合作企业推荐 | 学院用户 | 企业对接场景 |
| US-R1-08 | 查看学生就业去向分布 | 学院用户 | 就业指导场景 |
| US-R2-06 | 查看数据质量概况 | 校级管理者 | 管理可视化 |
| US-DS-03 | 大屏-人才缺口可视化 | 大屏模块 | 大屏进阶展示 |
| US-DS-04 | 大屏-薪资对比 | 大屏模块 | 大屏进阶展示 |
| US-DS-05 | 大屏-校企合作成果 | 大屏模块 | 大屏进阶展示 |
| US-R3-08 | 系统配置与运维 | 系统管理员 | 运维保障 |
### P3 — 智能增值功能
| 编号 | User Story | 角色 |
|------|-----------|------|
| US-R1-06 | 获取课程调整建议 | 学院用户 |
| US-R1-09 | 查看政策与行业动态 | 学院用户 |
| US-R2-05 | 跟踪各学院改进情况 | 校级管理者 |
---
## 二、建议交付节奏
```
月份1 月份2 月份3 月份4
┌────────────────┬────────────────┬────────────────┬────────────────┐
│ │ │ │ │
│ P0 数据层 │ P0 分析+报告 │ P1 深度分析 │ P2+P3 │
│ │ │ + 大屏 │ 增值功能 │
│ · 数据对接 │ · 分析引擎 │ · 技能图谱 │ · 课程建议 │
│ · 数据清洗 │ · 院级总览 │ · 薪资分析 │ · 政策聚合 │
│ · 岗位归一 │ · 专业分析 │ · 缺口分析 │ · 闭环跟踪 │
│ · 用户权限 │ · 32份基础报告 │ · 大屏配置 │ · 企业推荐 │
│ │ · 全校总览 │ · 大屏核心页 │ · 大屏进阶 │
│ │ · 材料导出 │ · 报告内容丰富 │ · 就业去向 │
│ │ │ │ │
└────────────────┴────────────────┴────────────────┴────────────────┘
里程碑1 里程碑2 里程碑3 里程碑4
数据跑通验证 核心功能上线 供需会就绪 持续迭代
```
---
## 三、关键依赖关系
```
数据源接入(R3-01/02)
│
▼
数据清洗 & 岗位归一(R3-03/04)
│
▼
分析引擎(R3-06)
│
├──────────────────────────────────┐
▼ ▼
院级总览(R1-01) ──► 专业分析(R1-02) 全校总览(R2-01)
│ │
├── 技能图谱(R1-03)├── 缺口汇总(R2-02)
├── 薪资对比(R1-04)├── 大屏配置(R2-04) ──► 大屏展示(DS-xx)
├── 缺口分析(R1-05)└── 材料导出(R2-03) ──┐
│ │
├── 报告导出(R1-10)◄─────────────────────┘
│ (基础版P0 → 完整版随P1/P3丰富) 复用
└── 课程建议(R1-06)
```
> **关键依赖说明**:
> - R1-01(院级总览)是 R1-02(专业详情)的入口页面,必须同期交付
> - R2-04(大屏配置)是 DS-xx(大屏展示)的管理入口,必须同期交付
> - R2-03(材料包)复用 R1-10(报告导出)的产出,不重复生成
> - R1-10 报告内容随 P0→P1→P3 逐步丰富,不阻塞P0交付
---
## 四、风险提示
| 风险项 | 影响 | 建议应对 |
|--------|------|---------|
| 校内系统无可用API | 退化为手动导入 | 提前确认接口能力,准备Excel方案 |
| 外部数据采集合规 | 爬虫可能违反ToS | 优先对接开放API,控制采集频率 |
| 岗位分类标准不统一 | 分析结果不可信 | 早期投入分类体系,参考国标+行业标准 |
| 32专业数据完整度差异大 | 部分报告质量低 | 设置完整度阈值,不达标专业标注说明 |
| 供需会时间节点固定 | 倒排工期压力 | 确认供需会日期,按里程碑严控 |
@@ -0,0 +1,573 @@
# 供需会智能分析系统 — 技术方案
> **项目名称**:杭州科技职业技术学院 供需会智能分析系统
## 目录
- [一、项目背景与目标](#一项目背景与目标)
- [二、系统总体架构](#二系统总体架构)
- [三、核心功能设计](#三核心功能设计)
- [四、AI能力详解](#四ai能力详解)
- [五、数据安全与部署方案](#五数据安全与部署方案)
- [六、实施计划](#六实施计划)
- [七、投资估算](#七投资估算)
## 一、项目背景与目标
### 1.1 项目背景
高校供需对接是高等教育服务区域经济发展的核心环节。杭州科技职业技术学院覆盖32个专业方向,每年为杭州及周边地区输送大量技术技能型人才。供需会作为学校与行业企业对接的重要机制,承担着人才培养方向校准、校企合作推进、就业质量提升等多重使命。
当前,学校在供需对接方面面临以下挑战:
| 挑战 | 现状 |
|------|------|
| **数据分散** | 校内实习数据、就业数据、市场招聘数据分散在不同系统,无法统一分析 |
| **分析依赖人工** | 供需匹配主要靠人工调研和经验判断,缺少数据化、智能化的分析手段 |
| **报告产出效率低** | 32个专业的人才需求报告需逐一手工编写,耗时长、口径难统一 |
| **决策缺少数据支撑** | 课程调整、专业建设、企业合作等决策缺乏市场数据的量化支撑 |
| **展示手段单一** | 缺少直观、专业的数据可视化展示手段 |
### 1.2 建设目标
建设一套 **AI驱动的供需会智能分析系统**,实现以下目标:
1. **数据汇聚**:打通校内实习平台、就业系统与外部就业市场数据,建立统一的供需数据底座
2. **智能分析**:运用大模型和数据分析技术,自动完成岗位匹配、技能解析、缺口识别、薪资对标
3. **报告自动化**:一键生成32个专业的人才需求分析报告,支持供需会材料批量导出
4. **辅助决策**:为学院提供AI驱动的课程调整建议和企业合作推荐
5. **可视化展示**:提供供需会专用数据大屏,直观呈现人才培养与市场需求的对接成果
## 二、系统总体架构
### 2.1 总体架构图
```
┌─────────────────────────────────────────────────────────────────────┐
│ 应用展示层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌───────────┐ │
│ │ 学院工作台 │ │ 校级管理台 │ │ 系统管理台 │ │ 展示大屏 │ │
│ │ · 专业分析 │ │ · 全校总览 │ │ · 数据管理 │ │ · 供需总览│ │
│ │ · 报告导出 │ │ · 缺口汇总 │ │ · 用户权限 │ │ · 匹配排行│ │
│ │ · 企业推荐 │ │ · 材料导出 │ │ · 系统运维 │ │ · 缺口地图│ │
│ │ · 就业指导 │ │ · 大屏管理 │ │ · 分析任务 │ │ · 薪资对比│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └───────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ AI 智能分析引擎 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ JD智能解析│ │ 岗位匹配 │ │ 缺口识别 │ │ 报告生成 │ │
│ │ 大模型 │ │ 引擎 │ │ 引擎 │ │ 引擎 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 技能图谱 │ │ 薪资分析 │ │ 课程建议 │ │
│ │ 构建 │ │ 引擎 │ │ AI生成 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 数据治理层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 数据清洗 │ │ 岗位归一 │ │ 质量监控 │ │ 数据仓库 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 数据源层 │
│ ┌───────────────────────┐ ┌───────────────────────────────────┐ │
│ │ 校内数据 │ │ 外部数据 │ │
│ │ · 实习平台(含工资) │ │ · 杭州就业网 · 杭州本地人才网 │ │
│ │ · 就业管理系统 │ │ · 政策/行业报告 │ │
│ └───────────────────────┘ └───────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
```
### 2.2 架构设计原则
| 原则 | 说明 |
|------|------|
| **一体化部署** | 一套系统覆盖全部功能,统一部署维护,降低学校信息中心的运维负担 |
| **数据驱动** | 从数据采集到报告生成形成完整链路,所有分析结论均可溯源至原始数据 |
| **AI原生** | 大模型能力深度集成于分析引擎,而非简单的功能叠加,确保智能分析的精准性 |
| **渐进增强** | 系统分阶段交付,核心功能优先上线,AI高级功能逐步丰富,不影响基础使用 |
| **安全可控** | 支持校内私有化部署,数据不出校园;大模型可对接私有化部署的模型服务 |
## 三、核心功能设计
### 3.1 数据接入与治理
数据是系统的基础。本模块负责从多方数据源汇聚数据,并经过清洗、标准化后,形成统一的供需数据底座。
#### 3.1.1 校内数据对接
| 数据源 | 接入数据 | 对接方式 |
|--------|---------|---------|
| 校内实习平台 | 实习岗位、实习企业、实习工资(新增) | 优先API对接,兜底Excel导入 |
| 就业管理系统 | 就业岗位、就业薪资、就业企业、就业去向 | 优先API/数据库视图对接 |
> 系统提供可视化的数据对接配置界面,支持字段映射、同步频率设置和连接测试,无需修改代码即可适配学校现有系统。
#### 3.1.2 外部数据采集
| 数据源 | 采集内容 | 采集策略 |
|--------|---------|---------|
| 杭州就业网 | 岗位需求、企业信息、薪资范围 | 定时采集,按行业/地域配置范围 |
| 杭州本地人才网 | 招聘岗位、技能要求、薪资数据 | 定时采集 |
| 行业报告/新闻 | 行业趋势、政策动态 | 定时采集+人工录入 |
#### 3.1.3 数据治理
```
原始数据 ──► 数据清洗 ──► 岗位归一 ──► 质量检验 ──► 数据仓库
│ │ │
▼ ▼ ▼
· 去重去噪 · 统一分类 · 完整度检查
· 格式标准化 · 别名映射 · 异常值检测
· 缺失值处理 · 待审核队列 · 质量评分
```
**岗位分类归一**是数据治理的核心环节。系统建立三级岗位分类体系(大类-中类-小类),通过AI辅助的别名映射和人工审核相结合,确保来自不同数据源的岗位信息能在同一体系下进行对比分析。
### 3.2 AI智能分析引擎
这是系统的核心价值所在。AI分析引擎对治理后的供需数据进行深度分析,产出六大维度的分析结果。各维度的详细能力说明见 [第四章 AI能力详解](#四ai能力详解)。
#### 六大分析维度
| 分析维度 | 分析内容 | 产出 |
|---------|---------|------|
| **岗位匹配度分析** | 将校内就业/实习岗位与市场需求岗位进行智能比对 | 32个专业的匹配度评分及详细对比 |
| **人才缺口识别** | 识别市场有需求但学校覆盖不足的方向 | 缺口岗位TOP排行、缺口率、趋势 |
| **薪资对标分析** | 校内实习工资/就业薪资与市场水平横向对比 | 分位数对比、城市维度、趋势变化 |
| **专业技能图谱** | 从招聘信息中AI提取技能要求,与课程设置比对 | 32个专业的技能覆盖雷达图 |
| **课程调整建议** | 基于供需偏差和技能缺口,AI生成优化建议 | 按专业输出新增/强化/弱化课程建议 |
| **企业推荐** | 基于岗位匹配度,推荐潜在合作企业 | 按专业输出推荐企业列表及推荐理由 |
#### 分析引擎工作流程
```
数据仓库
│
├──────────────────────────┐
▼ ▼ ▼
校内就业数据 市场需求数据 招聘信息原文
│ │ │
│ │ ▼
│ │ AI智能解析(技能/要求提取)
│ │ │
▼ ▼ ▼
┌──────────────────────────┐
│ 多维度分析引擎 │
│ 岗位匹配 · 缺口识别 │
│ 薪资对标 · 技能图谱 │
│ 企业推荐 · 课程建议 │
└────────────┬─────────────┘
│
▼
分析结果库(版本化存储)
│
┌─────────┼─────────┐
▼ ▼ ▼
报告生成 数据看板 大屏展示
```
### 3.3 专业人才需求报告
系统自动生成32个专业的人才需求分析报告,是供需会的核心产出物。
#### 报告内容结构
```
《XX专业人才需求分析报告》
1. 专业概况
- 在校生规模、近三年就业率
2. 供需匹配分析
- 毕业生TOP就业岗位 vs 市场TOP需求岗位
- 匹配度评分及档位
3. 技能图谱分析
- 市场要求技能 vs 课程覆盖技能(雷达图)
- 技能覆盖盲区标注
4. 薪资对标分析
- 实习/就业薪资 vs 市场薪资(分位数对比)
- 城市维度、趋势变化
5. 人才缺口分析
- 相关方向缺口岗位及规模
- 缺口趋势判断
6. 课程调整建议(AI生成)
- 建议新增/强化/弱化的课程方向
- 每条建议的数据支撑和优先级
7. 合作企业推荐
- 高匹配度企业列表
- 推荐理由
```
#### 报告生成策略
报告内容随系统功能上线逐步丰富,32个专业从第一期起即全部覆盖:
| 阶段 | 报告版本 | 包含内容 |
|------|---------|---------|
| 第一期(M2) | 基础版 | 供需匹配分析(岗位对比、匹配度评分) |
| 第二期(M3) | 完整版 | 增加技能图谱、薪资对标、缺口分析 |
| 第三期(M4) | 智能版 | 增加AI课程建议、企业推荐 |
- 支持PDF/Word格式导出,统一排版,带学校LOGO和元信息
- 校级管理者可一键打包导出全部32份报告 + 全校总报告
### 3.4 多角色工作台
系统面向三类用户,提供差异化的工作台。
#### 3.4.1 学院工作台
> 面向学院院长、专业负责人、就业指导老师
| 功能板块 | 功能说明 |
|---------|---------|
| 专业匹配度总览 | 本院所有专业与市场需求匹配度排行,支持预警标注 |
| 专业详细分析 | 单专业维度的完整分析(岗位对比、技能图谱、薪资、缺口) |
| 课程调整建议 | AI生成的课程优化方向,支持采纳/暂缓/驳回标记 |
| 企业推荐 | 高匹配度企业列表,区分已合作和新推荐,支持导出 |
| 就业去向分布 | 学生就业流向可视化(行业/地域/企业类型) |
| 政策与动态 | 相关就业政策、行业报告聚合 |
| 报告导出 | 导出专业报告或学院报告(PDF/Word) |
> 通过数据权限控制,院长可查看院级汇总,专业负责人看本专业详情,就业指导老师侧重企业和薪资信息。
#### 3.4.2 校级管理台
> 面向教务处、就业处领导
| 功能板块 | 功能说明 |
|---------|---------|
| 全校专业对比 | 32个专业匹配度/缺口率/薪资竞争力排行,红绿灯预警 |
| 人才缺口汇总 | 全校维度的缺口方向汇总,辅助新专业申报和招生调整 |
| 改进跟踪 | 各学院对建议的响应情况统计 |
| 数据质量概览 | 各数据源接入状态、数据完整度 |
| 材料包导出 | 一键打包导出供需会全套材料(ZIP) |
| 大屏管理 | 配置大屏展示内容、布局、轮播策略 |
#### 3.4.3 系统管理台
> 面向信息中心运维人员
| 功能板块 | 功能说明 |
|---------|---------|
| 数据源管理 | 校内/外部数据源配置、测试连接、同步策略 |
| 数据清洗 | 清洗规则配置、预览、执行日志 |
| 岗位分类 | 分类体系维护、别名映射、待审核队列 |
| 分析任务 | 手动/自动触发分析、进度监控、版本管理 |
| 用户权限 | 用户CRUD、角色分配、学院/专业数据范围绑定 |
| 系统运维 | 全局配置、运行监控、操作日志、数据备份 |
### 3.5 供需会展示大屏
展示大屏用于供需数据的可视化呈现,无需登录,由校级管理者配置展示内容。
#### 大屏页面规划
| 页面 | 展示内容 | 核心视觉元素 |
|------|---------|-------------|
| 学校供需总览 | 全校宏观指标(专业数、就业率、匹配度、企业数) | 动态计数器、指标卡片 |
| 专业匹配度排行 | 32个专业匹配度排名 | 柱状图/排行榜,TOP5高亮 |
| 人才缺口地图 | 市场急需方向分布 | 热力气泡图,动态浮动 |
| 薪资对比 | 校内薪资 vs 市场薪资 | 双轴对比图,涨跌箭头 |
| 校企合作成果 | 合作企业展示 | 企业LOGO墙/地图分布 |
#### 大屏技术要求
- 适配1920×1080及以上分辨率,支持16:9/21:9比例
- 深色主题、高对比度配色,视觉效果专业
- 各页面按设定间隔自动轮播,支持手动切换
- 通过专用URL免登录访问
- 关键数字突出显示,信息层次清晰
## 四、AI能力详解
AI能力是本系统区别于传统数据统计工具的核心差异点。系统深度集成大语言模型,在以下四个关键场景中发挥智能化作用。
### 4.1 大模型驱动的JD智能解析
**痛点**:市场招聘数据中,岗位JD以自然语言描述,格式各异,传统关键词匹配难以准确提取结构化信息。
**方案**:利用大模型的语义理解能力,将非结构化JD文本自动解析为结构化数据。
```
┌───────────────────────────────────────┐
│ 原始JD文本(输入) │
│ │
│ "招聘Python后端开发工程师,要求熟悉 │
│ Django/Flask框架,有Redis/MySQL经验, │
│ 了解Docker容器化部署,薪资15-25K..." │
├───────────────────────────────────────┤
│ 大模型解析 │
├───────────────────────────────────────┤
│ 结构化结果(输出) │
│ │
│ · 岗位类别:互联网/软件开发/后端开发 │
│ · 核心技能:Python, Django, Flask, │
│ Redis, MySQL, Docker │
│ · 技能层级:熟悉(Django/Flask/Redis) │
│ 了解(Docker) │
│ · 薪资范围:15K-25K │
│ · 经验要求:推断为1-3年 │
└───────────────────────────────────────┘
```
**价值**:
- 解析准确率显著优于传统关键词匹配
- 能理解语义近义(如"熟练使用"="精通"、"有经验"="熟悉")
- 支持自动适配不同平台、不同格式的JD文本
### 4.2 AI岗位匹配与人才缺口识别
**痛点**:校内就业岗位名称与市场岗位名称往往不同(如学生就业登记为"程序员",市场叫"后端开发工程师"),简单文本匹配会导致大量漏匹配。
**方案**:利用大模型的语义相似度计算和推理能力,实现"理解岗位本质"的智能匹配。
```
校内就业岗位 市场需求岗位
───────────── ─────────────
"程序员" ──AI匹配──► "后端开发工程师" ✅ 高匹配
"网页设计" ──AI匹配──► "UI/UX设计师" ✅ 中匹配
"文员" ──AI匹配──► "数据分析师" ❌ 低匹配
"算法工程师" ⚠️ 无对应(缺口)
```
**匹配方式**:
1. AI理解岗位的实际含义,而非简单比对文字
2. 结合岗位分类体系进行层级匹配
3. 综合技能要求重合度进行交叉验证
4. 输出匹配度评分(0-100)和匹配置信度
**缺口识别逻辑**:
- 市场需求量大 + 学校就业覆盖少 = 人才缺口
- 结合需求增长趋势判断缺口紧迫性
- 关联到具体专业,给出"该缺口应由哪个专业响应"的建议
### 4.3 智能课程调整建议
**痛点**:即使识别了供需偏差,从"市场需要什么技能"到"学校应该调整什么课程"之间的推理链条复杂,依赖专业人员的经验判断。
**方案**:利用大模型的推理能力,自动生成从市场数据到课程建议的完整推理链。
```
┌─────────────────────────────────────────────────────┐
│ AI课程建议生成流程 │
│ │
│ 输入: │
│ · 本专业技能图谱(市场要求 vs 课程覆盖) │
│ · 本专业供需匹配偏差数据 │
│ · 本专业现有课程设置清单 │
│ │
│ 大模型推理: │
│ 1. 识别技能覆盖盲区 │
│ 2. 关联盲区技能到具体岗位需求 │
│ 3. 评估该技能的市场重要程度和增长趋势 │
│ 4. 生成课程调整建议(新增/强化/弱化) │
│ 5. 为每条建议给出数据支撑和优先级 │
│ │
│ 输出示例: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 建议【高优先级】:新增"容器化与云原生"课程方向 │ │
│ │ │ │
│ │ 依据:Docker/K8s技能在后端开发岗位JD中出现率 │ │
│ │ 从2024年的42%上升至2026年的78%,而当前课程体系 │ │
│ │ 中仅在"Linux基础"课程中简要提及容器概念。 │ │
│ │ │ │
│ │ 建议措施:新增1门32学时选修课,覆盖Docker基础、 │ │
│ │ 容器编排、CI/CD流水线等内容。 │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
```
**价值**:
- 从"数据发现"到"行动建议"自动闭环
- 每条建议有明确的数据支撑,可追溯、可验证
- 大幅降低专业负责人分析市场数据的工作量
### 4.4 专业能力图谱自动构建
**痛点**:32个专业分别需要哪些技能、每个技能市场需求强度如何、学校课程覆盖如何——这张图谱需要大量人力梳理。
**方案**:由AI自动从海量招聘JD中提取、归类、量化技能要求,并与课程设置自动比对,生成专业能力图谱。
```
计算机科学与技术 · 能力图谱
Java ★★★★★
/
Python ★★★★ MySQL ★★★★
/ \
Docker ★★★ Redis ★★★
\ /
Linux ★★★★ Git ★★★★
\ /
Spring ★★★★★
★ 市场需求强度 ● 课程覆盖度
覆盖充足:Java, Python, MySQL, Linux
部分覆盖:Spring, Git
严重不足:Docker, Redis ◄── 重点关注
```
**构建流程**:
1. 从招聘JD中通过大模型提取技能关键词及层级要求
2. 统计每个技能在对口岗位中的出现频率,计算市场需求强度
3. 将技能与学校课程大纲进行比对(课程名称+教学内容关键词匹配)
4. 生成雷达图/能力矩阵,标注覆盖状态
## 五、数据安全与部署方案
### 5.1 数据安全策略
| 安全维度 | 措施 |
|---------|------|
| **数据存储** | 所有数据存储在学校服务器内,不外传;数据库加密存储 |
| **访问控制** | 基于角色的权限控制,学院用户只能访问本单位数据 |
| **传输安全** | 全站HTTPS加密传输 |
| **操作审计** | 关键操作(数据导入/导出、报告下载、权限变更)全程日志记录 |
| **数据备份** | 支持自动定时备份,可手动触发,支持从备份恢复 |
| **AI安全** | AI模型可对接学校私有化部署的服务,敏感数据不传入公网 |
### 5.2 部署方案
系统采用**校内私有化部署**,部署在学校数据中心或指定云服务器上。
```
┌──────────────────────────────────────┐
│ 学校数据中心/云服务器 │
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ Web前端 │ │ 后端服务 │ │
│ └─────────┘ └─────────┘ │
│ ┌─────────┐ ┌─────────┐ │
│ │ 数据库 │ │ 缓存服务 │ │
│ └─────────┘ └─────────┘ │
│ ┌─────────┐ │
│ │ AI模型 │ (可选私有化部署 │
│ │ 服务 │ 或对接云端API) │
│ └─────────┘ │
└──────────────────────────────────────┘
```
**服务器推荐配置**:
| 项目 | 基础配置 | 推荐配置 |
|------|---------|---------|
| CPU | 8核 | 16核 |
| 内存 | 16GB | 32GB |
| 磁盘 | 200GB SSD | 500GB SSD |
| GPU(如需私有化AI模型) | — | 独立GPU卡×1 |
> 如不部署私有化AI模型,可通过API调用云端AI服务,此时无需GPU。
## 六、实施计划
### 6.1 分期交付计划
项目采用分期迭代交付模式,共4个里程碑,总周期约4个月。
```
月份1 月份2 月份3 月份4
┌────────────────┬────────────────┬────────────────┬────────────────┐
│ │ │ │ │
│ 里程碑1 │ 里程碑2 │ 里程碑3 │ 里程碑4 │
│ 数据跑通 │ 核心功能上线 │ 供需会就绪 │ 持续迭代 │
│ │ │ │ │
│ · 数据源对接 │ · AI分析引擎 │ · 技能图谱 │ · AI课程建议 │
│ · 数据清洗归一 │ · 院级/专业分析│ · 薪资对标 │ · 政策聚合 │
│ · 岗位分类体系 │ · 32份基础报告 │ · 缺口分析 │ · 改进跟踪 │
│ · 用户权限 │ · 全校总览 │ · 大屏配置+展示│ · 企业推荐 │
│ │ · 材料包导出 │ · 报告内容丰富 │ · 就业去向 │
│ │ │ │ · 大屏进阶 │
└────────────────┴────────────────┴────────────────┴────────────────┘
验收点1: 验收点2: 验收点3: 验收点4:
数据链路跑通 系统可用于 完整分析+大屏 全功能交付
样本数据可查 报告生成和导出
```
### 6.2 里程碑交付物
| 里程碑 | 交付物 | 验收标准 |
|--------|--------|---------|
| M1 数据跑通 | 数据治理模块上线,样本数据入库 | 校内+外部数据可接入,清洗归一后可查询 |
| M2 核心上线 | 分析引擎+报告+工作台上线 | 可生成32份基础版专业报告并导出 |
| M3 供需会就绪 | 完整分析+大屏上线 | 报告含完整分析维度,大屏可正常展示 |
| M4 全功能交付 | 全部功能上线 | AI课程建议等高级功能可用,全系统验收 |
### 6.3 项目配合要求
| 阶段 | 需校方配合事项 |
|------|--------------|
| 启动阶段 | 提供校内系统接口文档或数据库访问权限;确认32个专业清单和课程设置 |
| M1阶段 | 配合数据对接调试;提供样本数据验证清洗效果 |
| M2阶段 | 业务部门试用反馈;确认报告格式和内容模板 |
| M3阶段 | 确认大屏展示需求;提供大屏显示设备参数(屏幕尺寸/分辨率) |
| 全程 | 指定1名项目对接人,负责协调校内各部门 |
## 七、投资估算
### 7.1 软件开发工作量
以下按功能模块估算开发工作量,单位为**人天**。
| 模块 | 功能范围 | 人天 | 阶段 |
|------|---------|:----:|:----:|
| **数据接入与治理** | | | |
| &emsp;校内数据对接 | 多种对接方式,字段映射,自动同步 | 15 | M1 |
| &emsp;外部数据采集 | 3个采集源配置,采集调度,异常告警 | 18 | M1 |
| &emsp;数据清洗引擎 | 去重/补全/过滤规则,配置界面,执行日志 | 12 | M1 |
| &emsp;岗位分类归一 | 三级分类体系,别名映射,AI辅助归一,审核队列 | 15 | M1 |
| &emsp;数据质量监控 | 监控看板,完整度/归一率指标,告警配置 | 8 | M1 |
| **AI智能分析引擎** | | | |
| &emsp;JD智能解析 | AI驱动的招聘信息结构化解析,批量处理 | 12 | M2 |
| &emsp;岗位匹配引擎 | 智能语义匹配,匹配度评分,多维度校验 | 15 | M2 |
| &emsp;人才缺口识别 | 缺口计算,趋势分析,关联专业推荐 | 10 | M2/M3 |
| &emsp;薪资分析引擎 | 多维度薪资对比,趋势分析 | 8 | M3 |
| &emsp;技能图谱构建 | AI技能提取,课程比对,图谱生成 | 15 | M3 |
| &emsp;AI课程建议 | AI驱动的课程调整建议生成 | 12 | M4 |
| &emsp;企业推荐引擎 | 企业-专业匹配度计算,推荐理由生成 | 8 | M4 |
| **报告生成** | | | |
| &emsp;报告模板与生成 | 模板设计,数据填充,图表渲染,PDF/Word输出 | 15 | M2 |
| &emsp;材料包导出 | 32份报告+总报告汇总,批量打包下载 | 5 | M2 |
| **应用工作台** | | | |
| &emsp;学院工作台 | 7个功能板块的界面与服务 | 25 | M2/M3 |
| &emsp;校级管理台 | 6个功能板块的界面与服务 | 20 | M2/M3 |
| &emsp;系统管理台 | 6个功能板块的界面与服务 | 20 | M1/M2 |
| **展示大屏** | | | |
| &emsp;大屏核心页面 | 5个大屏页面设计+开发,轮播,免登录 | 20 | M3 |
| &emsp;大屏管理功能 | 内容配置,布局调整,预览 | 8 | M3 |
| **基础设施** | | | |
| &emsp;用户权限系统 | 角色管理,数据权限,可选对接学校统一认证 | 10 | M1 |
| &emsp;系统运维 | 全局配置,运行监控,操作日志,备份恢复 | 10 | M3/M4 |
| &emsp;部署与联调 | 环境搭建,联调测试,上线部署 | 15 | 全程 |
| | | | |
| **合计** | | **311** | |
### 7.2 工作量汇总(按阶段)
| 阶段 | 周期 | 工作量 | 核心交付 |
|------|------|:------:|---------|
| M1 数据跑通 | 第1个月 | 78 人天 | 数据治理全链路 + 用户权限 |
| M2 核心上线 | 第2个月 | 100 人天 | AI分析引擎 + 报告生成 + 工作台核心 |
| M3 供需会就绪 | 第3个月 | 83 人天 | 深度分析 + 大屏 + 工作台完善 |
| M4 持续迭代 | 第4个月 | 50 人天 | AI课程建议 + 企业推荐 + 运维 |
| **合计** | **4个月** | **311 人天** | |
### 7.3 其他费用参考
| 项目 | 说明 | 预估(年) |
|------|------|-----------|
| 服务器 | 校方自备或采购(见5.2配置推荐) | 视校方情况 |
| AI模型云端调用 | 如使用云端AI服务(按调用量计费) | 1-3万元 |
| AI模型私有化部署 | 如需校内私有化部署(含GPU服务器) | 视模型规模 |
| 年度运维 | 系统维护、数据更新、版本升级 | 另行协商 |
> 以上AI服务费用为参考值,实际费用取决于分析频率和数据规模。32个专业每月分析一次,年均费用约1-2万元。
*— 文档结束 —*
@@ -0,0 +1,369 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>供需会智能分析系统 — 架构图(Word粘贴版)</title>
<style>
body { font-family: "Microsoft YaHei", "PingFang SC", sans-serif; max-width: 800px; margin: 40px auto; color: #333; }
h2 { color: #1a5276; border-bottom: 2px solid #2980b9; padding-bottom: 6px; margin-top: 50px; }
h3 { color: #2c3e50; margin-top: 30px; }
/* 四层架构图 */
.arch-layer { border: 2px solid #2c3e50; border-radius: 6px; margin-bottom: 0; padding: 14px 16px; }
.arch-layer + .arch-layer { border-top: 2px dashed #7f8c8d; border-top-left-radius: 0; border-top-right-radius: 0; margin-top: -2px; }
.arch-layer:first-child { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.layer-title { font-weight: bold; font-size: 15px; color: #fff; background: #2c3e50; display: inline-block; padding: 3px 12px; border-radius: 3px; margin-bottom: 10px; }
.layer-title.blue { background: #2980b9; }
.layer-title.green { background: #27ae60; }
.layer-title.orange { background: #e67e22; }
.layer-title.gray { background: #7f8c8d; }
.card-row { display: flex; gap: 10px; flex-wrap: wrap; }
.card { border: 1px solid #bdc3c7; border-radius: 4px; padding: 10px 14px; background: #f8f9fa; flex: 1; min-width: 150px; }
.card-title { font-weight: bold; font-size: 14px; color: #2c3e50; margin-bottom: 6px; }
.card ul { margin: 0; padding-left: 16px; font-size: 13px; color: #555; }
.card ul li { margin-bottom: 2px; }
.module-tag { display: inline-block; border: 1px solid #bdc3c7; border-radius: 4px; padding: 6px 14px; background: #f8f9fa; font-size: 13px; margin: 3px; text-align: center; }
/* 流程图 */
.flow { text-align: center; padding: 20px 0; }
.flow-step { display: inline-block; border: 2px solid #2980b9; border-radius: 6px; padding: 10px 20px; background: #ebf5fb; font-weight: bold; color: #1a5276; margin: 4px 0; }
.flow-step.green { border-color: #27ae60; background: #eafaf1; color: #1e8449; }
.flow-step.orange { border-color: #e67e22; background: #fef5e7; color: #ca6f1e; }
.flow-step.gray { border-color: #7f8c8d; background: #f2f3f4; color: #566573; }
.flow-arrow { display: block; font-size: 22px; color: #7f8c8d; line-height: 1.2; }
.flow-arrow-right { display: inline-block; font-size: 20px; color: #7f8c8d; margin: 0 6px; vertical-align: middle; }
.flow-branch { display: flex; justify-content: center; gap: 16px; margin: 6px 0; flex-wrap: wrap; }
.flow-sub { font-size: 12px; color: #777; margin-top: 2px; }
/* JD解析示例 */
.jd-box { border: 2px solid #2980b9; border-radius: 8px; overflow: hidden; max-width: 520px; margin: 0 auto; }
.jd-section { padding: 14px 18px; }
.jd-section.input { background: #fef9e7; border-bottom: 2px solid #2980b9; }
.jd-section.process { background: #2980b9; color: #fff; text-align: center; font-weight: bold; padding: 10px; font-size: 15px; }
.jd-section.output { background: #eafaf1; }
.jd-label { font-weight: bold; font-size: 13px; color: #7f8c8d; margin-bottom: 6px; }
.jd-text { font-size: 14px; line-height: 1.7; color: #333; }
.jd-result { font-size: 13px; line-height: 1.8; color: #333; }
.jd-result strong { color: #1a5276; }
/* 匹配示例表 */
.match-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.match-table th { background: #2c3e50; color: #fff; padding: 10px; text-align: center; }
.match-table td { padding: 10px; border: 1px solid #ddd; text-align: center; }
.match-table tr:nth-child(even) { background: #f8f9fa; }
.tag-high { background: #27ae60; color: #fff; padding: 2px 10px; border-radius: 10px; font-size: 12px; }
.tag-mid { background: #f39c12; color: #fff; padding: 2px 10px; border-radius: 10px; font-size: 12px; }
.tag-low { background: #e74c3c; color: #fff; padding: 2px 10px; border-radius: 10px; font-size: 12px; }
.tag-gap { background: #8e44ad; color: #fff; padding: 2px 10px; border-radius: 10px; font-size: 12px; }
/* 课程建议示例 */
.advice-box { border: 2px solid #27ae60; border-radius: 8px; padding: 18px; background: #eafaf1; max-width: 600px; margin: 10px auto; }
.advice-title { font-weight: bold; color: #1e8449; font-size: 15px; margin-bottom: 10px; }
.advice-body { font-size: 14px; color: #333; line-height: 1.8; }
/* 能力图谱 */
.skill-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.skill-table th { background: #1a5276; color: #fff; padding: 8px; text-align: center; }
.skill-table td { padding: 8px; border: 1px solid #ddd; text-align: center; }
.stars { color: #f39c12; letter-spacing: 2px; }
.cover-ok { color: #27ae60; font-weight: bold; }
.cover-partial { color: #f39c12; font-weight: bold; }
.cover-lack { color: #e74c3c; font-weight: bold; }
/* 部署架构 */
.deploy-box { border: 2px solid #2c3e50; border-radius: 8px; padding: 20px; background: #f8f9fa; max-width: 450px; margin: 0 auto; }
.deploy-title { text-align: center; font-weight: bold; color: #2c3e50; font-size: 15px; margin-bottom: 14px; border-bottom: 1px solid #bdc3c7; padding-bottom: 8px; }
/* 排期甘特 */
.gantt { width: 100%; border-collapse: collapse; font-size: 13px; }
.gantt th { background: #2c3e50; color: #fff; padding: 10px; text-align: center; width: 25%; }
.gantt td { padding: 12px; border: 1px solid #ddd; vertical-align: top; }
.gantt .ms-title { font-weight: bold; color: #1a5276; font-size: 14px; margin-bottom: 6px; }
.gantt .ms-sub { color: #7f8c8d; font-size: 12px; }
.gantt ul { margin: 6px 0 0 0; padding-left: 16px; }
.gantt ul li { margin-bottom: 3px; }
</style>
</head>
<body>
<h2>图2.1 — 系统总体架构图</h2>
<div class="arch-layer">
<span class="layer-title blue">应用展示层</span>
<div class="card-row">
<div class="card">
<div class="card-title">学院工作台</div>
<ul><li>专业分析</li><li>报告导出</li><li>企业推荐</li><li>就业指导</li></ul>
</div>
<div class="card">
<div class="card-title">校级管理台</div>
<ul><li>全校总览</li><li>缺口汇总</li><li>材料导出</li><li>大屏管理</li></ul>
</div>
<div class="card">
<div class="card-title">系统管理台</div>
<ul><li>数据管理</li><li>用户权限</li><li>系统运维</li><li>分析任务</li></ul>
</div>
<div class="card">
<div class="card-title">展示大屏</div>
<ul><li>供需总览</li><li>匹配排行</li><li>缺口地图</li><li>薪资对比</li></ul>
</div>
</div>
</div>
<div class="arch-layer">
<span class="layer-title green">AI 智能分析引擎</span>
<div class="card-row">
<div class="module-tag">JD智能解析</div>
<div class="module-tag">岗位匹配引擎</div>
<div class="module-tag">缺口识别引擎</div>
<div class="module-tag">报告生成引擎</div>
</div>
<div class="card-row" style="margin-top:6px;">
<div class="module-tag">技能图谱构建</div>
<div class="module-tag">薪资分析引擎</div>
<div class="module-tag">课程建议 AI生成</div>
</div>
</div>
<div class="arch-layer">
<span class="layer-title orange">数据治理层</span>
<div class="card-row">
<div class="module-tag">数据清洗</div>
<div class="module-tag">岗位归一</div>
<div class="module-tag">质量监控</div>
<div class="module-tag">数据仓库</div>
</div>
</div>
<div class="arch-layer">
<span class="layer-title gray">数据源层</span>
<div class="card-row">
<div class="card">
<div class="card-title">校内数据</div>
<ul><li>实习平台(含工资)</li><li>就业管理系统</li></ul>
</div>
<div class="card">
<div class="card-title">外部数据</div>
<ul><li>杭州就业网</li><li>杭州本地人才网</li><li>政策 / 行业报告</li></ul>
</div>
</div>
</div>
<h2>图3.1 — 数据治理流程</h2>
<div class="flow">
<div class="flow-step gray">原始数据</div>
<span class="flow-arrow">▼</span>
<div class="flow-step">数据清洗</div>
<div class="flow-sub">去重去噪 · 格式标准化 · 缺失值处理</div>
<span class="flow-arrow">▼</span>
<div class="flow-step">岗位归一</div>
<div class="flow-sub">统一分类 · 别名映射 · 待审核队列</div>
<span class="flow-arrow">▼</span>
<div class="flow-step">质量检验</div>
<div class="flow-sub">完整度检查 · 异常值检测 · 质量评分</div>
<span class="flow-arrow">▼</span>
<div class="flow-step green">数据仓库</div>
</div>
<h2>图3.2 — 分析引擎工作流程</h2>
<div class="flow">
<div class="flow-step gray">数据仓库</div>
<span class="flow-arrow">▼</span>
<div class="flow-branch">
<div class="flow-step" style="font-size:13px;">校内就业数据</div>
<div class="flow-step" style="font-size:13px;">市场需求数据</div>
<div class="flow-step orange" style="font-size:13px;">招聘信息原文<br><span style="font-size:11px;font-weight:normal;">→ AI智能解析</span></div>
</div>
<span class="flow-arrow">▼</span>
<div class="flow-step green" style="padding:14px 30px;">
多维度分析引擎<br>
<span style="font-size:12px;font-weight:normal;">岗位匹配 · 缺口识别 · 薪资对标 · 技能图谱 · 企业推荐 · 课程建议</span>
</div>
<span class="flow-arrow">▼</span>
<div class="flow-step" style="font-size:13px;">分析结果库(版本化存储)</div>
<span class="flow-arrow">▼</span>
<div class="flow-branch">
<div class="flow-step green" style="font-size:13px;">报告生成</div>
<div class="flow-step" style="font-size:13px;">数据看板</div>
<div class="flow-step orange" style="font-size:13px;">大屏展示</div>
</div>
</div>
<h2>图4.1 — JD智能解析示例</h2>
<div class="jd-box">
<div class="jd-section input">
<div class="jd-label">原始JD文本(输入)</div>
<div class="jd-text">"招聘Python后端开发工程师,要求熟悉Django/Flask框架,有Redis/MySQL经验,了解Docker容器化部署,薪资15-25K..."</div>
</div>
<div class="jd-section process">▼ &nbsp; 大模型解析 &nbsp; ▼</div>
<div class="jd-section output">
<div class="jd-label">结构化结果(输出)</div>
<div class="jd-result">
<strong>岗位类别:</strong>互联网 / 软件开发 / 后端开发<br>
<strong>核心技能:</strong>Python, Django, Flask, Redis, MySQL, Docker<br>
<strong>技能层级:</strong>熟悉(Django/Flask/Redis)、了解(Docker)<br>
<strong>薪资范围:</strong>15K - 25K<br>
<strong>经验要求:</strong>推断为1-3年
</div>
</div>
</div>
<h2>图4.2 — AI岗位匹配示例</h2>
<table class="match-table">
<tr>
<th>校内就业岗位</th>
<th></th>
<th>市场需求岗位</th>
<th>匹配结果</th>
</tr>
<tr>
<td>"程序员"</td>
<td>→ AI匹配 →</td>
<td>"后端开发工程师"</td>
<td><span class="tag-high">✅ 高匹配</span></td>
</tr>
<tr>
<td>"网页设计"</td>
<td>→ AI匹配 →</td>
<td>"UI/UX设计师"</td>
<td><span class="tag-mid">✅ 中匹配</span></td>
</tr>
<tr>
<td>"文员"</td>
<td>→ AI匹配 →</td>
<td>"数据分析师"</td>
<td><span class="tag-low">❌ 低匹配</span></td>
</tr>
<tr>
<td style="color:#999;">(无对应)</td>
<td></td>
<td>"算法工程师"</td>
<td><span class="tag-gap">⚠️ 缺口</span></td>
</tr>
</table>
<h2>图4.3 — AI课程建议生成流程</h2>
<div class="flow">
<div class="flow-branch">
<div class="flow-step" style="font-size:12px;">技能图谱<br><span style="font-weight:normal;">市场要求 vs 课程覆盖</span></div>
<div class="flow-step" style="font-size:12px;">供需匹配偏差数据</div>
<div class="flow-step" style="font-size:12px;">现有课程设置清单</div>
</div>
<span class="flow-arrow">▼ 输入 ▼</span>
<div class="flow-step green" style="padding:12px 24px;">
大模型推理<br>
<span style="font-size:12px;font-weight:normal;">
① 识别技能覆盖盲区 → ② 关联到岗位需求 → ③ 评估市场趋势<br>
→ ④ 生成课程建议 → ⑤ 给出数据支撑和优先级
</span>
</div>
<span class="flow-arrow">▼ 输出 ▼</span>
</div>
<div class="advice-box">
<div class="advice-title">建议【高优先级】:新增"容器化与云原生"课程方向</div>
<div class="advice-body">
<strong>依据:</strong>Docker/K8s技能在后端开发岗位JD中出现率从2024年的42%上升至2026年的78%,而当前课程体系中仅在"Linux基础"课程中简要提及容器概念。<br><br>
<strong>建议措施:</strong>新增1门32学时选修课,覆盖Docker基础、容器编排、CI/CD流水线等内容。
</div>
</div>
<h2>图4.4 — 专业能力图谱示例</h2>
<h3 style="text-align:center;color:#1a5276;">计算机科学与技术 · 能力图谱</h3>
<table class="skill-table">
<tr>
<th>技能</th>
<th>市场需求强度</th>
<th>课程覆盖状态</th>
</tr>
<tr><td>Java</td><td class="stars">★★★★★</td><td class="cover-ok">覆盖充足 ✓</td></tr>
<tr><td>Python</td><td class="stars">★★★★☆</td><td class="cover-ok">覆盖充足 ✓</td></tr>
<tr><td>Spring</td><td class="stars">★★★★★</td><td class="cover-partial">部分覆盖 △</td></tr>
<tr><td>MySQL</td><td class="stars">★★★★☆</td><td class="cover-ok">覆盖充足 ✓</td></tr>
<tr><td>Linux</td><td class="stars">★★★★☆</td><td class="cover-ok">覆盖充足 ✓</td></tr>
<tr><td>Git</td><td class="stars">★★★★☆</td><td class="cover-partial">部分覆盖 △</td></tr>
<tr><td style="font-weight:bold;color:#e74c3c;">Docker</td><td class="stars">★★★☆☆</td><td class="cover-lack">严重不足 ✗</td></tr>
<tr><td style="font-weight:bold;color:#e74c3c;">Redis</td><td class="stars">★★★☆☆</td><td class="cover-lack">严重不足 ✗</td></tr>
</table>
<h2>图5.2 — 部署架构图</h2>
<div class="deploy-box">
<div class="deploy-title">学校数据中心 / 云服务器</div>
<div class="card-row">
<div class="module-tag" style="flex:1;text-align:center;">Web前端</div>
<div class="module-tag" style="flex:1;text-align:center;">后端服务</div>
</div>
<div class="card-row" style="margin-top:6px;">
<div class="module-tag" style="flex:1;text-align:center;">数据库</div>
<div class="module-tag" style="flex:1;text-align:center;">缓存服务</div>
</div>
<div class="card-row" style="margin-top:6px;">
<div class="module-tag" style="flex:1;text-align:center;background:#eafaf1;border-color:#27ae60;">AI模型服务<br><span style="font-size:11px;color:#777;">可选私有化部署或对接云端</span></div>
</div>
</div>
<h2>图6.1 — 分期交付计划</h2>
<table class="gantt">
<tr>
<th>月份1</th>
<th>月份2</th>
<th>月份3</th>
<th>月份4</th>
</tr>
<tr>
<td>
<div class="ms-title">里程碑1 · 数据跑通</div>
<ul>
<li>数据源对接</li>
<li>数据清洗归一</li>
<li>岗位分类体系</li>
<li>用户权限</li>
</ul>
<div class="ms-sub">✓ 验收:数据链路跑通,样本数据可查</div>
</td>
<td>
<div class="ms-title">里程碑2 · 核心功能上线</div>
<ul>
<li>AI分析引擎</li>
<li>院级/专业分析</li>
<li>32份基础报告</li>
<li>全校总览</li>
<li>材料包导出</li>
</ul>
<div class="ms-sub">✓ 验收:系统可用于报告生成和导出</div>
</td>
<td>
<div class="ms-title">里程碑3 · 系统就绪</div>
<ul>
<li>技能图谱</li>
<li>薪资对标</li>
<li>缺口分析</li>
<li>大屏配置+展示</li>
<li>报告内容丰富</li>
</ul>
<div class="ms-sub">✓ 验收:完整分析+大屏</div>
</td>
<td>
<div class="ms-title">里程碑4 · 持续迭代</div>
<ul>
<li>AI课程建议</li>
<li>政策聚合</li>
<li>改进跟踪</li>
<li>企业推荐</li>
<li>就业去向</li>
<li>大屏进阶</li>
</ul>
<div class="ms-sub">✓ 验收:全功能交付</div>
</td>
</tr>
</table>
</body>
</html>
+33
View File
@@ -0,0 +1,33 @@
# 供需会系统 — User Story 文档索引
> 本目录包含供需会系统的完整 User Story 规划文档,按角色维度组织。
## 📁 文档清单
| 文件 | 内容 | Story 数量 |
|------|------|:----------:|
| [00-角色总览与旅程地图](./00-角色总览与旅程地图.md) | 3个角色+大屏模块定义、旅程地图、功能矩阵 | — |
| [01-US-学院用户](./01-US-学院用户.md) | R1 学院用户(院长+专业负责人+就业指导) | 10 |
| [02-US-校级管理者](./02-US-校级管理者.md) | R2 校级管理者(教务处/就业处) | 6 |
| [03-US-系统管理员](./03-US-系统管理员.md) | R3 系统管理员(运维+数据管理) | 8 |
| [04-大屏展示模块](./04-大屏展示模块.md) | 大屏展示功能模块(非独立角色) | 5 |
| [05-优先级与排期建议](./05-优先级与排期建议.md) | 优先级分级、交付节奏、依赖关系、风险 | — |
| [10-技术方案-供需会智能分析系统](./10-技术方案-供需会智能分析系统.md) | **面向甲方的技术方案**(架构、功能、AI、部署、排期、报价) | — |
## 📊 汇总
| 指标 | 数量 |
|------|------|
| 角色 | 3 个 + 1 个展示模块 |
| User Story 总数 | 29 个 |
| P0(核心交付) | 11 个 |
| P1(深度增强) | 8 个 |
| P2(体验提升) | 7 个 |
| P3(智能增值) | 3 个 |
## 🔄 使用说明
1. 从 `00-角色总览与旅程地图.md` 开始,了解全貌
2. 按角色文件确认各 User Story 是否完整
3. 参考 `05-优先级与排期建议.md` 确定交付计划
4. 各 Story 的验收标准可直接转化为测试用例
+132
View File
@@ -0,0 +1,132 @@
我先把这组方向整理成一个清晰的产品矩阵。整体可归纳为 **平台产品、工具产品、定制服务、垂直行业方案** 四条产品线。
| 产品线 | 方向 | 主要客户 | 产品形态 | 核心内容 |
|---|---|---|---|---|
| 平台产品 | 产教结合 | 高校、职业院校、产业学院、企业培训部门 | 产教融合平台 | 专业建设、课程共建、项目实训、企业导师、过程管理、成果评价 |
| 工具产品 | 录播课程转 AI 课程 | 教师、教研室、课程制作团队 | AI 课程生产工具 | 从录播内容提取教纲,生成课程思政建议、PPT、数字人课程及配套教学材料 |
| 定制服务 | 知识库与个性化应用 | 学校、学院、专业团队及机构客户 | 私有知识库+定制智能应用 | 文档治理、知识检索、智能问答、个性化教学与业务工作流 |
| 垂直方案 | 宴席/越剧 | 专业、学院及行业机构 | 专业知识平台+教学应用 | 专业知识整理、课程资源建设、行业问答、数字内容生产及特色人才培养 |
## 建议采用的产品架构
### 一、产教融合平台
服务学校、学院与企业联合培养人才,覆盖:
- 专业和课程共建;
- 企业项目进入教学;
- 学生实训和作品管理;
- 校内教师与企业导师协作;
- 学习过程与项目成果评价;
- 产业学院运营数据管理。
这条线承担统一账号、组织、课程、项目、资源和数据管理,适合作为基础平台。
### 二、AI 课程生产工具
将已有录播课加工为结构化教学资源。建议明确输入与输出:
**输入:**
- 录播视频或音频;
- 已有教案、教材和课件;
- 课程标准及教学要求;
- 经审核的课程思政材料;
- 教师授权的形象与声音素材。
**输出:**
- 课程大纲和章节结构;
- 知识点及教学目标;
- PPT 初稿;
- 教案、讲义和题目初稿;
- 课程思政建议及引用位置;
- 数字人讲解视频;
- 字幕、摘要和资源标签。
产品表述建议使用“辅助生成”和“教师审核后发布”。课程思政内容、专业结论、引用来源和评价题目不能未经审核直接进入正式课程。
### 三、知识库与个性化应用
面向不同学校、专业和机构进行配置或定制,包括:
- 校级、院级和专业级知识库;
- 教材、教案、制度、案例和行业资料入库;
- 基于授权资料的检索与问答;
- 面向教师、学生和管理人员的不同入口;
- 个性化学习建议;
- 专业术语词典和引用溯源;
- 权限、版本、审计与内容更新;
- 与现有教学平台或业务系统对接。
产品化部分应尽量沉淀为统一知识库平台;客户特有的数据治理、接口和工作流作为定制项目交付。
### 四、宴席与越剧垂直方案
这两个方向建议分别建设,避免合并为一个模糊的“文化产品”。
#### 宴席方向
如果这里指宴席设计、餐饮文化或烹饪教育,可以围绕:
- 宴席菜单和菜品知识;
- 原料、工艺与成本核算;
- 地方饮食文化;
- 宴席主题与场景设计;
- 实训课程和案例库;
- 食品安全与操作规范;
- 面向师生的专业问答。
#### 越剧方向
建议先从“越剧教学知识平台”切入,再评估生成式唱腔能力:
- 剧目、唱段和流派资料库;
- 越剧字音、唱词和术语检索;
- 板式、行当和流派教学;
- 音视频切分、字幕和唱词对齐;
- 教学课件与课程资源生成;
- 经授权的数字人讲解;
- 唱腔分析、音高曲线和跟唱练习;
- 授权数据条件下的实验性唱腔合成。
越剧唱腔生成不宜在早期直接承诺为成熟产品。模型效果取决于授权录音、流派标注、越剧字音、音素边界、实际音高和演唱技法数据。更现实的首期产品是**知识库+教学资源生产+唱段分析**。
## 四条线之间的关系
```text
产教融合平台
├─ AI课程生产工具
│ ├─ 录播解析
│ ├─ 教纲与教案
│ ├─ PPT与题目
│ ├─ 课程思政辅助
│ └─ 数字人课程
├─ 专业知识库
│ ├─ 文档治理
│ ├─ 检索问答
│ ├─ 内容溯源
│ └─ 个性化应用
└─ 垂直专业方案
├─ 宴席专业
└─ 越剧专业
```
其中:
- **产教融合平台**负责组织、课程、项目和教学过程;
- **AI 课程工具**负责内容加工;
- **知识库**负责专业资料沉淀和可信问答;
- **宴席、越剧**是平台与工具在具体专业中的落地方案。
## 更简洁的对外表述
> 面向职业院校和专业学院,提供产教融合平台、AI 课程生产工具与专业知识库服务。平台覆盖校企协作、课程建设、项目实训和成果评价;AI 工具将已有录播和教学资料加工为教纲、课件、教案、题目及数字人课程;专业知识库支持授权资料的检索、问答和个性化教学。宴席、越剧等特色专业采用垂直方案建设,结合专业资源、教学流程和行业实践配置具体应用。
## 建议优先级
1. **先做录播转 AI 课程工具**:输入输出明确,容易形成可演示产品。
2. **同步建设知识库底层能力**:为教纲、PPT、问答和垂直专业应用提供统一事实来源。
3. **将工具接入产教融合平台**:形成课程建设、项目实训和评价的完整业务流程。
4. **选择一个垂直专业做样板**:如果已有越剧学院、教师和授权资料,优先做越剧;如果宴席专业的数据和课程更完备,则先做宴席。
5. **唱腔生成放在研究或联合实验室阶段**:首期避免把实验能力写成正式交付承诺。