feat(distribution): 优化一键同步主站商品功能(并发防重、分批入库、失效商品联动下架与初始加价)
- 后端优化: - 引入 Redis + 内存 sync.Map 双重互斥锁,避免并发/连击导致唯一索引冲突 (ErrSyncInProgress) - 使用 CreateInBatches(500) 进行大数据量批量插入,杜绝超长 SQL 与锁表超时 - 增加 CleanStaleListings 支持,自动排查并联动下架主站非在售的货架商品,清理历史幽灵数据 - 增加 DefaultShelfRatioDelta 支持,新同步商品直接继承初始加价比例,免除二次手动改价 - 前端优化: - distribution-admin 货架管理新增一键同步配置弹窗(可勾选自动下架失效商品、配置初始加价) - 同步完成后展示结构化统计弹窗(新增、保持、联动下架、主站在售总量) - 前后端类型定义与 API 客户端对齐升级 - 测试覆盖: - 补充 TestSyncSiteAccountsOptimizations 单元测试与 handler 集成测试 - 全工程测试与门禁 check.sh 100% 通过
This commit is contained in:
@@ -222,9 +222,17 @@ export interface AccountDisplay {
|
||||
source_channel?: string
|
||||
}
|
||||
|
||||
export interface SyncSiteAccountsRequest {
|
||||
listing_ids?: number[]
|
||||
clean_stale_listings?: boolean
|
||||
default_shelf_ratio_delta?: number
|
||||
}
|
||||
|
||||
export interface SyncSiteAccountsResult {
|
||||
synced_count: number
|
||||
skipped_count: number
|
||||
updated_count?: number
|
||||
disabled_stale_count?: number
|
||||
total_active: number
|
||||
}
|
||||
|
||||
@@ -405,8 +413,8 @@ export async function updateAccountDisplay(id: number, displayStatus: string): P
|
||||
return extract(resp)
|
||||
}
|
||||
|
||||
export async function syncSiteAccounts(siteID: number): Promise<SyncSiteAccountsResult> {
|
||||
const resp = await api.post<ApiResponse<SyncSiteAccountsResult>>(`/admin/distribution/sites/${siteID}/sync-accounts`)
|
||||
export async function syncSiteAccounts(siteID: number, req?: SyncSiteAccountsRequest): Promise<SyncSiteAccountsResult> {
|
||||
const resp = await api.post<ApiResponse<SyncSiteAccountsResult>>(`/admin/distribution/sites/${siteID}/sync-accounts`, req ?? {})
|
||||
return extract(resp)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user