- 新版同步逻辑编译通过,欠SKU的创建已存在与删除不存在判断逻辑

This commit is contained in:
gazebo
2019-07-21 21:29:28 +08:00
parent 5b297fcdf2
commit 8812d4056d
7 changed files with 317 additions and 114 deletions

View File

@@ -9,6 +9,7 @@ import (
"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"
"git.rosy.net.cn/jx-callback/business/partner/putils"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
@@ -50,6 +51,14 @@ func convertVendorCatList(remoteCats []*ebaiapi.CategoryInfo) (cats []*partner.B
return cats
}
func (p *PurchaseHandler) IsErrCategoryExist(err error) (isExist bool) {
return ebaiapi.IsErrCategoryExist(err)
}
func (p *PurchaseHandler) IsErrCategoryNotExist(err error) (isNotExist bool) {
return ebaiapi.IsErrCategoryNotExist(err)
}
func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
var vendorCatID int64
if globals.EnableEbaiStoreWrite {
@@ -78,16 +87,16 @@ func (p *PurchaseHandler) DeleteStoreCategory(ctx *jxcontext.Context, storeID in
// 门店商品
// 多门店平台不需要实现这个接口
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error) {
func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (successList []*dao.StoreSkuSyncInfo, err error) {
storeSku := storeSkuList[0]
if globals.EnableEbaiStoreWrite {
_, err = api.EbaiAPI.SkuUpdate(utils.Int2Str(storeID), utils.Str2Int64(storeSku.VendorSkuID), genSkuParamsFromStoreSkuInfo2(storeSku))
}
return err
return nil, err
}
// 对于多门店平台来说storeSkuList中只有SkuID与VendorSkuID有意义
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error) {
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (successList []*dao.StoreSkuSyncInfo, err error) {
storeSku := storeSkuList[0]
var vendorSkuID int64
if globals.EnableEbaiStoreWrite {
@@ -96,40 +105,45 @@ func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, v
vendorSkuID = jxutils.GenFakeID()
}
storeSku.VendorSkuID = utils.Int64ToStr(vendorSkuID)
return err
return nil, err
}
func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
func (p *PurchaseHandler) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (successList []*partner.StoreSkuInfo, err error) {
if globals.EnableEbaiStoreWrite {
_, err = api.EbaiAPI.SkuDelete(utils.Int2Str(storeID), partner.BareStoreSkuInfoList(storeSkuList).GetVendorSkuIDIntList(), nil)
}
return err
}
func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
var validSkus, invalidSkus []int64
for _, storeSku := range storeSkuList {
if storeSku.Status == model.SkuStatusNormal {
validSkus = append(validSkus, utils.Str2Int64(storeSku.VendorSkuID))
} else {
invalidSkus = append(invalidSkus, utils.Str2Int64(storeSku.VendorSkuID))
}
}
if globals.EnableEbaiStoreWrite {
if len(invalidSkus) > 1 {
_, err = api.EbaiAPI.SkuOffline(utils.Int2Str(storeID), invalidSkus, nil, nil)
} else if len(invalidSkus) == 1 {
err = api.EbaiAPI.SkuOfflineOne(utils.Int2Str(storeID), invalidSkus[0], "", "")
}
if err == nil {
if len(validSkus) > 1 {
_, err = api.EbaiAPI.SkuOnline(utils.Int2Str(storeID), validSkus, nil, nil)
} else if len(validSkus) == 1 {
err = api.EbaiAPI.SkuOnlineOne(utils.Int2Str(storeID), validSkus[0], "", "")
failedEbaiSkuIDs, err2 := api.EbaiAPI.SkuDelete(utils.Int2Str(storeID), partner.BareStoreSkuInfoList(storeSkuList).GetVendorSkuIDIntList(), nil)
if err = err2; err == nil {
if err = putils.GenPartialFailedErr(failedEbaiSkuIDs, len(failedEbaiSkuIDs)); err != nil {
successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, utils.Int64Slice2String(failedEbaiSkuIDs))
}
}
}
return err
return successList, err
}
func (p *PurchaseHandler) UpdateStoreSkusStatus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo, status int) (successList []*partner.StoreSkuInfo, err error) {
vendorSkuIDs := partner.BareStoreSkuInfoList(storeSkuList).GetVendorSkuIDIntList()
if globals.EnableEbaiStoreWrite {
var failedEbaiSkuIDs []int64
if status == model.SkuStatusNormal {
if len(vendorSkuIDs) > 1 {
failedEbaiSkuIDs, err = api.EbaiAPI.SkuOnline(utils.Int2Str(storeID), vendorSkuIDs, nil, nil)
} else if len(vendorSkuIDs) == 1 {
err = api.EbaiAPI.SkuOnlineOne(utils.Int2Str(storeID), vendorSkuIDs[0], "", "")
}
} else {
if len(vendorSkuIDs) > 1 {
failedEbaiSkuIDs, err = api.EbaiAPI.SkuOffline(utils.Int2Str(storeID), vendorSkuIDs, nil, nil)
} else if len(vendorSkuIDs) == 1 {
err = api.EbaiAPI.SkuOfflineOne(utils.Int2Str(storeID), vendorSkuIDs[0], "", "")
}
}
if err == nil {
if err = putils.GenPartialFailedErr(failedEbaiSkuIDs, len(failedEbaiSkuIDs)); err != nil {
successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, utils.Int64Slice2String(failedEbaiSkuIDs))
}
}
}
return successList, err
}
func StoreSkuInfoList2Ebai(storeSkuList []*partner.StoreSkuInfo) (outList ebaiapi.ShopSkuInfoList) {
@@ -145,26 +159,45 @@ func StoreSkuInfoList2Ebai(storeSkuList []*partner.StoreSkuInfo) (outList ebaiap
return outList
}
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
func getFailedVendorIDs(l []*ebaiapi.ShopSkuPriceUpdateResponseItem) (vendorSkuIDs []string) {
for _, v := range l {
if v.ErrorNo != 0 {
vendorSkuIDs = append(vendorSkuIDs, utils.Int64ToStr(v.SkuID))
}
}
return vendorSkuIDs
}
func (p *PurchaseHandler) UpdateStoreSkusPrice(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (successList []*partner.StoreSkuInfo, err error) {
if globals.EnableEbaiStoreWrite {
if len(storeSkuList) > 1 {
_, err = api.EbaiAPI.SkuPriceUpdateBatch(utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList), ebaiapi.SkuIDTypeSkuID)
updateResponse, err2 := api.EbaiAPI.SkuPriceUpdateBatch(utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList), ebaiapi.SkuIDTypeSkuID)
if err = err2; err != nil {
if len(updateResponse.FailedList) > 0 {
successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, getFailedVendorIDs(updateResponse.FailedList))
}
}
} else if len(storeSkuList) == 1 {
err = api.EbaiAPI.SkuPriceUpdateOne(utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0])
}
}
return err
return successList, err
}
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (err error) {
func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (successList []*partner.StoreSkuInfo, err error) {
if globals.EnableEbaiStoreWrite {
if len(storeSkuList) > 1 {
_, err = api.EbaiAPI.SkuStockUpdateBatch(utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList), ebaiapi.SkuIDTypeSkuID)
failedEbaiSkuIDs, err2 := api.EbaiAPI.SkuStockUpdateBatch(utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList), ebaiapi.SkuIDTypeSkuID)
if err = err2; err == nil {
if err = putils.GenPartialFailedErr(failedEbaiSkuIDs, len(failedEbaiSkuIDs)); err != nil {
successList = putils.UnselectStoreSkuListByVendorSkuIDs(storeSkuList, utils.Int64Slice2String(failedEbaiSkuIDs))
}
}
} else if len(storeSkuList) == 1 {
err = api.EbaiAPI.SkuStockUpdateOne(utils.Int2Str(storeID), StoreSkuInfoList2Ebai(storeSkuList)[0])
}
}
return err
return successList, err
}
func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo) (params map[string]interface{}) {
@@ -232,7 +265,7 @@ func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTas
for i := 2; i <= page1.Pages; i++ {
pages[i-2] = i
}
task := tasksch.NewParallelTask("ebai GetStoreAllSkus", nil, ctx,
task := tasksch.NewParallelTask("ebai GetStoreSkusFullInfo", nil, ctx,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
callParams := &ebaiapi.SkuListParams{
PageSize: MaxPageSize,