# 销售发货流程 - 前端联调方案
## 涉及页面
- ERP 销售订单页面
- MES 发货通知单页面
- MES 销售出库单页面
## 业务流程与数据带入
1. **销售订单 -> 发货通知单**:销售订单ID、销售订单号、客户ID、物料明细自动带入
2. **发货通知单 -> 销售出库单**:发货通知单ID、销售订单ID、客户ID、物料明细自动带入
3. **销售出库 -> BPM审批 -> 出库成功**:同步更新销售订单出库数量和状态
## API
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /mes/wm/sales-notice/generate-from-sale-order | 从销售订单生成发货通知单 |
| GET | /mes/wm/sales-notice/page | 发货通知单分页查询 |
| GET | /mes/wm/sales-notice/get | 获取发货通知单详情 |
| POST | /mes/wm/sales-notice/create | 创建发货通知单 |
| PUT | /mes/wm/sales-notice/submit | 提交发货通知单 |
### 从销售订单生成发货通知单
**请求参数:**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| saleOrderId | Long | 是 | 销售订单ID |
**响应:** `{ "code": 200, "data": 123 }` (返回发货通知单ID)
## 前端修改点
### 1. ERP 销售订单页面 - 添加"生成发货通知单"按钮
```html
生成发货通知单
```
```js
// data
data() {
return {
// ...
}
}
// methods
methods: {
/** 生成发货通知单 */
async handleGenerateNotice() {
if (!this.selectedRow) {
this.$modal.msgWarning('请选择一条销售订单');
return;
}
try {
const res = await generateFromSaleOrder(this.selectedRow.id);
this.$modal.msgSuccess('生成发货通知单成功');
// 跳转到发货通知单页面
this.$router.push({
path: '/mes/wm/sales-notice/edit',
query: { id: res.data }
});
} catch (e) {
console.error(e);
}
}
}
```
### 2. 发货通知单页面 - 显示销售订单信息
```html
{{ form.saleOrderCode }}
{{ form.clientName }}
```
### 3. 发货通知单行表格 - 新增列
| 列名 | 字段 | 说明 |
|------|------|------|
| 销售订单明细ID | saleOrderItemId | 隐藏字段,用于追溯 |
### 4. 销售出库单页面 - 显示销售订单信息
```html
{{ form.noticeCode }}
{{ form.saleOrderCode }}
{{ form.clientName }}
```
## 数据字段映射
### 发货通知单主表
| 目标字段 | 数据来源 | 填充时机 |
|----------|----------|----------|
| saleOrderId | 销售订单.id | 从销售订单生成时 |
| saleOrderCode | 销售订单.no | 从销售订单生成时 |
| clientId | 销售订单.customerId | 从销售订单生成时 |
### 发货通知单行
| 目标字段 | 数据来源 | 填充时机 |
|----------|----------|----------|
| saleOrderItemId | 销售订单明细.id | 从销售订单生成时 |
| itemId | 销售订单明细.productId | 从销售订单生成时 |
| quantity | 销售订单明细.count | 从销售订单生成时 |
### 销售出库单主表
| 目标字段 | 数据来源 | 填充时机 |
|----------|----------|----------|
| noticeId | 发货通知单.id | 从发货通知单生成时 |
| saleOrderId | 发货通知单.saleOrderId | 从发货通知单生成时 |
| saleOrderCode | 发货通知单.saleOrderCode | 从发货通知单生成时 |
### 销售出库单行
| 目标字段 | 数据来源 | 填充时机 |
|----------|----------|----------|
| noticeLineId | 发货通知单行.id | 从发货通知单生成时 |
| saleOrderItemId | 发货通知单行.saleOrderItemId | 从发货通知单生成时 |
## 状态流转
### 发货通知单状态
| 状态值 | 状态名 | 说明 |
|--------|--------|------|
| 0 | 草稿 | 新建状态 |
| 3 | 待出库 | 提交后 |
| 4 | 已完成 | 出库完成后自动更新 |
### 销售订单出库状态
| 状态值 | 状态名 | 说明 |
|--------|--------|------|
| 0 | 未出库 | 默认值 |
| 1 | 部分出库 | 部分明细已出库 |
| 2 | 全部出库 | 所有明细已出库 |
## 注意事项
1. 从销售订单生成发货通知单时,会自动带入所有销售订单明细
2. 发货通知单提交后状态变为"待出库",此时可从发货通知单生成销售出库单
3. 销售出库完成后,系统自动更新:
- 发货通知单状态 -> 已完成
- 销售订单出库数量和出库状态
4. 销售订单的出库状态根据明细出库数量自动计算,无需手动维护