- 继续重构新版同步逻辑

This commit is contained in:
gazebo
2019-07-12 15:01:49 +08:00
parent 7d59d1d0f1
commit 8f0f3f2690
7 changed files with 196 additions and 12 deletions

View File

@@ -31,7 +31,8 @@ type BareStoreSkuInfo struct {
type FullSkuInfo struct { type FullSkuInfo struct {
BareStoreSkuInfo BareStoreSkuInfo
SkuName string SkuName string
SpecQuality int Comment string
SpecQuality float64
SpecUnit string SpecUnit string
Weight int Weight int
ActPrice int64 ActPrice int64
@@ -40,6 +41,8 @@ type FullSkuInfo struct {
type SkuNameInfo struct { type SkuNameInfo struct {
NameID int `json:"nameID,omitempty"` NameID int `json:"nameID,omitempty"`
VendorNameID string `json:"vendorNameID,omitempty"` VendorNameID string `json:"vendorNameID,omitempty"`
Prefix string
Name string Name string
Description string Description string
Unit string Unit string
@@ -100,7 +103,7 @@ type ISingleStoreStoreSkuHandler interface {
IPurchasePlatformStoreSkuHandler IPurchasePlatformStoreSkuHandler
// 这个函数与GetStoreSkusInfo的区别是GetStoreAllSkus取的是全信息而GetStoreSkusInfo只含库存价格与可售信息 // 这个函数与GetStoreSkusInfo的区别是GetStoreAllSkus取的是全信息而GetStoreSkusInfo只含库存价格与可售信息
// GetStoreAllSkus(ctx *jxcontext.Context, vendorStoreID string) (skuNameList []*SkuNameInfo, err error) GetStoreAllSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string) (skuNameList []*SkuNameInfo, err error)
CreateStoreSkus(ctx *jxcontext.Context, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error) CreateStoreSkus(ctx *jxcontext.Context, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error)
UpdateStoreSkus(ctx *jxcontext.Context, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error) UpdateStoreSkus(ctx *jxcontext.Context, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (err error)
DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*BareStoreSkuInfo) (err error) DeleteStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*BareStoreSkuInfo) (err error)

View File

@@ -12,8 +12,11 @@ import (
) )
const ( const (
testShopBaiduID = 2233976901 testShopBaiduID = "2233976901"
testShopID = 100077 testShopID = 100077
// testShopBaiduID = "2267254343"
// testShopID = 2
) )
func init() { func init() {

View File

@@ -228,12 +228,14 @@ func (p *PurchaseHandler) GetStoreSkusInfo(ctx *jxcontext.Context, parentTask ta
for _, v := range inStoreSkuList { for _, v := range inStoreSkuList {
storeSkuMap[utils.Str2Int64(v.VendorSkuID)] = v storeSkuMap[utils.Str2Int64(v.VendorSkuID)] = v
} }
for _, skuInfo := range vendorSkuList { for _, vendorSku := range vendorSkuList {
storeSku := storeSkuMap[skuInfo.SkuID] storeSku := storeSkuMap[vendorSku.SkuID]
globals.SugarLogger.Debug(utils.Format4Output(storeSku, false)) // globals.SugarLogger.Debug(utils.Format4Output(storeSku, false))
storeSku.Stock = vendorSku.LeftNum
storeSku.Price = vendorSku.SalePrice
storeSku.Status = ebaiSkuStatus2Jx(vendorSku.Status)
outStoreSkuList = append(outStoreSkuList, storeSku) outStoreSkuList = append(outStoreSkuList, storeSku)
storeSku.Price = skuInfo.SalePrice
storeSku.Status = ebaiSkuStatus2Jx(skuInfo.Status)
} }
} }
return outStoreSkuList, err return outStoreSkuList, err
@@ -249,3 +251,83 @@ func ebaiSkuStatus2Jx(ebaiSkuStatus int) (jxSkuStatus int) {
} }
return jxSkuStatus return jxSkuStatus
} }
func (p *PurchaseHandler) GetStoreAllSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string) (skuNameList []*partner.SkuNameInfo, err error) {
page1, err := api.EbaiAPI.SkuList(utils.Int2Str(storeID), &ebaiapi.SkuListParams{
PageSize: MaxPageSize,
})
if err == nil {
skuNameList = append(skuNameList, vendorSkuList2Jx(page1.List)...)
if page1.Pages > 1 {
pages := make([]int, page1.Pages-1)
for i := 2; i <= page1.Pages; i++ {
pages[i-2] = i
}
task := tasksch.NewParallelTask("ebai GetStoreAllSkus", nil, ctx,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
callParams := &ebaiapi.SkuListParams{
PageSize: MaxPageSize,
Page: batchItemList[0].(int),
}
pageSku, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), callParams)
if err2 == nil {
return pageSku.List, err2
}
return nil, err2
}, pages)
tasksch.HandleTask(task, nil, true).Run()
result, err2 := task.GetResult(0)
if err = err2; err == nil {
for _, v := range result {
skuNameList = append(skuNameList, vendorSku2Jx(v.(*ebaiapi.SkuInfo)))
}
}
}
}
return skuNameList, err
}
func vendorSku2Jx(vendorSku *ebaiapi.SkuInfo) (skuName *partner.SkuNameInfo) {
prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(vendorSku.Name)
weight := vendorSku.Weight
if weight <= 0 {
weight = jxutils.FormatSkuWeight(specQuality, specUnit)
}
skuName = &partner.SkuNameInfo{
Prefix: prefix,
Name: name,
Unit: unit,
SkuList: []*partner.FullSkuInfo{
&partner.FullSkuInfo{
BareStoreSkuInfo: partner.BareStoreSkuInfo{
VendorSkuID: utils.Int64ToStr(vendorSku.SkuID),
SkuID: int(utils.Str2Int64WithDefault(vendorSku.CustomSkuID, 0)),
Stock: vendorSku.LeftNum,
Price: vendorSku.SalePrice,
Status: ebaiSkuStatus2Jx(vendorSku.Status),
},
SkuName: vendorSku.Name,
Comment: comment,
SpecQuality: float64(specQuality),
SpecUnit: specUnit,
Weight: weight,
},
},
}
for _, v := range vendorSku.Photos {
skuName.PictureList = append(skuName.PictureList, v.URL)
}
// todo, 看起来饿百只返回了最底层的商家分类信息
for _, v := range vendorSku.CustomCatList {
skuName.VendorCatIDList = append(skuName.VendorCatIDList, v.CustomCatID)
}
return skuName
}
func vendorSkuList2Jx(vendorSkuList []*ebaiapi.SkuInfo) (skuNameList []*partner.SkuNameInfo) {
for _, vendorSku := range vendorSkuList {
skuNameList = append(skuNameList, vendorSku2Jx(vendorSku))
}
return skuNameList
}

