- 整理新同步逻辑
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user