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

12 KiB
Raw Blame History

生产计划优化 - 全流程改进总结

项目概述

本项目对生产计划管理系统进行了全面优化,通过改进生产计划的创建流程、支持多订单批量处理、自动时间设置、工序路线动态加载、关联订单管理和自动订单创建等功能,显著提升了用户体验和系统效率。

项目时间: 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
  • 其他报工相关字段

字段扩展(如需要)

如果现有字段不足以支持新功能,可能需要添加以下字段:

-- 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 (生产计划) - 扩展现有实体

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 (时间范围服务)

功能:

  • 根据计划类型获取默认时间范围
  • 验证时间范围有效性
  • 获取指定月份的周列表

关键方法:

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 (工序路线服务)

功能:

  • 根据产品获取工序路线
  • 获取可用工序路线列表
  • 过滤休息日工序

关键方法:

ProcessRoute getRouteByProduct(Long productId);
List<ProcessRoute> getAvailableRoutes(Long productId);
ProcessRouteDetail getRouteDetails(Long routeId, boolean excludeRestDays);

3. ProductionPlanService (生产计划服务) - 扩展现有服务

新增功能:

  • 创建计划并关联多个订单
  • 生成多个工单(每个订单一个工单)
  • 自动创建订单
  • 获取计划明细(按订单分组)

关键方法:

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

@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 - 新增或扩展

@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组件测试

性能优化

数据库索引

-- 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%以上
  • 支持批量处理多个订单,提高工作效率
  • 通过自动创建订单功能,简化业务流程
  • 通过清晰的明细标注,提高数据追溯能力