fix(distribution): 修复分站搜不到已审核商品并实现审核通过自动铺货
问题:分站上架商品审核通过后主站能搜到、分站看不到,且没有自动同步。 根因:分站前台/搜索只认 distribution_site_accounts 中 display_status='enabled' 的货架行,而主站前台不按站点过滤。货架行此前只由「号主在该站上架」或站长手动 「一键同步主站商品」写入,审核通过不回写;同时一键同步的失效清理把「非 published+approved」的货架行一律置为 disabled,商品重新在售后也不会恢复。 - 新增 EnsureListingShelvedTx:商品变为 published+approved 时自动铺到所有 display_account_enabled=true 的站点货架(缺行新增、系统下架恢复、人工下架不动), 经 ListingShelfSyncer 接口注入,避免 listing 反向依赖 distribution - 新增 distribution_site_accounts.display_disabled_by(operator/system/空)区分下架 来源;人工上下架各入口写入来源标记 - 一键同步的失效清理收紧为只清理「货源记录已删除」的孤儿行,并支持恢复系统下架行, 结果新增 reenabled_count - 新增迁移 000074 回填存量缺失货架行,部署后无需逐站手动同步 - 修复 CreateSite 显式传 false/0 的配置(不允许自动展示、结算冷却 0 天)被 GORM default 标签忽略而静默回落默认值 - 前端:去掉会跨站串扰的 localStorage 站点码回退,站点探测完成后再挂载应用, 避免分站发布因缺少站点码被记成主站商品;同步弹窗文案与统计项同步更新 - 补充分销货架自动铺货、清理口径、建站零值落库与审核铺货回归测试
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
-- +goose Up
|
||||
|
||||
-- 货架下架来源:区分「系统自动下架」与「站长人工下架」。
|
||||
-- 背景:所有站点共用同一批已审核商品,商品审核通过会自动铺到各分站货架;
|
||||
-- 自动铺货只允许恢复系统下架(或历史无标记)的货架行,避免覆盖站长的人工选品。
|
||||
ALTER TABLE distribution_site_accounts
|
||||
ADD COLUMN display_disabled_by VARCHAR(16) NOT NULL DEFAULT '' COMMENT '下架来源:operator=站长人工下架,system=系统自动下架,空=展示中或历史数据' AFTER display_status;
|
||||
|
||||
-- +goose Down
|
||||
|
||||
ALTER TABLE distribution_site_accounts
|
||||
DROP COLUMN display_disabled_by;
|
||||
@@ -0,0 +1,17 @@
|
||||
-- +goose Up
|
||||
|
||||
-- 历史数据回填:所有站点共用同一套已审核货源,分站货架行此前只由站长手动
|
||||
-- 「一键同步主站商品」补齐,导致部分已审核商品在主站可见但分站在售列表里搜不到。
|
||||
-- 这里为开启自动展示的站点补齐缺失的货架行(加价 0 = 主站原价,站长可再自主加价)。
|
||||
-- INSERT IGNORE 兼容 uk_distribution_site_account(site_id, account_id) 已存在的情况,可重复执行。
|
||||
INSERT IGNORE INTO distribution_site_accounts
|
||||
(site_id, account_id, listing_id, display_status, display_disabled_by, markup_amount_cent, shelf_ratio_delta, created_at, updated_at)
|
||||
SELECT ds.id, l.account_id, l.id, 'enabled', '', 0, 0, NOW(), NOW()
|
||||
FROM distribution_sites AS ds
|
||||
JOIN rental_listings AS l ON l.status = 'published' AND l.review_status = 'approved'
|
||||
LEFT JOIN distribution_site_accounts AS dsa ON dsa.site_id = ds.id AND dsa.account_id = l.account_id
|
||||
WHERE ds.status = 'active' AND ds.display_account_enabled = 1 AND dsa.id IS NULL;
|
||||
|
||||
-- +goose Down
|
||||
|
||||
-- 回填迁移不回滚:删除这些货架行会抹掉站长在其上已经设置的加价与展示状态。
|
||||
Reference in New Issue
Block a user