feat(distribution): 优化一键同步主站商品功能(并发防重、分批入库、失效商品联动下架与初始加价)
- 后端优化: - 引入 Redis + 内存 sync.Map 双重互斥锁,避免并发/连击导致唯一索引冲突 (ErrSyncInProgress) - 使用 CreateInBatches(500) 进行大数据量批量插入,杜绝超长 SQL 与锁表超时 - 增加 CleanStaleListings 支持,自动排查并联动下架主站非在售的货架商品,清理历史幽灵数据 - 增加 DefaultShelfRatioDelta 支持,新同步商品直接继承初始加价比例,免除二次手动改价 - 前端优化: - distribution-admin 货架管理新增一键同步配置弹窗(可勾选自动下架失效商品、配置初始加价) - 同步完成后展示结构化统计弹窗(新增、保持、联动下架、主站在售总量) - 前后端类型定义与 API 客户端对齐升级 - 测试覆盖: - 补充 TestSyncSiteAccountsOptimizations 单元测试与 handler 集成测试 - 全工程测试与门禁 check.sh 100% 通过
This commit is contained in:
@@ -273,7 +273,7 @@ func (h *Handler) SyncSiteAccounts(c *gin.Context) {
|
||||
response.BadRequest(c, "site_id 不正确")
|
||||
return
|
||||
}
|
||||
result, err := h.service.SyncSiteAccounts(c.Request.Context(), adminID, scoped, req.ListingIDs)
|
||||
result, err := h.service.SyncSiteAccounts(c.Request.Context(), adminID, scoped, req)
|
||||
if err != nil {
|
||||
writeError(c, err)
|
||||
return
|
||||
@@ -797,6 +797,8 @@ func writeError(c *gin.Context, err error) {
|
||||
response.BadRequest(c, "该结算批次无法作废")
|
||||
case errors.Is(err, ErrTooManySyncListings):
|
||||
response.BadRequest(c, "一次勾选同步的商品过多")
|
||||
case errors.Is(err, ErrSyncInProgress):
|
||||
response.BadRequest(c, "当前分销站点商品同步正在进行中,请勿重复操作")
|
||||
case errors.Is(err, ErrSyncListingNotFound):
|
||||
response.BadRequest(c, "勾选的商品不存在")
|
||||
case errors.Is(err, ErrEmptyListingIDs):
|
||||
|
||||
Reference in New Issue
Block a user