# 订单表功能实现报告

## 概述
根据需求，重新设计并实现了一个新的订单管理系统，包含订单表的数据库设计、后端接口以及前端页面。

## 实现内容

### 1. 数据库设计

**表结构：** `order`

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | int(11) | 主键ID，自增 |
| buyer_id | varchar(500) | 买方ID（多个买家用逗号分隔） |
| seller_id | varchar(500) | 卖方ID（多个卖家用逗号分隔） |
| settlement_type | int(11) | 结算方式：1-上车重量，2-下车重量，3-按肉价结算 |
| is_delete | tinyint(1) | 逻辑删除标记(0-正常,1-已删除) |
| create_time | datetime | 创建时间 |
| created_by | int(11) | 创建人ID |
| update_time | datetime | 更新时间 |
| updated_by | int(11) | 更新人ID |

**SQL文件位置：** `tradeCattle/create_order_table.sql`

### 2. 后端实现

#### 2.1 实体类（Entity）
- **文件：** `Order.java`
- **位置：** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/entity/Order.java`
- **特性：**
  - 使用MyBatis-Plus注解
  - 包含@TableLogic注解实现逻辑删除
  - 包含显示字段：buyerName、sellerName、createdByName、settlementTypeDesc

#### 2.2 Mapper接口
- **文件：** `OrderMapper.java`
- **位置：** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/mapper/OrderMapper.java`
- **说明：** 继承BaseMapper，提供基础的CRUD操作

#### 2.3 Service层
- **接口：** `IOrderService.java`
- **实现类：** `OrderServiceImpl.java`
- **位置：** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/service/`
- **方法：**
  - `pageQuery` - 分页查询订单列表
  - `addOrder` - 新增订单
  - `updateOrder` - 更新订单
  - `deleteOrder` - 逻辑删除订单
  - `getOrderDetail` - 查询订单详情
  - `fillOrderInfo` - 填充订单关联信息（买方名称、卖方名称等）

**日志记录：** 所有操作都通过Logger记录详细日志

#### 2.4 Controller层
- **文件：** `OrderController.java`
- **位置：** `aiotagro-cattle-trade/src/main/java/com/aiotagro/cattletrade/business/controller/OrderController.java`
- **接口列表：**
  - `POST /order/list` - 查询订单列表（分页）
  - `POST /order/add` - 新增订单
  - `POST /order/edit` - 更新订单
  - `GET /order/delete` - 删除订单（逻辑删除）
  - `GET /order/detail` - 查询订单详情

**权限控制：** 使用SaCheckPermission注解进行权限验证
  - `order:list` - 列表查询权限
  - `order:add` - 新增权限
  - `order:edit` - 编辑权限
  - `order:delete` - 删除权限
  - `order:view` - 查看权限

### 3. 前端实现

#### 3.1 API接口
**文件：** `pc-cattle-transportation/src/api/shipping.js`

新增接口方法：
- `orderPageQuery(data)` - 订单列表查询
- `orderAddNew(data)` - 新增订单
- `orderUpdate(data)` - 更新订单
- `orderDelete(id)` - 删除订单
- `orderGetDetail(id)` - 查询订单详情

#### 3.2 前端页面
**文件：** `pc-cattle-transportation/src/views/shipping/orderDialog.vue`

**功能特性：**
- 简化的表单设计，只包含必要字段
- 支持多选买方和卖方（使用multiple属性）
- 下拉选择结算方式
- 远程搜索支持
- 分页功能
- 支持新增和编辑两种模式

**表单字段：**
- 卖方（sellerId）：多选下拉框，支持搜索和分页
- 买方（buyerId）：多选下拉框，支持搜索和分页
- 结算方式（settlementType）：单选下拉框，3个选项

## 核心特性

### 1. 逻辑删除
- 使用MyBatis-Plus的@TableLogic注解
- 删除操作不会真正删除数据，只是将is_delete字段设置为1
- 查询时会自动过滤已删除的记录

### 2. 操作日志
所有操作都记录详细日志：
- 操作类型（新增/修改/删除/查询）
- 操作参数
- 操作结果
- 异常信息

### 3. 关联查询
自动填充关联信息：
- 买方名称：从member_user表查询username
- 卖方名称：从member_user表查询username
- 创建人姓名：从sys_user表查询user_name
- 结算方式描述：自动转换（1→上车重量，2→下车重量，3→按肉价结算）

### 4. 数据校验
- 后端参数校验
- 前端表单验证
- 结算方式枚举值校验

## 使用方法

### 后端部署
1. 执行SQL脚本创建订单表
```sql
-- 执行 tradeCattle/create_order_table.sql
```

2. 重启后端服务

### 前端使用
```javascript
// 在需要使用的组件中引入
import orderDialog from '@/views/shipping/orderDialog.vue'

// 调用方法
const dialogRef = ref(null)
dialogRef.value.onShowDialog() // 新增模式
dialogRef.value.onShowDialog(orderData) // 编辑模式
```

## 权限配置

需要在菜单权限系统中配置以下权限：
- `order:list` - 订单列表
- `order:add` - 新增订单
- `order:edit` - 编辑订单
- `order:delete` - 删除订单
- `order:view` - 查看订单详情

## 技术栈

### 后端
- Java 8+
- Spring Boot
- MyBatis-Plus
- Sa-Token（权限管理）
- SLF4J（日志）

### 前端
- Vue 3
- Element Plus
- Axios

## 后续优化建议

1. 添加订单状态字段
2. 添加更多业务字段（如金额、数量等）
3. 实现订单导出功能
4. 添加订单统计功能
5. 实现订单审核流程

## 文件清单

### 后端文件
- `create_order_table.sql` - 数据库表结构
- `Order.java` - 实体类
- `OrderMapper.java` - Mapper接口
- `IOrderService.java` - Service接口
- `OrderServiceImpl.java` - Service实现
- `OrderController.java` - Controller

### 前端文件
- `shipping.js` - API接口（新增部分）
- `orderDialog.vue` - 订单弹窗组件

## 注意事项

1. order是MySQL的保留关键字，创建表时需要用反引号包裹：`` `order` ``
2. 买方ID和卖方ID存储为逗号分隔的字符串，使用时需要拆分
3. 逻辑删除功能需要确保相关查询都使用正确的字段过滤
4. 关联查询可能会影响性能，大量数据时建议添加缓存

