diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index a1f1017d1..0420a8b4c 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -469,7 +469,7 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s return nil, ErrEntityNotExist } outSkuNameExt = tmpInfo.SkuNames[0] - _, err = CurVendorSync.SyncSku(ctx, db, outSkuNameExt.SkuName.ID, -1, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, outSkuNameExt.SkuName.ID, -1, false, false, userName) return outSkuNameExt, err } @@ -507,7 +507,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf }, model.FieldJdSyncStatus) if err == nil { dao.Commit(db) - _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) } } } @@ -546,7 +546,7 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int } dao.Commit(db) if numSku > 0 { - _, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, false, userName) } return num, err } @@ -571,7 +571,7 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) if err = err2; err == nil { if result.TotalCount == 1 { outSkuNameExt = result.SkuNames[0] - _, err = CurVendorSync.SyncSku(ctx, db, outSkuNameExt.SkuName.ID, sku.ID, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, outSkuNameExt.SkuName.ID, sku.ID, false, false, userName) } else { err = ErrEntityNotExist } @@ -602,7 +602,7 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} return 0, err } dao.Commit(db) - _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName) } else { err = ErrEntityNotExist } @@ -627,7 +627,7 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e }, userName, nil); err == nil { dao.Commit(db) if num == 1 { - _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName) } else { err = ErrEntityNotExist } @@ -684,7 +684,7 @@ func AddSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName str } dao.WrapAddIDCULEntity(placeBind, userName) if err = dao.CreateEntity(db, placeBind); err == nil { - _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) } return placeBind, err } @@ -696,7 +696,7 @@ func DeleteSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName placeBind.PlaceCode = placeCode if num, err = dao.DeleteEntity(db, placeBind, model.FieldNameID, model.FieldPlaceCode); err == nil { if num == 1 { - _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, userName) + _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) } else { err = ErrEntityNotExist } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index b2f041384..2b46ead77 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -232,7 +232,7 @@ func (v *VendorSync) SyncStore(ctx *jxcontext.Context, db *dao.DaoDB, vendorID, return hint, err } -func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int, isAsync bool, userName string) (hint string, err error) { +func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int, isAsync, isContinueWhenError bool, userName string) (hint string, err error) { globals.SugarLogger.Debugf("SyncSku, nameID:%d, skuID:%d, userName:%s", nameID, skuID, userName) return v.LoopMultiStoresVendors(ctx, db, "SyncSku", isAsync, userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { multiStoresHandler := v.GetMultiStoreHandler(batchItemList[0].(int)) @@ -250,7 +250,7 @@ func (v *VendorSync) SyncSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuI sort.Sort(jxutils.SkuList(skuList)) // globals.SugarLogger.Debug(utils.Format4Output(skuList, false)) // todo 这里SetParallelCount(1)的原因是京东SPU特殊类型必须要序列化同步才能正常处理, db可能会有多线程问题 - task := tasksch.NewParallelTask("SyncSku loop sku", tasksch.NewParallelConfig().SetParallelCount(1), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { + task := tasksch.NewParallelTask("SyncSku loop sku", tasksch.NewParallelConfig().SetParallelCount(1).SetIsContinueWhenError(isContinueWhenError), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { sku := batchItemList[0].(*model.Sku) syncStatus := jxutils.GetObjFieldByName(sku, syncStatusFieldName).(int8) if (skuID == -1 || skuID == sku.ID) && (syncStatus != 0) { diff --git a/business/jxstore/initdata/initdata.go b/business/jxstore/initdata/initdata.go index e535a19ff..ca86e7908 100644 --- a/business/jxstore/initdata/initdata.go +++ b/business/jxstore/initdata/initdata.go @@ -304,7 +304,7 @@ func Convert2JDSPU(ctx *jxcontext.Context, count int, isAsync, isContinueWhenErr } rootTask := tasksch.NewParallelTask("Convert2JDSPU", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx.GetUserName(), func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { skuName := batchItemList[0].(*model.SkuName) - _, err = cms.CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, ctx.GetUserName()) + _, err = cms.CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, isContinueWhenError, ctx.GetUserName()) return nil, err }, skuNameList) tasksch.ManageTask(rootTask).Run() diff --git a/controllers/cms_sku.go b/controllers/cms_sku.go index 393e05585..b95f3d749 100644 --- a/controllers/cms_sku.go +++ b/controllers/cms_sku.go @@ -303,16 +303,17 @@ func (c *SkuController) GetVendorSku() { // @Title 同步商家SKU // @Description 同步商家SKU // @Param token header string true "认证token" -// @Param nameID query int true "name ID, -1表示所有" -// @Param skuID query int true "sku ID, -1表示所有" -// @Param isAsync query bool false "是否异步" +// @Param nameID formData int true "name ID, -1表示所有" +// @Param skuID formData int true "sku ID, -1表示所有" +// @Param isAsync formData bool false "是否异步" +// @Param isContinueWhenError formData bool false "单个同步失败是否继续,缺省false" // @Success 200 {object} controllers.CallResult // @Failure 200 {object} controllers.CallResult // @router /SyncSku [put] func (c *SkuController) SyncSku() { c.callSyncSku(func(params *tSkuSyncSkuParams) (retVal interface{}, errCode string, err error) { db := dao.GetDB() - retVal, err = cms.CurVendorSync.SyncSku(params.Ctx, db, params.NameID, params.SkuID, params.IsAsync, params.Ctx.GetUserName()) + retVal, err = cms.CurVendorSync.SyncSku(params.Ctx, db, params.NameID, params.SkuID, params.IsAsync, params.IsContinueWhenError, params.Ctx.GetUserName()) return retVal, "", err }) }