CSV报告导入完成,同一客户组在默认站点能看到批发价,另一个Website仍是原价。Group Price记录带website_id;填0代表All Websites,填错代码或ID会让价格只落在一个范围。
现象
我保留了一个失败样本,并用同样输入在无缓存或单节点条件下再跑一遍。这样可以把前端假象、缓存和真正的数据问题分开。
排除法
- 先确认客户组ID和website code,不要把store code当website。
- 查看catalog_product_entity_group_price或tier_price接口返回的website_id。
bin/magento store:website:list mysql -e "SELECT value_id,entity_id,all_groups,customer_group_id,value,website_id FROM catalog_product_entity_group_price WHERE entity_id=123;" bin/magento indexer:reindex catalog_product_price bin/magento cache:clean full_page
这里的重点不是把报错暂时消掉,而是让同一操作再执行一次仍保持幂等;因此修复后一定要做第二次重复执行测试。
最终处理
按业务选择website_id=0全站统一,或为每个Website各写一条。导入模板使用官方字段名和website code映射,在适配层先校验未知代码直接失败。清理旧范围错误记录后通过ProductRepository/价格API重写,最后重建价格索引。
修改范围
- 先在单个SKU、单个订单或单个Store验证。
- 保留可回退的旧配置,不覆盖原始证据。
- 需要批量处理时分批提交并输出成功/失败清单。
检查收尾
- 两个Website以对应客户组登录价格正确
- 访客和其他客户组不受影响
- GraphQL/REST与前台显示一致
- 再次导入不会增加重复范围记录
验收不只看后台提示“成功”。我还会从前台/API再走一次真实链路,并在下一轮cron、索引或缓存命中后重复检查,确认不是短暂正常。
经验
不要只改索引表catalog_product_index_price,重建索引后会被源数据覆盖。

