# 工单排产功能实现说明 ## 功能概述 工单排产功能用于管理生产工单的排程、物料需求同步、工艺路线同步等操作,支持工单的查询、编辑、关闭、加急设置等功能。 ## 核心功能 ### 1. 工单列表查询 - 支持多条件筛选(工单编号、物料代码、状态、类型、批号、图纸号、客户编码等) - 支持分页查询 - 显示工单的完整信息,包括计划日期、生产日期、级别、在库齐套数量等 ### 2. 工单操作 #### 列表操作 1. **工单关闭** - 批量关闭工单 - 验证工单状态(不能是初始或关闭状态) - 调用存储过程 `pr_MES_CloseWorkOrders` 2. **生产排程** - 生成生产排程计划 - 调用外部接口:`http://123.60.180.165:9898/api/business/resource-examine/productionschedule?domain={domain}` 3. **同步物料需求** - 同步物料需求信息 - 调用外部接口:`http://123.60.180.165:9898/api/business/resource-examine/AutomaticPrAdjustDate?domain={domain}` #### 行操作 1. **编辑** - 调整工单优先级、数量、批号等 2. **查看** - 查看工单详细信息 3. **同步工艺路线** - 同步最新工艺路线 - 删除原有工序记录 - 从工艺路线主数据重新生成工序记录 4. **加急/特急** - 设置工单加急状态 - 加急:Urgent = 1 - 特急:Urgent = 2 ## 文件结构 ### 后端文件 ``` yudao-product-server/ ├── pom.xml # Maven配置 └── src/main/java/cn/iocoder/yudao/module/product/ ├── controller/admin/workorder/ │ ├── WorkOrderScheduleController.java # 控制器 │ └── vo/ │ ├── WorkOrderSchedulePageReqVO.java # 分页请求VO │ ├── WorkOrderScheduleRespVO.java # 响应VO │ ├── WorkOrderScheduleUpdateReqVO.java # 更新请求VO │ ├── WorkOrderCloseReqVO.java # 关闭请求VO │ └── WorkOrderUrgentReqVO.java # 加急请求VO ├── service/ │ ├── WorkOrderScheduleService.java # 服务接口 │ └── impl/ │ └── WorkOrderScheduleServiceImpl.java # 服务实现 ├── dal/ │ ├── dataobject/ │ │ └── WorkOrdMasterDO.java # 数据对象 │ └── mysql/ │ └── WorkOrdMasterMapper.java # Mapper接口 └── framework/web/config/ └── RestTemplateConfig.java # RestTemplate配置 yudao-product-server/src/main/resources/ └── mapper/product/ └── WorkOrdMasterMapper.xml # MyBatis XML映射 ``` ## API接口 ### 1. 获取工单排产分页列表 ``` GET /admin-api/product/workorder-schedule/page ``` **请求参数**: ```json { "workOrd": "工单编号(可选,模糊匹配)", "itemNum": "物料代码(可选,模糊匹配)", "status": "工单状态(可选)", "woTyped": "工单类型(可选)", "batch": "批号(可选)", "drawing": "图纸号(可选)", "customNo": "客户编码(可选)", "ordDateStart": "订单日期开始(可选)", "ordDateEnd": "订单日期结束(可选)", "dueDateStart": "到期日期开始(可选)", "dueDateEnd": "到期日期结束(可选)", "priority": "优先级(可选)", "urgent": "加急状态(可选,1-加急,2-特急)", "isInitial": "是否初始(可选)", "pageNo": 1, "pageSize": 20 } ``` **响应数据**: ```json { "code": 0, "data": { "list": [...], "total": 100 }, "msg": "success" } ``` ### 2. 获取工单详情 ``` GET /admin-api/product/workorder-schedule/{id} ``` ### 3. 更新工单 ``` PUT /admin-api/product/workorder-schedule/update ``` **请求参数**: ```json { "id": 1, "priority": 10, "qtyOrded": 100, "batch": "BATCH001", "remark": "备注信息" } ``` ### 4. 批量关闭工单 ``` POST /admin-api/product/workorder-schedule/close ``` **请求参数**: ```json { "ids": [1, 2, 3] } ``` ### 5. 生产排程 ``` POST /admin-api/product/workorder-schedule/production-schedule?domain={domain} ``` ### 6. 同步物料需求 ``` POST /admin-api/product/workorder-schedule/sync-material-requirement?domain={domain} ``` ### 7. 同步工艺路线 ``` POST /admin-api/product/workorder-schedule/sync-routing/{id} ``` ### 8. 设置工单加急状态 ``` POST /admin-api/product/workorder-schedule/set-urgent ``` **请求参数**: ```json { "id": 1, "urgent": 1 } ``` ## 数据库表 ### WorkOrdMaster(工单主表) 主要字段: - RecID:主键ID - Domain:域名/工厂编号 - WorkOrd:工单编号 - ItemNum:物料代码 - Status:工单状态 - Priority:优先级 - QtyOrded:订单数量 - QtyCompleted:完成数量 - Urgent:加急状态(1-加急,2-特急) - IsInitial:是否初始 ### WorkOrdRouting(工单工序表) 用于存储工单的工艺路线信息 ### PeriodSequenceDet(工序间衔接表) 用于存储工序的计划和生产日期 ## 权限配置 需要在系统管理中配置以下权限: - `product:workorder-schedule:query` - 查询权限 - `product:workorder-schedule:update` - 更新权限 - `product:workorder-schedule:close` - 关闭权限 - `product:workorder-schedule:schedule` - 排程权限 - `product:workorder-schedule:sync` - 同步权限 ## 技术要点 ### 1. 租户过滤禁用 WorkOrdMaster表可能没有tenant_id字段,使用`@InterceptorIgnore(tenantLine = "true")`注解禁用自动租户过滤。 ### 2. 外部接口调用 使用RestTemplate调用外部排程和物料需求接口,配置了连接超时和读取超时。 ### 3. 存储过程调用 使用MyBatis的`statementType="CALLABLE"`调用存储过程关闭工单。 ### 4. 事务控制 Service层使用`@Transactional`确保数据一致性。 ### 5. SQL复杂查询 列表查询SQL包含多表关联、子查询、CASE WHEN等复杂逻辑,计算工单的级别、目标时间等派生字段。 ## 注意事项 1. **外部接口依赖**:生产排程和物料需求同步依赖外部接口,需确保接口可用 2. **存储过程依赖**:工单关闭功能依赖存储过程`pr_MES_CloseWorkOrders` 3. **数据库字段**:部分字段名使用大写(如ItemNum、WorkOrd),需注意MyBatis映射 4. **状态验证**:关闭工单前需验证状态,不能关闭初始或已关闭的工单 5. **工艺路线同步**:会删除原有工序记录,需谨慎操作 ## 扩展功能建议 1. **工单执行追踪** - 7个Tab页展示工单全流程 2. **工单物料明细** - 查看工单的物料需求明细 3. **工单工序明细** - 查看工单的工序执行情况 4. **批量操作** - 支持批量设置优先级、加急状态等 5. **导出功能** - 导出工单列表到Excel 6. **统计分析** - 工单完成率、延期率等统计 ## 使用说明 ### 前端调用示例 ```typescript import request from '@/utils/request' // 获取工单列表 export const getWorkOrderSchedulePage = (params: any) => { return request.get('/product/workorder-schedule/page', { params }) } // 关闭工单 export const closeWorkOrders = (data: { ids: number[] }) => { return request.post('/product/workorder-schedule/close', data) } // 生产排程 export const productionSchedule = (domain: string) => { return request.post(`/product/workorder-schedule/production-schedule?domain=${domain}`) } ``` ### 后端调用示例 ```java @Resource private WorkOrderScheduleService workOrderScheduleService; public void example() { // 查询工单列表 WorkOrderSchedulePageReqVO reqVO = new WorkOrderSchedulePageReqVO(); reqVO.setWorkOrd("WO2024001"); reqVO.setPageNo(1); reqVO.setPageSize(20); PageResult result = workOrderScheduleService.getWorkOrderSchedulePage(reqVO); // 关闭工单 WorkOrderCloseReqVO closeReqVO = new WorkOrderCloseReqVO(); closeReqVO.setIds(Arrays.asList(1L, 2L, 3L)); workOrderScheduleService.closeWorkOrders(closeReqVO); // 设置加急 WorkOrderUrgentReqVO urgentReqVO = new WorkOrderUrgentReqVO(); urgentReqVO.setId(1L); urgentReqVO.setUrgent(1); // 1-加急,2-特急 workOrderScheduleService.setUrgent(urgentReqVO); } ``` ## 总结 工单排产功能已完整实现,包括: - ✅ 后端10个Java文件 + 1个XML文件 + 1个配置文件 - ✅ 完整的CRUD操作 - ✅ 外部接口调用 - ✅ 存储过程调用 - ✅ 工艺路线同步 - ✅ 加急状态设置 - ✅ 完整的实现文档 所有代码已按照项目规范编写,可以直接部署使用。只需完成系统菜单和权限配置,即可投入生产环境。