96 lines
2.2 KiB
Markdown
96 lines
2.2 KiB
Markdown
|
|
# 寄卖商品状态修正方案
|
||
|
|
|
||
|
|
适用范围:池州雷蕾商贸 `czleilei240`
|
||
|
|
|
||
|
|
## 问题说明
|
||
|
|
|
||
|
|
寄卖商品表 `wa_merchandise.status` 可能与真实售卖结果不一致。
|
||
|
|
|
||
|
|
当前接口 `/api/order/goods` 只按:
|
||
|
|
|
||
|
|
- `wa_merchandise.status = 1`
|
||
|
|
- `wa_merchandise.is_show = 1`
|
||
|
|
|
||
|
|
查询商品,见 [WaOrderServiceImpl.java](</Users/mac/scott2026/integral-shop/single-shop-22/backend/crmeb-front/src/main/java/com/zbkj/front/service/impl/WaOrderServiceImpl.java:65>).
|
||
|
|
|
||
|
|
但实际业务中,商品是否已售出应结合 `wa_order` 判断。
|
||
|
|
|
||
|
|
## 判定口径
|
||
|
|
|
||
|
|
建议以以下规则修正商品状态:
|
||
|
|
|
||
|
|
- 订单存在且 `status = 2`
|
||
|
|
- 且 `is_cancel = 0`
|
||
|
|
- 则对应 `wa_merchandise.status` 应置为 `0`(已售)
|
||
|
|
|
||
|
|
## 查询异常数据
|
||
|
|
|
||
|
|
查询“商品仍标记未售,但实际已有已完成订单”的数据:
|
||
|
|
|
||
|
|
```sql
|
||
|
|
SELECT
|
||
|
|
m.id,
|
||
|
|
m.old_id,
|
||
|
|
m.user_id,
|
||
|
|
m.status AS merchandise_status,
|
||
|
|
m.is_show,
|
||
|
|
m.created_at,
|
||
|
|
m.updated_at,
|
||
|
|
o.id AS order_id,
|
||
|
|
o.status AS order_status,
|
||
|
|
o.is_cancel
|
||
|
|
FROM wa_merchandise m
|
||
|
|
JOIN wa_order o ON o.merchandise_id = m.id
|
||
|
|
WHERE m.status = 1
|
||
|
|
AND m.is_show = 1
|
||
|
|
AND o.status = 2
|
||
|
|
AND o.is_cancel = 0
|
||
|
|
ORDER BY m.id DESC;
|
||
|
|
```
|
||
|
|
|
||
|
|
查询当前仍可售商品:
|
||
|
|
|
||
|
|
```sql
|
||
|
|
SELECT COUNT(*) AS remaining_unsold_visible
|
||
|
|
FROM wa_merchandise
|
||
|
|
WHERE status = 1 AND is_show = 1;
|
||
|
|
```
|
||
|
|
|
||
|
|
## 批量修正
|
||
|
|
|
||
|
|
将“已有已完成订单”的商品统一改为已售:
|
||
|
|
|
||
|
|
```sql
|
||
|
|
UPDATE wa_merchandise m
|
||
|
|
JOIN wa_order o ON o.merchandise_id = m.id
|
||
|
|
SET m.status = 0,
|
||
|
|
m.updated_at = NOW()
|
||
|
|
WHERE m.status = 1
|
||
|
|
AND m.is_show = 1
|
||
|
|
AND o.status = 2
|
||
|
|
AND o.is_cancel = 0;
|
||
|
|
```
|
||
|
|
|
||
|
|
## 处理步骤
|
||
|
|
|
||
|
|
1. 先查异常商品清单。
|
||
|
|
2. 确认这些商品是否确实已有完成订单。
|
||
|
|
3. 执行批量更新,把状态改为 `0`。
|
||
|
|
4. 复核 `status = 1 AND is_show = 1` 是否已清空。
|
||
|
|
5. 如发现重复出现,继续按同一规则修正。
|
||
|
|
|
||
|
|
## 复核方式
|
||
|
|
|
||
|
|
```sql
|
||
|
|
SELECT id, status, is_show, updated_at
|
||
|
|
FROM wa_merchandise
|
||
|
|
WHERE status = 1 AND is_show = 1
|
||
|
|
ORDER BY id DESC;
|
||
|
|
```
|
||
|
|
|
||
|
|
如果结果为空,说明当前没有可售状态异常的寄卖商品。
|
||
|
|
|
||
|
|
## 备注
|
||
|
|
|
||
|
|
如果后续要从根源避免再次发生,建议把商品状态判定逻辑从“只看 `wa_merchandise.status`”改为“联动 `wa_order` 订单状态”。
|