# 产教数据中台,厂商运营原型 本目录展示厂商如何管理招聘数据采集、检查、发布和学校交付。数据来源包括商业招聘平台、公共就业平台和校内系统。 ## 运行 直接打开 `index.html`,或在本目录启动静态服务: ```bash python3 -m http.server 8080 ``` 访问 。 ## 产品定位 该页面用于管理产教分析所需的数据: 1. 注册和版本化管理商业、公共、校内三类数据源; 2. 调度采集任务,管理地域、行业、岗位族、分片、失败隔离和增量水位; 3. 保存原始快照、内容哈希、连接器代码版本和任务追踪编号; 4. 将不同来源映射到统一的招聘岗位、企业、薪资和技能契约; 5. 执行质量校验、企业归一、岗位分类和技能抽取; 6. 通过带 Manifest、Schema、质量报告、血缘和校验和的数据包向学校交付。 ## 已纳入的目标数据源 | 类别 | 数据源 | 生产接入方式 | 目标数据 | |---|---|---|---| | 商业平台 | BOSS直聘 | 官方合作 API / 授权数据包 | 岗位、企业、地区、薪资、岗位职责、技能 | | 商业平台 | 智联招聘 | 官方合作 API / 书面授权数据包 | 岗位、企业、地区、薪资、岗位职责、技能 | | 公共平台 | 全国中小企业招聘平台 | 官方接口优先;获准公开页 | 中小企业岗位、校招、实习和招聘活动 | | 公共平台 | 国家大学生就业服务平台 | 官方接口优先;获准公开页 | 高校毕业生岗位、专场招聘和实习 | | 公共平台 | 中国公共招聘网 | 官方交换 / 提供单位授权 | 公共就业岗位、重点行业和招聘活动 | | 公共平台 | 国聘 | 官方合作 API / 授权数据包 | 国资央企岗位和校园招聘 | | 公共平台 | 杭州人才网 | 书面许可接口 / 低速公开页 | 杭州都市圈企业和岗位 | | 校内系统 | 就业管理系统 | 租户只读视图 / API / 文件 | 毕业去向、岗位、企业、薪资和专业相关度 | | 校内系统 | 实习管理系统 | 租户 API / 文件 | 实习岗位、企业、工资、过程和企业评价 | 页面上的“正式运行”、记录数、成功率和时间线均为静态产品样板数据,不代表仓库当前正在访问这些站点。生产连接器默认禁止公网访问,必须完成来源授权、robots、域名白名单、限速和小样本结构审批后才能启用。逐来源方案见 [`../../docs/crawler-source-implementation.md`](../../docs/crawler-source-implementation.md),实现位于 [`../crawler/`](../crawler/)。 ## 交互范围 - **运行总览**:生产批次、采集量、质量、来源健康度、流水线和运营事项。 - **运营处置**:问题确认与指派、排障、不可变质量处置、独立发布审批、逐学校交付回执、失败重试与租户级回滚。 - **数据源管理**:来源分类、搜索、资产详情、采集配置、字段映射、运行与审计。 - **采集任务**:筛选、任务详情、暂停/恢复、新建任务和小样本预检。 - **采集数据**:查看标准岗位、源端记录、原始快照和隔离记录,支持来源、地区、关键词检索、明细追溯和结果导出。 - **数据标准**:外部岗位、校内就业、交付 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/school-internship.schema.json` - `SCHOOL-INTERNSHIP V2.1` - 校内实习数据契约,包含租户隔离、学生令牌化、岗位任务和评价记录 - `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 ` 运营流程预览: - `preview-admin-operations.png` - `preview-admin-operations-mobile.png`