# 工单下达后端开发完成总结 ## 已完成的功能模块 ### 1. Controller层 (WorkOrderController.java) 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/controller/admin/workorder/WorkOrderController.java` 实现的接口: - `GET /jiaohuo/workorder/pool/list` - 获取工单池分页列表 - `GET /jiaohuo/workorder/{id}` - 获取工单详情 - `PUT /jiaohuo/workorder` - 更新工单 - `POST /jiaohuo/workorder/release` - 工单下达 - `GET /jiaohuo/workorder/{id}/check-material` - 物料齐套检查 - `POST /jiaohuo/workorder/generate-material-requirement` - 生成物料需求计划 ### 2. Service层 #### WorkOrderService.java (接口) 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/service/WorkOrderService.java` #### WorkOrderServiceImpl.java (实现) 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/service/impl/WorkOrderServiceImpl.java` 核心功能: - 工单池分页查询(支持多条件筛选) - 工单详情查询 - 工单信息更新 - 工单下达(更新状态为R,记录下达时间) - 物料齐套检查(调用外部接口) - 生成物料需求计划(调用外部接口) - 操作日志记录(使用@LogRecord注解) ### 3. VO类 (Value Object) 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/controller/admin/workorder/vo/` 已创建的VO类: - `WorkOrderPoolPageReqVO.java` - 工单池分页查询请求 - `WorkOrderPoolRespVO.java` - 工单池响应 - `WorkOrderUpdateReqVO.java` - 工单更新请求 - `WorkOrderReleaseReqVO.java` - 工单下达请求 - `MaterialCheckReqVO.java` - 物料齐套检查请求 - `MaterialRequirementReqVO.java` - 物料需求生成请求 ### 4. Mapper层 #### WorkOrdMasterMapper.java 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/dal/mysql/WorkOrdMasterMapper.java` 方法: - `selectWorkOrderPoolPage` - 工单池分页查询 - `selectByWorkOrd` - 根据工单编号查询 - `selectByRecId` - 根据RecID查询 - `updateStatusToRelease` - 更新工单状态为下达 #### WorkOrdMasterMapper.xml 路径: `yudao-order-server/src/main/resources/mapper/order/WorkOrdMasterMapper.xml` SQL实现: - 工单池分页查询(关联ItemMaster、mes_morder、NbrMaster等表) - 支持按工单编号、物料编码、物料名称、开工日期筛选 - 按优先级和开工日期排序 ### 5. DO类 (Data Object) #### WorkOrdMasterDO.java 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/dal/dataobject/WorkOrdMasterDO.java` 映射数据库表:`WorkOrdMaster` 主要字段: - recId - 主键 - domain - 域 - workOrd - 工单编号 - itemNum - 物料编码 - lotSerial - 生产批号 - status - 状态 - ordDate - 开工日期 - dueDate - 完工日期 - qtyOrded - 订单数量 - qtyCompleted - 完成数量 - 等... ### 6. 错误码常量 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/enums/ErrorCodeConstants.java` 已定义的错误码: - `WORK_ORDER_NOT_EXISTS` (120010) - 工单不存在 - `WORK_ORDER_STATUS_ERROR` (120011) - 工单状态不正确,无法下达 - `WORK_ORDER_ALREADY_RELEASED` (120012) - 工单已下达,不能重复下达 ### 7. 日志记录常量 路径: `yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/enums/LogRecordConstants.java` 已添加的日志常量: - `WORK_ORDER_TYPE` - "ORDER 工单" - `WORK_ORDER_UPDATE_SUB_TYPE` - "更新工单" - `WORK_ORDER_UPDATE_SUCCESS` - 更新成功日志模板 - `WORK_ORDER_RELEASE_SUB_TYPE` - "工单下达" - `WORK_ORDER_RELEASE_SUCCESS` - 下达成功日志模板 ### 8. 配置类 #### OrderWebConfiguration.java 路径: `yudao-order-server/src/main/java/cn/iocoder/yudao/module/order/framework/web/config/OrderWebConfiguration.java` 配置内容: - RestTemplate Bean配置(用于调用外部接口) ## 技术特点 ### 1. 多租户支持 - 使用 `@TenantIgnore` 注解忽略租户隔离 - 通过 domain 字段实现多工厂数据隔离 ### 2. 操作日志 - 使用 `@LogRecord` 注解自动记录操作日志 - 支持日志上下文变量和差异对比 ### 3. 权限控制 - 使用 `@PreAuthorize` 注解进行权限校验 - 权限标识:`jiaohuo:workorder:*` ### 4. 外部接口集成 - 物料齐套检查接口:`http://123.60.180.165:9898/api/business/resource-examine/producedayplankittingcheck` - 物料需求计划接口:`http://123.60.180.165:9898/api/business/resource-examine/AutomaticPrAdjustDate` ### 5. 数据库操作 - 使用 MyBatis Plus 进行数据库操作 - 支持复杂的多表关联查询 - 使用 XML 配置复杂 SQL ## API接口文档 ### 1. 获取工单池列表 ``` GET /jiaohuo/workorder/pool/list 参数: - pageNo: 页码 - pageSize: 每页数量 - workOrd: 工单编号(可选) - itemNum: 物料编码(可选) - descr: 物料名称(可选) - ordDate: 开工日期(可选) ``` ### 2. 获取工单详情 ``` GET /jiaohuo/workorder/{id} 参数: - id: 工单ID ``` ### 3. 更新工单 ``` PUT /jiaohuo/workorder Body: { "id": 工单ID, "lotSerial": "生产批号", "ordDate": "开工日期", "status": "状态", "remark": "备注" } ``` ### 4. 工单下达 ``` POST /jiaohuo/workorder/release Body: { "workOrderNo": "工单编号", "lotSerial": "生产批号", "ordDate": "开工日期", "companyId": "公司ID(可选)", "userAccount": "用户账号(可选)" } ``` ### 5. 物料齐套检查 ``` GET /jiaohuo/workorder/{id}/check-material 参数: - id: 工单ID ``` ### 6. 生成物料需求计划 ``` POST /jiaohuo/workorder/generate-material-requirement Body: { "companyId": "公司ID(可选)", "domain": "域(可选)" } ``` ## 数据库表结构 ### WorkOrdMaster 表 主要字段: - RecID (BIGINT) - 主键,自增 - Domain (VARCHAR) - 域/工厂ID - WorkOrd (VARCHAR) - 工单编号 - ItemNum (VARCHAR) - 物料编码 - ItemName (VARCHAR) - 物料名称 - Drawing (VARCHAR) - 图号 - Batch (VARCHAR) - 批次 - LotSerial (VARCHAR) - 生产批号 - Status (VARCHAR) - 状态(p=计划,R=下达) - Typed (VARCHAR) - 类型 - WoTyped (VARCHAR) - 工单类型 - Priority (INT) - 优先级 - OrdDate (DATETIME) - 开工日期 - DueDate (DATETIME) - 完工日期 - ReleaseDate (DATETIME) - 下达日期 - QtyOrded (DECIMAL) - 订单数量 - QtyCompleted (DECIMAL) - 完成数量 - QtyReject (DECIMAL) - 拒收数量 - Project (VARCHAR) - 项目 - Site (VARCHAR) - 站点 - Location (VARCHAR) - 位置 - ProdLine (VARCHAR) - 生产线 - Department (VARCHAR) - 部门 - Remark (VARCHAR) - 备注 - CreateUser (VARCHAR) - 创建人 - UpdateUser (VARCHAR) - 更新人 - CreateTime (DATETIME) - 创建时间 - UpdateTime (DATETIME) - 更新时间 - IsActive (BIT) - 是否激活 - IsConfirm (BIT) - 是否确认 - CreateGLforLaborVar (BIT) - 是否创建人工差异GL - lbrvar (DECIMAL) - 人工差异 ## 前后端接口对接 前端API文件:`yudao-ui/yudao-ui-admin-vue3/src/api/jiaohuo/workorder.ts` 所有前端API调用都已在后端实现对应的接口,接口路径和参数完全匹配。 ## 待优化项 1. **物料齐套检查接口优化** - 当前实现使用默认参数,建议根据工单ID获取相关信息填充请求参数 2. **外部接口配置化** - 建议将外部接口URL配置到配置文件中,便于不同环境切换 3. **异常处理增强** - 可以添加更详细的异常处理和错误提示 4. **单元测试** - 建议添加单元测试覆盖核心业务逻辑 5. **接口文档** - 可以通过Swagger/Knife4j查看完整的API文档 ## 部署说明 1. 确保数据库中存在 `WorkOrdMaster` 表及相关关联表 2. 配置 `order.default.domain` 参数(默认值:8010) 3. 确保外部接口可访问 4. 重启应用服务 ## 测试建议 1. 测试工单池列表查询(各种筛选条件) 2. 测试工单详情查询 3. 测试工单更新功能 4. 测试工单下达流程 5. 测试物料齐套检查 6. 测试物料需求计划生成 7. 验证操作日志记录 8. 验证权限控制 ## 总结 工单下达后端功能已完整实现,包括: - ✅ 完整的CRUD操作 - ✅ 工单下达核心业务逻辑 - ✅ 外部接口集成 - ✅ 操作日志记录 - ✅ 权限控制 - ✅ 多租户支持 - ✅ 前后端接口对接 所有接口已经过基本验证,可以进行前后端联调测试。