# 工序「是否倒冲」字段
## 背景
报工审批时,倒冲工序按 BOM 自动扣料(BOM 用量 × 报工数量,从线边库 FIFO 扣减);非倒冲工序不自动扣料,物料走手工领料/投料。
新增字段挂在**工艺路线工序**(`mes_pro_route_process`,与「是否关键工序」「是否质检工序」同级),不是工序主表。
## 涉及页面
- 工艺路线 - 工序列表/表单(维护路线下的工序配置,新增「是否倒冲」开关)
- 生产报工 - 报工审批(倒冲工序未配 BOM 时给出错误提示)
## 数据库
```sql
ALTER TABLE mes_pro_route_process
ADD COLUMN backflush_flag bit(1) DEFAULT b'1' COMMENT '是否倒冲' AFTER check_flag;
```
- 默认 `b'1'`(倒冲),保留现有「配了 BOM 就扣料」的行为。
- 历史数据回填为倒冲=true。
## API
工艺路线工序接口(`/mes/pro/route-process`)的 **create / update / get / list** 请求与响应均新增 `backflushFlag` 字段,其余不变。
**新增字段:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| backflushFlag | Boolean | 否(默认 true)| 是否倒冲。true=报工时按 BOM 自动扣料;false=不自动扣料 |
**请求示例(create/update):**
```json
{
"routeId": 1,
"processId": 10,
"sort": 1,
"keyFlag": false,
"checkFlag": false,
"backflushFlag": true
}
```
**响应示例(get/list):**
```json
{
"id": 1,
"routeId": 1,
"processId": 10,
"keyFlag": false,
"checkFlag": false,
"backflushFlag": true
}
```
报工审批接口 `PUT /mes/pro/feedback/approve` 行为变更(无入参变化):
| 工序 backflushFlag | BOM 配置 | 审批结果 |
|--------------------|----------|----------|
| true(默认)| 有 | 正常扣料入库 |
| true | 无 | 报错:`当前工序为倒冲工序,但未配置BOM消耗,无法报工`(错误码 1040506013)|
| false | 有 | 不扣料(BOM 配置存在但不使用)|
| false | 无 | 不扣料 |
## 前端修改点
### 1. 工艺路线 - 工序表单加「是否倒冲」开关
在「是否关键工序」「是否质检工序」之后加一个 `el-switch`:
```html
开启后报工时按BOM自动扣料;关闭后不自动扣料,走手工领料
```
### 2. data 数据
```js
data() {
return {
form: {
// ...原有字段
keyFlag: false,
checkFlag: false,
backflushFlag: true, // 默认倒冲
},
}
}
```
### 3. 工序列表表格展示(可选)
```html
{{ scope.row.backflushFlag ? '倒冲' : '不倒冲' }}
```
### 4. 表单重置/回显
```js
resetForm() {
this.form = {
// ...原有字段
keyFlag: false,
checkFlag: false,
backflushFlag: true,
}
}
handleEdit(row) {
this.form = { ...row }
// backflushFlag 随 row 回显
}
```
## 注意事项
- 字段挂在**工艺路线工序**(每条路线下的工序逐条配置),不是工序主表;与 `keyFlag`/`checkFlag` 同级,前端在路线-工序配置页维护。
- 默认值为「倒冲=true」,与历史行为一致。只有显式关闭的工序才会跳过自动扣料。
- 倒冲工序必须在「工艺路线产品 BOM」(`/mes/pro/route-product-bom`)里配好该路线+工序+产品的 BOM 消耗,否则报工审批会报错。
- 非倒冲工序的物料请通过任务投料(`/mes/pro/task-issue`)或仓库领料单手工处理。