View File

@@ -0,0 +1,17 @@
package ebai
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
)
func TestGetStoreAllSkus(t *testing.T) {
skuNameList, err := new(PurchaseHandler).GetStoreAllSkus(jxcontext.AdminCtx, testShopID, testShopBaiduID)
if err != nil {
t.Fatal(err.Error())
}
t.Log(utils.Format4Output(skuNameList, false))
t.Log(len(skuNameList))
}

View File

@@ -8,7 +8,7 @@ import (
) )
func TestReadStore(t *testing.T) { func TestReadStore(t *testing.T) {
result, err := new(PurchaseHandler).ReadStore(utils.Int2Str(testShopBaiduID)) result, err := new(PurchaseHandler).ReadStore(testShopBaiduID)
if err != nil { if err != nil {
t.Fatal(err.Error()) t.Fatal(err.Error())
} }

View File

@@ -265,9 +265,10 @@ func (p *PurchaseHandler) GetStoreSkusInfo(ctx *jxcontext.Context, parentTask ta
for _, foodInfo := range vendorFoodList { for _, foodInfo := range vendorFoodList {
vendorSku := foodInfo.SkuList[0] vendorSku := foodInfo.SkuList[0]
storeSku := storeSkuMap[vendorSku.SkuID] storeSku := storeSkuMap[vendorSku.SkuID]
outStoreSkuList = append(outStoreSkuList, storeSku) storeSku.Stock = int(utils.Str2Int64WithDefault(vendorSku.Stock, 0))
storeSku.Price = jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(vendorSku.Price, 0)) storeSku.Price = jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(vendorSku.Price, 0))
storeSku.Status = mtwmSkuStatus2Jx(foodInfo.IsSoldOut) storeSku.Status = mtwmSkuStatus2Jx(foodInfo.IsSoldOut)
outStoreSkuList = append(outStoreSkuList, storeSku)
} }
} }
return outStoreSkuList, err return outStoreSkuList, err
@@ -281,3 +282,63 @@ func mtwmSkuStatus2Jx(mtwmSkuStatus int) (jxSkuStatus int) {
} }
return jxSkuStatus return jxSkuStatus
} }
func (p *PurchaseHandler) GetStoreAllSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string) (skuNameList []*partner.SkuNameInfo, err error) {
for {
result, err := api.MtwmAPI.RetailList(vendorStoreID, len(skuNameList), mtwmapi.GeneralMaxLimit)
if err != nil {
return nil, err
}
skuNameList = append(skuNameList, vendorSkuList2Jx(result)...)
if len(result) < mtwmapi.GeneralMaxLimit {
break
}
}
return skuNameList, err
}
func vendorSku2Jx(vendorSku *mtwmapi.AppFood) (skuName *partner.SkuNameInfo) {
prefix, name, comment, specUnit, unit, specQuality := jxutils.SplitSkuName(vendorSku.Name)
mtwmSku := vendorSku.SkuList[0]
weight := mtwmSku.Weight
if weight <= 0 {
weight = jxutils.FormatSkuWeight(specQuality, specUnit)
}
skuName = &partner.SkuNameInfo{
Prefix: prefix,
Name: name,
Unit: unit,
SkuList: []*partner.FullSkuInfo{
&partner.FullSkuInfo{
BareStoreSkuInfo: partner.BareStoreSkuInfo{
VendorSkuID: mtwmSku.SkuID,
SkuID: int(utils.Str2Int64WithDefault(mtwmSku.SkuID, 0)),
Stock: int(utils.Str2Int64WithDefault(mtwmSku.Stock, 0)),
Price: jxutils.StandardPrice2Int(utils.Str2Float64WithDefault(mtwmSku.Price, 0)),
Status: mtwmSkuStatus2Jx(vendorSku.IsSoldOut),
},
SkuName: vendorSku.Name,
Comment: comment,
SpecQuality: float64(specQuality),
SpecUnit: specUnit,
Weight: weight,
},
},
PictureList: vendorSku.PictureList,
}
if vendorSku.CategoryName != "" {
skuName.VendorCatIDList = []string{vendorSku.CategoryName}
if vendorSku.SecondaryCategoryName != "" {
skuName.VendorCatIDList = append(skuName.VendorCatIDList, vendorSku.SecondaryCategoryName)
}
}
return skuName
}
func vendorSkuList2Jx(vendorSkuList []*mtwmapi.AppFood) (skuNameList []*partner.SkuNameInfo) {
for _, vendorSku := range vendorSkuList {
skuNameList = append(skuNameList, vendorSku2Jx(vendorSku))
}
return skuNameList
}

View File

@@ -0,0 +1,18 @@
package mtwm
import (
"testing"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
// _ "git.rosy.net.cn/jx-callback/business/jxcallback/orderman"
)
func TestGetStoreAllSkus(t *testing.T) {
skuNameList, err := new(PurchaseHandler).GetStoreAllSkus(jxcontext.AdminCtx, 2, "2523687")
if err != nil {
t.Fatal(err)
}
t.Log(utils.Format4Output(skuNameList, false))
t.Log(len(skuNameList))
}