WORK_ORDER_MATERIAL_IMPLEMENTATION.md 6.7 KB

工单物料明细功能实现说明

功能概述

工单物料明细模块提供了对工单物料的完整增删改查功能,支持多表关联查询,展示物料的详细信息。

已实现的功能

后端接口

1. 数据模型 (DO)

  • 文件: WorkOrderMaterialDO.java
  • 表名: WorkOrdDetail
  • 特点:
    • 不使用多租户功能(添加了 @InterceptorIgnore 注解)
    • 不使用逻辑删除(使用 IsActive 字段标记状态)
    • 所有字段使用 @TableField 注解指定实际数据库字段名(大写开头)
    • 包含关联查询的虚拟字段(descr, opDescr, batch等)

2. Mapper接口

  • 文件: WorkOrderMaterialMapper.java, WorkOrderMaterialMapper.xml
  • 功能:
    • selectPageWithJoin: 分页查询(多表关联)
    • selectListWithJoin: 列表查询(多表关联)
  • 关联表:
    • WorkOrdMaster: 工单主表(获取Batch, QtyOrded)
    • ItemMaster: 物料主表(获取Descr物料名称)
    • RoutingOpDetail: 工序明细表(获取工序描述)
    • NbrDetail: 数量明细表(获取QtyRec收货数量)

3. Service服务

  • 文件: WorkOrderMaterialService.java, WorkOrderMaterialServiceImpl.java
  • 方法:
    • createWorkOrderMaterial: 创建物料明细
    • updateWorkOrderMaterial: 更新物料明细
    • deleteWorkOrderMaterial: 删除物料明细(逻辑删除,设置IsActive=0)
    • getWorkOrderMaterial: 获取单条记录
    • getWorkOrderMaterialPage: 分页查询

4. Controller控制器

  • 文件: WorkOrderMaterialController.java
  • 接口:
    • POST /makeplan/work-order-material/create: 创建
    • PUT /makeplan/work-order-material/update: 更新
    • DELETE /makeplan/work-order-material/delete: 删除
    • GET /makeplan/work-order-material/get: 获取详情
    • GET /makeplan/work-order-material/page: 分页查询

5. VO类

  • 文件:
    • WorkOrderMaterialPageReqVO.java: 分页查询请求
    • WorkOrderMaterialRespVO.java: 响应VO
    • WorkOrderMaterialSaveReqVO.java: 保存请求VO

6. Convert转换类

  • 文件: WorkOrderMaterialConvert.java
  • 功能: DO与VO之间的对象转换

前端实现

1. API接口

  • 文件: src/api/makeplan/workorderMaterial.ts
  • 方法:
    • getWorkOrderMaterialPage: 分页查询
    • getWorkOrderMaterial: 获取详情
    • createWorkOrderMaterial: 创建
    • updateWorkOrderMaterial: 更新
    • deleteWorkOrderMaterial: 删除

2. 列表页面

  • 文件: src/views/jiaohuo/WorkOrderMaterial.vue
  • 功能:
    • 搜索表单(工单编号、物料编号、库位)
    • 数据列表展示
    • 分页功能
    • 添加、编辑、删除、查看操作
    • 根据IsActive状态显示不同背景色

3. 表单组件

  • 文件: src/views/jiaohuo/components/WorkOrderMaterialForm.vue
  • 功能:
    • 支持添加、编辑、查看三种模式
    • 表单验证
    • 字段大小写兼容处理

SQL语法转换说明

原始SQL Server语法已转换为MySQL语法:

SQL Server MySQL
ISNULL(field, default) IFNULL(field, default)
cast(field as nvarchar(10)) + ' ' + field2 CONCAT(CAST(field AS CHAR), ' ', field2)
wd.[Domain] wd.Domain
upper(Type)='SM' UPPER(nd.Type)='SM'
CAST(field as int) CAST(field AS SIGNED)

查询逻辑说明

多表关联查询

FROM WorkOrdDetail wd
INNER JOIN WorkOrdMaster wm ON wd.Domain = wm.Domain AND wd.WorkOrd = wm.WorkOrd
INNER JOIN ItemMaster im ON wd.Domain = im.Domain AND wd.ItemNum = im.ItemNum
LEFT JOIN RoutingOpDetail rd ON wd.Domain = rd.Domain AND wd.ItemNum = rd.RoutingCode AND wd.Op = rd.Op
LEFT JOIN NbrDetail nd ON wd.WorkOrd = nd.WorkOrd 
    AND nd.ItemNum = wd.ItemNum 
    AND nd.IsActive = wd.IsActive 
    AND wd.Domain = nd.Domain 
    AND UPPER(nd.Type) = 'SM'

过滤条件

  • 工单状态: UPPER(wm.Status) IN ('', 'P', 'R', 'W', 'S')
  • 工单类型: UPPER(IFNULL(wm.Typed, '')) IN ('', 'RW', 'TEST', 'TCN')

计算字段

  • OpDescr: 工序号 + 工序描述
  • background: 根据IsActive状态返回背景色
  • QtyRec: 收货数量(默认0)

测试步骤

1. 启动后端服务

cd yudao-server
mvn spring-boot:run -Dspring-boot.run.profiles=local

2. 启动前端服务

cd yudao-ui/yudao-ui-admin-vue3
pnpm dev

3. 访问页面

  • 登录系统
  • 导航到工单物料明细页面
  • 测试查询、添加、编辑、删除功能

4. API测试

访问 Swagger 文档: http://localhost:48080/doc.html

  • 找到 "工单物料明细" 接口组
  • 测试各个接口

注意事项

  1. 数据库字段命名: 表中字段使用大写开头(如 WorkOrd, ItemNum),不是下划线命名
  2. 多租户: 该表不使用多租户功能,已添加 @InterceptorIgnore 注解
  3. 逻辑删除: 不使用框架的逻辑删除,使用 IsActive 字段(1-有效,0-已删除)
  4. 字段映射: DO类中所有字段都添加了 @TableField 注解指定实际字段名
  5. 虚拟字段: 关联查询的字段(descr, opDescr等)标记为 exist = false

错误码

  • 1_003_002_001: 工单物料明细不存在

相关文件清单

后端文件

  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/dal/dataobject/workorder/WorkOrderMaterialDO.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/dal/mysql/workorder/WorkOrderMaterialMapper.java
  • yudao-module-makeplan/src/main/resources/mapper/workorder/WorkOrderMaterialMapper.xml
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/service/WorkOrderMaterialService.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/service/WorkOrderMaterialServiceImpl.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/controller/admin/workorder/WorkOrderMaterialController.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/controller/admin/workorder/vo/WorkOrderMaterialPageReqVO.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/controller/admin/workorder/vo/WorkOrderMaterialRespVO.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/controller/admin/workorder/vo/WorkOrderMaterialSaveReqVO.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/convert/WorkOrderMaterialConvert.java
  • yudao-module-makeplan/src/main/java/cn/iocoder/yudao/module/makeplan/enums/ErrorCodeConstants.java

前端文件

  • yudao-ui/yudao-ui-admin-vue3/src/api/makeplan/workorderMaterial.ts
  • yudao-ui/yudao-ui-admin-vue3/src/views/jiaohuo/WorkOrderMaterial.vue
  • yudao-ui/yudao-ui-admin-vue3/src/views/jiaohuo/components/WorkOrderMaterialForm.vue