From f31b158259a80220e1849f4478716213003afaaa Mon Sep 17 00:00:00 2001 From: gazebo Date: Sat, 13 Jul 2019 15:31:30 +0800 Subject: [PATCH] =?UTF-8?q?-=20putils/store=5Fsku.go=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E9=80=9A=E7=94=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sync_store_sku.go | 69 ------------ business/jxstore/cms/sync_store_sku_test.go | 41 ------- business/partner/partner_store_sku.go | 7 ++ business/partner/purchase/ebai/ebai.go | 10 +- business/partner/purchase/ebai/store_sku2.go | 46 -------- .../partner/purchase/ebai/store_sku2_test.go | 27 ++++- business/partner/purchase/mtwm/mtwm.go | 10 +- business/partner/purchase/mtwm/store_sku2.go | 43 +------- .../partner/purchase/mtwm/store_sku2_test.go | 25 ++++- business/partner/putils/store_sku.go | 102 ++++++++++++++++++ 10 files changed, 177 insertions(+), 203 deletions(-) create mode 100644 business/partner/putils/store_sku.go diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 181f6930a..712ff0037 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -1,78 +1,9 @@ package cms import ( - "fmt" - "sort" - "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/partner" ) func SyncStoreSkuNew(ctx *jxcontext.Context, vendorIDs, storeIDs, nameIDs, skuIDs []int) (hint string, err error) { return hint, err } - -func DeleteStoreAllSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, handler partner.ISingleStoreStoreSkuHandler, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) { - skuNameList, err := handler.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, nil) - if err != nil { - return err - } - batchSize := handler.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus) - task := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllSkus, vendorStoreID:%s", vendorStoreID), - tasksch.NewParallelConfig().SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - var skuList []*partner.StoreSkuInfo - for _, v := range batchItemList { - skuName := v.(*partner.SkuNameInfo) - skuList = append(skuList, &partner.StoreSkuInfo{ - VendorSkuID: skuName.SkuList[0].VendorSkuID, - }) - } - err = handler.DeleteStoreSkus(ctx, storeID, vendorStoreID, skuList) - return nil, err - }, skuNameList) - tasksch.HandleTask(task, parentTask, true).Run() - _, err = task.GetResult(0) - return err -} - -func DeleteStoreAllCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, handler partner.ISingleStoreStoreSkuHandler, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) { - catList, err := handler.GetStoreAllCategories(ctx, storeID, vendorStoreID) - if err != nil { - return err - } - catListMap := make(map[int][]*partner.BareCategoryInfo) - flattedCatList := flatCatList(catList) - for _, v := range flattedCatList { - catListMap[v.Level] = append(catListMap[v.Level], v) - } - var levelList []int - for k := range catListMap { - levelList = append(levelList, k) - } - sort.Sort(sort.Reverse(sort.IntSlice(levelList))) - task1 := tasksch.NewSeqTask(fmt.Sprintf("DeleteStoreAllCategories1, vendorStoreID:%s", vendorStoreID), ctx, - func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { - task2 := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllCategories2, vendorStoreID:%s", vendorStoreID), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - catInfo := batchItemList[0].(*partner.BareCategoryInfo) - err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID) - return nil, err - }, catListMap[levelList[step]]) - tasksch.HandleTask(task2, task, true).Run() - _, err = task2.GetResult(0) - return nil, err - }, len(levelList)) - tasksch.HandleTask(task1, parentTask, true).Run() - _, err = task1.GetResult(0) - return err -} - -func flatCatList(catList []*partner.BareCategoryInfo) (flattedCatList []*partner.BareCategoryInfo) { - flattedCatList = append(flattedCatList, catList...) - for _, v := range catList { - flattedCatList = append(flattedCatList, flatCatList(v.Children)...) - } - return flattedCatList -} diff --git a/business/jxstore/cms/sync_store_sku_test.go b/business/jxstore/cms/sync_store_sku_test.go index a804e0cb1..5d2ac294f 100644 --- a/business/jxstore/cms/sync_store_sku_test.go +++ b/business/jxstore/cms/sync_store_sku_test.go @@ -1,42 +1 @@ package cms - -import ( - "testing" - - "git.rosy.net.cn/jx-callback/business/model" - "git.rosy.net.cn/jx-callback/business/partner" - - "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" -) - -func TestDeleteStoreAllSkus(t *testing.T) { - handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDEBAI).(partner.ISingleStoreStoreSkuHandler) - err := DeleteStoreAllSkus(jxcontext.AdminCtx, nil, handler, 2, "2267254343", true) - if err != nil { - t.Fatal(err) - } -} - -func TestDeleteStoreAllCategories(t *testing.T) { - handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDEBAI).(partner.ISingleStoreStoreSkuHandler) - err := DeleteStoreAllCategories(jxcontext.AdminCtx, nil, handler, 2, "2267254343", true) - if err != nil { - t.Fatal(err) - } -} - -func TestDeleteStoreAllSkusMtwm(t *testing.T) { - handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDMTWM).(partner.ISingleStoreStoreSkuHandler) - err := DeleteStoreAllSkus(jxcontext.AdminCtx, nil, handler, 2, "2523687", true) - if err != nil { - t.Fatal(err) - } -} - -func TestDeleteStoreAllCategoriesMtwm(t *testing.T) { - handler := partner.GetPurchasePlatformFromVendorID(model.VendorIDMTWM).(partner.ISingleStoreStoreSkuHandler) - err := DeleteStoreAllCategories(jxcontext.AdminCtx, nil, handler, 2, "2523687", true) - if err != nil { - t.Fatal(err) - } -} diff --git a/business/partner/partner_store_sku.go b/business/partner/partner_store_sku.go index 9091bc0ac..634fe1b14 100644 --- a/business/partner/partner_store_sku.go +++ b/business/partner/partner_store_sku.go @@ -19,6 +19,11 @@ const ( FuncDeleteStoreSkus = 9 ) +const ( + MaxStoreSkuStock = 9999 + UnlimitedStoreSkuStock = -1 +) + type StoreSkuInfo struct { SkuID int `json:"skuID,omitempty"` VendorSkuID string `json:"vendorSkuID,omitempty"` @@ -108,11 +113,13 @@ type ISingleStoreStoreSkuHandler interface { CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*StoreSkuInfo) (err error) + DeleteStoreAllSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) GetStoreAllCategories(ctx *jxcontext.Context, storeID int, vendorStoreID string) (cats []*BareCategoryInfo, err error) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) DeleteStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID, vendorCatID string) (err error) + DeleteStoreAllCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) } func BuildSkuName(skuID int, vendorSkuID string) (skuName *SkuNameInfo) { diff --git a/business/partner/purchase/ebai/ebai.go b/business/partner/purchase/ebai/ebai.go index 6dabb5db1..26673b1fa 100644 --- a/business/partner/purchase/ebai/ebai.go +++ b/business/partner/purchase/ebai/ebai.go @@ -6,6 +6,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/business/partner/putils" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) @@ -16,15 +17,22 @@ var ( type PurchaseHandler struct { partner.BasePurchasePlatform + putils.DefSingleStorePlatform } func init() { if api.EbaiAPI != nil { - CurPurchaseHandler = new(PurchaseHandler) + CurPurchaseHandler = New() partner.RegisterPurchasePlatform(CurPurchaseHandler) } } +func New() (obj *PurchaseHandler) { + obj = new(PurchaseHandler) + obj.ISingleStoreStoreSkuHandler = obj + return obj +} + func EbaiBusStatus2JxStatus(ebaiStatus int) int { if ebaiStatus == ebaiapi.ShopBusStatusHaveRest || ebaiStatus == ebaiapi.ShopBusStatusSuspended { return model.StoreStatusClosed diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 15884a040..4c87ddd34 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -199,52 +199,6 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo) (params map[s return params } -func (p *PurchaseHandler) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) { - vendorSkuIDIntList := partner.BareStoreSkuInfoList(inStoreSkuList).GetVendorSkuIDIntList() - var vendorSkuList []*ebaiapi.SkuInfo - if len(vendorSkuIDIntList) > 1 { - task := tasksch.NewParallelTask("获取饿百平台门店商品信息", nil, ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - vendorSkuID := batchItemList[0].(int64) - skuInfo, err := api.EbaiAPI.SkuList(utils.Int2Str(storeID), &ebaiapi.SkuListParams{ - SkuID: vendorSkuID, - }) - if err == nil { - vendorSkuList = skuInfo.List - return skuInfo.List, nil - } - return nil, err - }, vendorSkuIDIntList) - tasksch.HandleTask(task, parentTask, false).Run() - _, err = task.GetResult(0) - } else if len(vendorSkuIDIntList) == 1 { - skuInfo, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), &ebaiapi.SkuListParams{ - SkuID: vendorSkuIDIntList[0], - }) - if err = err2; err == nil { - vendorSkuList = skuInfo.List - } - } else { - return nil, nil - } - if err == nil { - storeSkuMap := make(map[int64]*partner.StoreSkuInfo) - for _, v := range inStoreSkuList { - storeSkuMap[utils.Str2Int64(v.VendorSkuID)] = v - } - for _, vendorSku := range vendorSkuList { - storeSku := storeSkuMap[vendorSku.SkuID] - // globals.SugarLogger.Debug(utils.Format4Output(storeSku, false)) - storeSku.Stock = vendorSku.LeftNum - storeSku.Price = vendorSku.SalePrice - storeSku.Status = ebaiSkuStatus2Jx(vendorSku.Status) - - outStoreSkuList = append(outStoreSkuList, storeSku) - } - } - return outStoreSkuList, err -} - func ebaiSkuStatus2Jx(ebaiSkuStatus int) (jxSkuStatus int) { if ebaiSkuStatus == ebaiapi.SkuStatusOnline { jxSkuStatus = model.SkuStatusNormal diff --git a/business/partner/purchase/ebai/store_sku2_test.go b/business/partner/purchase/ebai/store_sku2_test.go index 471f90a1d..56851e48d 100644 --- a/business/partner/purchase/ebai/store_sku2_test.go +++ b/business/partner/purchase/ebai/store_sku2_test.go @@ -7,11 +7,34 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" ) -func TestGetStoreAllSkus(t *testing.T) { - skuNameList, err := new(PurchaseHandler).GetStoreSkusFullInfo(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, []int{4256}) +func TestGetStoreSkusFullInfo(t *testing.T) { + skuNameList, err := CurPurchaseHandler.GetStoreSkusFullInfo(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, []int{4256}) if err != nil { t.Fatal(err.Error()) } t.Log(utils.Format4Output(skuNameList, false)) t.Log(len(skuNameList)) } + +func TestGetStoreSkusBareInfo(t *testing.T) { + storeSkuList, err := CurPurchaseHandler.GetStoreSkusBareInfo(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, nil) + if err != nil { + t.Fatal(err.Error()) + } + t.Log(utils.Format4Output(storeSkuList, false)) + t.Log(len(storeSkuList)) +} + +func TestDeleteStoreAllSkus(t *testing.T) { + err := CurPurchaseHandler.DeleteStoreAllSkus(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, true) + if err != nil { + t.Fatal(err) + } +} + +func TestDeleteStoreAllCategories(t *testing.T) { + err := CurPurchaseHandler.DeleteStoreAllCategories(jxcontext.AdminCtx, nil, testShopID, testShopBaiduID, true) + if err != nil { + t.Fatal(err) + } +} diff --git a/business/partner/purchase/mtwm/mtwm.go b/business/partner/purchase/mtwm/mtwm.go index dacf6c7a4..4f7b0f314 100644 --- a/business/partner/purchase/mtwm/mtwm.go +++ b/business/partner/purchase/mtwm/mtwm.go @@ -10,6 +10,7 @@ import ( "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/partner" + "git.rosy.net.cn/jx-callback/business/partner/putils" "git.rosy.net.cn/jx-callback/globals/api" ) @@ -19,15 +20,22 @@ var ( type PurchaseHandler struct { partner.BasePurchasePlatform + putils.DefSingleStorePlatform } func init() { if api.MtwmAPI != nil { - curPurchaseHandler = new(PurchaseHandler) + curPurchaseHandler = New() partner.RegisterPurchasePlatform(curPurchaseHandler) } } +func New() (obj *PurchaseHandler) { + obj = new(PurchaseHandler) + obj.ISingleStoreStoreSkuHandler = obj + return obj +} + func (c *PurchaseHandler) GetVendorID() int { return model.VendorIDMTWM } diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index f817d2db7..bac8c62a6 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -237,47 +237,6 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, storeID i return err } -func (p *PurchaseHandler) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) { - vendorSkuIDList := partner.BareStoreSkuInfoList(inStoreSkuList).GetVendorSkuIDList() - var vendorFoodList []*mtwmapi.AppFood - if len(vendorSkuIDList) > 1 { - task := tasksch.NewParallelTask("获取饿百平台门店商品信息", nil, ctx, - func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { - vendorSkuID := batchItemList[0].(string) - skuInfo, err := api.MtwmAPI.RetailGet(vendorStoreID, vendorSkuID) - if err == nil { - vendorFoodList = []*mtwmapi.AppFood{skuInfo} - return vendorFoodList, nil - } - return nil, err - }, vendorSkuIDList) - tasksch.HandleTask(task, parentTask, false).Run() - _, err = task.GetResult(0) - } else if len(vendorSkuIDList) == 1 { - skuInfo, err2 := api.MtwmAPI.RetailGet(vendorStoreID, vendorSkuIDList[0]) - if err = err2; err == nil { - vendorFoodList = []*mtwmapi.AppFood{skuInfo} - } - } else { - return nil, nil - } - if err == nil { - storeSkuMap := make(map[string]*partner.StoreSkuInfo) - for _, v := range inStoreSkuList { - storeSkuMap[v.VendorSkuID] = v - } - for _, foodInfo := range vendorFoodList { - vendorSku := foodInfo.SkuList[0] - storeSku := storeSkuMap[vendorSku.SkuID] - storeSku.Stock = int(utils.Str2Int64WithDefault(vendorSku.Stock, 0)) - storeSku.Price = jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(vendorSku.Price, 0)) - storeSku.Status = mtwmSkuStatus2Jx(foodInfo.IsSoldOut) - outStoreSkuList = append(outStoreSkuList, storeSku) - } - } - return outStoreSkuList, err -} - func mtwmSkuStatus2Jx(mtwmSkuStatus int) (jxSkuStatus int) { if mtwmSkuStatus == 0 { jxSkuStatus = model.SkuStatusNormal @@ -326,7 +285,7 @@ func vendorSku2Jx(vendorSku *mtwmapi.AppFood) (skuName *partner.SkuNameInfo) { VendorSkuID: mtwmSku.SkuID, SkuID: int(utils.Str2Int64WithDefault(mtwmSku.SkuID, 0)), - Stock: int(utils.Str2Int64WithDefault(mtwmSku.Stock, 0)), + Stock: int(utils.Str2Int64WithDefault(mtwmSku.Stock, partner.UnlimitedStoreSkuStock)), Price: jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(mtwmSku.Price, 0)), Status: mtwmSkuStatus2Jx(vendorSku.IsSoldOut), }, diff --git a/business/partner/purchase/mtwm/store_sku2_test.go b/business/partner/purchase/mtwm/store_sku2_test.go index 1cca6178b..4cfb92b44 100644 --- a/business/partner/purchase/mtwm/store_sku2_test.go +++ b/business/partner/purchase/mtwm/store_sku2_test.go @@ -8,7 +8,7 @@ import ( // _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman" ) -func TestGetStoreAllSkus(t *testing.T) { +func TestGetStoreSkusFullInfo(t *testing.T) { skuNameList, err := new(PurchaseHandler).GetStoreSkusFullInfo(jxcontext.AdminCtx, nil, 2, "2523687", nil) if err != nil { t.Fatal(err) @@ -16,3 +16,26 @@ func TestGetStoreAllSkus(t *testing.T) { t.Log(utils.Format4Output(skuNameList, false)) t.Log(len(skuNameList)) } + +func TestGetStoreSkusBareInfo(t *testing.T) { + storeSkuList, err := curPurchaseHandler.GetStoreSkusBareInfo(jxcontext.AdminCtx, nil, 2, "2523687", nil) + if err != nil { + t.Fatal(err.Error()) + } + t.Log(utils.Format4Output(storeSkuList, false)) + t.Log(len(storeSkuList)) +} + +func TestDeleteStoreAllSkus(t *testing.T) { + err := curPurchaseHandler.DeleteStoreAllSkus(jxcontext.AdminCtx, nil, 2, "2523687", true) + if err != nil { + t.Fatal(err) + } +} + +func TestDeleteStoreAllCategories(t *testing.T) { + err := curPurchaseHandler.DeleteStoreAllCategories(jxcontext.AdminCtx, nil, 2, "2523687", true) + if err != nil { + t.Fatal(err) + } +} diff --git a/business/partner/putils/store_sku.go b/business/partner/putils/store_sku.go new file mode 100644 index 000000000..abbeb1124 --- /dev/null +++ b/business/partner/putils/store_sku.go @@ -0,0 +1,102 @@ +package putils + +import ( + "fmt" + "sort" + + "git.rosy.net.cn/jx-callback/globals" + + "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/partner" +) + +type DefSingleStorePlatform struct { + partner.ISingleStoreStoreSkuHandler +} + +func (p *DefSingleStorePlatform) DeleteStoreAllSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) { + skuNameList, err := p.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, nil) + if err != nil { + return err + } + batchSize := p.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus) + task := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllSkus, vendorStoreID:%s", vendorStoreID), + tasksch.NewParallelConfig().SetBatchSize(batchSize).SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + var skuList []*partner.StoreSkuInfo + for _, v := range batchItemList { + skuName := v.(*partner.SkuNameInfo) + skuList = append(skuList, &partner.StoreSkuInfo{ + VendorSkuID: skuName.SkuList[0].VendorSkuID, + }) + } + err = p.DeleteStoreSkus(ctx, storeID, vendorStoreID, skuList) + return nil, err + }, skuNameList) + tasksch.HandleTask(task, parentTask, true).Run() + _, err = task.GetResult(0) + return err +} + +func (p *DefSingleStorePlatform) DeleteStoreAllCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, isContinueWhenError bool) (err error) { + catList, err := p.GetStoreAllCategories(ctx, storeID, vendorStoreID) + if err != nil { + return err + } + catListMap := make(map[int][]*partner.BareCategoryInfo) + flattedCatList := flatCatList(catList) + for _, v := range flattedCatList { + catListMap[v.Level] = append(catListMap[v.Level], v) + } + var levelList []int + for k := range catListMap { + levelList = append(levelList, k) + } + sort.Sort(sort.Reverse(sort.IntSlice(levelList))) + task1 := tasksch.NewSeqTask(fmt.Sprintf("DeleteStoreAllCategories1, vendorStoreID:%s", vendorStoreID), ctx, + func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { + task2 := tasksch.NewParallelTask(fmt.Sprintf("DeleteStoreAllCategories2, vendorStoreID:%s", vendorStoreID), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, + func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { + catInfo := batchItemList[0].(*partner.BareCategoryInfo) + err = p.DeleteStoreCategory(ctx, storeID, vendorStoreID, catInfo.VendorCatID) + return nil, err + }, catListMap[levelList[step]]) + tasksch.HandleTask(task2, task, true).Run() + _, err = task2.GetResult(0) + return nil, err + }, len(levelList)) + tasksch.HandleTask(task1, parentTask, true).Run() + _, err = task1.GetResult(0) + return err +} + +func flatCatList(catList []*partner.BareCategoryInfo) (flattedCatList []*partner.BareCategoryInfo) { + flattedCatList = append(flattedCatList, catList...) + for _, v := range catList { + flattedCatList = append(flattedCatList, flatCatList(v.Children)...) + } + return flattedCatList +} + +func (p *DefSingleStorePlatform) GetStoreSkusBareInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, inStoreSkuList []*partner.StoreSkuInfo) (outStoreSkuList []*partner.StoreSkuInfo, err error) { + var skuIDs []int + isSingle := len(inStoreSkuList) == 1 + if isSingle { + skuIDs = []int{inStoreSkuList[0].SkuID} + } + globals.SugarLogger.Debug(p) + skuNameList, err := p.GetStoreSkusFullInfo(ctx, parentTask, storeID, vendorStoreID, skuIDs) + if err != nil { + return nil, err + } + for _, skuName := range skuNameList { + storeSkuBareInfo := &skuName.SkuList[0].StoreSkuInfo + if isSingle { + storeSkuBareInfo.VendorNameID = inStoreSkuList[0].VendorNameID + storeSkuBareInfo.VendorSkuID = inStoreSkuList[0].VendorSkuID + } + outStoreSkuList = append(outStoreSkuList, storeSkuBareInfo) + } + return outStoreSkuList, err +}