# 寄车带货功能实现总结

## 已完成的文件

### 1. 数据库表
- `script/sql/cargo.sql` - 建表 SQL（3张表）
  - tbl_dzbc_driver_trip（司机发车任务表）
  - tbl_dzbc_cargo_order（货物订单表）
  - tbl_dzbc_cargo_item（货物详情表）

### 2. 实体类
- `TblDzbcDriverTrip.java` - 司机任务实体
- `TblDzbcCargoOrder.java` - 货物订单实体
- `TblDzbcCargoItem.java` - 货物详情实体

### 3. 业务对象
- `TblDzbcDriverTripBo.java` - 司机任务业务对象
- `CargoOrderSubmitBo.java` - 订单提交请求对象
- `CargoItemBo.java` - 货物项业务对象

### 4. 视图对象
- `TblDzbcDriverTripVo.java` - 司机任务视图对象
- `TblDzbcCargoOrderVo.java` - 货物订单视图对象
- `TblDzbcCargoItemVo.java` - 货物详情视图对象

### 5. Mapper 接口
- `TblDzbcDriverTripMapper.java` - 司机任务 Mapper
- `TblDzbcCargoOrderMapper.java` - 货物订单 Mapper
- `TblDzbcCargoItemMapper.java` - 货物详情 Mapper

### 6. Service 接口
- `ITblDzbcDriverTripService.java` - 司机任务服务接口
- `ITblDzbcCargoOrderService.java` - 货物订单服务接口
- `ITblDzbcCargoItemService.java` - 货物详情服务接口

### 7. Service 实现
- `TblDzbcDriverTripServiceImpl.java` - 司机任务服务实现（已完成）

### 8. Controller
- `TblDzbcDriverTripController.java` - 司机任务控制器
- `TblDzbcCargoOrderController.java` - 货物订单控制器

### 9. 文档
- `script/sql/CARGO_README.md` - 完整接口文档

## 需要补充的代码

由于代码量较大，以下 Service 实现类可以根据需要补充：

### 1. TblDzbcCargoOrderServiceImpl

核心功能：
- 提交订单（计算价格、保存订单和货物详情）
- 更新订单状态
- 查询订单列表

### 2. TblDzbcCargoItemServiceImpl

核心功能：
- 保存货物详情（支持多图片上传）
- 查询订单的货物列表
- 删除货物详情

### 3. Mapper XML 文件

需要创建的 XML 文件：
- `TblDzbcDriverTripMapper.xml`
- `TblDzbcCargoOrderMapper.xml`
- `TblDzbcCargoItemMapper.xml`

## 主要功能模块

### 司机端功能

1. **创建发车任务**
   - 选择路线、车辆、司机
   - 设置出发时间
   - 生成任务编号和二维码

2. **任务管理**
   - 开始发车
   - 到达站点（更新当前站点）
   - 完成任务
   - 取消任务

3. **订单查看**
   - 查看任务的所有货物订单
   - 实时显示货物状态
   - 更新订单状态（取货、送达）

### 用户端功能

1. **扫码下单**
   - 扫描司机二维码
   - 自动获取任务和站点信息
   - 从站点列表选择起始、送达站点

2. **填写订单**
   - 填写发货人、收货人信息
   - 填写货物详情（名称、数量、重量等）
   - 上传货物图片
   - 查看价格

3. **订单管理**
   - 查看我的订单列表
   - 查看订单详情
   - 实时跟踪订单状态

## 数据流

### 1. 订单创建流程

```
用户扫码
  ↓
获取任务信息（tripNo）
  ↓
选择站点（fromSiteId, toSiteId）
  ↓
填写订单信息
  ↓
系统计算价格（从 tbl_dzbc_site_price）
  ↓
保存订单（tbl_dzbc_cargo_order）
  ↓
保存货物详情（tbl_dzbc_cargo_item）
  ↓
返回订单信息
```

### 2. 司机配送流程

```
创建任务（status=0）
  ↓
开始发车（status=1）← 二维码生效
  ↓
到达站点1（更新 currentSiteId）
  ↓
取货（更新订单 status=1）
  ↓
到达站点2（更新 currentSiteId）
  ↓
送货（更新订单 status=2）
  ↓
完成任务（status=2）← 二维码失效
```

## 价格计算

价格存储在 `tbl_dzbc_site_price` 表中：

```sql
SELECT price 
FROM tbl_dzbc_site_price 
WHERE path_id = ? 
  AND from_site_id = ? 
  AND to_site_id = ?
```

如果查询不到价格，提示用户无法配送该线路。

## 二维码实现方案

### 方案一：前端生成二维码

1. 后端返回 `tripNo`
2. 前端使用二维码库（如 qrcode.js）生成二维码图片
3. 二维码内容：`https://你的域名/qr/{tripNo}`

### 方案二：后端生成二维码图片

1. 使用 Java 二维码库（如 ZXing）生成二维码图片
2. 上传到 OSS
3. 返回图片 URL

## 接口清单

### 司机任务接口

| 接口 | 方法 | 说明 |
|------|------|------|
| /driverTrip | POST | 创建发车任务 |
| /driverTrip/start/{id} | POST | 开始发车 |
| /driverTrip/arrive/{id} | POST | 到达站点 |
| /driverTrip/complete/{id} | POST | 完成任务 |
| /driverTrip/cancel/{id} | POST | 取消任务 |
| /driverTrip/list | GET | 查询任务列表 |
| /driverTrip/{id} | GET | 查询任务详情 |
| /driverTrip/qr/{tripNo} | GET | 扫码查询任务 |

### 货物订单接口

| 接口 | 方法 | 说明 |
|------|------|------|
| /cargoOrder/submit | POST | 提交货物订单 |
| /cargoOrder/my/list | GET | 查询我的订单 |
| /cargoOrder/trip/{tripId} | GET | 查询任务的订单 |
| /cargoOrder/list | GET | 查询订单列表 |
| /cargoOrder/{id} | GET | 查询订单详情 |
| /cargoOrder/status/{id} | POST | 更新订单状态 |

## 部署步骤

1. **执行建表 SQL**
   ```bash
   mysql -u root -p khyznh < script/sql/cargo.sql
   ```

2. **补充缺失的 Service 实现**
   - TblDzbcCargoOrderServiceImpl
   - TblDzbcCargoItemServiceImpl

3. **创建 Mapper XML 文件**
   - TblDzbcDriverTripMapper.xml
   - TblDzbcCargoOrderMapper.xml
   - TblDzbcCargoItemMapper.xml

4. **配置价格**
   - 在 `tbl_dzbc_site_price` 表中设置路线价格
   - 为所有可能的站点组合设置价格

5. **测试接口**
   - 测试创建任务
   - 测试扫码查询
   - 测试提交订单
   - 测试订单状态流转

## 扩展建议

1. **支付功能**
   - 集成微信支付
   - 支付后更新订单支付状态

2. **消息通知**
   - 下单成功通知司机
   - 订单状态变更通知用户
   - 到达站点通知

3. **评价功能**
   - 用户对配送服务进行评价
   - 评分系统

4. **统计分析**
   - 订单量统计
   - 收入统计
   - 热门线路统计

5. **批量操作**
   - 批量更新订单状态
   - 批量打印订单

## 注意事项

1. **依赖关系**
   - 寄车带货功能依赖多站点路线功能（tbl_dzbc_multi_site_path）
   - 确保路线和站点已正确配置
   - 确保站点价格已设置

2. **状态管理**
   - 严格遵循订单状态流转规则
   - 不能跳过状态直接变更

3. **数据一致性**
   - 订单详情与订单主表保持一致
   - 任务状态与订单状态关联

4. **并发处理**
   - 防止同一订单重复操作
   - 使用事务保证数据一致性

详细接口文档请参考：`script/sql/CARGO_README.md`
