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,重建索引后会被源数据覆盖。