- PruneMissingStoreSkus也会删除本地不存在的远程分类
This commit is contained in:
@@ -61,7 +61,7 @@ func SyncStorCategories(ctx *jxcontext.Context, parentTask tasksch.ITask, vendor
|
||||
rootTask := tasksch.NewSeqTask(fmt.Sprintf("%s SyncStoreCategory step1", model.VendorChineseNames[vendorID]), ctx,
|
||||
func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
level := step + 1
|
||||
catList, err := dao.GetStoreCategories(db, vendorID, storeID, level)
|
||||
catList, err := dao.GetDirtyStoreCategories(db, vendorID, storeID, level)
|
||||
if len(catList) > 0 {
|
||||
num += len(catList)
|
||||
task := tasksch.NewParallelTask(fmt.Sprintf("%s SyncStoreCategory step2, level=%d", model.VendorChineseNames[vendorID], level),
|
||||
@@ -546,26 +546,39 @@ func syncStoreSkuNew(ctx *jxcontext.Context, parentTask tasksch.ITask, isFull bo
|
||||
return err
|
||||
}
|
||||
|
||||
// 清除京西没有,平台有的商品
|
||||
func checkRemoteCatExist(localCatMap map[string]*dao.SkuStoreCatInfo, catList []*partner.BareCategoryInfo) (cat2Delete []*partner.BareCategoryInfo) {
|
||||
for _, v := range catList {
|
||||
if localCatMap[v.VendorCatID] == nil {
|
||||
cat2Delete = append(cat2Delete, v)
|
||||
}
|
||||
cat2Delete = append(cat2Delete, checkRemoteCatExist(localCatMap, v.Children)...)
|
||||
}
|
||||
return cat2Delete
|
||||
}
|
||||
|
||||
// 清除京西没有,平台有的商品与商家分类
|
||||
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
|
||||
var cat2Delete []*partner.BareCategoryInfo
|
||||
task := tasksch.NewSeqTask(fmt.Sprintf("清除平台:%s上多余的门店商品", model.VendorChineseNames[vendorID]), ctx,
|
||||
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
switch step {
|
||||
case 0:
|
||||
localSkuList, err := dao.GetStoreSkus2(db, vendorID, storeID, nil, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
localSkuMap := make(map[int]*dao.StoreSkuSyncInfo)
|
||||
for _, v := range localSkuList {
|
||||
localSkuMap[v.SkuID] = v
|
||||
}
|
||||
|
||||
remoteSkuList, err2 := handler.GetStoreSkusFullInfo(ctx, task, storeID, vendorStoreID, nil)
|
||||
if err = err2; err == nil {
|
||||
for _, v := range remoteSkuList {
|
||||
@@ -577,7 +590,6 @@ func PruneMissingStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, ven
|
||||
}
|
||||
}
|
||||
}
|
||||
localSkuMap = nil
|
||||
case 1:
|
||||
if len(sku2Delete) > 0 {
|
||||
_, err = putils.FreeBatchStoreSkuInfo("删除门店商品", func(task tasksch.ITask, batchedStoreSkuList []*partner.StoreSkuInfo) (result interface{}, successCount int, err error) {
|
||||
@@ -585,9 +597,47 @@ func PruneMissingStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, ven
|
||||
return nil, 0, err
|
||||
}, ctx, parentTask, sku2Delete, handler.GetStoreSkusBatchSize(partner.FuncDeleteStoreSkus), isContinueWhenError)
|
||||
}
|
||||
sku2Delete = nil
|
||||
case 2:
|
||||
localCatList, err := dao.GetStoreCategories(db, vendorID, storeID, 0, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
localCatMap := make(map[string]*dao.SkuStoreCatInfo)
|
||||
for _, v := range localCatList {
|
||||
localCatMap[v.VendorCatID] = v
|
||||
}
|
||||
|
||||
remoteCatList, err2 := handler.GetStoreAllCategories(ctx, storeID, vendorStoreID)
|
||||
if err = err2; err == nil {
|
||||
cat2Delete = checkRemoteCatExist(localCatMap, remoteCatList)
|
||||
}
|
||||
case 3:
|
||||
if len(cat2Delete) > 0 {
|
||||
for i := 0; i < 2; i++ {
|
||||
level := 2 - i
|
||||
var levelCat2Delete []*partner.BareCategoryInfo
|
||||
for _, v := range cat2Delete {
|
||||
if v.Level == level {
|
||||
levelCat2Delete = append(levelCat2Delete, v)
|
||||
}
|
||||
}
|
||||
if len(levelCat2Delete) > 0 {
|
||||
task4Delete := tasksch.NewParallelTask(fmt.Sprintf("删除本地不存在的远程分类,level:%d", level), tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||
cat := batchItemList[0].(*partner.BareCategoryInfo)
|
||||
err = handler.DeleteStoreCategory(ctx, storeID, vendorStoreID, cat.VendorCatID)
|
||||
return nil, err
|
||||
}, levelCat2Delete)
|
||||
tasksch.HandleTask(task4Delete, task, true).Run()
|
||||
_, err = task4Delete.GetResult(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
cat2Delete = nil
|
||||
}
|
||||
return nil, err
|
||||
}, 2)
|
||||
}, 4)
|
||||
tasksch.HandleTask(task, parentTask, true).Run()
|
||||
if isAsync {
|
||||
hint = task.GetID()
|
||||
|
||||
Reference in New Issue
Block a user