设备上报与供应商门户:两条新的集成入口

新增两类对外入口:设备用 X-Device-Token 上报遥测,供应商用独立 JWT(scope=supplier)自助接单发货。前者不占员工账号,后者不能访问管理端接口。

学完能做到 能让一台采集网关稳定上报,并让供应商系统对接门户接口完成接单与发货。

开始之前

  • 管理端已创建设备并拿到设备令牌
  • 已有供应商门户账号(企业编码 + 账号 + 密码)
  • 能访问后端域名

操作步骤

认清两条入口的鉴权差异

设备上报走 /api/iot/*,请求头 X-Device-Token,服务端按 sha256 反查设备,不走 JWT;供应商门户走 /api/supplier-portal/*,先登录换 JWT,token 里带 scope=supplier,只能调用门户接口。两者的令牌不能混用。

设备上报按批次提交

POST /api/iot/ingest,body 里带 device_code、batch_id、ts 与 metrics 数组。batch_id 建议用「设备号 + 时间窗」,同一批次重复提交由服务端幂等处理。单条循环上报在低频场景可用,高频建议合并。

历史数据用 CSV 补

POST /api/iot/ingest/csv 支持批量导入,适合停机改造后补历史。注意时间列要与 metrics 编码对齐,否则会出现「有读数但算不出 OEE」。

供应商登录与调用

POST /api/supplier-portal/auth/login,body 为 tenant_code、username、password,返回 access_token。之后用 Authorization: Bearer 调 /orders、/orders/{id}/accept、/orders/{id}/ship、/delivery-notes、/statements。供应商只能看到自己企业的数据,越权返回 404 而不是 403,避免探测。

其它新增接口按需接

APS:/api/admin/aps/gantt、/api/admin/aps/items/{id}/move;OEE:/api/admin/oee/summary、/trend;安灯:/api/admin/andon/calls;EMS:/api/admin/ems/readings、/summary;成本差异:/api/admin/erp/variance/report;召回:/api/admin/trace/recall/analyze、/recall/tasks;预测维护:/api/admin/maintenance/predictions。全部遵循统一 {code,msg,data} 信封与 offset/limit 分页。

上线前做三件事

① 设备令牌按设备单独发放,不要全厂共用一个;② 供应商账号按供应商单独建,换联系人先停用旧账号;③ 给集成账号最小权限角色,不要用管理员账号换 token。

代码示例

bash设备上报最小示例
curl -X POST 'https://YOUR_HOST/api/iot/ingest' \
  -H 'Content-Type: application/json' \
  -H 'X-Device-Token: DEVICE_TOKEN' \
  -d '{
    "device_code": "C01-CNC-03",
    "batch_id": "C01-CNC-03-202611130930",
    "metrics": [
      {"code": "run_status", "value": "run"},
      {"code": "output_count", "value": 128},
      {"code": "good_count", "value": 125}
    ]
  }'

# {"code":200,"msg":"","data":{"accepted":3}}
bash供应商门户登录与接单
# 1) 登录
curl -X POST 'https://YOUR_HOST/api/supplier-portal/auth/login' \
  -H 'Content-Type: application/json' \
  -d '{"tenant_code":"YOUR_TENANT","username":"supplier01","password":"********"}'

# 2) 接单(TOKEN 为上面返回的 access_token)
curl -X POST 'https://YOUR_HOST/api/supplier-portal/orders/123/accept' \
  -H 'Authorization: Bearer TOKEN'

示例中的域名、租户编码、密钥请替换成你自己的。生产环境不要把密钥写进前端代码。

容易踩的坑

设备上报 401 但令牌是对的?
检查是否把令牌放进了 Authorization。设备接口只认 X-Device-Token;设备停用会返回 403。
供应商 token 调管理端接口 403?
正常。scope=supplier 的令牌被限制在门户路由,管理端需要员工账号的 JWT。
同一批数据重复上报会重复计数吗?
设备侧按 batch_id 幂等,报工侧按 client_uuid 幂等。但指标值请上报累计值或带时间戳,避免服务端无法判断重复。

接着看

还有别的问题?

先看常见问题,或者在系统内提工单,我们会回。