1. 创建工单
- 选择产品 → 自动加载产品默认工艺路线(若有)
- 填写数量、需求日期
- 保存后生成工单BOM(从产品BOM自动带入)
2. 确认工单
- 可选择/修改工艺路线
- 确认后工单状态变为「已确认」
- 工单可开始排产
3. 一键排产
- 点击「一键排产」→ 弹窗选择工艺路线 → 预览任务列表 → 确认生成
- 自动按工艺路线工序列表生成任务
- 自动分配工作站(按工艺路线工序配置)
- 自动创建工单工序记录
1. 从工单中心报工
- 点击工单 → 展开工序进度 → 选择工序 → 查看任务列表
- 点击任务行的「报工」按钮 → 弹出报工表单
- 表单自动带入:任务编码、工作站、计划数量、已报工数量
2. 从任务列表报工
- 选中任务 → 点击「报工」→ 弹出报工表单
- 数据同上自动带入
3. 报工提交后
- 任务状态自动流转(草稿 → 生产中 → 已完成)
- 工单进度自动更新(关键工序报工累加工单已生产数量)
- 工单可自动完成(若已生产 >= 计划)
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /mes/pro-work-order/create | 创建工单 |
| PUT | /mes/pro-work-order/update | 更新工单 |
| POST | /mes/pro-work-order/confirm | 确认工单 |
| GET | /mes/pro-work-order/get | 获取工单详情 |
| GET | /mes/pro-work-order/page | 分页查询工单 |
| GET | /mes/pro-work-order/progress/{id} | 新增:获取工单进度详情 |
| POST | /mes/pro-work-order/check-auto-finish/{id} | 新增:检查并自动完成工单 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /mes/pro-task/create | 创建任务 |
| PUT | /mes/pro-task/update | 更新任务 |
| DELETE | /mes/pro-task/delete | 删除任务 |
| GET | /mes/pro-task/page | 分页查询任务 |
| POST | /mes/pro-task/auto-generate | 新增:一键排产 |
| POST | /mes/pro-task/auto-generate/preview | 新增:一键排产预览 |
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /mes/pro-feedback/create | 创建报工 |
| PUT | /mes/pro-feedback/update | 更新报工 |
| POST | /mes/pro-feedback/submit | 提交报工 |
| POST | /mes/pro-feedback/approve | 审批报工 |
| POST | /mes/pro-feedback/batch-create | 新增:批量报工 |
| POST | /mes/pro-feedback/quick-create | 新增:快速报工(保存并提交) |
GET /mes/pro-work-order/progress/{id}
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| workOrderId | Long | 工单ID |
| workOrderCode | String | 工单编码 |
| quantity | Decimal | 生产数量 |
| quantityScheduled | Decimal | 已排产数量 |
| quantityProduced | Decimal | 已生产数量 |
| progressPercent | Decimal | 总进度百分比 |
| processList | Array | 工序进度列表 |
| processList[].processId | Long | 工序ID |
| processList[].processCode | String | 工序编码 |
| processList[].processName | String | 工序名称 |
| processList[].keyFlag | Boolean | 是否关键工序 |
| processList[].plannedQuantity | Decimal | 计划数量(关键工序) |
| processList[].producedQuantity | Decimal | 已生产数量 |
| processList[].progressPercent | Decimal | 进度百分比 |
| processList[].status | Integer | 工序状态(0=未开始, 1=进行中, 2=已完成) |
| processList[].taskList | Array | 任务列表 |
| taskList[].taskId | Long | 任务ID |
| taskList[].taskCode | String | 任务编码 |
| taskList[].workstationName | String | 工作站名称 |
| taskList[].quantity | Decimal | 排产数量 |
| taskList[].producedQuantity | Decimal | 已生产数量 |
| taskList[].progressPercent | Decimal | 进度百分比 |
| taskList[].status | Integer | 任务状态 |
响应示例:
{
"code": 0,
"data": {
"workOrderId": 1001,
"workOrderCode": "WO202401150001",
"quantity": 100,
"quantityScheduled": 100,
"quantityProduced": 80,
"progressPercent": 80,
"processList": [
{
"processId": 1,
"processCode": "P001",
"processName": "下料",
"keyFlag": false,
"plannedQuantity": null,
"producedQuantity": 100,
"progressPercent": 100,
"status": 2,
"taskList": [
{
"taskId": 101,
"taskCode": "T202401150001",
"workstationName": "下料区-A01",
"quantity": 100,
"producedQuantity": 100,
"progressPercent": 100,
"status": 3
}
]
},
{
"processId": 2,
"processCode": "P002",
"processName": "机加工",
"keyFlag": true,
"plannedQuantity": 100,
"producedQuantity": 80,
"progressPercent": 80,
"status": 1,
"taskList": [
{
"taskId": 102,
"taskCode": "T202401150002",
"workstationName": "CNC-01",
"quantity": 60,
"producedQuantity": 60,
"progressPercent": 100,
"status": 3
},
{
"taskId": 103,
"taskCode": "T202401150003",
"workstationName": "CNC-02",
"quantity": 40,
"producedQuantity": 20,
"progressPercent": 50,
"status": 1
}
]
}
]
}
}
POST /mes/pro-task/auto-generate/preview
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| workOrderId | Long | 是 | 工单ID |
| routeId | Long | 否 | 工艺路线ID(不传则使用工单关联的工艺路线) |
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| workOrderId | Long | 工单ID |
| routeId | Long | 工艺路线ID |
| routeName | String | 工艺路线名称 |
| taskList | Array | 预生成任务列表 |
| taskList[].processId | Long | 工序ID |
| taskList[].processName | String | 工序名称 |
| taskList[].sort | Integer | 工序顺序 |
| taskList[].suggestWorkstationId | Long | 建议工作站ID |
| taskList[].suggestWorkstationName | String | 建议工作站名称 |
| taskList[].quantity | Decimal | 排产数量 |
| taskList[].keyFlag | Boolean | 是否关键工序 |
响应示例:
{
"code": 0,
"data": {
"workOrderId": 1001,
"routeId": 101,
"routeName": "产品A-标准工艺",
"taskList": [
{
"processId": 1,
"processName": "下料",
"sort": 1,
"suggestWorkstationId": 201,
"suggestWorkstationName": "下料区-A01",
"quantity": 100,
"keyFlag": false
},
{
"processId": 2,
"processName": "机加工",
"sort": 2,
"suggestWorkstationId": 202,
"suggestWorkstationName": "CNC-01",
"quantity": 100,
"keyFlag": true
}
]
}
}
POST /mes/pro-task/auto-generate
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| workOrderId | Long | 是 | 工单ID |
| routeId | Long | 否 | 工艺路线ID |
| autoAssignWorkstation | Boolean | 否 | 是否自动分配工作站(默认true) |
| autoCalculateTime | Boolean | 否 | 是否自动计算生产时间(默认true) |
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| taskIds | Array<Long> | 生成的任务ID列表 |
响应示例:
{
"code": 0,
"data": {
"taskIds": [101, 102, 103, 104, 105]
}
}
POST /mes/pro-feedback/quick-create
说明:创建报工单并直接提交(跳过草稿状态),适用于快速报工场景
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | Long | 是 | 任务ID |
| feedbackQuantity | Decimal | 是 | 本次报工数量 |
| qualifiedQuantity | Decimal | 否 | 合格品数量(非质检工序必填) |
| unqualifiedQuantity | Decimal | 否 | 不良品数量 |
| remark | String | 否 | 备注 |
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| feedbackId | Long | 报工单ID |
| taskStatus | Integer | 任务状态(报工后可能变化) |
| workOrderStatus | Integer | 工单状态(可能自动完成) |
响应示例:
{
"code": 0,
"data": {
"feedbackId": 201,
"taskStatus": 1,
"workOrderStatus": 1
}
}
POST /mes/pro-feedback/batch-create
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskIds | Array<Long> | 是 | 任务ID列表 |
| feedbackQuantity | Decimal | 是 | 本次报工数量(应用到所有任务) |
| qualifiedQuantity | Decimal | 否 | 合格品数量(非质检工序必填) |
| unqualifiedQuantity | Decimal | 否 | 不良品数量 |
| remark | String | 否 | 备注 |
响应字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| successCount | Integer | 成功数量 |
| failCount | Integer | 失败数量 |
| results | Array | 详细结果列表 |
| results[].taskId | Long | 任务ID |
| results[].success | Boolean | 是否成功 |
| results[].feedbackId | Long | 报工单ID(成功时有值) |
| results[].errorMsg | String | 错误信息(失败时有值) |
响应示例:
{
"code": 0,
"data": {
"successCount": 2,
"failCount": 1,
"results": [
{ "taskId": 101, "success": true, "feedbackId": 201 },
{ "taskId": 102, "success": true, "feedbackId": 202 },
{ "taskId": 103, "success": false, "errorMsg": "任务已完成,不能报工" }
]
}
}
| 字段 | 展示位置 | 说明 |
|---|---|---|
| 工单编码 | 列表、详情 | 可点击打开详情 |
| 产品编码/名称 | 列表、详情 | - |
| 生产数量 | 列表、详情 | - |
| 已排产数量 | 列表 | 进度条左侧显示 |
| 已生产数量 | 列表 | 进度条右侧显示 |
| 进度 | 列表 | 进度条展示百分比 |
| 状态 | 列表、详情 | 草稿/已确认/生产中/已完成/已取消 |
| 需求日期 | 列表、详情 | - |
| 客户名称 | 列表、详情 | - |
| 操作 | 列表 | 根据状态显示不同按钮 |
| 字段 | 展示位置 | 说明 |
|---|---|---|
| 工序名称 | 进度条节点 | 显示在节点上 |
| 进度百分比 | 进度条节点 | 显示在节点下方 |
| 状态标识 | 进度条节点 | 不同颜色区分:未开始(灰)/进行中(蓝)/已完成(绿) |
| 字段 | 展示位置 | 说明 |
|---|---|---|
| 任务编码 | 列表 | 可点击打开详情 |
| 工序名称 | 列表 | - |
| 工作站名称 | 列表 | - |
| 排产数量 | 列表 | - |
| 已生产数量 | 列表 | - |
| 进度 | 列表 | 进度条 |
| 状态 | 列表 | 草稿/生产中/部分完成/已完成/已取消 |
| 操作 | 列表 | 报工/编辑/删除 |
| 工单状态 | 可执行操作 |
|---|---|
| 草稿 | 编辑、删除、确认 |
| 已确认 | 排产、取消 |
| 生产中 | 报工、完成(手动) |
| 已完成 | 查看详情 |
| 已取消 | 查看详情 |
| 任务状态 | 可执行操作 |
|---|---|
| 草稿 | 编辑、删除、报工 |
| 生产中 | 报工 |
| 部分完成 | 报工 |
| 已完成 | 查看详情 |
| 已取消 | 查看详情 |
| 进度类型 | 计算方式 |
|---|---|
| 任务进度 | 已生产数量 / 排产数量 × 100% |
| 工序进度 | 工序下所有任务的已生产数量之和 / 计划数量 × 100% |
| 工单进度 | 已生产数量 / 生产数量 × 100%(仅关键工序计入) |
| 条件 | 说明 |
|---|---|
| 任务自动完成 | 已生产数量 >= 排产数量 |
| 工单自动完成 | 已生产数量 >= 生产数量 且 autoFinishFlag = true |
// 使用示例
<ProcessProgressBar
:process-list="progressData.processList"
:active-process-id="activeProcessId"
@process-click="handleProcessClick"
/>
// 使用示例
<WorkOrderCard
:work-order="row"
:show-actions="true"
@detail="handleDetail"
@schedule="handleSchedule"
@report="handleReport"
/>
// 使用示例
<QuickFeedbackForm
:task-id="selectedTask.id"
:visible="showQuickFeedback"
@success="handleFeedbackSuccess"
@cancel="showQuickFeedback = false"
/>