厘清流程编排的边界:什么时候需要它,什么时候不需要它
用户的质疑是对的:实时推送数据只需要调一个接口,根本不需要流程编排。
流程编排解决的是另一类问题:多个接口必须按顺序调用,且上一步的返回值是下一步的入参。
把这两类场景混在一起设计,会让系统过度复杂。下面把它们彻底分开。
创建测点返回 pointId,绑定传感器时需要传 pointId。如果写死在代码里,换个平台就要改代码。
在 UI 里配置"第1步的出参 id → 第2步的入参 pointId",引擎自动完成传递,无需改代码。
DCP 需要先获取 userId 再获取 projectId,另一个平台可能直接返回 projectId。每个平台都写一套代码难以维护。
每个平台配置自己的初始化流程,引擎统一执行,业务代码不感知平台差异。
| 场景 | 触发方式 | 执行模式 | 需要流程编排 | 频率 |
|---|---|---|---|---|
| 平台初始化(获取userId/projectId) | 手动点击 | 流程引擎 | ✓ 需要 | 一次性 |
| 设备入网(创建测点+绑定传感器) | 手动点击 | 流程引擎 | ✓ 需要 | 每设备一次 |
| Token 刷新 | 自动(过期前) | 单接口调用 | — 不需要 | 按需 |
| 实时数据推送 | 设备上报触发 | 直接调用 | ✗ 不需要 | 高频 |
| 定时批量推送 | Quartz 定时 | 直接调用 | ✗ 不需要 | 定时 |
执行完成后,userId 和 projectId 自动保存到 platform_instance 的 extra_config 字段,后续所有操作直接读取,不再重复调用。
Step 2 的入参 projectId 自动从 Step 1 的出参获取。执行完成后,DCP deviceId 自动回填到 platform_device_mapping 表,设备状态变为"已入网"。
不同传感器类型(倾角/轴力/雨量/静力水准)配置不同的 Step 2 接口,其余逻辑相同。
全程只有一次 HTTP 调用。Token 检查在调用前自动完成(过期则先刷新),对业务逻辑透明。
| 数据 | 何时获取 | 存储位置 | 后续如何使用 |
|---|---|---|---|
| access_token | 初始化 / 过期自动刷新 | platform_instance.access_token | 每次 HTTP 请求自动注入 Authorization 头 |
| userId | 初始化流程 Step 2 | platform_instance.extra_config | 设备入网流程中作为固定入参 |
| projectId | 初始化流程 Step 3 | platform_instance.extra_config | 设备入网流程中作为固定入参 |
| DCP deviceId | 设备入网流程 Step 2 | platform_device_mapping.platform_device_id | 实时推送时作为 deviceId 字段 |
| DCP pointId | 设备入网流程 Step 1 | platform_device_mapping.platform_point_id | 重新绑定时使用,一般不再需要 |
填写平台名称、baseURL、账号密码 → 保存。系统自动内置 DCP 的所有接口定义,无需手动配置接口。
点击"初始化"按钮 → 系统自动执行初始化流程(获取Token → userId → projectId)→ 成功后显示"已初始化,项目:XXX"。
在设备绑定页面,搜索选择 FastBee 设备 → 选择传感器类型 → 配置字段映射(物模型字段下拉选择,DCP字段根据传感器类型预填建议值)→ 点击"入网"按钮 → 系统自动执行入网流程 → 成功后显示 DCP deviceId。
设备绑定完成后,设备上报数据时自动推送,无需任何操作。在推送日志页面可查看每次推送的详情。
流程编排 UI 只服务于"初始化"和"设备入网"两类场景,不需要做成通用的可视化拖拽编辑器(过度设计)。
每个流程展示有序步骤列表,每步配置:
step1,供后续步骤引用)对于 DCP,系统内置两个流程的默认配置,用户开箱即用,不需要手动编排。流程编排 UI 是给高级用户或对接新平台时使用的。
| 设计决策 | 原因 |
|---|---|
| 实时推送不走流程引擎 | 高频操作,单步调用,流程引擎引入不必要开销 |
| 初始化和入网走流程引擎 | 多步串联,出参传入参,不同平台步骤不同,配置化解决 |
| Token 刷新不是流程步骤 | 是横切关注点,在 HTTP 调用前自动处理,对业务透明 |
| userId/projectId 保存到 extra_config | 一次获取,永久复用,不重复调用 |
| DCP 内置接口和流程定义 | 降低用户配置成本,开箱即用 |
| 字段映射用下拉选择,不手填 | 物模型字段和 DCP 字段都有固定枚举,选择比输入更可靠 |