- 整理新同步逻辑

This commit is contained in:
gazebo
2019-07-26 14:21:30 +08:00
parent 6c143b5ed8
commit 11dca2ebcc
6 changed files with 88 additions and 83 deletions

View File

@@ -192,6 +192,9 @@ func storeSkuSyncInfo2Bare(inSku *dao.StoreSkuSyncInfo) (outSku *partner.StoreSk
func calVendorPrice4StoreSku(inSku *dao.StoreSkuSyncInfo, pricePercentagePack model.PricePercentagePack, pricePercentage int) (outSku *dao.StoreSkuSyncInfo) {
pricePercentage = jxutils.GetPricePercentage(pricePercentagePack, int(inSku.UnitPrice), pricePercentage)
inSku.VendorPrice = int64(jxutils.CaculateSkuVendorPrice(int(inSku.Price), pricePercentage, 0))
if inSku.VendorPrice <= 0 {
inSku.VendorPrice = 1 // 最少1分钱
}
return inSku
}

View File

@@ -17,10 +17,6 @@ import (
"git.rosy.net.cn/jx-callback/globals/api"
)
const (
MaxPageSize = 100
)
type tStoreSkuFullInfo struct {
model.StoreSkuBind
@@ -71,14 +67,6 @@ type tStoreCatInfo struct {
Children map[string]*tStoreCatInfo `orm:"-"`
}
var (
defCatMap = map[int]int64{
1: 151301831158987,
2: 15347484581335,
3: 15347484581339,
}
)
func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int) (storeSkuInfoList []*tStoreSkuFullInfo, err error) {
sql := `
SELECT
@@ -397,20 +385,6 @@ func genSkuParamsFromStoreSkuInfo(pricePercentage int, storeSku *tStoreSkuFullIn
return params
}
func jxSkuStatus2Ebai(status int) int {
if status <= 0 {
return ebaiapi.SkuStatusOffline
}
return ebaiapi.SkuStatusOnline
}
func getEbaiCat(catID int64, level int) int64 {
if catID == 0 {
return defCatMap[level]
}
return catID
}
// 从饿百同步分类信息到本地
// 些函数执行后:
// 远程有与本地有的条目会关联(并置标记,下次同步会刷新远程)
@@ -430,7 +404,7 @@ func (p *PurchaseHandler) SyncLocalStoreCategory(db *dao.DaoDB, storeID int, use
if err = dao.GetRows(db, &catList, sql, storeID, utils.DefaultTimeValue, utils.DefaultTimeValue); err == nil {
cat1Map := map[string]*tStoreCatInfo{}
for _, v := range catList {
v.Name = formatName(v.Name)
v.Name = formatCatName(v.Name)
if v.Level == 1 {
cat1 := cat1Map[v.Name]
if cat1 == nil {
@@ -509,7 +483,7 @@ func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask t
}
} else if catInfo.EbaiSyncStatus&model.SyncFlagNewMask != 0 { // 新增
if globals.EnableEbaiStoreWrite {
catName := formatName(catInfo.Name)
catName := formatCatName(catInfo.Name)
catInfo.EbaiID, err = api.EbaiAPI.ShopCategoryCreate(strStoreID, catInfo.ParentEbaiID, catName, jxCatSeq2Ebai(catInfo.Seq))
if ebaiapi.IsErrCategoryExist(err) {
if catInfo.EbaiID = api.EbaiAPI.GetEbaiCatIDFromName(strStoreID, catName); catInfo.EbaiID > 0 {
@@ -524,7 +498,7 @@ func (p *PurchaseHandler) SyncStoreCategory(ctx *jxcontext.Context, parentTask t
}
} else if catInfo.EbaiSyncStatus&model.SyncFlagModifiedMask != 0 { // 修改
if globals.EnableEbaiStoreWrite {
err = api.EbaiAPI.ShopCategoryUpdate(strStoreID, catInfo.EbaiID, formatName(catInfo.Name), jxCatSeq2Ebai(catInfo.Seq))
err = api.EbaiAPI.ShopCategoryUpdate(strStoreID, catInfo.EbaiID, formatCatName(catInfo.Name), jxCatSeq2Ebai(catInfo.Seq))
}
}
if err == nil {
@@ -598,15 +572,6 @@ func (p *PurchaseHandler) updateLocalCatAsNew(db *dao.DaoDB, localCatMap map[str
return nil
}
func formatName(name string) string {
return utils.TrimBlankChar(utils.FilterMb4(name))
}
// 饿百的排序是从大到小
func jxCatSeq2Ebai(seq int) int {
return 10000 - seq
}
func (p *PurchaseHandler) GetStoresSku(ctx *jxcontext.Context, parentTask tasksch.ITask, storeIDs []int) (storeSkuList []*model.StoreSkuBind, err error) {
return storeSkuList, err
}

View File

@@ -16,6 +16,14 @@ import (
"git.rosy.net.cn/jx-callback/globals/api"
)
var (
defCatMap = map[int]int64{
1: 151301831158987, // 休闲食品
2: 15347484581335, // 蔬菜类
3: 15347484581339, // 其他蔬菜类休闲食品
}
)
func (p *PurchaseHandler) GetStoreSkusBatchSize(funcID int) (batchSize int) {
switch funcID {
case partner.FuncUpdateStoreSkusStock, partner.FuncUpdateStoreSkusStatus, partner.FuncUpdateStoreSkusPrice, partner.FuncDeleteStoreSkus:
@@ -64,7 +72,7 @@ func (p *PurchaseHandler) IsErrCategoryNotExist(err error) (isNotExist bool) {
func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
var vendorCatID int64
if globals.EnableEbaiStoreWrite {
vendorCatID, err = api.EbaiAPI.ShopCategoryCreate(utils.Int2Str(storeID), utils.Str2Int64WithDefault(storeCat.ParentVendorCatID, 0), storeCat.Name, jxCatSeq2Ebai(storeCat.Seq))
vendorCatID, err = api.EbaiAPI.ShopCategoryCreate(utils.Int2Str(storeID), utils.Str2Int64WithDefault(storeCat.ParentVendorCatID, 0), formatCatName(storeCat.Name), jxCatSeq2Ebai(storeCat.Seq))
} else {
vendorCatID = jxutils.GenFakeID()
}
@@ -74,7 +82,7 @@ func (p *PurchaseHandler) CreateStoreCategory(ctx *jxcontext.Context, storeID in
func (p *PurchaseHandler) UpdateStoreCategory(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeCat *dao.SkuStoreCatInfo) (err error) {
if globals.EnableEbaiStoreWrite {
err = api.EbaiAPI.ShopCategoryUpdate(utils.Int2Str(storeID), utils.Str2Int64WithDefault(storeCat.VendorCatID, 0), storeCat.Name, jxCatSeq2Ebai(storeCat.Seq))
err = api.EbaiAPI.ShopCategoryUpdate(utils.Int2Str(storeID), utils.Str2Int64WithDefault(storeCat.VendorCatID, 0), formatCatName(storeCat.Name), jxCatSeq2Ebai(storeCat.Seq))
}
return err
}
@@ -110,10 +118,6 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v
return nil, err
}
func genSkuCatRank(storeSku *dao.StoreSkuSyncInfo) int {
return int(ebaiapi.MaxSkuCatRank - storeSku.VendorPrice)
}
// 对于多门店平台来说storeSkuList中只有SkuID与VendorSkuID有意义
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (successList []*dao.StoreSkuSyncInfo, err error) {
storeSku := storeSkuList[0]
@@ -265,9 +269,37 @@ func ebaiSkuStatus2Jx(ebaiSkuStatus int) (jxSkuStatus int) {
return jxSkuStatus
}
func jxSkuStatus2Ebai(status int) int {
if status <= 0 {
return ebaiapi.SkuStatusOffline
}
return ebaiapi.SkuStatusOnline
}
func getEbaiCat(catID int64, level int) int64 {
if catID == 0 {
return defCatMap[level]
}
return catID
}
// 饿百的排序是从大到小
func genSkuCatRank(storeSku *dao.StoreSkuSyncInfo) int {
return int(ebaiapi.MaxSkuCatRank - storeSku.VendorPrice)
}
// 饿百的排序是从大到小
func jxCatSeq2Ebai(seq int) int {
return ebaiapi.MaxCatCatRank - seq
}
func formatCatName(name string) string {
return utils.TrimBlankChar(utils.FilterMb4(name))
}
func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, vendorStoreID string, storeSkuList []*partner.StoreSkuInfo) (skuNameList []*partner.SkuNameInfo, err error) {
params := &ebaiapi.SkuListParams{
PageSize: MaxPageSize,
PageSize: ebaiapi.MaxSkuListPageSize,
}
if len(storeSkuList) == 1 {
if storeSkuList[0].SkuID > 0 {
@@ -288,7 +320,7 @@ func (p *PurchaseHandler) GetStoreSkusFullInfo(ctx *jxcontext.Context, parentTas
task := tasksch.NewParallelTask("ebai GetStoreSkusFullInfo", nil, ctx,
func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
callParams := &ebaiapi.SkuListParams{
PageSize: MaxPageSize,
PageSize: ebaiapi.MaxSkuListPageSize,
Page: batchItemList[0].(int),
}
pageSku, err2 := api.EbaiAPI.SkuList(utils.Int2Str(storeID), callParams)

View File

@@ -281,40 +281,3 @@ func (p *PurchaseHandler) GetStoresSku(ctx *jxcontext.Context, parentTask tasksc
return storeSkuList, err
}
func (p *PurchaseHandler) SyncStoreProducts(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
globals.SugarLogger.Debugf("jd SyncStoreProducts, storeID:%d", storeID)
db := dao.GetDB()
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJD)
if err != nil {
return "", err
}
storeSkuList, err := dao.GetStoreSkus2(db, model.VendorIDJD, storeID, skuIDs, false)
if err != nil {
return "", err
}
task := tasksch.NewParallelTask("SyncStoreProducts京东", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeSku := batchItemList[0].(*dao.StoreSkuSyncInfo)
if storeSku.VendorSkuID != "" && storeSku.StoreSkuStatus == model.SkuStatusNormal {
if globals.EnableJdStoreWrite {
synchronized, err2 := api.JdAPI.SyncProduct(storeDetail.VendorStoreID, storeSku.VendorSkuID)
if err = err2; err == nil && synchronized {
retVal = []int{1}
}
} else {
retVal = []int{1}
}
}
return retVal, err
}, storeSkuList)
tasksch.HandleTask(task, parentTask, true).Run()
if !isAsync {
result, err2 := task.GetResult(0)
if err = err2; err == nil {
hint = utils.Int2Str(len(result))
}
} else {
hint = task.GetID()
}
return hint, err
}

View File

@@ -158,3 +158,41 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, storeID i
}
return successList, err
}
func (p *PurchaseHandler) SyncStoreProducts(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) {
globals.SugarLogger.Debugf("jd SyncStoreProducts, storeID:%d", storeID)
db := dao.GetDB()
storeDetail, err := dao.GetStoreDetail(db, storeID, model.VendorIDJD)
if err != nil {
return "", err
}
storeSkuList, err := dao.GetStoreSkus2(db, model.VendorIDJD, storeID, skuIDs, false)
if err != nil {
return "", err
}
task := tasksch.NewParallelTask("SyncStoreProducts京东", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
storeSku := batchItemList[0].(*dao.StoreSkuSyncInfo)
if storeSku.VendorSkuID != "" && storeSku.StoreSkuStatus == model.SkuStatusNormal {
if globals.EnableJdStoreWrite {
synchronized, err2 := api.JdAPI.SyncProduct(storeDetail.VendorStoreID, storeSku.VendorSkuID)
if err = err2; err == nil && synchronized {
retVal = []int{1}
}
} else {
retVal = []int{1}
}
}
return retVal, err
}, storeSkuList)
tasksch.HandleTask(task, parentTask, true).Run()
if !isAsync {
result, err2 := task.GetResult(0)
if err = err2; err == nil {
hint = utils.Int2Str(len(result))
}
} else {
hint = task.GetID()
}
return hint, err
}

View File

@@ -20,6 +20,10 @@ const (
updateTypePrice
)
const (
defVendorCatID = 200001903 // 生菜
)
func (p *PurchaseHandler) GetStoreSkusBatchSize(funcID int) (batchSize int) {
switch funcID {
case partner.FuncUpdateStoreSkusStock, partner.FuncUpdateStoreSkusStatus, partner.FuncUpdateStoreSkusPrice: