# 寄卖商品状态修正方案 适用范围:池州雷蕾商贸 `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`(已售) ## 查询异常数据 查询“商品仍标记未售,但实际已有已完成订单”的数据: ```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` 订单状态”。