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) { for _, v := range priceReferSnapshot {
v := batchItemList[0].(*model.PriceReferSnapshot)
dao.WrapAddIDCULDEntity(v, ctx.GetUserName()) dao.WrapAddIDCULDEntity(v, ctx.GetUserName())
v.SnapshotAt = snapshotAt v.SnapshotAt = snapshotAt
err = dao.CreateEntity(db, v)
return retVal, err
} }
taskParallel := tasksch.NewParallelTask("生成价格统计", tasksch.NewParallelConfig(), ctx, taskFunc, priceReferSnapshot) dao.CreateMultiEntities(db, priceReferSnapshot)
tasksch.HandleTask(taskParallel, task, true).Run()
_, err = taskParallel.GetResult(0)
dao.Commit(db) dao.Commit(db)
} }
case 1: case 1:
@@ -263,28 +258,33 @@ func BeginSavePriceRefer(ctx *jxcontext.Context, cityCodes, skuIDs []int, isAsyn
} }
dao.Commit(db) dao.Commit(db)
case 3: 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) 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) { for _, appOrg := range apimanager.CurAPIManager.GetAppOrgCodeList(model.VendorIDJD) {
directPrice, err := jd.GetAPI(appOrg).GetJdSkuDirectPrice(v.SkuID) directPrice, _ := jd.GetAPI(appOrg).GetJdSkuDirectPrice(v.SkuID)
if err != nil || directPrice == 0 { if directPrice == 0 {
continue continue
} else { } else {
v.JdDirectPrice = int(directPrice) v.JdDirectPrice = int(directPrice)
dao.UpdateEntity(db, v, "JdDirectPrice") 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 return result, err
} }

View File

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

View File

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