Files
BI/README.md
T

104 lines
4.4 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.
# 东方水利制造进度驾驶舱
工业制造订单进度大屏,前端采用 React + Vite + TypeScript,后端采用 ASP.NET Core 8 + EF Core + SQL Server + SignalR。
## 目录
- `src/`:驾驶舱前端。
- `server/DongfangHydro.Dashboard.Api/`REST API、SignalR Hub、EF Core 数据模型与迁移。
- `server/DongfangHydro.Dashboard.Tests/`:聚合规则与 API 集成测试。
- `server/docker-compose.yml`:本地 SQL Server 2022 开发实例。
## 数据库连接
正式连接串通过环境变量提供,不需要修改源码:
```powershell
$env:ConnectionStrings__DashboardDb='Server=YOUR_SERVER;Database=YOUR_DATABASE;User Id=YOUR_USER;Password=YOUR_PASSWORD;TrustServerCertificate=True'
$env:Database__AutoMigrate='true'
$env:Database__Seed='true'
```
首次连接正式库时,建议先保留 `Database__Seed=false`,确认迁移成功后再决定是否写入演示数据。已有业务数据库也可以只使用本项目表,不会修改其他表。
当前 `InitialCreate` 是在尚未接入任何正式 SQL Server 实例时生成的首次迁移。如果目标库已由其他版本创建过同名表,请先核对迁移历史,不要直接开启自动迁移。
本地也可以启动 Docker SQL Server
```powershell
docker compose -f .\server\docker-compose.yml up -d
```
启动前先设置强密码:`$env:MSSQL_SA_PASSWORD='YOUR_STRONG_LOCAL_PASSWORD'`。使用 Docker 数据库时,再把 `ConnectionStrings__DashboardDb` 设置为 `Server=localhost,1433;...` 的连接串;端口仅绑定本机回环地址。
## 启动后端
本机未全局安装 .NET 时,可使用本项目开发时安装的用户级 SDK:
```powershell
& "$env:USERPROFILE\.dotnet\dotnet.exe" tool restore
& "$env:USERPROFILE\.dotnet\dotnet.exe" run --project .\server\DongfangHydro.Dashboard.Api --urls http://localhost:5080
```
后端默认地址:`http://localhost:5080`,健康检查:`GET /health`SignalR`/hubs/dashboard`
## 导入 Excel BOM
先将 `ConnectionStrings:DashboardDb` 配置在环境变量或 .NET User Secrets 中。只读校验不会连接数据库:
```powershell
& "$env:USERPROFILE\.dotnet\dotnet.exe" run --project .\server\DongfangHydro.Dashboard.Api -- import-bom --file "C:\path\bom.xlsx" --validate-only
```
校验通过后执行正式导入:
```powershell
& "$env:USERPROFILE\.dotnet\dotnet.exe" run --project .\server\DongfangHydro.Dashboard.Api -- import-bom --file "C:\path\bom.xlsx" --purge-demo
```
导入以定额编号识别同一订单,在一个 SQL 事务中替换原订单及其 BOM、材料定额、趋势和风险数据。`--purge-demo` 只删除标记为 `demo` 的订单,不影响其他真实订单。重复导入同一文件不会累积重复节点。
同一定额编号且文件哈希未变化时,命令默认跳过替换,以免清空后续报工进度。只有确认需要重建时才追加 `--force`;强制导入会重置该订单的进度、趋势和风险数据。
解析器保留来源工作表、行号、原序号、规格、材质、数量、单重、总重和备注。负数量与 `/``95L``21件` 等源表文本通过“原文 + 可计算数值”双字段保存,不会被静默改写。
## 启动前端
```powershell
npm install
npm run dev
```
如后端不是 `http://localhost:5080`,在本地 `.env` 中设置:
```dotenv
VITE_DASHBOARD_API_URL=http://your-api-host:port
```
后端不可用时,前端保留最后一次订单快照;成功连接后会通过 REST 获取完整数据,并通过 SignalR 接收增量更新。
## 主要接口
- `GET /api/dashboard/overview`
- `GET /api/orders?keyword=&status=&lineId=&page=1&pageSize=20`
- `GET /api/orders/{orderId}`
- `GET /api/orders/{orderId}/tree`
- `GET /api/orders/{orderId}/trend`
- `GET /api/orders/{orderId}/material-quotas?category=&keyword=&page=1&pageSize=50`
- `GET /api/risk-events`
- `GET /api/delay-top`
- `PATCH /api/nodes/{nodeId}/progress`
更新进度时应携带节点返回的 `version` 作为 `expectedVersion`;并发修改冲突会返回 `409 Conflict`,调用方重新获取节点后再提交。
第一版按既定范围不包含登录和权限模块。正式部署前应放在受控内网或带鉴权的反向代理之后,写接口不要直接暴露到公网。
## 验证
```powershell
npm test
npm run lint
npm run build
& "$env:USERPROFILE\.dotnet\dotnet.exe" test .\server\DongfangHydro.Dashboard.Tests\DongfangHydro.Dashboard.Tests.csproj
```