Files
bj_power/需求规格与开发规划.md
T
SunYF a2afd2f6dc feat: 五项目业务实现并对接完成
- MES(B): 工单/BOM/备料/工序字典/PLC下发/拧紧/扫码报工/半成品/AGV/追溯逻辑,WMS与海康RCS客户端,看板Redis缓存API(概览/设备/进度/报警/趋势)+SSE
- WMS(C): JWT滑动续签、Excel导入、盘点、内部API、种子数据、独立Postgres配置
- WMS客户端(E): Go网关8891反向代理+内嵌Vue3十页
- 工位终端(D): SQLite本地缓存+模拟拧紧源+内嵌Vue3页面
- Dashboard(A): 看板数据改接MES内部缓存API,SSE实时刷新+vite代理
- 清理各项目球形磨遗留代码,新增部署手册.md
2026-08-27 19:50:57 +08:00

284 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 北京电力智能产线系统 — 需求规格与开发规划
> 本文档综合《项目说明.md》《头脑风暴.md》及甲方(孙工/韩总)通话录音纪要整理,作为 5 个软件项目的开发总纲。逻辑闭环,尽量不遗漏文档/录音中提到的需求点。
***
## 一、项目背景
为北京电力设备总厂建设一条自动化智能产线(传送带流水线,12 道工序)。软件侧规划:
- 精确对接西门子 S7-1214 PLC:下发工序组合(如 `135` → 只做 1、3、5 序;`234` → 做 2、3、4 序)。
- 对接海康 AGV 调度系统(RCS-2000):指挥 2 台 AGV 在 21 个接驳台之间搬运物料。
- 库房记账与追溯(WMS):管到区域 + 数量 / 序列号,无智能立库、无传感器货架坐标。
- 产线控制 (MES) + 库房 (WMS) + 看板 (Dashboard) + 工位终端 + 库房客户端。
**结论性判断**:无需独立 MIS 系统。甲方 5 个系统,我方开发 3 类后台(MES/WMS/工位终端)与 2 类前端(看板/库房客户端),AGV 调度系统与拧紧工具系统为外部既有系统(仅对接)。
**业务可追溯**:入库、出库、加工、页面操作、触发agv ,等等,都需要记录清楚,在工件、工单、审核、等场景标记清楚。所以,登录权限必须完善、菜单权限,token失效时间要短。
***
## 二、业务全貌与核心流程
### 2.1 生产模式
- **工单驱动、按日批量备料**:一个合同 = 一个工单(如 100 台设备),按日排产(今天 20 台)。开工前用 AGV 将当日所需全部物料(芯片=器件、螺丝=结构件、屏幕等)一次性配送到各工位(新建工单时,可以选择都是哪个工位送料,分别是什么料。仓库管理后台可以把多个料打包成一个概念,即套件。工单支持混合选择【工件(独立物料)】与【套件(虚拟物料组合)】),软件层面中途没有停线补料逻辑(返修/报废才走补料申请,主管审批)。
- **出库强约束**:累计出库 ≤ 工单 BOM 需求量,超发需补料流程。
### 2.2 两类物料差异化管理
| 类型 | 例 | 管理粒度 | 入库方式 | 出库方式 |
| --- | -------- | --------- | ---------------------------------------------------------- | :--- |
| 精密件 | 芯片/器件/成品 | 序列号 SN,逐件 | 扫码逐件录入,单件追溯,支持连续扫码。(先选择模版,再扫描,否则大量其他信息需要填入)。可人工修改工件,再保存提交。 | 同入库 |
| 结构件 | 机加工件/螺丝 | 图号+批次 | 按批次/图号录入,支持 Excel 批量导入,分多批到货 | 同入库 |
- 物料总状态:原材料 / 半成品(记录已完成工序)/ 成品。
- 检验三状态:未检 → 合格 / 不合格,需**批量翻转**;分来料检、过程检、成品检;部分检验项需录实测值。
- 为保证通用性,两种物料,都用同样的表结构,结构件不写 sn即可,也可以手动选择物料类型。
- 物料,必须有 code唯一码(物料模版里面有,新建物料时必须选择物料模版,也是物料种类,比例螺丝、剪刀,等分类),真实名称、简称、描述、等等,包含不限于上面字段。
### 2.3 完整业务流程(闭环)
```
1. 库房入库 WMS 记账(精密件逐扫 SN / 结构件 Excel 批次)。为保证一致性,不做特殊区分,都可以批量、或者扫码、或者手动输入sn。功能越全越好,仅仅类型区分,和sn码有或无。
2. 创建工单 MES:工单 + BOM + 日排产
3. 锁库存 MES 调 WMS:按 BOM 校验并锁定库存(批次/SN)
4. 生成备料单 系统按日排产自动算料 → 备料单 。
5. AGV 配送 MES 调海康 RCS:库房接驳台 DOCK21 → 产线 DOCK01~20
6. 到货上料 主线扫码枪识别托盘 → 分流决策 → 送往目标支线
7. 支线装配 12 工位,拧紧枪采集数据,工位终端实时显示
8. 工序报工 支线扫码枪扫码报工 → MES 更新工单进度
9. 完工 全部工序完成 → 半成品/成品回库 WMS
10. 追溯/打印 流程卡:工序操作人/检验人/检验结果汇总 PDF
```
补充
```
# 整体业务方案 补充
1、日排产:可编排当日以及未来多天的生产计划,作为仓库的前瞻参考信息;日排产仅做计划预告,**不直接触发出库、不下发领料指令**。
2、MES向下游WMS下发生产工单,工单为仓库出库唯一挂靠载体;工单携带产品、BOM、物料总需求量。
3、工单只管控物料总的需求数量,**不管理出库节奏,不做拉动式叫料控制**;每次出库何时出、出多少、分几趟AGV送货,决策权交由仓库/WMS自主决定。
4、仓库配送拥有两种自由选择:可早上一次性将工单所需物料全部出库配送完毕;也可拆分为多批次,分次出库、分批AGV送货。
5、WMS实时维护工单物料台账:物料总需求数量、累计已出库数量、剩余待出库数量;系统强制校验,累计出库数量不可超过工单总需求量;当累计出库等于总需求,工单领料完结,禁止再出库。
6、后期如需升级为MES拉动叫料补料模式,现有工单‑出库架构可无缝叠加,无需推翻改造。
```
***
## 三、五个项目职责、技术栈与页面
项目构成以《项目说明.md》为准,共 5 个,均可单独编译、单独部署。
### 项目 Abj\_power\_dashboard(看板,H5 前端)
- 技术栈:Vue/React + ECharts + SSE。只展示,不读写业务。数据来源于项目 B(MES),经 Redis 缓存。
- 部署:厂房大门口大显示器(联想 ECI-521 主机 + 100 吋屏)。
- 页面:
1. 生产数据看板(产线运行状态、产量、进度、合格率)
2. 仓储数据看板(库存总量、物料种类、出入库动态)
3. 物流设备看板(AGV 位置/状态/电量/任务执行)
4. 异常报警(设备故障、物料短缺、AGV 异常)
5. 三维产线模型(可选,展示各工位/AGV 状态,数据须准确)【录音:面子+里子】
### 项目 Bbj\_power\_mesMES 产线控制,Go + Vue
- 技术栈:Go 后端(go-zero 或 gin+ Vue 前端;**前端需自适应 平板/iPad/手机/台式机**。
- 部署:库房/业务服务器(联想 ECI-521),`PostgreSQL`MES 独立库)。
- 职责:工单/排产/BOM/备料、调 WMS 锁库扣库、调海康 RCS 下发 AGV、写 PLC 工序码+读完成信号、收拧紧数据、工序扫码报工、半成品流转、追溯、看板缓存接口。
- 页面:
1. 登录/个人中心(自适应)
2. 工单管理(创建/查询/排产)/ BOM / 备料单
3. 工位监控(12 工位状态实时)
4. PLC / AGV 状态页
5. 半成品流转
6. 工序扫码报工记录 / 进度
7. 拧紧数据查询 / 追溯报表 / 流程卡生成打印
8. 看板数据接口(Redis 缓存,供项目 A)
### 项目 Cbj\_power\_wmsWMS 仓库,纯 Go,无前端)
- 技术栈:Go 后端。**不包含前端代码**。
- 部署:库房/业务服务器,`PostgreSQL`WMS 独立库)。
- 职责:物料/批次/SN、出入库、库存锁定/扣减、检验、半成品/成品、包装追溯;对外提供 API。
- 无页面(前端由项目 E 提供)。
### 项目 Dbj\_power\_workstation12 个工位终端,Go + Vue
- 技术栈:**Go + Vue Web 应用**(独立项目,因为有扫码枪和拧紧枪)。运行于 12 台触控一体机(浏览器访问)。
- 数据来源:项目 B(MES) API。本地 SQLite 缓存待上报的拧紧数据,**点"完成"才上报 MES**,失败保留重试(断点续传);不存储历史数据,历史数据来自 MES。
- 页面/功能:
1. 登录(账号自动记录操作人)
2. 当前工单 + 当前工序导航(完成一步点"下一步")
3. 工艺文件 PDF 预览(预缓存,工位配置"工序文件"上传)
4. 拧紧结果实时显示(扭矩/角度/OK·NG,进度如 8/10 颗,NG 红色闪烁)
5. 扫码报工(主线/支线)
6. 完成上报 / 返修重置(记录历史操作日志)/ 暂存退回库房(半成品)
### 项目 Ebj\_power\_wms\_client(库房客户端,Go + Vue
- 技术栈:**Go + Vue Web 应用**(独立项目,因为有扫码枪)。
- 部署:库房 2 台台式机(各一显示屏,分出入库),浏览器输入 WMS(项目 C) 地址。
- 页面/功能:
1. 登录
2. 入库:精密件逐件扫码(连续扫码、实时已扫数量)、结构件 Excel 批量导入 / 手动单条,多批到货追加
3. 出库:按备料单/工单领料、扫码复核(校验物料+批次)、先进先出、异常出库实时报警、自动扣减库存
4. 库存查询、盘点(动态/静态/抽盘、扫码快速盘点)
5. 质量检验:未检/合格/不合格管理、批量翻转、实测值录入
6. 半成品/成品入库、包装绑定(箱号 ↔ SN)
***
## 四、系统交互与 API 契约(跨项目)
### 4.1 拓扑
```
工位终端D ──HTTP──► MES(B) API ──┬──► [MES库 PostgreSQL]
PAD ───浏览器──► MES(B) 前端 ├──► Redis(看板缓存)
看板A ───SSE/HTTP──► MES 读缓存 │
库房客户端E ──HTTP──► WMS(C) API ─┴──► [WMS库 PostgreSQL]
WMS(C) ◄══API══► MES(B) (独立库,联动)
外部:海康RCS(AGV)、西门子PLC、丹尼科尔拧紧工具
```
### 4.2 关键 APIB ↔ C,独立数据库通过 API 互通)
| 方向 | 接口 | 说明 |
| ---- | ------------------------------------- | -------------------------------- |
| C 提供 | `POST /api/stock/lock` | 工单锁定库存(批次/SN),带 `order_no` |
| C 提供 | `POST /api/stock/deduct` | 出库扣减,`order_no`+qtyWMS 校验累计≤BOM |
| C 提供 | `GET /api/stock/query` | 库存查询(MES 查料) |
| C 提供 | `POST /api/semi/inbound` / `outbound` | 半成品入库/出库,携带"已完成工序" |
| B 提供 | `GET /api/order/query` | 工单/工序进度(WMS 取工单) |
### 4.3 对接外部
- **海康 RCS**HTTPHMAC-SHA256 签名 + `X-LR-REQUEST-ID` 防重放。封装独立 `HikRcsClient``SubmitTask(fromDock,toDock,carrier)``QueryTask`。DOCK01\~20 产线,DOCK21 库房;路径规划 RCS 自理。
- **西门子 PLC (S7-1214)**:用整型寄存器写工序码(如 MW100=135),读完成信号位(M100.0);**未收到完成信号不下发下一条**。
- **拧紧工具(丹尼科尔)**:实时采集扭矩/角度/时间/结果/操作人/工单号,异常报警;数据对接 MES 质量追溯。
### 4.4 看板缓存方案(已采纳)
- 看板读 Redis,不直查 MES 业务库。TTL=60s;业务变更主动刷新/删 key,未刷新也会过期回源 DB 重查。
- **防击穿**:同一 key 同一时刻仅允许一个查询打到 DB(SETNX 加锁),其他等待后重试读缓存。
- 看板局部刷新用 SSE 推送;工位/库房客户端走普通 HTTP(强一致性)。
### 4.5 拧紧数据两段式(已采纳)
- 工位终端 D:实时显示 + SQLite 缓存每把数据 → 点"完成"才上报 MES → 成功后标记同步;失败保留本地重试。历史数据只存 MES。
### 4.6 半成品流转(已采纳)
- 工位"暂存/退回库房" → D 上报 MES 记录已完成工序 → MES 调 WMS 半成品入库 → 重上线 WMS 出库 → MES 从下一工序继续。
***
## 五、数据模型(核心表,逻辑闭环)
### 5.1 WMS(C) 库
| 表 | 关键字段 | 说明 |
| ------------------------------------ | -------------------------------------------------------------------------------------------------- | -------------- |
| `material` | code,name,spec,unit,manage\_mode(1批次/2序列号),is\_batch\_managed,is\_serial\_managed | 物料档案 |
| `zone` | zone\_code,zone\_name | 待检/合格/不合格/退货区 |
| `inventory_batch` | material\_code,batch\_no,quantity,locked\_qty,production\_date,supplier,quality\_status,zone\_code | 结构件批次台账 |
| `serial_number` | sn\_code,material\_code,batch\_no,status(在库/锁定/出库/使用/报废),current\_zone,last\_in/out | 精密件/成品单件 |
| `inventory_lock` | batch\_id,order\_no,locked\_qty,status,expired\_at | 批量锁定、防超卖 |
| `inbound_order` / `inbound_detail` | 类型、批次/SN、数量、操作人、台账 | 入库(含半成品/成品) |
| `outbound_order` / `outbound_detail` | order\_no,qty,批次/SN、复核人 | 出库,关联工单,BOM 校验 |
| `inspection_record` | target(批次/SN),status(未检/合格/不合格),inspector,time,result\_value | 来料/过程/成品检 |
| `semi_finished` | sn,completed\_process,quantity,zone | 半成品库存 |
| `package_box` | box\_no,sn\_list | 包装箱 ↔ SN 关联 |
### 5.2 MES(B) 库
| 表 | 关键字段 | 说明 |
| ------------------------------------- | ---------------------------------------------------------------- | ------- |
| `work_order` | order\_no,product\_code,total\_qty,daily\_qty,plan\_start,status | 工单 |
| `work_order_bom` | product\_code,material\_code,unit\_qty,loss\_rate | BOM |
| `daily_plan` | order\_no,plan\_date,qty | 日排产 |
| `material_request` | order\_no,material\_code,qty,status,target\_dock | 备料单 |
| `dock_station` | dock\_code(DOCK01\~21),dock\_type | 21 接驳台 |
| `plan_process` / `work_order_process` | order\_no,process\_code(135),status | 工序 / 流转 |
| `torque_result` | sn,strain,angle,result,operator,work\_order,time | 拧紧数据 |
| `scan_record` | station,sn,order\_no,type,operator,time | 扫码报工 |
| `association_trace` | sn → 工序/检验/物料批次 关联链 | 追溯 |
| RBAC | user/role/permission/dept | 登录与权限 |
> 字段以开发时逐表 DDL 为准,此表为设计基线。
***
## 六、设备/硬件部署对应
| 设备 | 数量 | 运行 | 数据来源 |
| ------------- | ----------- | ------------ | ---------- |
| 库房台式机 | 2 | 项目 E(出入库) | WMS(C) |
| 看板大屏 + 主机 | 1 | 项目 A | MES 缓存 |
| 工位触控一体机 | 12 | 项目 D | MES(B) |
| PAD(iData P1) | 3 | 浏览器访问 B/C 前端 | MES/WMS |
| WMS 显示器(55 吋) | 1 | 展示库存总览 | WMS |
| 扫码枪 | 主线2+支线12+库房 | / | 上报 MES/WMS |
| AGV | 2 | 海康 RCS(对接) | / |
| PLC | 1 | 西门子 | MES 写工序 |
| 拧紧工具 | / | 丹尼科尔(对接) | MES 收数据 |
***
## 七、分阶段开发路线(先怎么开始,再怎么开始)
**阶段 0 — 工程地基**
- 建 5 个工程骨架(Go 后端 + Vue 前端),改 module/包名,各自 `go build` / `pnpm build` 可运行;统一配置、日志、鉴权骨架。
**阶段 1 — C WMS 核心 + E 库房客户端**
- WMS 建表(物料/批次/SN/锁定/检验)→ 入库(扫码+Excel)→ 出库(锁定→扣减→BOM 校验)→ 检验批量翻转 → 追溯查询。
- E 库房客户端界面对接,最快出可演示成果。
**阶段 2 — B MES 工单/排产/备料 + 联动**
- MES 建表 → 工单+BOM+日排产 → 备料单生成 → 调 WMS 查库/锁库/扣库;前端自适应页面(web/pad)。
**阶段 3 — 外部对接**
- 海康 RCS 客户端(签名+下发+查状态)→ AGV 闭环;PLC 工序码下发+完成信号轮询;丹尼科尔拧紧工具对接。
**阶段 4 — D 工位终端 + E 深化**
- D:工序导航/工艺PDF/拧紧实时/SQLite缓存/完成上报/扫码报工/暂存;E:出库复核、盘点、批量翻转、包装绑定。
**阶段 5 — A 看板 + SSE + Redis**
- 看板页 + MES dashboard 缓存接口(Redis1 分钟+防击穿)+ SSE 局部刷新 + 3D 模型(可选)。
**阶段 6 — 闭环与验收**
- 全链路联调(创建工单→备料→AGV→装配→拧紧→报工→完工入库)、流程卡打印、半成品流转、容错/断点续传、数据备份(保留≥1 年)。
***
## 八、验收相关指标(软件需支撑,不越硬件职责)
- 扫码识别率一次成功率 ≥92%(记录扫码成功/失败,为验收提供数据证据)。
- 看板刷新延迟 ≤4s(99%),WMS↔MES 同步 ≤2s,AGV 任务成功率 ≥99%(软件侧记录与重试)。
- 数据保留 ≥1 年,每日自动备份。
- 知识产权归甲方,支持二次开发(模块解耦、独立升级)。
***
## 九、待甲方确认清单(遗留)
1. 结构件批次号规则:甲方定义 or 系统自动生成?   答:自动生产,按日期 + 自增数量
2. 拧紧工具对接数据字段与协议(丹尼科尔是否提供 API)。 答:暂放
3. AGV 位置/电量实时推送 or 轮询。 答:见文档:AGV海康.md
4. PAD 网络与离线需求。  答:什么需求,离线不可工作,因为要登录授权
5. 看板 3D 模型精度需求。 答:暂放
> 已采纳的甲方明确结论(来自对话/录音):
> ① 库房 2 台台式机 ✅ ② 看板走 Redis、1 分钟过期、防击穿 ✅
> ③ WMS 与 MES 独立库、API 互通 ✅ ④ 拧紧数据本地缓存、点完成上报 MES ✅ ⑤ 半成品流转记录已完成工序 ✅