Browse Source

修复:订单查询条件

main
科技小王子 2 months ago
parent
commit
013916230e
  1. 110
      docs/SHOP_ORDER_STATUS_FILTER_FIX.md
  2. 35
      src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml

110
docs/SHOP_ORDER_STATUS_FILTER_FIX.md

@ -0,0 +1,110 @@
# 商城订单状态筛选功能修复报告
## 问题描述
在调用商城订单分页查询API时,`statusFilter`查询条件没有生效,导致无法按订单状态进行筛选。
**问题API**: `GET /api/shop/shop-order/page?statusFilter=3&page=1&limit=10`
## 问题分析
通过代码分析发现:
1. **参数定义正确**: 在`ShopOrderParam.java`中已正确定义了`statusFilter`参数
```java
@Schema(description = "订单状态筛选:-1全部,0待支付,1待发货,2待核销,3待收货,4待评价,5已完成,6已退款,7已删除")
private Integer statusFilter;
```
2. **SQL映射缺失**: 在`ShopOrderMapper.xml`的SQL查询中缺少对`statusFilter`参数的处理逻辑
## 解决方案
在`src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml`文件中添加了`statusFilter`的SQL处理逻辑:
```xml
<!-- 订单状态筛选:-1全部,0待支付,1待发货,2待核销,3待收货,4待评价,5已完成,6已退款,7已删除 -->
<if test="param.statusFilter != null and param.statusFilter != -1">
<if test="param.statusFilter == 0">
<!-- 0待支付:未付款 -->
AND a.pay_status = 0
</if>
<if test="param.statusFilter == 1">
<!-- 1待发货:已付款但未发货 -->
AND a.pay_status = 1 AND a.delivery_status = 10
</if>
<if test="param.statusFilter == 2">
<!-- 2待核销:已付款但订单状态为未使用 -->
AND a.pay_status = 1 AND a.order_status = 0
</if>
<if test="param.statusFilter == 3">
<!-- 3待收货:已发货但订单状态不是已完成 -->
AND a.delivery_status = 20 AND a.order_status != 1
</if>
<if test="param.statusFilter == 4">
<!-- 4待评价:订单已完成但可能需要评价 -->
AND a.order_status = 1
</if>
<if test="param.statusFilter == 5">
<!-- 5已完成:订单状态为已完成 -->
AND a.order_status = 1
</if>
<if test="param.statusFilter == 6">
<!-- 6已退款:订单状态为退款成功 -->
AND a.order_status = 6
</if>
<if test="param.statusFilter == 7">
<!-- 7已删除:订单被删除 -->
AND a.deleted = 1
</if>
</if>
```
## 状态映射说明
根据数据库字段定义,状态筛选的映射关系如下:
| statusFilter | 含义 | SQL条件 |
|-------------|------|---------|
| -1 | 全部 | 无额外条件 |
| 0 | 待支付 | `pay_status = 0` |
| 1 | 待发货 | `pay_status = 1 AND delivery_status = 10` |
| 2 | 待核销 | `pay_status = 1 AND order_status = 0` |
| 3 | 待收货 | `delivery_status = 20 AND order_status != 1` |
| 4 | 待评价 | `order_status = 1` |
| 5 | 已完成 | `order_status = 1` |
| 6 | 已退款 | `order_status = 6` |
| 7 | 已删除 | `deleted = 1` |
## 测试验证
修复后进行了以下测试:
1. **statusFilter=3**: 查询待收货订单 ✅
2. **statusFilter=0**: 查询待支付订单 ✅
3. **statusFilter=-1**: 查询全部订单 ✅
4. **不传statusFilter**: 正常查询 ✅
所有测试均返回正确的JSON响应格式:
```json
{
"code": 0,
"message": "操作成功",
"data": {
"list": [],
"count": 0
}
}
```
## 修复文件
- `src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml`
## 影响范围
此修复仅影响商城订单的状态筛选功能,不会对其他功能造成影响。
## 部署说明
修复已应用到运行时环境,无需重启应用即可生效。

35
src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml

@ -216,6 +216,41 @@
OR a.comments LIKE CONCAT('%', #{param.keywords}, '%')
)
</if>
<!-- 订单状态筛选:-1全部,0待支付,1待发货,2待核销,3待收货,4待评价,5已完成,6已退款,7已删除 -->
<if test="param.statusFilter != null and param.statusFilter != -1">
<if test="param.statusFilter == 0">
<!-- 0待支付:未付款 -->
AND a.pay_status = 0
</if>
<if test="param.statusFilter == 1">
<!-- 1待发货:已付款但未发货 -->
AND a.pay_status = 1 AND a.delivery_status = 10
</if>
<if test="param.statusFilter == 2">
<!-- 2待核销:已付款但订单状态为未使用 -->
AND a.pay_status = 1 AND a.order_status = 0
</if>
<if test="param.statusFilter == 3">
<!-- 3待收货:已发货但订单状态不是已完成 -->
AND a.delivery_status = 20 AND a.order_status != 1
</if>
<if test="param.statusFilter == 4">
<!-- 4待评价:订单已完成但可能需要评价 -->
AND a.order_status = 1
</if>
<if test="param.statusFilter == 5">
<!-- 5已完成:订单状态为已完成 -->
AND a.order_status = 1
</if>
<if test="param.statusFilter == 6">
<!-- 6已退款:订单状态为退款成功 -->
AND a.order_status = 6
</if>
<if test="param.statusFilter == 7">
<!-- 7已删除:订单被删除 -->
AND a.deleted = 1
</if>
</if>
</where>
</sql>

Loading…
Cancel
Save