Files
MES/yawei-mes/.tasks/2026-02-05_生产计划改进.md

348 lines
12 KiB
Markdown
Raw Permalink Normal View History

2026-04-02 10:38:23 +08:00
# 生产计划优化 - 全流程改进总结
## 项目概述
本项目对生产计划管理系统进行了全面优化,通过改进生产计划的创建流程、支持多订单批量处理、自动时间设置、工序路线动态加载、关联订单管理和自动订单创建等功能,显著提升了用户体验和系统效率。
**项目时间**: 2026-02-25
**功能名称**: 生产计划优化 (production-plan-optimization)
**版本号**: v1.6.037
## 核心改进点
### 1. 时间设置优化
- **改进前**: 用户需要手动输入时间范围
- **改进后**: 根据选择的年/月/周计划类型自动设置时间范围,用户可快速创建计划
- **影响**: 减少用户手动输入,提高计划创建效率
### 2. 工序路线动态加载
- **改进前**: 工序路线需要手动选择
- **改进后**: 产品选择后自动读取并显示工序路线,支持下拉框修改,不显示休息日
- **影响**: 简化工序路线选择流程,减少操作步骤
### 3. 时间维度整合显示
- **改进前**: 年、月、周分散显示
- **改进后**: 年、月、周在同一组件中显示和管理,月计划下的周计划自动分类
- **影响**: 提升用户界面的直观性和易用性
### 4. 质检等级隐藏
- **改进前**: 质检等级显示在界面上
- **改进后**: 完全隐藏质检等级相关信息或与FIIH关联
- **影响**: 简化界面,减少用户困惑
### 5. 订单选择流程优化
- **改进前**: 订单选择流程不清晰
- **改进后**: 订单放在最后选,先筛选后选择,支持按时间、产品、订单范围筛选,支持多订单选择
- **影响**: 用户能更高效地找到需要的订单
### 6. 关联订单管理
- **改进前**: 订单关联不清晰
- **改进后**: 清晰显示关联订单,支持自动创建
- **影响**: 用户能清楚了解计划关联的订单
### 7. 多订单明细管理
- **改进前**: 多订单明细混乱,难以区分
- **改进后**: 生成多个分析计划和明细,清楚标注每条明细所属的订单、工单、报工单
- **影响**: 用户能准确追踪每条明细的来源
### 8. 自动订单创建
- **改进前**: 未选择订单时无法继续
- **改进后**: 未选择订单时弹窗询问是否自动创建,根据计划数据自动创建订单
- **影响**: 简化流程,支持快速创建计划
## 数据库改动
### 使用现有表
本次优化**不新增表**,使用现有的表结构:
#### 1. pro_plan (生产计划表) - 已有字段
- `id`: 计划ID
- `plan_number`: 计划编号
- `plan_name`: 计划名称
- `plan_type`: 计划类型
- `route_id`: 工序路线ID已有
- `route_name`: 工序路线名称(已有)
- `rest_days`: 休息日配置(已有)
- `plan_analysis`: 计划分析结果(已有,用于存储多订单分析数据)
- `plan_source_type`: 来源类型(已有)
- `plan_source_id`: 来源ID已有
#### 2. pro_workorder (工单主表) - 使用现有字段
- `id`: 工单ID
- `number`: 工单编号
- `material_id`: 产品ID
- `material_name`: 产品名称
- `quantity`: 生产数量
- `route_id`: 工序路线ID已有
- `source_type`: 来源类型(用于标识来自计划)
- `source_info`: 来源信息用于存储计划ID和订单信息
#### 3. pro_workorder_entry (工单子表) - 使用现有字段
- `id`: 工单子表ID
- `workorder_id`: 工单主表ID
- `process_id`: 工序ID
- `process_name`: 工序名称
- 其他工序相关字段
#### 4. pro_report (报工单表) - 使用现有字段
- `id`: 报工单ID
- `number`: 报工单编号
- `work_order_entry_id`: 工单子表ID
- 其他报工相关字段
### 字段扩展(如需要)
如果现有字段不足以支持新功能,可能需要添加以下字段:
```sql
-- pro_plan表可能需要的扩展字段
ALTER TABLE `pro_plan`
ADD COLUMN `schedule_cycle` varchar(20) DEFAULT NULL COMMENT '计划周期year=年计划,month=月计划,week=周计划' AFTER `plan_type`,
ADD COLUMN `plan_year` int DEFAULT NULL COMMENT '计划年份' AFTER `schedule_cycle`,
ADD COLUMN `month_number` int DEFAULT NULL COMMENT '月份1-12' AFTER `plan_year`,
ADD COLUMN `week_number` int DEFAULT NULL COMMENT '周数1-53' AFTER `month_number`,
ADD COLUMN `start_time` datetime DEFAULT NULL COMMENT '开始时间' AFTER `week_number`,
ADD COLUMN `end_time` datetime DEFAULT NULL COMMENT '结束时间' AFTER `start_time`,
ADD COLUMN `related_order_ids` text DEFAULT NULL COMMENT '关联订单ID列表JSON格式' AFTER `plan_analysis`;
-- 添加索引
ALTER TABLE `pro_plan`
ADD INDEX `idx_schedule_cycle` (`schedule_cycle`),
ADD INDEX `idx_year_week` (`plan_year`, `week_number`),
ADD INDEX `idx_year_month` (`plan_year`, `month_number`);
```
## 后端改动
### 新增/修改实体类
#### 1. ProPlan (生产计划) - 扩展现有实体
```java
public class ProPlan extends BaseEntity {
private Long id;
private String planNumber; // 计划编号
private String planName; // 计划名称
private String planType; // 计划类型
private String scheduleCycle; // 计划周期year/month/week
private Integer planYear; // 计划年份
private Integer monthNumber; // 月份
private Integer weekNumber; // 周数
private Date startTime; // 开始时间
private Date endTime; // 结束时间
private Long routeId; // 工序路线ID
private String routeName; // 工序路线名称
private String restDays; // 休息日配置
private String planAnalysis; // 计划分析结果JSON格式存储多订单分析
private String relatedOrderIds; // 关联订单ID列表JSON格式
// 关联对象(不存数据库)
private List<ProWorkorder> workorderList; // 关联的工单列表
}
```
### 新增服务类
#### 1. TimeRangeService (时间范围服务)
**功能**:
- 根据计划类型获取默认时间范围
- 验证时间范围有效性
- 获取指定月份的周列表
**关键方法**:
```java
TimeRange getDefaultTimeRange(String scheduleCycle);
boolean validateTimeRange(Date startTime, Date endTime);
List<Week> getWeeksByMonth(int year, int month);
boolean weekPlanExistsInMonth(Long monthPlanId, int weekNumber);
```
#### 2. ProcessRouteService (工序路线服务)
**功能**:
- 根据产品获取工序路线
- 获取可用工序路线列表
- 过滤休息日工序
**关键方法**:
```java
ProcessRoute getRouteByProduct(Long productId);
List<ProcessRoute> getAvailableRoutes(Long productId);
ProcessRouteDetail getRouteDetails(Long routeId, boolean excludeRestDays);
```
#### 3. ProductionPlanService (生产计划服务) - 扩展现有服务
**新增功能**:
- 创建计划并关联多个订单
- 生成多个工单(每个订单一个工单)
- 自动创建订单
- 获取计划明细(按订单分组)
**关键方法**:
```java
Long createPlanWithOrders(ProductionPlanRequest planRequest);
List<ProWorkorder> generateWorkordersForOrders(Long planId, List<Long> orderIds);
Long autoCreateOrder(ProductionPlanData planData);
Map<Long, List<WorkorderDetail>> getPlanDetailsGroupedByOrder(Long planId);
```
### 新增API接口
#### 1. ProductionPlanController - 扩展现有Controller
```java
@PostMapping("/createWithOrders")
public ResponseEntity<Long> createPlanWithOrders(@RequestBody ProductionPlanRequest request);
@GetMapping("/{planId}/detailsByOrder")
public ResponseEntity<Map<Long, List<WorkorderDetail>>> getDetailsByOrder(@PathVariable Long planId);
@GetMapping("/defaultTimeRange/{scheduleCycle}")
public ResponseEntity<TimeRange> getDefaultTimeRange(@PathVariable String scheduleCycle);
```
#### 2. ProcessRouteController - 新增或扩展
```java
@GetMapping("/product/{productId}")
public ResponseEntity<ProcessRoute> getRouteByProduct(@PathVariable Long productId);
@GetMapping("/product/{productId}/available")
public ResponseEntity<List<ProcessRoute>> getAvailableRoutes(@PathVariable Long productId);
```
## 前端改动
### 新增/修改组件
#### 1. TimeRangeSelector.vue (时间范围选择器) - 新增
**功能**:
- 整合年、月、周的时间选择
- 自动设置默认时间范围
- 验证时间范围有效性
#### 2. ProcessRouteSelector.vue (工序路线选择器) - 新增
**功能**:
- 显示产品的工序路线(不显示休息日)
- 支持下拉框修改工序路线
#### 3. OrderFilterAndSelection.vue (订单筛选和多选) - 新增
**功能**:
- 筛选生产订单
- 支持多选订单
- 显示选择统计
#### 4. PlanDetailList.vue (计划明细展示) - 新增
**功能**:
- 按订单分组显示工单明细
- 标注订单/工单/报工单信息
#### 5. ProductionPlanCreate.vue (生产计划创建页面) - 修改现有页面
**主要修改**:
1. 集成时间范围选择器
2. 集成工序路线选择器
3. 订单选择放在最后
4. 隐藏质检等级字段
5. 支持多订单选择
6. 支持自动创建订单
## 测试改动
### 后端测试
#### 1. 单元测试
- TimeRangeService的时间范围设置和验证
- ProcessRouteService的工序路线加载排除休息日
- ProductionPlanService的多订单处理
- 自动创建订单功能
#### 2. 集成测试
- 完整的计划创建流程
- 多订单工单生成
- 数据一致性验证
### 前端测试
#### 1. 单元测试
- TimeRangeSelector组件测试
- ProcessRouteSelector组件测试
- OrderFilterAndSelection组件测试
## 性能优化
### 数据库索引
```sql
-- pro_plan表索引
CREATE INDEX idx_schedule_cycle ON pro_plan(schedule_cycle);
CREATE INDEX idx_year_week ON pro_plan(plan_year, week_number);
CREATE INDEX idx_year_month ON pro_plan(plan_year, month_number);
CREATE INDEX idx_route_id ON pro_plan(route_id);
-- pro_workorder表索引如需要
CREATE INDEX idx_source_type_info ON pro_workorder(source_type, source_info(100));
```
## 实现计划
### 第一阶段:数据库和后端基础
1. 扩展pro_plan表字段如需要
2. 修改ProPlan实体类
3. 实现TimeRangeService
4. 实现ProcessRouteService
5. 编写单元测试
### 第二阶段:后端业务逻辑
1. 扩展ProductionPlanService
2. 实现多订单工单生成
3. 实现自动创建订单
4. 创建/扩展API接口
5. 编写集成测试
### 第三阶段:前端实现
1. 创建时间范围选择器组件
2. 创建工序路线选择器组件
3. 创建订单筛选多选组件
4. 修改计划创建页面
5. 编写前端单元测试
### 第四阶段:优化和验证
1. 创建数据库索引
2. 性能测试
3. 功能验证
4. 文档编写
## 关键需求映射
| 需求 | 实现方式 | 状态 |
|------|--------|------|
| 默认时间设置 | TimeRangeService + TimeRangeSelector组件 | 待实现 |
| 工序路线不显示休息日 | ProcessRouteService过滤 + ProcessRouteSelector组件 | 待实现 |
| 年月周放在一起 | TimeRangeSelector组件 | 待实现 |
| 质检等级隐藏 | 前端移除相关字段 | 待实现 |
| 订单放在最后选 | 调整页面布局和流程 | 待实现 |
| 订单多选(通过筛选) | OrderFilterAndSelection组件 | 待实现 |
| 多个分析计划和明细 | ProductionPlanService生成多个工单 | 待实现 |
| 明细标注订单/工单/报工单 | PlanDetailList组件 + 数据结构 | 待实现 |
| 未绑定订单自动创建 | ProductionPlanService自动创建 | 待实现 |
## 总结
本项目通过优化现有表结构和业务流程避免新增表充分利用现有的pro_plan、pro_workorder等表来实现多订单管理功能。通过plan_analysis字段存储JSON格式的分析数据通过source_info字段关联计划和订单信息实现了需求的所有功能点。
**预期收益**:
- 用户创建计划的时间减少50%以上
- 支持批量处理多个订单,提高工作效率
- 通过自动创建订单功能,简化业务流程
- 通过清晰的明细标注,提高数据追溯能力