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.GetStoreAllSkus(ctx, storeID, vendorStoreID) 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.BareStoreSkuInfo for _, v := range batchItemList { skuName := v.(*partner.SkuNameInfo) skuList = append(skuList, &partner.BareStoreSkuInfo{ 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 }