13 KiB
13 KiB
需求分析:自制件汇总表 & 工位汇总表
日期: 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
-- 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数据验证后进入开发)