# iot **Repository Path**: chen-xueyuan/iot ## Basic Information - **Project Name**: iot - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-08 - **Last Updated**: 2026-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CZ IoT — 化工 / 碳能工厂 OT 上层骨架 IoT DC3 作为设备接入与时序底座;本仓库是 **AGPL 进程外** 的 EMS、策略门、Flowable 流程引擎、ERP 集成。 ``` DCS/PLC/SIS → IoT DC3 → policy-gate / ems-service / process-engine / integration-service ↕ RabbitMQ 事件 ↕ PostgreSQL ``` | 服务 | 端口 | 职责 | |---|---|---| | policy-gate | 8081 | 写点快路径:S0 禁写、S1 人工、S2 班次授权 + 幅度/间隔/锁定 | | process-engine | 8082 | Flowable:告警 SOP / 设定变更 / 接交班 / ERP 过账 | | ems-service | 8083 | 告警编排、设定建议、接交班入口、四带回放 | | integration-service | 8084 | ERP 过账适配(默认仿真) | 写点默认 `cziot.simulate=true`,**不会**调用 DC3。 ## POC 点表与安全分级 种子在 `policy-gate` Flyway `V2__point_master.sql`,YAML 镜像:`thing-models/poc-p1-points.yaml`。 | 设备 | 点 | 分级 | 说明 | |---|---|---|---| | RX-101 | ESD_TRIP / TI-01 / PI-01 | S0 | SIS/安全监视,禁写 | | RX-101 | SP-TEMP / SP-AGIT | S1 | 工艺设定,须审批 | | AC-201 | SP-LOAD / SP-PRESS | S2 | 空压优化,须班次授权 | | AC-201 | RUN_CMD | S1 | 启停须人工 | | MTR-301 | P_DEMAND | S0 | 关口需量只读 | | MTR-301 | CUT_NCL | S2 | 非关键负荷切除 | 策略门评估时**以点表为准**覆盖请求里的 `safetyClass`;S2 的 `ALLOW` 还要求 `gate_shift_auth` 有未过期记录。 ```bash # 查点表 curl -s "http://localhost:8083/api/ems/points?plantId=P1" -H "X-Tenant-Id: default" ``` ## 启动中间件 需要 Docker。JDK 21 + Maven 3.9 用于编译运行服务。 ```bash docker compose up -d ``` PostgreSQL `cziot/cziot@localhost:5432/cziot`,Redis `6379`,RabbitMQ `5672`(管理台 `15672`)。 ## 编译与运行 ```bash mvn -q -DskipTests package ``` 四个 Spring Boot 模块分别启动(各开一个终端): ```bash java -jar policy-gate/target/policy-gate-1.0.0-SNAPSHOT.jar java -jar process-engine/target/process-engine-1.0.0-SNAPSHOT.jar java -jar ems-service/target/ems-service-1.0.0-SNAPSHOT.jar java -jar integration-service/target/integration-service-1.0.0-SNAPSHOT.jar ``` Swagger:`http://localhost:8081/swagger-ui.html`(8082–8084 同理)。请求头 `X-Tenant-Id`、`X-User-Id`。 ## 试用 ### 1) 接班授权(推荐走流程,不要直接打策略门) ```bash # 启动接班:值长任务 SHIFT_HANDOVER curl -s -X POST http://localhost:8083/api/ems/shifts/on ^ -H "Content-Type: application/json" -H "X-Tenant-Id: default" -H "X-User-Id: shift_leader" ^ -d "{\"plantId\":\"P1\",\"shiftId\":\"N1\",\"expiresAt\":\"2026-10-06T08:00:00Z\",\"pointKeys\":[\"AC-201:SP-LOAD\",\"AC-201:SP-PRESS\"],\"reason\":\"夜班优化\"}" # 查待办(X-User-Id 用候选组名) curl -s http://localhost:8082/api/bpm/tasks -H "X-Tenant-Id: default" -H "X-User-Id: shift_leader" # 完成值长任务(可改 pointKeys);完成后自动调用 gate.shift.auth curl -s -X POST http://localhost:8082/api/bpm/tasks//complete ^ -H "Content-Type: application/json" -H "X-Tenant-Id: default" -H "X-User-Id: shift_leader" ^ -d "{\"variables\":{\"pointKeys\":\"AC-201:SP-LOAD,AC-201:SP-PRESS\",\"expiresAt\":\"2026-10-06T08:00:00Z\"}}" ``` 交班回收: ```bash curl -s -X POST http://localhost:8083/api/ems/shifts/off ^ -H "Content-Type: application/json" -H "X-Tenant-Id: default" -H "X-User-Id: shift_leader" ^ -d "{\"plantId\":\"P1\",\"shiftId\":\"N1\",\"reason\":\"交班\"}" # 再 complete SHIFT_OFFGOING 待办 → gate.shift.revoke ``` ### 2) 告警 SOP ```bash curl -s -X POST http://localhost:8083/api/ems/alarms/raised ^ -H "Content-Type: application/json" -H "X-Tenant-Id: default" -H "X-User-Id: op1" ^ -d "{\"alarmId\":\"A-1\",\"tenantId\":\"default\",\"plantId\":\"P1\",\"deviceId\":\"RX-101\",\"pointId\":\"TI-01\",\"severity\":\"HIGH\",\"message\":\"超温\"}" ``` ### 3) 设定变更(接班授权完成后,S2 可 ALLOW 并仿真写点) ```bash curl -s -X POST http://localhost:8083/api/ems/setpoints/propose ^ -H "Content-Type: application/json" -H "X-Tenant-Id: default" -H "X-User-Id: op1" ^ -d "{\"plantId\":\"P1\",\"deviceId\":\"AC-201\",\"pointId\":\"SP-LOAD\",\"currentValue\":50,\"proposedValue\":50.5,\"shiftId\":\"N1\",\"reason\":\"需量\"}" ``` ### 4) 四带回放 ```bash curl -s "http://localhost:8083/api/ems/replay?plantId=P1&from=2026-10-05T00:00:00Z&to=2026-10-06T00:00:00Z" ^ -H "X-Tenant-Id: default" ``` ### 5) ERP 过账(仿真) ```bash curl -s -X POST http://localhost:8084/api/int/erp/postings ^ -H "Content-Type: application/json" -H "X-Tenant-Id: default" -H "X-User-Id: acc1" ^ -d "{\"plantId\":\"P1\",\"documentType\":\"ENERGY\",\"businessKey\":\"SET-20261005-1\",\"payload\":{\"kwh\":1200}}" ``` 待办查询:`GET /api/bpm/tasks`,`X-User-Id` 填 `operator` 或 `shift_leader`。 技术报告:`docs/IoT-DC3-化工碳能工厂改造技术报告.md`。