WORKORDER_SCHEDULE_IMPLEMENTATION.md 8.8 KB

工单排产功能实现说明

功能概述

工单排产功能用于管理生产工单的排程、物料需求同步、工艺路线同步等操作,支持工单的查询、编辑、关闭、加急设置等功能。

核心功能

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

请求参数

{
  "workOrd": "工单编号(可选,模糊匹配)",
  "itemNum": "物料代码(可选,模糊匹配)",
  "status": "工单状态(可选)",
  "woTyped": "工单类型(可选)",
  "batch": "批号(可选)",
  "drawing": "图纸号(可选)",
  "customNo": "客户编码(可选)",
  "ordDateStart": "订单日期开始(可选)",
  "ordDateEnd": "订单日期结束(可选)",
  "dueDateStart": "到期日期开始(可选)",
  "dueDateEnd": "到期日期结束(可选)",
  "priority": "优先级(可选)",
  "urgent": "加急状态(可选,1-加急,2-特急)",
  "isInitial": "是否初始(可选)",
  "pageNo": 1,
  "pageSize": 20
}

响应数据

{
  "code": 0,
  "data": {
    "list": [...],
    "total": 100
  },
  "msg": "success"
}

2. 获取工单详情

GET /admin-api/product/workorder-schedule/{id}

3. 更新工单

PUT /admin-api/product/workorder-schedule/update

请求参数

{
  "id": 1,
  "priority": 10,
  "qtyOrded": 100,
  "batch": "BATCH001",
  "remark": "备注信息"
}

4. 批量关闭工单

POST /admin-api/product/workorder-schedule/close

请求参数

{
  "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

请求参数

{
  "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. 统计分析 - 工单完成率、延期率等统计

使用说明

前端调用示例

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}`)
}

后端调用示例

@Resource
private WorkOrderScheduleService workOrderScheduleService;

public void example() {
    // 查询工单列表
    WorkOrderSchedulePageReqVO reqVO = new WorkOrderSchedulePageReqVO();
    reqVO.setWorkOrd("WO2024001");
    reqVO.setPageNo(1);
    reqVO.setPageSize(20);
    PageResult<WorkOrderScheduleRespVO> 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操作
  • ✅ 外部接口调用
  • ✅ 存储过程调用
  • ✅ 工艺路线同步
  • ✅ 加急状态设置
  • ✅ 完整的实现文档

所有代码已按照项目规范编写,可以直接部署使用。只需完成系统菜单和权限配置,即可投入生产环境。