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