初始代码
This commit is contained in:
347
yawei-mes/.tasks/2026-02-05_生产计划改进.md
Normal file
347
yawei-mes/.tasks/2026-02-05_生产计划改进.md
Normal file
@@ -0,0 +1,347 @@
|
||||
# 生产计划优化 - 全流程改进总结
|
||||
|
||||
## 项目概述
|
||||
|
||||
本项目对生产计划管理系统进行了全面优化,通过改进生产计划的创建流程、支持多订单批量处理、自动时间设置、工序路线动态加载、关联订单管理和自动订单创建等功能,显著提升了用户体验和系统效率。
|
||||
|
||||
**项目时间**: 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%以上
|
||||
- 支持批量处理多个订单,提高工作效率
|
||||
- 通过自动创建订单功能,简化业务流程
|
||||
- 通过清晰的明细标注,提高数据追溯能力
|
||||
Reference in New Issue
Block a user