138 lines
3.7 KiB
Markdown
138 lines
3.7 KiB
Markdown
|
|
# 订单表与装车订单表关联关系说明
|
|||
|
|
|
|||
|
|
## 问题说明
|
|||
|
|
|
|||
|
|
用户创建了新的 `order` 订单表,但装车订单接口 `/delivery/pageDeliveryOrderList` 仍然返回的是 `delivery` 装车运单表的数据,没有关联到新的 `order` 表。
|
|||
|
|
|
|||
|
|
## 解决方案
|
|||
|
|
|
|||
|
|
### 1. 数据库层面
|
|||
|
|
**文件:** `add_order_id_to_delivery.sql`
|
|||
|
|
|
|||
|
|
在 `delivery` 表中添加 `order_id` 字段,建立与 `order` 表的关联:
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
ALTER TABLE `delivery`
|
|||
|
|
ADD COLUMN `order_id` int(11) DEFAULT NULL COMMENT '订单ID(关联order表)' AFTER `id`,
|
|||
|
|
ADD INDEX `idx_order_id` (`order_id`);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关系说明:**
|
|||
|
|
- `order` 表:主订单表,记录买方、卖方、结算方式
|
|||
|
|
- `delivery` 表:装车运单表,记录运单详情
|
|||
|
|
- **一个订单可以对应多个装车运单**(一对多关系)
|
|||
|
|
|
|||
|
|
### 2. 实体类更新
|
|||
|
|
**文件:** `Delivery.java`
|
|||
|
|
|
|||
|
|
添加两个字段:
|
|||
|
|
- `orderId`:订单ID,用于存储关联的订单
|
|||
|
|
- `orderInfo`:订单信息对象,用于查询时填充订单详细信息
|
|||
|
|
|
|||
|
|
### 3. 服务层更新
|
|||
|
|
**文件:** `DeliveryServiceImpl.java`
|
|||
|
|
|
|||
|
|
在 `pageQueryListLog` 方法中添加订单信息填充逻辑:
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
// 填充装车订单的关联订单信息
|
|||
|
|
for (Delivery delivery : resList) {
|
|||
|
|
if (delivery.getOrderId() != null) {
|
|||
|
|
Order order = orderMapper.selectById(delivery.getOrderId());
|
|||
|
|
if (order != null) {
|
|||
|
|
delivery.setOrderInfo(order);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 数据流程
|
|||
|
|
|
|||
|
|
1. **创建订单(Order)**
|
|||
|
|
- 用户在订单管理中创建订单
|
|||
|
|
- 记录:买方、卖方、结算方式
|
|||
|
|
- 保存到 `order` 表
|
|||
|
|
|
|||
|
|
2. **创建装车订单(Delivery)**
|
|||
|
|
- 用户在装车订单中创建运单
|
|||
|
|
- 记录:运单详情(起始地、目的地、车牌等)
|
|||
|
|
- 保存时关联 `order_id`
|
|||
|
|
- 保存到 `delivery` 表
|
|||
|
|
|
|||
|
|
3. **查询装车订单列表**
|
|||
|
|
- 调用 `/delivery/pageDeliveryOrderList`
|
|||
|
|
- 查询 `delivery` 表
|
|||
|
|
- 根据 `order_id` 关联查询 `order` 表
|
|||
|
|
- 返回装车订单信息 + 订单信息
|
|||
|
|
|
|||
|
|
## 返回数据格式
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"msg": "success",
|
|||
|
|
"data": {
|
|||
|
|
"total": 10,
|
|||
|
|
"rows": [
|
|||
|
|
{
|
|||
|
|
"id": 89,
|
|||
|
|
"orderId": 1, // 关联的订单ID
|
|||
|
|
"deliveryNumber": "ZC20251027161826",
|
|||
|
|
"deliveryTitle": "2222",
|
|||
|
|
"orderInfo": { // 订单详细信息
|
|||
|
|
"id": 1,
|
|||
|
|
"buyerId": "10,11",
|
|||
|
|
"sellerId": "5,6",
|
|||
|
|
"settlementType": 1,
|
|||
|
|
"buyerName": "张三,李四",
|
|||
|
|
"sellerName": "王五,赵六",
|
|||
|
|
"settlementTypeDesc": "上车重量"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用步骤
|
|||
|
|
|
|||
|
|
1. **执行数据库迁移**
|
|||
|
|
```sql
|
|||
|
|
-- 先执行创建订单表的SQL
|
|||
|
|
SOURCE create_order_table.sql;
|
|||
|
|
|
|||
|
|
-- 然后为delivery表添加order_id字段
|
|||
|
|
SOURCE add_order_id_to_delivery.sql;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **重启后端服务**
|
|||
|
|
|
|||
|
|
3. **前端调用**
|
|||
|
|
- 创建订单时:调用 `/order/add`
|
|||
|
|
- 创建装车订单时:需要传入 `orderId`
|
|||
|
|
- 查询装车订单列表:调用 `/delivery/pageDeliveryOrderList`
|
|||
|
|
- 返回的数据中包含 `orderInfo` 字段
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 不计 `delivery` 已存在数据,`order_id` 为 `NULL`
|
|||
|
|
2. 新增运单时需关联 `order_id`
|
|||
|
|
3. 查询装车订单时会自动填充 `orderInfo`
|
|||
|
|
4. 支持一个订单对应多个装车运单(一对多关系)
|
|||
|
|
|
|||
|
|
## 前端集成建议
|
|||
|
|
|
|||
|
|
在装车订单列表中显示订单信息:
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<el-table-column label="买方" prop="orderInfo.buyerName" />
|
|||
|
|
<el-table-column label="卖方" prop="orderInfo.sellerName" />
|
|||
|
|
<el-table-column label="结算方式" prop="orderInfo.settlementTypeDesc" />
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 数据一致性
|
|||
|
|
|
|||
|
|
- 删除订单时:应检查是否有关联的装车订单
|
|||
|
|
- 可级联删除或禁止删除(推荐阻止删除以避免数据不一致)
|
|||
|
|
|