Accept Merge Request #184: (su -> mark)

Merge Request: 价格统计优化
Created By: @苏尹岚
Accepted By: @苏尹岚
URL: https://rosydev.coding.net/p/jx-callback/d/jx-callback/git/merge/184
This commit is contained in:
苏尹岚
2020-02-11 13:38:50 +08:00
3 changed files with 52 additions and 28 deletions

View File

@@ -84,16 +84,11 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
}
}
}()
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0].(*model.PriceReferSnapshot)
for _, v := range priceReferSnapshot {
dao.WrapAddIDCULDEntity(v, ctx.GetUserName())
v.SnapshotAt = snapshotAt
err = dao.CreateEntity(db, v)
return retVal, err
}
taskParallel := tasksch.NewParallelTask("生成价格统计", tasksch.NewParallelConfig(), ctx, taskFunc, priceReferSnapshot)
tasksch.HandleTask(taskParallel, task, true).Run()
_, err = taskParallel.GetResult(0)
dao.CreateMultiEntities(db, priceReferSnapshot)
dao.Commit(db)
}
case 1:
@@ -263,28 +258,33 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
}
dao.Commit(db)
case 3:
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
dao.Rollback(db)
if r != nil {
panic(r)
}
}
}()
priceReferSnapshotList, err = dao.GetPriceReferSnapshotNoPage(db, []int{0}, nil, nil, snapshotAt)
for _, v := range priceReferSnapshotList {
taskFunc := func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
dao.Begin(db)
defer func() {
if r := recover(); r != nil || err != nil {
dao.Rollback(db)
if r != nil {
panic(r)
}
}
}()
v := batchItemList[0].(*model.PriceReferSnapshot)
for _, appOrg := range apimanager.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD) {
directPrice, err := jd.GetAPI(appOrg).GetJdSkuDirectPrice(v.SkuID)
if err != nil || directPrice == 0 {
directPrice, _ := jd.GetAPI(appOrg).GetJdSkuDirectPrice(v.SkuID)
if directPrice == 0 {
continue
} else {
v.JdDirectPrice = int(directPrice)
dao.UpdateEntity(db, v, "JdDirectPrice")
}
}
dao.Commit(db)
return retVal, err
}
dao.Commit(db)
taskParallel := tasksch.NewParallelTask("获取并更新京东指导价格", tasksch.NewParallelConfig(), ctx, taskFunc, priceReferSnapshotList)
tasksch.HandleTask(taskParallel, task, true).Run()
_, err = taskParallel.GetResult(0)
}
return result, err
}

View File

@@ -63,6 +63,9 @@ type StoreSkuSyncInfo struct {
BindDeletedAt time.Time `orm:"type(datetime)" json:"bindDeletedAt"`
model.Sku
ExdSkuID string `orm:"column(exd_sku_id)"`
ExdSkuName string
ExdUpc int
// sku_name
Prefix string

View File

@@ -2,6 +2,7 @@ package ebai
import (
"regexp"
"strings"
"time"
"git.rosy.net.cn/baseapi/platformapi/ebaiapi"
@@ -19,6 +20,7 @@ import (
const (
defVendorCatID = 201222934 // 其他蔬菜
exdStoreName = "饿鲜达"
)
var (
@@ -118,7 +120,7 @@ func (p *PurchaseHandler) IsErrSkuNotExist(err error) (isNotExist bool) {
func (p *PurchaseHandler) updateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo, isNeedMapCat bool) (failedList []*partner.StoreSkuInfoWithErr, err error) {
storeSku := storeSkuList[0]
strStoreID := utils.Int2Str(storeID)
params := genSkuParamsFromStoreSkuInfo2(storeSku, false)
params := genSkuParamsFromStoreSkuInfo2(storeSku, false, false)
if globals.EnableEbaiStoreWrite {
_, err = api.EbaiAPI.SkuUpdate(ctx.GetTrackInfo(), strStoreID, utils.Str2Int64(storeSku.VendorSkuID), params)
if err != nil {
@@ -141,11 +143,23 @@ func (p *PurchaseHandler) UpdateStoreSkus(ctx *jxcontext.Context, storeID int, v
// 对于多门店平台来说storeSkuList中只有SkuID与VendorSkuID有意义
func (p *PurchaseHandler) CreateStoreSkus(ctx *jxcontext.Context, storeID int, vendorStoreID string, storeSkuList []*dao.StoreSkuSyncInfo) (failedList []*partner.StoreSkuInfoWithErr, err error) {
storeSku := storeSkuList[0]
var vendorSkuID int64
params := genSkuParamsFromStoreSkuInfo2(storeSku, true)
var (
vendorSkuID int64
isExd bool = false
customSkuID int64
)
store, _ := dao.GetStoreDetail(dao.GetDB(), storeSku.StoreID, model.VendorIDEBAI)
if strings.Contains(store.Name, exdStoreName) {
isExd = true
customSkuID = utils.Str2Int64(storeSku.ExdSkuID)
} else {
isExd = false
customSkuID = int64(storeSku.SkuID)
}
params := genSkuParamsFromStoreSkuInfo2(storeSku, true, isExd)
if globals.EnableEbaiStoreWrite {
strStoreID := utils.Int2Str(storeID)
if vendorSkuID, err = api.EbaiAPI.SkuCreate(ctx.GetTrackInfo(), strStoreID, storeSku.SkuID, params); err == nil {
if vendorSkuID, err = api.EbaiAPI.SkuCreate(ctx.GetTrackInfo(), strStoreID, customSkuID, params); err == nil {
utils.AfterFuncWithRecover(5*time.Second, func() {
api.EbaiAPI.SkuShopCategoryMap(strStoreID, vendorSkuID, "", utils.Str2Int64(storeSku.VendorCatID), genSkuCatRank(storeSku))
// 饿百平台有BUG会导致新建一个之前删除的商品时信息不会及时更新强制刷新一下
@@ -270,7 +284,7 @@ func (p *PurchaseHandler) UpdateStoreSkusStock(ctx *jxcontext.Context, vendorOrg
return failedList, err
}
func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate bool) (params map[string]interface{}) {
func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate, isExd bool) (params map[string]interface{}) {
photos := []map[string]interface{}{
map[string]interface{}{
"is_master": true,
@@ -284,14 +298,21 @@ func genSkuParamsFromStoreSkuInfo2(storeSku *dao.StoreSkuSyncInfo, isCreate bool
})
}
params = map[string]interface{}{
"name": utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount),
"left_num": model.MaxStoreSkuStockQty,
"category_id": utils.Str2Int64(storeSku.VendorCatID),
// "name": utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount),
"left_num": model.MaxStoreSkuStockQty,
// "category_id": utils.Str2Int64(storeSku.VendorCatID),
"predict_cat": 0, // 不使用推荐类目
"cat3_id": getEbaiCat(storeSku.VendorVendorCatID),
"weight": storeSku.Weight,
"photos": photos,
}
if !isExd {
params["category_id"] = utils.Str2Int64(storeSku.VendorCatID)
params["name"] = utils.LimitMixedStringLen(storeSku.SkuName, ebaiapi.MaxSkuNameByteCount)
} else {
params["upc"] = storeSku.ExdUpc
params["name"] = storeSku.ExdSkuName
}
if storeSku.DescImg != "" {
params["rtf"] = storeSku.DescImg
}