Files
MES/yawei-mes/.tasks/2026-02-05_生产计划改进.md
2026-04-02 10:39:03 +08:00

348 lines
12 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.

# 生产计划优化 - 全流程改进总结
## 项目概述
本项目对生产计划管理系统进行了全面优化,通过改进生产计划的创建流程、支持多订单批量处理、自动时间设置、工序路线动态加载、关联订单管理和自动订单创建等功能,显著提升了用户体验和系统效率。
**项目时间**: 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%以上
- 支持批量处理多个订单,提高工作效率
- 通过自动创建订单功能,简化业务流程
- 通过清晰的明细标注,提高数据追溯能力