Files
MES/yawei-mes/.tasks/2026-01-17_v1.6.014_生产报表.md
2026-04-02 10:39:03 +08:00

310 lines
12 KiB
Markdown
Raw Permalink 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.

# 生产报表模块设计文档
## 版本信息
- **版本号**: v1.6.014
- **日期**: 2026-01-17
- **开发者**: 周启威
---
## 一、模块概述
### 1.1 功能目标
生产报表模块用于统计和展示生产相关的各类数据报表,帮助管理人员了解生产进度、产量、合格率、工时等关键指标。
### 1.2 主要功能
1. **日报表** - 按日统计生产数据(产量、合格率、报工人员等)
2. **月报表** - 按月汇总生产数据
3. **产量统计** - 按产品/工序/车间/工位统计产量
4. **合格率分析** - 统计各维度的合格率数据
5. **工时统计** - 统计员工/设备工时
6. **导出功能** - 支持Excel导出
---
## 二、数据库设计
### 2.1 涉及的现有表
| 表名 | 说明 |
|------|------|
| `pro_report` | 报工单表 |
| `pro_workorder` | 生产工单表 |
| `pro_workorder_entry` | 工单分录表 |
| `md_material` | 物料表 |
| `md_workshop` | 车间表 |
| `md_station` | 工位表 |
| `sys_user` | 用户表 |
### 2.2 报表视图(可选,用于优化查询性能)
暂不创建视图直接使用SQL查询聚合数据。
### 2.3 数据来源说明
#### 2.3.1 生产数据来源pro_report表
| 数据项 | 来源表 | 字段 | 说明 |
|--------|--------|------|------|
| 报工数量 | `pro_report` | `report_quantity` | 每次报工的数量 |
| 合格数量 | `pro_report` | `qualified_quantity` | 报工合格数量 |
| 不合格数量 | `pro_report` | `unqualified_quantity` | 报工不合格数量 |
| 报工时间 | `pro_report` | `report_time` | 用于按日期统计 |
| 报工人 | `pro_report` | `report_user_id`, `report_user_name` | 用于按人员统计 |
| 车间 | `pro_report` | `workshop_id`, `workshop_name` | 用于按车间统计 |
| 工位 | `pro_report` | `station_id`, `station_name` | 用于按工位统计 |
| 设备 | `pro_report` | `equipment_id`, `equipment_name` | 用于按设备统计 |
| 班次 | `pro_report` | `shift_name` | 用于按班次统计 |
| 报工时段 | `pro_report` | `report_period_start`, `report_period_end` | 用于工时计算 |
| 停机时间 | `pro_report` | `downtime_minutes` | 用于设备利用率计算 |
#### 2.3.2 质检数据来源FIIH新版质检
| 数据项 | 来源表 | 字段 | 说明 |
|--------|--------|------|------|
| 质检总数 | `fiih_qc_data` | `COUNT(id)` | 质检记录总条数 |
| 不合格数 | `fiih_qc_data` | `fiih_qc_result` | 统计结论为"不合格"的条数 |
| 合格数 | `fiih_qc_data` | 计算值 | 总数 - 不合格数 |
| 质检结论 | `fiih_qc_data` | `fiih_qc_result` | 合格/不合格 |
| 不良原因 | `fiih_qc_data` | `fiih_bad_reason` | 不合格原因 |
| 对象名称 | `fiih_qc_data` | `fiih_object_name` | 质检对象 |
| 任务名称 | `fiih_qc_data` | `fiih_task_name` | 质检任务 |
| 环节名称 | `fiih_qc_data` | `fiih_link_name` | 质检环节 |
| 采集时间 | `fiih_qc_data` | `fiih_collect_time` | 用于按日期统计 |
| 任务状态 | `fiih_qc_data` | `fiih_status` | 1进行中 2完成 3作废 |
#### 2.3.3 质检配置来源
| 数据项 | 来源表 | 字段 | 说明 |
|--------|--------|------|------|
| 配置信息 | `fiih_qc_config` | 多字段 | 质检项配置 |
| 分项配置 | `fiih_qc_config` | `fiih_config_ch0~23` | 24个通道的JSON配置 |
| 负责人 | `fiih_qc_config` | `fiih_leader_id`, `fiih_leader_name` | 质检负责人 |
#### 2.3.4 关联数据来源
| 数据项 | 来源表 | 关联方式 | 说明 |
|--------|--------|----------|------|
| 产品信息 | `pro_workorder` | 通过 `work_order_id` 关联 | 获取物料名称、规格型号等 |
| 工序信息 | `pro_workorder_entry` | 通过 `work_order_entry_id` 关联 | 获取工序名称、工序顺序 |
| 工单信息 | `pro_workorder` | 通过 `work_order_id` 关联 | 获取工单编号、批次号等 |
| 客户信息 | `sal_order` | 通过工单关联销售订单 | 获取客户名称 |
#### 2.3.5 统计计算逻辑
| 指标 | 计算公式 | 数据来源 |
|------|----------|----------|
| 总产量 | `SUM(report_quantity)` | pro_report |
| 生产合格率 | `SUM(qualified_quantity) / SUM(report_quantity) * 100%` | pro_report |
| 报工次数 | `COUNT(id)` | pro_report |
| 工时(分钟) | `SUM(TIMESTAMPDIFF(MINUTE, report_period_start, report_period_end))` | pro_report |
| 有效工时 | 工时 - 停机时间 | pro_report |
| 设备利用率 | 有效工时 / 总工时 * 100% | pro_report |
| **质检合格率** | `(总条数 - 不合格条数) / 总条数 * 100%` | **fiih_qc_data** |
| **质检总数** | `COUNT(id)` | **fiih_qc_data** |
| **不合格数** | `COUNT(id) WHERE fiih_qc_result = '不合格'` | **fiih_qc_data** |
---
## 2.4 首页Dashboard质检数据修改
### 2.4.1 当前实现(需修改)
- 文件: `DashboardMapper.xml`
- 方法: `selectProductQualityRate`
- 数据源: `qc_report_quality` 表(旧版质检)
### 2.4.2 修改方案
将首页质检合格率改为从 `fiih_qc_data` 表读取:
```sql
SELECT
COUNT(*) AS totalCount,
SUM(CASE WHEN fiih_qc_result = '不合格' THEN 1 ELSE 0 END) AS unqualifiedCount,
COUNT(*) - SUM(CASE WHEN fiih_qc_result = '不合格' THEN 1 ELSE 0 END) AS qualifiedCount,
ROUND((COUNT(*) - SUM(CASE WHEN fiih_qc_result = '不合格' THEN 1 ELSE 0 END)) / COUNT(*) * 100, 2) AS rate
FROM fiih_qc_data
WHERE fiih_status != 3 -- 排除作废的记录
```
---
## 三、接口设计
### 3.1 后端接口
#### 3.1.1 日报表查询
```
GET /statement/productionStatement/dailyReport
```
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| reportDate | String | 否 | 报工日期 (yyyy-MM-dd),默认当天 |
| workshopId | Long | 否 | 车间ID |
| stationId | Long | 否 | 工位ID |
| materialId | Long | 否 | 产品ID |
**返回数据**:
```json
{
"code": 200,
"data": {
"summary": {
"totalReportQuantity": 1000,
"totalQualifiedQuantity": 980,
"totalUnqualifiedQuantity": 20,
"qualifiedRate": 98.0,
"reportCount": 50
},
"byWorkshop": [...],
"byMaterial": [...],
"byUser": [...]
}
}
```
#### 3.1.2 月报表查询
```
GET /statement/productionStatement/monthlyReport
```
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| yearMonth | String | 否 | 年月 (yyyy-MM),默认当月 |
| workshopId | Long | 否 | 车间ID |
**返回数据**:
```json
{
"code": 200,
"data": {
"summary": {...},
"dailyTrend": [...],
"byMaterial": [...]
}
}
```
#### 3.1.3 产量统计
```
GET /statement/productionStatement/outputStatistics
```
**请求参数**:
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| startDate | String | 是 | 开始日期 |
| endDate | String | 是 | 结束日期 |
| groupBy | String | 否 | 分组维度: material/workshop/station/user |
| workshopId | Long | 否 | 车间ID |
#### 3.1.4 合格率分析
```
GET /statement/productionStatement/qualifiedRateAnalysis
```
#### 3.1.5 工时统计
```
GET /statement/productionStatement/workHourStatistics
```
#### 3.1.6 导出报表
```
GET /statement/productionStatement/export
```
---
## 四、前端设计
### 4.1 目录结构
```
mes-ui/src/
├── api/mes/statement/
│ └── productionStatement.js # API接口
└── views/mes/statement/
└── productionStatement/
└── index.vue # 生产报表主页面
```
### 4.2 页面布局
#### 4.2.1 主页面结构
```
┌─────────────────────────────────────────────────────────────┐
│ 筛选条件区域 │
│ [日期范围] [车间] [工位] [产品] [查询] [重置] [导出] │
├─────────────────────────────────────────────────────────────┤
│ Tab切换: [日报表] [月报表] [产量统计] [合格率分析] [工时统计] │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 汇总卡片区域 │ │
│ │ [总产量] [合格数] [不合格数] [合格率] [报工次数] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 图表区域 (ECharts) │ │
│ │ - 日报表: 按小时产量柱状图 │ │
│ │ - 月报表: 日趋势折线图 │ │
│ │ - 产量统计: 分组柱状图/饼图 │ │
│ │ - 合格率: 趋势图 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 数据表格区域 │ │
│ │ - 明细数据列表 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## 五、后端实现
### 5.1 文件清单
| 文件路径 | 说明 |
|----------|------|
| `cn.sourceplan.statement.controller.ProductionStatementController` | 控制器 |
| `cn.sourceplan.statement.service.IProductionStatementService` | 服务接口 |
| `cn.sourceplan.statement.service.impl.ProductionStatementServiceImpl` | 服务实现 |
| `cn.sourceplan.statement.mapper.ProductionStatementMapper` | Mapper接口 |
| `mapper/statement/ProductionStatementMapper.xml` | Mapper XML |
| `cn.sourceplan.statement.domain.vo.DailyReportVO` | 日报表VO |
| `cn.sourceplan.statement.domain.vo.MonthlyReportVO` | 月报表VO |
| `cn.sourceplan.statement.domain.vo.OutputStatisticsVO` | 产量统计VO |
| `cn.sourceplan.statement.domain.query.ProductionStatementQuery` | 查询参数 |
---
## 六、菜单与权限
### 6.1 菜单配置
- **父菜单**: 报表管理 (已存在)
- **菜单名称**: 生产报表
- **路由地址**: statement/productionStatement
- **组件路径**: mes/statement/productionStatement/index
- **权限标识**: statement:productionStatement:list
### 6.2 权限配置
| 权限标识 | 说明 |
|----------|------|
| statement:productionStatement:list | 查询生产报表 |
| statement:productionStatement:export | 导出生产报表 |
---
## 七、开发计划
### 7.1 任务分解
| 序号 | 任务 | 预估工时 |
|------|------|----------|
| 1 | 后端Controller/Service/Mapper | 4h |
| 2 | 前端页面开发 | 4h |
| 3 | 图表集成 | 2h |
| 4 | 导出功能 | 1h |
| 5 | 测试与调优 | 1h |
### 7.2 里程碑
- [ ] 后端接口完成
- [ ] 前端页面完成
- [ ] 联调测试通过
- [ ] 发布上线
---
## 八、SQL脚本
详见: `.sql/2026-01-17_v1.6.014_周启威_生产报表.sql`