From 35c9b7db585d6023cfc1a7e7c12976241e527124 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 14 Jul 2019 10:57:17 +0800 Subject: [PATCH] + FreeBatchStoreSkuInfo --- business/jxstore/cms/sync_store_sku.go | 59 +++++++++++++++++++++++++- business/partner/putils/store_sku.go | 19 +++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 712ff0037..309fc7483 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -1,9 +1,66 @@ package cms import ( + "fmt" + + "git.rosy.net.cn/jx-callback/business/partner/putils" + "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" + "git.rosy.net.cn/jx-callback/business/jxutils/tasksch" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/business/partner" ) -func SyncStoreSkuNew(ctx *jxcontext.Context, vendorIDs, storeIDs, nameIDs, skuIDs []int) (hint string, err error) { +func SyncStoreSkuNew(ctx *jxcontext.Context, vendorID, storeID int, vendorStoreID string, nameIDs, skuIDs []int) (hint string, err error) { + return hint, err +} + +func PruneMissingStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, vendorID, storeID int, vendorStoreID string, isAsync, isContinueWhenError bool) (hint string, err error) { + handler, _ := partner.GetPurchasePlatformFromVendorID(vendorID).(partner.ISingleStoreStoreSkuHandler) + if handler == nil { + return "", fmt.Errorf("平台:%s不支持此操作", model.VendorChineseNames[vendorID]) + } + db := dao.GetDB() + localSkuList, err := dao.GetStoreSkus2(db, vendorID, storeID, nil, false) + if err != nil { + return "", err + } + localSkuMap := make(map[int]*dao.StoreSkuSyncInfo) + for _, v := range localSkuList { + localSkuMap[v.SkuID] = v + } + var sku2Delete []*partner.StoreSkuInfo + task := tasksch.NewSeqTask(fmt.Sprintf("PruneMissingStoreSkus平台:%s", model.VendorChineseNames[vendorID]), ctx, + func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + switch step { + case 0: + remoteSkuList, err2 := handler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, nil) + if err = err2; err == nil { + for _, v := range remoteSkuList { + if localSkuMap[v.SkuList[0].SkuID] == nil { + sku2Delete = append(sku2Delete, &partner.StoreSkuInfo{ + SkuID: v.SkuList[0].SkuID, + VendorSkuID: v.SkuList[0].VendorSkuID, + }) + } + } + } + case 1: + if len(sku2Delete) > 0 { + err = putils.FreeBatchStoreSkuInfo(func(batchedStoreSkuList []*partner.StoreSkuInfo) (err error) { + err = handler.DeleteStoreSkus(ctx, storeID, vendorStoreID, sku2Delete) + return err + }, ctx, parentTask, sku2Delete, handler.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus)) + } + } + return nil, err + }, 2) + tasksch.HandleTask(task, parentTask, true).Run() + if isAsync { + hint = task.GetID() + } else { + _, err = task.GetResult(0) + } return hint, err } diff --git a/business/partner/putils/store_sku.go b/business/partner/putils/store_sku.go index abbeb1124..9c07cd639 100644 --- a/business/partner/putils/store_sku.go +++ b/business/partner/putils/store_sku.go @@ -100,3 +100,22 @@ func (p *DefSingleStorePlatform) GetStoreSkusBareInfo(ctx *jxcontext.Context, pa } return outStoreSkuList, err } + +func FreeBatchStoreSkuInfo(handler func([]*partner.StoreSkuInfo) (err error), ctx *jxcontext.Context, parentTask tasksch.ITask, storeSkuList []*partner.StoreSkuInfo, batchSize int) (err error) { + if len(storeSkuList) > batchSize { + task := tasksch.NewParallelTask("FreeBatchStoreSkuInfo", tasksch.NewParallelConfig().SetBatchSize(batchSize), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + batchStoreSkuList := make([]*partner.StoreSkuInfo, len(batchItemList)) + for k, v := range batchItemList { + batchStoreSkuList[k] = v.(*partner.StoreSkuInfo) + } + err = handler(batchStoreSkuList) + return nil, err + }, storeSkuList) + tasksch.HandleTask(task, parentTask, false).Run() + _, err = task.GetResult(0) + } else { + err = handler(storeSkuList) + } + return err +}