|
|
---
|
|
|
alwaysApply: true
|
|
|
---
|
|
|
|
|
|
# 后端业务规则 (冲压排产系统)
|
|
|
|
|
|
## 业务概述
|
|
|
|
|
|
本系统是**冲压排产系统**,用于将工单中的翅片冲压任务合理分配到不同的冲压设备上,同时协调模具使用和调模工的工作安排。
|
|
|
|
|
|
业务参考项目:`PunchSchedule` 目录
|
|
|
|
|
|
参考文档:
|
|
|
- @file:PunchSchedule/docs/README.md
|
|
|
- @file:PunchSchedule/docs/01-业务领域概述.md
|
|
|
- @file:PunchSchedule/docs/02-数据模型设计.md
|
|
|
- @file:PunchSchedule/docs/03-排产算法详解.md
|
|
|
- @file:PunchSchedule/docs/04-约束规则说明.md
|
|
|
|
|
|
## 核心业务实体
|
|
|
|
|
|
### 1. 工单 (ManufacturingOrder)
|
|
|
|
|
|
**定义**: 生产任务的顶层容器,来源于ERP系统
|
|
|
|
|
|
**关键属性**: 工单号、组件号、组件名称、计划数量、单件重量、翅片任务列表
|
|
|
|
|
|
**业务规则**:
|
|
|
- 工单号必须唯一
|
|
|
- 一个工单可包含多个不同规格的翅片任务
|
|
|
- 支持按组件进行任务分组
|
|
|
|
|
|
**参考代码**:
|
|
|
- @file:PunchSchedule/models/manufacturing_order.py
|
|
|
|
|
|
### 2. 翅片 (Fin)
|
|
|
|
|
|
**定义**: 具体的生产任务单位,定义了详细的加工要求
|
|
|
|
|
|
**关键属性**: 名称、冲压类型、数量、翅片类型、尺寸参数(高度、宽度、长度、波距、料厚)、计划开始时间、工时、ERP工序报告号、未排产原因
|
|
|
|
|
|
**业务规则**:
|
|
|
- 翅片类型和波距决定模具选择
|
|
|
- 冲压类型决定设备兼容性
|
|
|
- 尺寸参数影响设备选择和约束验证
|
|
|
- BAT产品特殊处理:产品名包含"BAT"且冲压类型为"BST14"时,应转换为"BST2B2"
|
|
|
|
|
|
### 3. 设备 (Machine/Equipment)
|
|
|
|
|
|
**定义**: 冲压设备是生产的物理载体,具有特定的能力和约束
|
|
|
|
|
|
**关键属性**: 设备类型、设备编号、初始状态信息、允许的翅片类型/高度、波距范围限制、最大翅片长度限制
|
|
|
|
|
|
**业务规则**:
|
|
|
- 设备类型必须与翅片冲压类型匹配
|
|
|
- 支持设备专业化配置
|
|
|
- 初始状态用于处理排产开始时的在制品
|
|
|
|
|
|
**参考代码**:
|
|
|
- @file:PunchSchedule/models/machine.py
|
|
|
|
|
|
### 4. 模具 (Module)
|
|
|
|
|
|
**定义**: 模具是生产翅片的专用工装,决定了产品的规格
|
|
|
|
|
|
**关键属性**: 模具编号、模具类型(整体模具/分体模具)、适用的翅片类型、波距规格
|
|
|
|
|
|
**业务规则**:
|
|
|
- 模具与翅片通过翅片类型和波距精确匹配
|
|
|
- 整体模具优先级高于分体模具
|
|
|
- 模具在使用期间不能被其他设备占用
|
|
|
|
|
|
### 5. 调模工 (ModuleChanger)
|
|
|
|
|
|
**定义**: 调模工负责执行换模和调模操作
|
|
|
|
|
|
**关键属性**: 调模工编号、姓名、班次信息、工作时间
|
|
|
|
|
|
**业务规则**:
|
|
|
- 分为白班和夜班两种班次
|
|
|
- 每个调模工在排产周期内有多个班次
|
|
|
- 支持跨天夜班处理(如21:00-次日05:30)
|
|
|
|
|
|
### 6. 生产计划 (Plan)
|
|
|
|
|
|
**定义**: 生产计划将翅片任务分配到具体设备上执行
|
|
|
|
|
|
**关键属性**: 工单、翅片、设备、模具、排产开始/结束时间、休息时间、调模工、调模任务
|
|
|
|
|
|
**业务规则**:
|
|
|
- 时间计算自动跳过休息时间
|
|
|
- 支持关联调模任务
|
|
|
- 计划按时间顺序排列
|
|
|
- 同一设备上的计划时间不能重叠
|
|
|
|
|
|
### 7. 调模任务 (ModuleChangeMission)
|
|
|
|
|
|
**定义**: 调模任务是调模工执行的具体操作
|
|
|
|
|
|
**关键属性**: 调模类型(fix/change)、调模时间、开始/结束时间、目标设备、目标计划、新旧模具
|
|
|
|
|
|
**业务规则**:
|
|
|
- fix调模约20分钟,change换模约120分钟
|
|
|
- 调模时间会根据工时系数调整(默认0.6)
|
|
|
- 自动处理时间冲突和后续任务调整
|
|
|
- 调模任务必须在调模工的工作时间内
|
|
|
|
|
|
## 业务约束规则
|
|
|
|
|
|
### 设备约束
|
|
|
|
|
|
**硬约束**:
|
|
|
1. 冲压类型匹配:设备类型必须与翅片冲压类型完全匹配
|
|
|
2. 翅片长度限制:翅片长度不能超过设备的最大加工长度
|
|
|
3. 翅片类型限制:如果设备配置了允许的翅片类型,翅片类型必须在列表中
|
|
|
4. 翅片高度限制:如果设备配置了允许的翅片高度,翅片高度必须在列表中
|
|
|
5. 波距范围限制:翅片波距必须在设备的加工范围内(min_fin_pitch <= pitch <= max_fin_pitch)
|
|
|
|
|
|
**软约束**:
|
|
|
- 设备专业化优先:在多个设备都兼容的情况下,优先选择专业化设备
|
|
|
|
|
|
参考文档:
|
|
|
- @file:PunchSchedule/docs/04-约束规则说明.md
|
|
|
|
|
|
### 模具约束
|
|
|
|
|
|
**硬约束**:
|
|
|
1. 翅片类型匹配:模具的翅片类型必须与任务要求完全匹配
|
|
|
2. 波距精确匹配:模具的波距必须与翅片要求精确匹配
|
|
|
3. 模具可用性:模具在使用时间段内不被其他任务占用
|
|
|
|
|
|
**软约束**:
|
|
|
- 整体模具优先:在多个模具都匹配的情况下,优先选择整体模具
|
|
|
|
|
|
### 时间约束
|
|
|
|
|
|
**硬约束**:
|
|
|
1. 排产时间窗口:所有任务必须在排产时间范围内
|
|
|
2. 休息时间跳过:任务执行时间自动跳过所有休息时间段
|
|
|
3. 时间顺序约束:同一设备上前一任务结束时间 <= 后一任务开始时间
|
|
|
4. 调模时间约束:调模任务必须在调模工的工作时间内
|
|
|
|
|
|
**软约束**:
|
|
|
- 计划开始时间优先:优先安排计划开始时间较早的任务
|
|
|
|
|
|
### 人员约束
|
|
|
|
|
|
**硬约束**:
|
|
|
1. 班次时间限制:调模工只能在其班次时间内工作
|
|
|
2. 同时性约束:一个调模工同一时间只能执行一个任务
|
|
|
|
|
|
**软约束**:
|
|
|
- 负载均衡:尽可能平均分配调模工的工作量
|
|
|
|
|
|
## 排产算法
|
|
|
|
|
|
系统采用四步递进式算法:
|
|
|
|
|
|
1. **步骤0**: 初始化设备状态(处理排产开始时设备上正在进行的任务,建立初始状态)
|
|
|
2. **步骤1**: 贪心填充相同规格任务(为每台设备连续填充与最后任务相同规格的翅片任务,最小化换模次数)
|
|
|
3. **步骤2**: 调模排产(寻找可以通过调模继续生产的任务,在不换模具的情况下扩大排产范围)
|
|
|
4. **步骤3**: 换模排产(为无法通过调模解决的任务寻找新模具,实现更大范围的排产)
|
|
|
|
|
|
算法特点:
|
|
|
- 递进式设计:从简单到复杂,逐步扩大排产范围
|
|
|
- 贪心优化:每个步骤都追求局部最优
|
|
|
- 资源协调:统筹考虑设备、模具、人员资源
|
|
|
- 时间优化:最小化换模时间,最大化生产时间
|
|
|
|
|
|
参考文档:
|
|
|
- @file:PunchSchedule/docs/03-排产算法详解.md
|
|
|
- @file:PunchSchedule/calc.py
|
|
|
|
|
|
## 业务逻辑实现注意事项
|
|
|
|
|
|
1. **事务管理**: 排产计算应在事务中执行,失败时回滚
|
|
|
2. **性能优化**: 大量数据时使用批量查询,避免N+1问题
|
|
|
3. **缓存策略**: 设备兼容性检查结果可以缓存
|
|
|
4. **并发控制**: 排产计算时使用锁机制,避免并发修改
|
|
|
5. **错误处理**: 详细的错误信息,便于诊断问题
|
|
|
6. **日志记录**: 排产过程的关键步骤都要记录日志
|
|
|
7. **数据验证**: 输入数据必须经过完整验证
|
|
|
8. **时间处理**: 统一使用 datetime 对象,注意时区
|
|
|
|
|
|
## 开发优先级建议
|
|
|
|
|
|
1. **第一阶段**: 基础数据模型和CRUD接口(设备、模具、调模工、工单、翅片)
|
|
|
2. **第二阶段**: 约束验证逻辑实现
|
|
|
3. **第三阶段**: 排产算法核心实现(步骤0-3)
|
|
|
4. **第四阶段**: 计划调整和优化功能
|
|
|
5. **第五阶段**: 看板和报表接口
|