add a powershell script that supports starting MES, WMS, WMSClient, Workstation and Dashboard projects with one command, includes build and run logic for backend services and npm dev for dashboard
198 lines
8.9 KiB
Markdown
198 lines
8.9 KiB
Markdown
# bj_power 项目部署手册
|
||
|
||
> 五个子项目统一仓库、独立编译、独立部署。
|
||
|
||
## 一、项目与端口总览
|
||
|
||
| 项目 | 说明 | 端口 | 技术 |
|
||
|------|------|------|------|
|
||
| bj_power_dashboard (A) | 厂门口看板 H5 | 开发 5173 / 生产静态 | React + Zustand + ECharts |
|
||
| bj_power_mes (B) | MES 智能产线控制 | **8888** | Go (go-zero + ent) + 内嵌 Vue3 前端 |
|
||
| bj_power_wms (C) | WMS 仓库系统后端 | **8890** | Go (go-zero + ent),无前端 |
|
||
| bj_power_wms_client (E) | WMS 出入库工位网关(扫码枪) | **8891** | Go 网关 + 内嵌 Vue3 十页 |
|
||
| bj_power_workstation (D) | 12 个工位终端软件 | **8892** | Go + 内嵌 Vue3 + SQLite 本地缓存 |
|
||
|
||
依赖:PostgreSQL ≥14(127.0.0.1:5432)、Redis ≥6(127.0.0.1:6379)、Go ≥1.22、Node.js ≥18。
|
||
|
||
数据库约定:
|
||
- MES 库名 `bj_power_mes`;WMS 库名 `bj_power_wms`。两库独立,跨库数据一律走 API。
|
||
- Dashboard 通过 MES 内部接口获取数据(Redis 缓存 60s 过期),业务变更经 SSE `dashboard_update` 实时推送。
|
||
- 工位终端拧紧数据本地 SQLite 缓存,点"完成"才上报 MES。
|
||
|
||
内部 API 统一 token:`X-API-TOKEN: Hardman_2026`(各 etc/*.yaml 中 `Internal.Token` / `Wms.Token` 可改,各项目 JWT AccessSecret 也统一为该值)。
|
||
|
||
## 二、准备
|
||
|
||
### 1. 创建 PostgreSQL 数据库
|
||
|
||
```sql
|
||
CREATE DATABASE bj_power_mes; -- MES
|
||
CREATE DATABASE bj_power_wms; -- WMS
|
||
```
|
||
|
||
连接信息默认 `postgres/postgres@127.0.0.1:5432`,不一致时修改:
|
||
- `bj_power_mes/etc/bj_power_mes-api.yaml` → Database 段(建表工具 migrate 也读此段,无硬编码)
|
||
- `bj_power_wms/etc/bj_power_wms-api.yaml` → Postgres 段
|
||
|
||
Redis 不一致时同样改上述 yaml 的 Redis 段。
|
||
|
||
### 2. 初始化表结构与种子数据
|
||
|
||
WMS 启动时自动建表并预置数据,无需手工操作。
|
||
默认账号:`admin/admin123`、`store1/123456`(出库)、`insp1/123456`(检验)。
|
||
|
||
MES 表结构需手工执行一次迁移(**必须输入管理员密码才生效**):
|
||
|
||
```powershell
|
||
cd d:\hardman\bj_power\bj_power_mes
|
||
.\bj_power_mes.exe migrate # 输入管理员密码(默认 Hardman_2026)
|
||
```
|
||
|
||
> 或者对全新/可丢弃的库直接 `.\bj_power_mes.exe reset-all`(清空重建全部表,不可恢复)。
|
||
|
||
MES 启动时会自动 Seed 数据(见 internal/logic/seed.go):默认角色(SUPER_ADMIN/OPERATOR/INSPECTOR)、菜单权限、12 道工序步骤、12 工位↔工序派工。默认账号:`admin / Hardman_2026`。
|
||
|
||
## 三、编译与运行
|
||
|
||
### B — MES(先启动)
|
||
|
||
```powershell
|
||
cd d:\hardman\bj_power\bj_power_mes
|
||
go build -o bj_power_mes.exe .
|
||
.\bj_power_mes.exe
|
||
```
|
||
|
||
- 服务 :8888;访问 http://127.0.0.1:8888 即内嵌登录页(前端已构建进 `public/` 并 go:embed)。
|
||
- 若需改 MES 前端源码:`cd frontend && npm install && npm run build`,产物输出到 `../public/` 后重新 `go build`。
|
||
- PLC 默认 `Host: 127.0.0.1:102` 且 `Plc.Enable: false`(模拟模式,直接写工序码+读完成信号逻辑);真实设备改 yaml 中 Plc.Host/Port 并 Enable: true。
|
||
- 本产线仅有「扫码枪+拧紧枪」,无 AGV/机器人/接驳台/CNC/清洗机等设备,前端无相关页。
|
||
|
||
### C — WMS 后端
|
||
|
||
```powershell
|
||
cd d:\hardman\bj_power\bj_power_wms
|
||
go build -o bj_power_wms.exe .
|
||
.\bj_power_wms.exe
|
||
```
|
||
|
||
服务 :8890,首次启动自动建表+种子数据。
|
||
|
||
### E — WMS 工位网关(出入库两台台式机各部署一份)
|
||
|
||
```powershell
|
||
cd d:\hardman\bj_power\bj_power_wms_client
|
||
go build -o bj_power_wms_client.exe .
|
||
.\bj_power_wms_client.exe
|
||
```
|
||
|
||
服务 :8891,反向代理 WMS 8890 并内嵌前端。浏览器打开 http://127.0.0.1:8891。
|
||
若需改前端:`cd frontend && npm install && npm run build` 后重新编译 Go。
|
||
|
||
### D — 工位终端(12 台触控一体机)
|
||
|
||
```powershell
|
||
cd d:\hardman\bj_power\bj_power_workstation
|
||
go build -o bj_power_workstation.exe .
|
||
.\bj_power_workstation.exe
|
||
```
|
||
|
||
服务 :8892。配置在 `etc/bj_power_workstation.yaml`:
|
||
- `Mes.BaseURL` 指向 MES 8888;
|
||
- `Sqlite.Path` 本地缓存库(默认 workstation.db,与程序同目录);
|
||
- `Sim.Enable: true` 为拧紧枪模拟数据源,现场接入真实拧紧枪后关闭。
|
||
|
||
### A — Dashboard 看板(厂房大屏主机)
|
||
|
||
开发调试:
|
||
|
||
```powershell
|
||
cd d:\hardman\bj_power\bj_power_dashboard
|
||
npm install
|
||
npm run dev # http://localhost:5173
|
||
```
|
||
|
||
生产部署(二选一):
|
||
|
||
1. 构建后由 nginx 托管 dist:
|
||
|
||
```powershell
|
||
npm run build # 产物 dist/
|
||
```
|
||
|
||
nginx 配置要点(关键:`/api/internal` 与 `/sse` 反代到 MES):
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
root /opt/bj_power/dist;
|
||
|
||
location /api/internal/ {
|
||
proxy_pass http://127.0.0.1:8888;
|
||
proxy_set_header X-API-TOKEN "Hardman_2026";
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Connection "";
|
||
proxy_buffering off; # SSE 必须关缓冲
|
||
proxy_read_timeout 24h;
|
||
}
|
||
}
|
||
```
|
||
|
||
2. 或简单场景直接用 vite dev 常驻(vite.config.ts 已内置同样的代理规则)。
|
||
|
||
说明:
|
||
- 看板数据(概览/工位状态划/工单进度/报警/趋势)全部来自 MES `/api/internal/dashboard/*`(Redis 60s 缓存),SSE 实时刷新 + 10s 轮询兜底。
|
||
|
||
## 四、MES 命令行维护命令(需管理员密码)
|
||
|
||
所有涉及建表/清库/改密的命令**都必须先输入管理员密码**(默认 `Hardman_2026`),密码错误会记录日志并终止,绝不执行。所有命令均写入按天日志 `bj_power_mes/logs/bj_power_mes-YYYY-MM-DD.log`。
|
||
|
||
```powershell
|
||
cd d:\hardman\bj_power\bj_power_mes
|
||
|
||
.\bj_power_mes.exe migrate # 建表/补列(只增,不删数据)——常规升级用
|
||
.\bj_power_mes.exe reset-all # 清空并重建全部表 + 写基础数据(破坏性,不可恢复)
|
||
.\bj_power_mes.exe seed # 仅对齐基础数据(角色/admin/菜单/工序模板/工位派工)
|
||
.\bj_power_mes.exe serve # 正常运行服务(可省略;默认即 serve)
|
||
```
|
||
|
||
要点:
|
||
- 门禁密码配置在 `etc/bj_power_mes-api.yaml` 的 `Cli.AdminPassword`(默认 `Hardman_2026`)。
|
||
- 明文传给命令执行审计:每次成功/失败均在日志记录时间与命令名。
|
||
- 生产升级流程:`migrate` → `serve`;如曾存在旧版本不兼容库,先手工确认后 `reset-all`。
|
||
- 用户改密码在**管理后台登录后**「修改密码」完成(`POST /api/v1/user/change-password`),命令行不改密。
|
||
|
||
## 五、各系统管理员账号(部署后请尽快修改默认密码)
|
||
|
||
| 系统 | 管理员账号 | 默认密码 | 修改方式 |
|
||
|------|-----------|---------|---------|
|
||
| MES (B) | admin | `Hardman_2026` | 管理后台登录后点右上「修改密码」(旧密码+新密码)|
|
||
| WMS (C) | admin | `admin123` | WMS 登录后改密,或直接改 `bj_power_wms` 数据库 users 表 |
|
||
| 工位终端 (D) | admin / operator1 | `admin123` / `123456` | 终端登录后改密,或直接改本地 `workstation.db`(SQLite)users 表 |
|
||
| 库房客户端 (E) | 复用 WMS 账号 | 同 WMS | 登录 WMS 后改密 |
|
||
| 看板 (A) | 无登录账号 | — | 只读,无管理员 |
|
||
|
||
> 工位终端/库房客户端若需与 MES/WMS 一致的统一密码,请在对应 yaml/种子中调整后再部署。
|
||
|
||
## 六、启动顺序与验证
|
||
|
||
顺序:PostgreSQL/Redis → MES(8888) → WMS(8890) → 工位网关/终端 → Dashboard。
|
||
|
||
验证清单:
|
||
|
||
| 检查项 | 方法 |
|
||
|--------|------|
|
||
| MES 健康 | 浏览器开 http://127.0.0.1:8888 能看到登录页,admin/Hardman_2026 登录成功 |
|
||
| WMS 健康 | `curl http://127.0.0.1:8890/api/health` 返回 JSON,或 `curl -H "X-API-TOKEN: Hardman_2026" http://127.0.0.1:8890/api/internal/stock/query` |
|
||
| MES→WMS 联通 | MES 建 BOM 后发起备料,观察库存检查结果 |
|
||
| 内部接口 | 同上 header 访问 `http://127.0.0.1:8888/api/internal/dashboard/overview` |
|
||
| SSE 推送 | 看板打开后操作工单下发,看板秒级刷新(DevTools Network → sse 连接 pending) |
|
||
| 工位终端 | 打开 http://127.0.0.1:8892 登录,扫一个 SN 报工,回 MES 追溯页查询 |
|
||
|
||
## 七、常见问题
|
||
|
||
1. **前端依赖/构建**:所有前端(MES frontend / 工位终端 / 库房客户端 / 看板)一律 `npm install && npm run build`,无需 pnpm。
|
||
2. **ent 代码生成**:改 schema 后须到对应目录执行 `go generate ./...`(MES:`cd bj_power_mes/schema && go generate ./...`;WMS:`cd bj_power_wms/schema && go generate ./...`)。
|
||
3. **PowerShell 下批处理改名会损坏含中文注释的 Go 文件编码**——本仓库所有中文文件均已是 UTF-8,请勿用旧版 PowerShell 对源码批量改名。
|
||
4. **PLC 连不上**:确认 yaml `Plc.Enable: false`(模拟)可先行联调;上真机再 Enable: true 并核对 S7 地址/机架槽位。
|
||
5. **看板监控页一直显示空态**:本产线仅「扫码枪+拧紧枪」,看板只展示装配线实时数据,勿按旧模型(CNC/清洗机等)判断。
|