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:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user