diff --git a/business/jxstore/cms/sync_store_sku.go b/business/jxstore/cms/sync_store_sku.go index 15031436a..e532662f5 100644 --- a/business/jxstore/cms/sync_store_sku.go +++ b/business/jxstore/cms/sync_store_sku.go @@ -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 } diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 6222baa31..b7538afbe 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -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 } diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index ee6f7db11..df1921cd6 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -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) diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index cb655fc50..1270e8894 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -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 -} diff --git a/business/partner/purchase/jd/store_sku2.go b/business/partner/purchase/jd/store_sku2.go index b55556235..7f84519a7 100644 --- a/business/partner/purchase/jd/store_sku2.go +++ b/business/partner/purchase/jd/store_sku2.go @@ -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 +} diff --git a/business/partner/purchase/mtwm/store_sku2.go b/business/partner/purchase/mtwm/store_sku2.go index 6219980df..d63f4fb5f 100644 --- a/business/partner/purchase/mtwm/store_sku2.go +++ b/business/partner/purchase/mtwm/store_sku2.go @@ -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: