You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

192 lines
7.0 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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. **第五阶段**: 看板和报表接口