diff --git a/business/jxstore/report/report.go b/business/jxstore/report/report.go index 68079e575..073a47914 100644 --- a/business/jxstore/report/report.go +++ b/business/jxstore/report/report.go @@ -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 } diff --git a/business/model/dao/store_sku.go b/business/model/dao/store_sku.go index a53a7daa7..a92cb0fca 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -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 diff --git a/business/partner/purchase/ebai/store_sku2.go b/business/partner/purchase/ebai/store_sku2.go index 2a189a706..cc8be4b3f 100644 --- a/business/partner/purchase/ebai/store_sku2.go +++ b/business/partner/purchase/ebai/store_sku2.go @@ -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 }