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