chore: save local MES snapshot

This commit is contained in:
2026-06-25 15:49:15 +08:00
parent 4f6a16fb2e
commit f6dce5daa8
102 changed files with 45101 additions and 218 deletions

View File

@@ -0,0 +1,254 @@
# 需求分析:自制件汇总表 & 工位汇总表
> **日期**: 2026-05-21
> **状态**: 🔍 需求讨论阶段(不动代码)
> **目标**: 理清数据来源、字段映射、缺口和实现方案,产出后续工作计划
---
## 一、需求确认清单
| # | 需求项 | 确认结果 |
|:--:|------|------|
| 1 | **自制件汇总表** — 汇总维度 | 按 **订单+工序** 汇总工时 |
| 2 | **自制件汇总表** — 时间范围 | **自定义起止日期**(用户选择) |
| 3 | **工位汇总表** — 汇总维度 | 按 **工位+日期** 汇总 |
| 4 | **工位汇总表** — 展示字段 | **产量统计** + **工时统计** |
| 5 | **使用场景** | **生产日报/周报**(报表导出) |
---
## 二、自制件汇总表(按订单+工序汇总工时)
### 2.1 需求理解
> 每行 = 一个订单的一道自制件工序,展示该工序的 **计划工时 vs 实际工时** 及差异。
### 2.2 数据源分析
```
┌─────────────────────────────────────────────────────────┐
│ 自制件汇总表 数据流向 │
│ │
│ MES_接口_生产计划 (订单主表) │
│ ├── 订单编号, 合同号, 物料编号, 物料描述, 自制件属性 │
│ │ 过滤: 自制件属性 = '机加件', 单据状态 IS NULL │
│ │ │
│ └──→ MES_接口_生产计划_生产任务 (工序明细) │
│ ├── 订单行号, 工序名称, 顺序编号 │
│ ├── 指派对象(工位), 指派数量, 完成数量 │
│ │ │
│ ├──→ 车间生产管理工艺_零件生产工艺_工艺库 (标准工时) │
│ │ └── 标准工时, 准备工时, 工时合计 │
│ │ JOIN: 工艺库.订单编号 = 生产任务.订单编号 │
│ │ AND 工艺库.工艺顺序 = 生产任务.订单行号 │
│ │ │
│ └──→ YL_加工中心_操作记录表 (实际工时) │
│ └── SUM(实际工时) WHERE 操作类别='报工' │
│ GROUP BY TaskAID │
└─────────────────────────────────────────────────────────┘
```
### 2.3 目标字段清单
| 序号 | 字段名 | 数据来源 | 说明 |
|:--:|------|------|------|
| 1 | 订单号 | `MES_接口_生产计划.订单编号` | |
| 2 | 合同号 | `MES_接口_生产计划.合同号` | |
| 3 | 物料编号 | `MES_接口_生产计划.物料编号` | |
| 4 | 物料描述 | `MES_接口_生产计划.物料描述` | |
| 5 | 订单行号 | `MES_接口_生产计划_生产任务.订单行号` | 工序序号 |
| 6 | 工序名称 | `MES_接口_生产计划_生产任务.工序名称` | |
| 7 | 指派工位 | `MES_接口_生产计划_生产任务.指派对象` | |
| 8 | **计划工时** | `车间生产管理工艺_零件生产工艺_工艺库.标准工时` | 分钟单位 |
| 9 | **准备工时** | `车间生产管理工艺_零件生产工艺_工艺库.准备工时` | 分钟单位 |
| 10 | **工时合计(计划)** | `工艺库.工时合计` = 标准工时 + 准备工时 | |
| 11 | **实际工时** | `SUM(YL_加工中心_操作记录表.实际工时)` | 秒→分钟转换 |
| 12 | **总时长** | `SUM(YL_加工中心_操作记录表.总时长)` | 含暂停的总耗时 |
| 13 | **工时差异** | 实际工时 计划工时合计 | 正=超时,负=提前 |
| 14 | 操作人 | STRING_AGG 或取主要操作人 | 多操作人用逗号分隔 |
| 15 | 报工日期 | MAX(报工日期) | 取最后报工日期 |
### 2.4 现有可复用的数据
| 来源 | 可用字段 | 缺口 |
|------|------|------|
| `View_生产工时视图` | 加工工时, 总时长, 报工日期, 订单号, 工序名称 | ✅ 基本够用 |
| `View_生产订单_MES` | 订单号, 合同号, 物料, 工序, 指派对象 | ✅ |
| `车间生产管理工艺_零件生产工艺_工艺库` | 标准工时, 准备工时, 工时合计 | ⚠️ 需确认有哪些订单已录入 |
### 2.5 待确认问题
| # | 问题 | 建议 |
|:--:|------|------|
| Q1 | 工艺库中标准工时数据覆盖率?很多订单可能没有录入标准工时 | 需 DBA 查一下 `SELECT COUNT(*) FROM 工艺库 WHERE 标准工时 > 0` |
| Q2 | 同一工序多次报工,取 SUM 还是最后一次? | 建议 **SUM**(累计工时) |
| Q3 | 工时单位展示用分钟还是小时? | 建议 **分钟**(与工艺库标准工时单位一致) |
| Q4 | 是否区分已校验/未校验工时? | 建议加一列:`已校验工时` vs `未校验工时` |
| Q5 | 是否只查"已完成"的?还是包含进行中? | 建议默认查 **全部**,加筛选条件 |
---
## 三、工位汇总表(按工位+日期汇总)
### 3.1 需求理解
> 每行 = 一个工位在某一天的生产汇总。展示两个维度:**产量统计** + **工时统计**。
### 3.2 数据源分析
```
┌─────────────────────────────────────────────────────────┐
│ 工位汇总表 数据流向 │
│ │
│ MES_资源主数据 (工位基础数据) │
│ ├── VisCode(工位编号), Name(工位名称), Type │
│ │ 过滤: Type='rtMachine', Active='tYES' │
│ │ │
│ ├──→ 当日产量统计 │
│ │ ├── 计划数量: SUM(生产任务.指派数量) │
│ │ │ WHERE 指派对象编号=X AND 计划开始时间=@日期 │
│ │ ├── 完成数量: SUM(操作记录.操作数值) │
│ │ │ WHERE 工位编号=X AND 操作类别='报工' │
│ │ │ AND CAST(开始时间 AS DATE)=@日期 │
│ │ ├── 合格数: SUM(质检记录.合格数) │
│ │ │ WHERE 工位关联 AND CAST(检测时间 AS DATE)=@日期 │
│ │ └── 不合格数: SUM(质检记录.不合格数) │
│ │ │
│ └──→ 当日工时统计 │
│ ├── 设备运行工时: SUM(操作记录.实际工时) │
│ ├── 人员工时: SUM(操作记录.总时长) 或 SUM(报工.工时) │
│ └── 闲置时间: 24h - 运行时间(分钟) │
│ 数据源: 历史_工位设备状态每分钟记录 │
│ WHERE 工位号=X AND CAST(创建时间 AS DATE)=@日期 │
│ SUM(CASE WHEN 设备状态 IN(-1,0,3) THEN 1 END) │
│ → 每分钟一条,直接计数即为分钟数 │
└─────────────────────────────────────────────────────────┘
```
### 3.3 目标字段清单
| 序号 | 字段名 | 数据来源 | 说明 |
|:--:|------|------|------|
| 1 | 工位编号 | `MES_资源主数据.VisCode` | |
| 2 | 工位名称 | `MES_资源主数据.Name` | |
| 3 | 统计日期 | 用户选择的日期 | DATE 类型 |
| 4 | **计划数量** | SUM(生产任务.指派数量) | 当天计划开工的任务指派数 |
| 5 | **完成数量** | SUM(操作记录.操作数值) | 当天报工的完成数 |
| 6 | **合格数** | SUM(质检记录.合格数) | 当天收检的合格数 |
| 7 | **不合格数** | SUM(质检记录.不合格数) | 当天收检的不合格数 |
| 8 | **设备运行工时** | SUM(操作记录.实际工时) / 60 | 转换为分钟 |
| 9 | **人员工时** | SUM(操作记录.总时长) / 60 | 含暂停的总耗时 |
| 10 | **闲置时间** | COUNT(状态记录 WHERE 状态 IN(-1,0,3)) | 每分钟一条=分钟数 |
| 11 | **设备利用率** | 运行工时 / (运行+闲置) × 100% | 可选指标 |
### 3.4 现有可复用的数据
| 来源 | 可用字段 | 缺口 |
|------|------|------|
| `View_生产工时视图` | 工位编号, 工位名称, 开始时间, 加工工时, 总时长 | ✅ |
| `View_生产订单_MES` | 指派对象编号, 指派数量 | ✅ |
| `历史_工位设备状态每分钟记录` | 工位号, 设备状态, 创建时间 | ⚠️ 需确认数据采集是否覆盖所有工位 |
### 3.5 待确认问题
| # | 问题 | 建议 |
|:--:|------|------|
| Q1 | "日期"以哪个时间为准?报工日期还是操作日期? | 建议用 **报工日期** (CAST(操作记录.开始时间 AS DATE)) |
| Q2 | 闲置时间——所有工位都有设备状态记录吗? | 需DBA确认 `历史_工位设备状态每分钟记录` 的覆盖率 |
| Q3 | 如果没有状态记录表数据,闲置时间怎么算? | 备选方案:`24×60 SUM(实际工时÷60)` 粗略估算 |
| Q4 | 跨天任务怎么算比如夜班从22:00做到次日02:00 | 建议按 **开始时间归属日期**22:00→当天 |
| Q5 | 是否需要展示班次维度(白班/夜班分开)? | 当前需求未要求,可后期迭代 |
---
## 四、实现方案对比
| 方案 | 方式 | 优点 | 缺点 |
|------|------|------|------|
| **A. 新建视图** | 创建 `View_自制件工时汇总``View_工位日汇总` 两个VIEW | 性能好、前端直接查 | 不够灵活 |
| **B. 新建存储过程** | 创建带参数的 SP 如 `报表_自制件工时汇总(@开始日期,@结束日期)` | 灵活、支持参数筛选和分页 | 需前后端联调 |
| **C. 改造已有SP** | 在 `View_生产工时视图` 基础上增加聚合查询 SP | 复用现有逻辑 | 可能影响现有功能 |
| ✅ **推荐方案** | **方案B**新建2个存储过程 + 前端新建2个报表页面 | 最佳实践 | — |
---
## 五、后续工作计划
### 第一阶段数据验证1天
| 步骤 | 内容 | 执行人 |
|:---:|------|:---:|
| 1 | 查询工艺库标准工时覆盖率 | DBA |
| 2 | 查询设备状态每分钟记录覆盖率(按工位) | DBA |
| 3 | 抽样验证取1个订单手动计算工时对比 SP 结果 | DBA |
| 4 | 确认工时单位统一(秒→分钟 or 小时) | 全体 |
### 第二阶段存储过程开发2天
| 步骤 | 内容 | 执行人 |
|:---:|------|:---:|
| 1 | 创建 `报表_自制件工时汇总` SP | DBA |
| 2 | 创建 `报表_工位日汇总` SP | DBA |
| 3 | 编写测试SQL验证结果准确性 | DBA |
| 4 | Review 两个 SP | 技术负责人 |
### 第三阶段前端报表页面2天
| 步骤 | 内容 | 执行人 |
|:---:|------|:---:|
| 1 | 新建"自制件工时汇总"页面(搜索条件+表格+导出) | 前端 |
| 2 | 新建"工位日汇总"页面(搜索条件+表格+导出) | 前端 |
| 3 | 在菜单表中配置页面路由 | 前端/DBA |
| 4 | 联调测试 | 全体 |
### 第四阶段上线验证0.5天)
| 步骤 | 内容 | 执行人 |
|:---:|------|:---:|
| 1 | 用真实数据跑一次日报 | 用户 |
| 2 | 与人工统计对比验证 | 用户 |
| 3 | 修复问题、调整格式 | 开发 |
---
## 六、需要DBA协助验证的SQL
```sql
-- 1. 工艺库标准工时覆盖率
SELECT
COUNT(*) AS ,
SUM(CASE WHEN ISNULL(,0) > 0 THEN 1 ELSE 0 END) AS ,
SUM(CASE WHEN ISNULL(,0) = 0 THEN 1 ELSE 0 END) AS
FROM _零件生产工艺_工艺库
WHERE = 1
-- 2. 设备状态记录覆盖率最近7天按工位
SELECT
,
COUNT(*) AS ,
MIN() AS ,
MAX() AS
FROM _工位设备状态每分钟记录
WHERE >= DATEADD(DAY, -7, GETDATE())
GROUP BY
ORDER BY DESC
-- 3. 抽查一个订单的实际工时
SELECT
TaskAID,
,
,
SUM(ISNULL(,0)) AS _秒,
SUM(ISNULL(,0)) AS _秒,
COUNT(*) AS
FROM YL_加工中心_操作记录表
WHERE = '10001' -- 替换为实际订单号
AND = '报工'
GROUP BY TaskAID, ,
```
---
> 📅 文档日期: 2026-05-21
> 🔍 状态: 需求讨论阶段待DBA数据验证后进入开发