跳到主要内容

结构与边界

这是在修复现场平板应用或将其与其他系统对接时需要了解的结构。源代码位于 plantpulse-platform/plantpulse-frontline-web 仓库。

结构​

태블릿 브라우저 (PWA) frontline 컨테이너 플랫폼
┌──────────────────────┐ HTTPS ┌──────────────────────────────┐ V5 ┌──────────────┐
│ React 웹 앱 │ ──────▶ │ BFF (/api/*) │ ────▶ │ server-web │
│ 서비스워커 · 입력 큐 │ 9701 │ · 기기 토큰 · 작업자 세션 │ 토큰 │ /api/v5/... │
└──────────────────────┘ │ · 범위 검사 · 감사 로그 │ 하나 └──────────────┘
└──────────────┬───────────────┘
│ JDBC
플랫폼 DB pp · 스키마 pf
部分说明仓库位置
WebReact 19 + TypeScript + Vite PWA。包含服务工作线程 (Service Worker)、离线输入队列 (IndexedDB)、各画面最后一次记录值 (localStorage)。图表使用 ECharts 6 — 仅在打开含图表画面时加载的独立代码块 (Chunk)web/
BFFSpring Boot 4.1 WAR,运行在 Platform 公用 Tomcat 10.1 (runtime-base) 之上。调度器仅挂载在 /api/*。包含范围检查 (scope/)、巡检 (maintenance/)、不良 (defect/)、报告 (floor/ReportController) 功能src/plantpulse/frontline/
DBPlatform 数据库 pp 的 pf 模式 (2026-10-29 之前为 frontline),使用 Platform 既有 DB 账户。表名以 fl_ 开始。通过 Flyway 升级模式 (V1~V14)src/db/migration/
镜像docker.kopens.io/pp/plantpulse-frontline-web。端口 9701 (TLS) · 9700 (仅用于状态检查)Dockerfile

模式历史​

版本说明
V1~V4操作员 · PIN · 设备 · 设置 · 原因列表 · 班组备注 · 审计日志, 画面语言 · 主题
V5删除了语言字段中的 CHECK IN ('ko','en'),并将 fl_operator.lang · fl_operator_revision.lang · fl_device.default_lang 扩展至 VARCHAR(35) (BCP 47)。允许的语言由服务器列表统一决定,而非模式决定
V6删除了 fl_setting 的 kiosk.micro_stop_seconds 行。短停机标准由 Platform 设置决定 (不迁移旧值)
V7承担范围。详见下文
V8按人员分页读取审计日志的索引
V9操作员登录与 Platform 员工 (pp.mm_employee) 的关联字段
V10将操作员账户迁移至 Platform。创建登录缓存 fl_account_cache 和同步状态 fl_account_sync,并将会话改为指向 Platform 员工 ID (删除既有会话 — 升级后所有平板需重新登录)。旧有的 fl_operator · fl_operator_scope 将在确认迁移至 Platform 后于 V11 中删除
V11删除旧操作员表 (fl_operator · fl_operator_scope 及各历史表)。仅在标记为迁移完成的安装环境 (fl_account_sync.imported_at) 中删除,尚未迁移的安装环境予以保留
V12设备 «主要值» fl_key_value — 每台设备概要中优先显示的最多 6 个标签 (仅标签 id 与顺序,值在 V5 中读取)
V13客户 Logo fl_brand_logo — 分别提供亮色版和暗色版 PNG 图片
V14将设备默认范围 fl_device.default_scope_type 的允许层级扩展至 SITE · AREA · LINE · ASSET 四个层级 (此前为 LINE · ASSET)。既有行予以保留

模式重命名。 在 Flyway 执行之前,应用仅在存在 frontline 模式且不存在 pf 时,将 ALTER SCHEMA frontline RENAME TO pf 执行一次性单句重命名。表 · 数据 · Flyway 历史 · 设置 (ai.url · ai.api_key) 完整迁移且不进行复制。再次启动时由于 pf 已存在,则不执行任何操作 (幂等)。新安装环境由 Flyway 创建 pf。若两者同时存在,则不进行推测,仅记录警告并使用 pf。若 DB 无响应则停止启动 — 否则 Flyway 会创建空的 pf,导致数据看似丢失。

操作员账户迁移。 启动后在首次同步前,将 fl_operator · fl_operator_scope 发送至 V5 POST /app-accounts/frontline/import。PIN 哈希原样迁移 (不重新计算哈希)。未关联员工的登录记录由 Platform 创建员工 EMP_FL_<로그인 번호> 并进行关联。若登录号已存在于 Platform,则以 Platform 为准 (EXISTS)。所有行通过 CREATED · EXISTS 返回后才标记为完成,否则在下一轮次重新发送 (幂等)。

与 Platform 的边界​

应用不产生计算数值

OEE · 稼动 · 性能 · 质量 · 停机时间 · 损失 · MTBF · MTTR 仅显示由 Platform V5 提供的数值。Platform 未提供的值显示为空白或 «无数据» 或隐藏,严禁填充 0 或估计值。画面中唯一允许计算的是用于显示的进度率 (良品 ÷ 计划),图表仅原样绘制 V5 数值并更改轴单位。从而确保平板 · Platform Web · 报告 · AI 看到同一数值。

  • Platform 数据仅通过 V5 进行读写。即使处于同一 pp 数据库,也不允许直接读写 Platform 表,且不在 pf 模式中保留 Platform 数据副本。巡检调用和不良记录在应用中也不设副本 — 正本为 V5 的巡检单 · 不良记录。
  • 唯一例外 — 登录缓存 fl_account_cache。 为确保 Platform 重启期间现场仍可登录而设立。详见下文 操作员账户。其他表禁止存储 PIN 哈希 · 员工姓名 · 在职状态 (由测试拦截)。
  • 不加入 MES 功能。 操作员账户仅包含登录手段 (登录号 · 角色 · PIN) 和 承担范围 (可见范围)。承担范围并非 MES 的人力分配 — 不包含资格 · 班组 편성 · 个人业绩 · 人员统计。工单仅支持选择、开始 · 暂停 · 恢复 · 结束 · 中止 (原因代码),并报告基于时间的完成率 — 发布 · 编辑在 Platform 中执行。
  • pf 模式存储:设备 (含默认语言 · 画面主题) · 设备原因列表 · Kiosk 设置 · 班组备注 · 审计日志 · 会话,以及登录缓存 (fl_account_cache · fl_account_sync)。操作员账户 (登录号 · PIN 哈希 · 角色 · 承担范围 · 画面语言 · 主题) 正本位于 Platform pp.mm_app_account · pp.mm_app_account_scope。
  • 调用 V5 时,通过 Accept-Language 携带用户的语言。停机原因 · 故障模式 · 不良原因名称原样显示 V5 发送的内容。

判定由 Platform 执行​

画面显示的判定不由应用执行,而是原样使用 V5 提供的数值。原先在应用端的判定代码 (计划 · 来源 · 长度比较,班组窗口选择与 8 小时替代窗口) 已删除。

判定V5 来源
本班组窗口GET /calendar/shift-schedule/current。无班组表时的 «最近 9 小时» 亦由 V5 提供 (若用户选择 12 小时则按比例扩宽)。若 V5 无法提供窗口,卡片原样提示拒绝,应用不伪造窗口
«当前计划» 工单同一响应中的 planned_order_id
缺失原因停机每项停机的 needs_reason
短停机每项停机的 short。标准为 GET /config/PP_STOP_MICRO_STOP_SECONDS (默认 60 秒, 0~1800, 0 为全部询问)

应用调用的 V5 接口​

读取用途
GET /site · /asset/lines/by-site/… · /asset/equipments/by-line/… · /path/asset/…范围选择 (站点 → 线 → 设备)
GET /asset/… · GET /site/… · GET /asset/equipments/by-line/…承担范围节点解析 (父链)。线的计划对比通过设备列表询问
GET /asset/…/status状态与持续时间
GET /kpi/oee/status/current · /kpi/period班组 OEE, 仪表盘期间指标
GET /kpi/daily仪表盘 · 报告的日趋势
GET /ram/breakdown?by=CAUSE · /failure-dictionary/alarm-cause故障原因帕累托图与原因名称
GET /asset/…/stops · /asset/…/stop-loss时间轴, 缺失原因停机, 短停机, 分原因停机损失
GET /asset/…/timeline/alarms报警 (min_priority, limit=500)。BFF 仅筛选进行中 (最近 7 日内开启) 及今日结束项
GET /stop-reasons原因字典 (原因按钮, 设置中的停机原因列表)
GET /calendar/shift-schedule/current本班组窗口 (asset_id)。响应字段为 from_ts · to_ts · shift_code · shift_date · from_plan · planned_order_id
GET /config/PP_STOP_MICRO_STOP_SECONDS短停机标准 (1 分钟缓存)
GET /order/query · /order/current-asset · /order/… · /order/…/quantity工单列表 · 进行中工单 · 详情 · 数量
GET /order/…/revisions · /order/…/progress变更历史, 完成率报告历史。V5 仅提供工号,BFF 从登录缓存中查找姓名并附加至 names (无工号则原样显示)
GET /maintenance-orders · /maintenance-orders/options · /maintenance-orders/…巡检看板 (open=true&order=asc&limit=100, 范围 · 负责人筛选), 症状 · 代码列表, 取消前确认
GET /asset/…/defects/options · /asset/…/defects · /order/…/defects · /defects/…不良原因列表, 设备 · 工单的不良记录
GET /asset/qr/{token}扫描 QR 标签 Token → 设备。仅由 BFF 调用,Token 不记录在日志中
GET /order/deviation-summary · /defects/summary · /maintenance-orders/summary报告的计划对比 · 不良原因 · 巡检汇总 (慢速读取)

GET /order/query 为工单画面使用 line_id · site_id · status=END,ABORTED · end_since · end_before · include=oee · sort · limit=500 · order_id 筛选。巡检看板读取采用 BFF 5 秒缓存,巡检 · 不良 options 采用 60 秒共享缓存,写入时清空。

写入用途请求头
PUT /asset/{asset}/stops/{started_at}/reason记录停机原因Idempotency-Key
PUT /order/{order}/quantity数量更正 (良品 · 不良合计 + 原因)Idempotency-Key
POST /order/{order}/start · pause · resume · end工单状态转移。正文携带点击时刻 occurred_at (epoch ms)If-Match (工单 version)
POST /order/{order}/abort中止工单。abort_code · abort_notes · occurred_atIf-Match · Idempotency-Key
POST /order/{order}/progress完成率报告。percent_complete (0~100 整数) · note · reported_atIf-Match · Idempotency-Key
POST /asset/{asset}/maintenance-orders巡检调用 (maintenance_kind_code: CORRECTIVE, failure_mode_code · 说明 · 调用人)Idempotency-Key · X-PP-Channel: FRONTLINE
POST /maintenance-orders/{id}/transition接单 · 开始维修 · 完成 (status_code + 措施 · 部件 · 故障代码), 取消 (status_code: CANCELLED + cancel_reason_code)。version 携带在正文中Idempotency-Key · X-PP-Channel
POST /asset/{asset}/defects记录不良Idempotency-Key · X-PP-Channel
POST /defects/{id}/cancel取消不良记录If-Match · X-PP-Channel
  • 所有写入均携带 X-PP-Performed-By: 로그인한 사번。V5 将其记录为 performed_by,且 changed_by 保持为应用账户。离线队列后续发送时亦携带点击人的工号。
  • 写入操作附带 Idempotency-Key。确保离线队列重复发送时,V5 不会重复接收同一写入。
  • 工单转移通过 If-Match 对齐 version。若期间被他人更改,则返回 409,画面显示 «他人已先进行更改」。
  • 工单转移 · 中止 · 不良记录携带 点击时刻。即使在队列中延迟发送,业绩时刻仍为点击时刻。
  • «结束前一工单并开始» 由 BFF 依次调用 end 和 start。两半段分别使用独立幂等键,并携带相同点击时刻。若第二段失败,不回滚第一段,原样告知。

V5 接口详见 API 文档。

QR 标签进入流程​

Platform 的 公开页面 «在 frontline 中打开» 通过 <PP_UI_FRONTLINE_URL>/#/qr/<token> 进入。地址中不含设备 ID。

  1. 应用立即从地址中删除 Token 并存入该标签页的 sessionStorage (fl.qr_pending)。登录前不发送至服务器。
  2. 登录后提取 Token,通过 BFF POST /api/v1/qr/resolve 的 正文 发送 — 避免进入路径导致出现在各类访问日志中。
  3. BFF 首先验证 Token 格式 (base64url 43 位),通过 V5 GET /asset/qr/{token} 查找设备,并按照范围芯片规则检查该账户 · 平板是否有权选择该设备。
  4. 验证通过后,应用将范围切换至该设备并打开 «当前» 画面。
响应代码画面提示
400qr_token并非标签 Token
404qr_unknown已重新发行或设备不存在
403scope_denied超出承担范围

操作员账户 V5​

操作员账户位于 Platform V5 /api/v5/app-accounts/frontline。仅限 ADMIN Token 或 Platform 主密钥 调用 (因为变更 Feed 中包含 PIN 哈希)。

调用用途
GET /app-accounts/frontline账户列表 (含员工姓名 · 在职状态)。应用只读 «操作员» 标签页
GET /app-accounts/frontline/{employee_id}单条记录 (ETag = version)
PUT /app-accounts/frontline/{employee_id}创建 · 修改账户 (登录号 · 角色 · 允许 · 临时 PIN)
DELETE /app-accounts/frontline/{employee_id}删除登录 (员工保留)。最后一名管理员不可删除
PUT /app-accounts/frontline/{employee_id}/scope承担范围 — {"all": true} 或 {"nodes": [...]}
POST /app-accounts/frontline/pin/verify键盘 PIN 验证。始终返回 200 及结果 (OK · INVALID · LOCKED · DISABLED · PIN_RESET_REQUIRED · EMPLOYEE_INACTIVE · EMPLOYEE_ON_LEAVE)
POST /app-accounts/frontline/{employee_id}/pin修改本人 PIN (当前 PIN · 新 PIN)
POST /app-accounts/frontline/{employee_id}/pin/reset管理员 PIN 重置 (临时 PIN, 同时解锁)
POST /app-accounts/frontline/{employee_id}/unlock解锁
GET /app-accounts/frontline/changes变更 Feed (游标)。登录缓存读取此内容
POST /app-accounts/frontline/import迁移应用旧登录 (幂等)
  • 登录。 触达 Platform 时,BFF 仅调用 pin/verify。失败次数 · 锁定 (5 次错误锁 5 分钟) · 退职 · 休职拒绝均由 Platform 处理。
  • 登录缓存。 AccountSync 每 60 秒从游标起读取变更 Feed 至末尾,同步 fl_account_cache (快照含 PIN 哈希 · 在职状态 · 范围)。缓存 仅在无法触达 Platform 时 读取。若最后一次成功同步时间距今超过 accounts.offline_days (管理员 «Kiosk» 画面,默认 7 日, 1~30 日),则拒绝离线登录 (fail-closed, 503 offline_login_expired)。
  • 离线失败。 使用缓存验证时,错误 PIN 由应用计数 (每人 5 次锁 5 分钟,每台设备 20 次锁 15 分钟),不发送至 Platform。
  • 离线不可用项。 PIN 变更 · 画面语言 · 主题切换仅在触达 Platform 时可用。账户编辑 · PIN 重置 · 解锁在应用中不存在 (见控制台 «员工»)。
  • 本人可更改内容:PIN (BFF PUT /v1/session/pin) · 画面语言 · 主题 (PUT /v1/me/preferences),以及 «个人资料» 中的联系方式 · 照片 (PUT /v1/me/profile · PUT /v1/me/photo, Platform 员工信息)。

高可用 (HA) 环境中​

Platform 高可用 PG 元数据同步将 frontline 相关内容同步至备用集群。

同步项不同步项 (每个节点独立)
操作员账户与承担范围 pp.mm_app_account · pp.mm_app_account_scope (含 PIN 哈希)会话 · 设备注册码 · 审计日志 · 班组备注 · 幂等记录
Kiosk 设置 pf.fl_setting · 设备停机原因列表 pf.fl_asset_reason_list · 已注册平板 pf.fl_device登录缓存 fl_account_cache · fl_account_sync — 每个节点根据自身 Platform 变更 Feed 填充
AI 密钥 (fl_setting 的 ai.api_key) 仅在 metasync.include.tokens=true 时同步

Platform 重启期间​

Platform 重启通常为 1~3 分钟,最长约 10 分钟。期间应用不停止运行。

  • BFF 若无法触达 V5 或自身 DB,则通过 503 和 X-FL-Offline 响应头告知 «当前不可用»。这与拒绝响应 (4xx) 区分开。
  • Web 收到该响应后显示为连接断开,画面显示最后一次数值及其接收时间 (如 «3 分钟前 기준») 。不伪造数值 — 仅显示 BFF 提供的最后数值。
  • 进入队列的内容:停机原因 · 工单转移 (含中止) · 完成率报告 · 巡检调用 · 不良记录。针对同一工单 · 停机的输入遵循队列顺序,若前项被拒绝,后续项不发送,等待人工判断。
  • 恢复机制:以 2 · 4 · 8 · 15 秒 (后续重复 15 秒) 间隔询问 /api/health,当 DB 与 Platform 均处于 UP 时恢复连接,发送队列并重新读取画面。
  • 数量更正 · 巡检阶段移动 · 巡检调用取消 · 不良记录取消不进入队列 — 这类基于当前值与 version 判定的写入仅在连接状态下接收。对于尚在队列中的巡检调用取消,通过从队列中删除处理。
  • V5 读取超时限制:连接 2 秒,响应 5 秒。报告的重量级汇总 (计划对比 · 不良 · 巡检) 等待上限 20 秒,超时亦不开启熔断 — 仅该卡片报 504 platform_slow 失败,不进入连接断开状态。

PlantPulse AI 聊天​

平板的 «咨询 AI» 通过 BFF 中继至 PlantPulse AI 的现场聊天 API。由于与 Platform V5 为独立连接,即使 AI 响应缓慢或宕机,也不会导致 Platform 连接断开。

BFFAI 端用途
GET /api/v1/chat/capabilitiesGET /api/v1/chat/capabilities是否显示按钮 (记忆 60 秒)。无范围者不显示 AI 咨询,提示 «无»
POST /api/v1/chat/streamPOST /api/v1/chat/stream通过 SSE 接收响应并原样流式传输
POST /api/v1/chat/cancelPOST /api/v1/chat/cancel停止。仅限同一用户的对话
  • 地址与密钥存于应用 DB fl_setting 的 ai.url · ai.api_key (设置 → AI)。密钥仅通过 X-API-Key 发送,严禁记录在日志 · 响应 · 异常语句中。
  • 请求中携带 «代理咨询人» 的登录工号 (与 X-PP-Performed-By 同值) 及其范围 (遵循范围检查规则)。若无范围则不调用 AI,返回 403。
  • 画面语言通过 Accept-Language 携带。

认证 — 三层结构​

层级说明存储位置
Platform 密钥Platform 主 API 密钥。仅由 BFF 持有容器环境变量 PP_MASTER_API_KEY
设备 Token注册平板时颁发的随机数。DB 中仅存储哈希。无有效期,由管理员解除。通过 Authorization: Bearer 携带浏览器的 localStorage (fl.device_token)。其他浏览器 · 无痕窗口 · 已清除数据的浏览器为未注册状态
操作员会话通过登录号 + PIN 开启。PIN 由 Platform 验证 (不可达时用登录缓存)。会话指向 Platform 员工 ID,有效期至自动登出时间,并绑定至设备 Token。通过 X-FL-Session 携带标签页的 sessionStorage — 刷新保留,关闭标签页失效 (无法使用存储时用内存)
  • Platform V5 不接收 USER 角色 Token (仅接收 ADMIN · API)。因此不能为每人分配 Platform Token,统一使用主密钥调用。操作记录通过 V5 记录的 performed_by (见上述 X-PP-Performed-By) 与应用审计日志 (fl_audit — 工号 · 设备 · V5 路径 · 响应代码 · Idempotency-Key) 双重留痕。
  • 在 Platform 审计日志中,该应用的调用通过行为主体 master-api-key 区分,在代理日志中通过 User-Agent PlantPulse-frontline-web/<version> 区分。
  • 所有 BFF Handler 必须明确访问级别 — 未标明者默认拒绝。
  • Token · PIN 严禁出现在日志 · 响应 · 异常语句中。

角色检查​

每个 Handler 通过 @Access 定义允许角色。除了画面隐藏按钮外,服务器端再次拦截。

动作允许角色
巡检接单 · 开始维修 · 完成巡检 · 管理员
中止工单班长 · 管理员
巡检调用 · 巡检调用取消 · 记录不良 · 取消不良记录所有四个角色。取消操作由 Handler 再次验证 — 必须是本人或班长 · 管理员
设置 (/v1/admin/)管理员

范围检查​

在角色检查之后执行 承担范围 检查。所有现场请求均通过 scope/ScopeInterceptor 单一入口 (位于认证拦截器之后)。

  • 目标包括路径 · 查询中的设备 · 线 · 工单 (通过 V5 确认设备) · 巡检单 · 不良记录。读取操作必须在范围内,写入操作必须满足 RW。
  • 超出范围返回 403 scope_denied,只读范围执行写入返回 403 scope_read_only。
  • @OpenToReadOnly (巡检调用, 巡检调用取消) 仅执行读取级别检查 — 确保仅有 «查看» 权限的人员也能调用巡检。他人调用取消由 Handler 再次拦截。
  • 登录范围 = 账户范围 ∩ 设备默认范围 (ScopeGuard.within)。若账户节点与设备节点相同或在其下方,则予以保留;若在设备节点上方,则将设备节点作为该账户节点的 access 赋予。不重叠节点丢弃。账户为 scope_all 时,范围为设备节点 RW。设备不得扩宽范围,亦不得将 RO 提升为 RW。管理员角色及无默认范围的设备不执行缩小范围操作。设备默认范围可以是站点 · 区域 · 线 · 设备任何层级 (DeviceScope)。
  • 节点向下继承。单设备同时接收 RW 与 RO 时,以 RW 为准。通过 V5 解析父链并缓存 5 分钟。V5 中删除的节点访问权限为 0。
  • 仪表盘 · 报告要求 该节点本身 必须在范围内。获得单台设备权限并不代表可打开该线的仪表盘。
  • 列表由 Handler 缩小 — 范围树, 线卡片 · 报警数, 工单 (每行附带 access), 巡检看板。
  • 遵循 fail-closed 原则。若非 scope_all 且无节点,则无法读取任何内容。范围源自 Platform 账户 (pp.mm_app_account.scope_all · pp.mm_app_account_scope),应用内无修改范围 API。V5 将空节点列表视为 «无任何内容»,节点上限为 200 个。
  • 管理员角色无需范围检查,拥有全权。管理 API (/v1/admin/) 跳过范围检查,仅验证管理员角色。
  • 未登录平板 («无需 PIN 查看 «当前»») 仅通过 RO 读取设备的默认范围。

登录响应包含四个范围字段。

字段含义
scope{"all": true} 或节点列表 (id · kind · access)
scope_none该平板无法查看任何内容 — Web 仅显示引导与登出,不显示菜单
scope_none_reasonscope_none 时提示原因。ACCOUNT 为账户无范围 («范围未指定»), TABLET 为账户范围与该平板范围不重叠 («此平板无可见范围»)
home_scope当起始范围 (最后一次选择,若无则为设备默认范围) 在用户范围之外时,替代打开的首个设备或线

环境变量​

变量说明
PP_TZ显示时区 (必填)。存储使用 UTC epoch,画面按此时区显示。日期切换 · «今日» · 跨子夜窗口的日期分组均采用此时区
PP_LANG安装语言 (必填)。必须为支持语言列表中的标签 (当前 ko · en),支持大小写与区域变体 (en-US)。不在列表中则停止启动
PP_SERVER_URLPlatform V5 地址
PP_MASTER_API_KEYPlatform 主 API 密钥。与 server-web · batch-web · warehouse-web 相同 — 变更时需四者同步重启
PP_POSTGRES_HOST · PP_POSTGRES_PORTData Lake PostgreSQL
PP_DB_NAME · PP_PG_USER · PP_PG_PASSWORDPlatform 数据库 (pp) 与账户。名称 · 值与 server-web · batch-web · warehouse-web 相同。无 frontline 专用账户 · 密码

若缺失 PP_MASTER_API_KEY · PP_PG_PASSWORD · PP_POSTGRES_HOST,容器无法启动。JVM 堆固定为 512 MB (direct 128 MB)。承担范围 · 巡检 · 不良 · 报告相关无新增变量。

如需添加新画面语言,在 Web Bundle 中加入 web/src/i18n/<태그>.json,并在服务器支持语言列表中增加一行。不修改模式 (V5)。

后续阶段待开放字段​

以下字段目前应用中不存在。画面未预留位置,待 Platform 提供通用 V5 API 后,在 BFF 中增加调用以开启。

字段当前状态Platform 需求
周趋势 · 往期对比无 (日趋势已通过 /kpi/daily 开启)周单位期间序列
能源 (EMS)无 — 仪表盘标签页与报告节无此项EMS API
线级分原因停机损失无 — 仅在设备级绘制线范围停机损失统计
每小时业绩 / 目标无每小时目标 · 业绩 API
班组损失瀑布图无 — 班组 OEE 窗口仅含 OEE · 稼动 · 性能 · 质量及停机原因 TOP 项损失分解
停机手动登记 · 分时段数量无停机写入路径, 分时段数量写入

此前版本中该表中的部分项已开启:

字段实现方式
操作人 (Platform 记录工号)所有写入携带 X-PP-Performed-By → V5 performed_by
巡检调用 → 接单 → 开始维修 → 完成V5 /maintenance-orders
不良数量 + 原因V5 /defects
日趋势V5 /kpi/daily
班组 · 日 · 周报告BFF GET /v1/report 汇总 V5 的 KPI · 工单 · 汇总 API