Files
integral-shop/docs/wa_merchandise-status-repair-plan.md
2026-05-27 13:00:32 +08:00

2.2 KiB

寄卖商品状态修正方案

适用范围:池州雷蕾商贸 czleilei240

问题说明

寄卖商品表 wa_merchandise.status 可能与真实售卖结果不一致。

当前接口 /api/order/goods 只按:

  • wa_merchandise.status = 1
  • wa_merchandise.is_show = 1

查询商品,见 WaOrderServiceImpl.java.

但实际业务中,商品是否已售出应结合 wa_order 判断。

判定口径

建议以以下规则修正商品状态:

  • 订单存在且 status = 2
  • is_cancel = 0
  • 则对应 wa_merchandise.status 应置为 0(已售)

查询异常数据

查询“商品仍标记未售,但实际已有已完成订单”的数据:

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;

查询当前仍可售商品:

SELECT COUNT(*) AS remaining_unsold_visible
FROM wa_merchandise
WHERE status = 1 AND is_show = 1;

批量修正

将“已有已完成订单”的商品统一改为已售:

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. 如发现重复出现,继续按同一规则修正。

复核方式

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 订单状态”。