From 1650a2d7e89ac5a70a31d047c54974bc6873402c Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 15 Jul 2019 18:26:25 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BD=BF=E7=94=A8GetPricePercentage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 3 +- business/jxstore/cms/store.go | 2 +- business/model/dao/dao_bz.go | 1 + business/model/dao/store.go | 17 +++++++-- business/partner/purchase/ebai/store_sku.go | 38 ++++++++----------- business/partner/purchase/jd/store_sku.go | 11 +----- business/partner/purchase/mtwm/store_sku.go | 3 +- .../partner/purchase/weimob/wsc/store_sku.go | 17 +++++---- 8 files changed, 46 insertions(+), 46 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index 56ce09b51..48a8f10d6 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -110,6 +110,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac if storeSkuInfo := storeSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)]; storeSkuInfo != nil { validVendorMap[vendorID] = 1 validSkuMap[v.SkuID] = 1 + pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, storeSkuInfo.Price, int(storeDetail.PricePercentage)) actSkuMap := &model.ActStoreSkuMap{ ActID: act.ID, StoreID: storeID, @@ -117,7 +118,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, db *dao.DaoDB, act *model.Ac VendorID: vendorID, SyncStatus: model.SyncFlagNewMask, - VendorPrice: int64(jxutils.CaculateSkuVendorPrice(storeSkuInfo.Price, jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, storeSkuInfo.Price, int(storeDetail.PricePercentage)), 0)), + VendorPrice: int64(jxutils.CaculateSkuVendorPrice(storeSkuInfo.Price, pricePercentage, 0)), } v.OriginalPrice = actSkuMap.VendorPrice if v.ActPrice != 0 { diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 95ba52f33..8f4745d5e 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -178,7 +178,7 @@ func GetStores(ctx *jxcontext.Context, keyword string, params map[string]interfa city.name city_name, district.name district_name, CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('{"vendorStoreID":"', m1.vendor_store_id, '", "vendorID":', m1.vendor_id, - ', "status":', m1.status, ', "pricePercentage":', m1.price_percentage, ', "vendorStoreName":"', + ', "status":', m1.status, ', "pricePercentage":', m1.price_percentage, ', "pricePercentagePack":"', m1.price_percentage_pack, '", "vendorStoreName":"', CASE m1.vendor_id WHEN 0 THEN IF(jd.name IS NULL, '', jd.name) WHEN 3 THEN IF(eb.col_name IS NULL, '', eb.col_name) diff --git a/business/model/dao/dao_bz.go b/business/model/dao/dao_bz.go index da1cb74e3..7e06334a2 100644 --- a/business/model/dao/dao_bz.go +++ b/business/model/dao/dao_bz.go @@ -183,6 +183,7 @@ func GetStoreMapByStoreID(db *DaoDB, storeID, vendorID int) (storeMap *model.Sto } return nil, err } + storeMap.PricePercentagePackObj = PricePercentagePack2Obj(storeMap.PricePercentagePack) return storeMap, nil } diff --git a/business/model/dao/store.go b/business/model/dao/store.go index c975cec67..a8bb60abf 100644 --- a/business/model/dao/store.go +++ b/business/model/dao/store.go @@ -1,6 +1,7 @@ package dao import ( + "sort" "time" "git.rosy.net.cn/baseapi/utils" @@ -72,9 +73,7 @@ func getStoreDetail(db *DaoDB, storeID, vendorID int, vendorStoreID string) (sto storeDetail = &StoreDetail{} if err = GetRow(db, storeDetail, sql, sqlParams...); err == nil { storeDetail.Place.Name = storeDetail.DistrictName - if storeDetail.PricePercentagePack != "" { - utils.UnmarshalUseNumber([]byte(storeDetail.PricePercentagePack), &storeDetail.PricePercentagePackObj) - } + storeDetail.PricePercentagePackObj = PricePercentagePack2Obj(storeDetail.PricePercentagePack) return storeDetail, nil } return nil, err @@ -227,6 +226,9 @@ func GetStoresMapList(db *DaoDB, vendorIDs, storeIDs []int, status, isSync int) } sql += " ORDER BY t1.store_id, t1.vendor_id" if err = GetRows(db, &storeMapList, sql, sqlParams...); err == nil { + for _, v := range storeMapList { + v.PricePercentagePackObj = PricePercentagePack2Obj(v.PricePercentagePack) + } return storeMapList, nil } return nil, err @@ -312,3 +314,12 @@ func GetRebindPrinterStoreList(db *DaoDB) (storeList []*model.Store, err error) `, utils.DefaultTimeValue, model.VendorIDPrinterBegin) return storeList, err } + +func PricePercentagePack2Obj(packStr string) (obj model.PricePercentagePack) { + if packStr != "" { + if err := utils.UnmarshalUseNumber([]byte(packStr), &obj); err == nil { + sort.Sort(obj) + } + } + return obj +} diff --git a/business/partner/purchase/ebai/store_sku.go b/business/partner/purchase/ebai/store_sku.go index 454ee95f3..c6be046c0 100644 --- a/business/partner/purchase/ebai/store_sku.go +++ b/business/partner/purchase/ebai/store_sku.go @@ -55,10 +55,6 @@ type tStoreSkuFullInfo struct { EbaiCat2ID int64 `orm:"column(ebai_cat2_id)"` EbaiCat3ID int64 `orm:"column(ebai_cat3_id)"` - PricePercentage int - PricePercentagePack string `orm:"size(4096)" json:"pricePercentagePack"` // - PricePercentagePackObj model.PricePercentagePack `orm:"-" json:"-"` - CatPricePercentage int } @@ -85,7 +81,7 @@ var ( func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs []int) (storeSkuInfoList []*tStoreSkuFullInfo, err error) { sql := ` - SELECT t8.price_percentage, t8.price_percentage_pack, + SELECT t1.*, t2.spec_quality, t2.spec_unit, t2.weight, t2.status sku_status, t3.id name_id, t3.prefix, t3.name, t2.comment, t3.is_global, t3.unit, IF(t3.img_ebai <> '', t3.img_ebai, t3.img) img, t3.upc, t3.desc_img_ebai, t4.name cat_name, t4.ebai_price_percentage cat_price_percentage, @@ -101,7 +97,6 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [ LEFT JOIN store_sku_category_map t5p ON t5p.store_id = t1.store_id AND t5p.category_id = t4p.id AND t5p.deleted_at = ? LEFT JOIN sku_vendor_category cat1 ON t4.ebai_category_id = cat1.vendor_category_id AND cat1.vendor_id = ? LEFT JOIN sku_vendor_category cat2 ON cat1.parent_id = cat2.vendor_category_id AND cat1.vendor_id = ? - JOIN store_map t8 ON t8.store_id = t1.store_id AND t8.vendor_id = ? AND t8.deleted_at = ? WHERE t1.store_id = ? AND (t1.ebai_sync_status <> 0 OR (t1.ebai_id <> 0 AND t3.id IS NULL)) ` sqlParams := []interface{}{ @@ -113,8 +108,6 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [ utils.DefaultTimeValue, model.VendorIDEBAI, model.VendorIDEBAI, - model.VendorIDEBAI, - utils.DefaultTimeValue, storeID, } if len(skuIDs) > 0 { @@ -123,13 +116,6 @@ func (p *PurchaseHandler) getDirtyStoreSkus(db *dao.DaoDB, storeID int, skuIDs [ } sql += " ORDER BY t1.price DESC" err = dao.GetRows(db, &storeSkuInfoList, sql, sqlParams...) - if err == nil { - for _, v := range storeSkuInfoList { - if v.PricePercentagePack != "" { - utils.UnmarshalUseNumber([]byte(v.PricePercentagePack), &v.PricePercentagePackObj) - } - } - } return storeSkuInfoList, err } @@ -202,6 +188,11 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks var storeSkuInfoList []*tStoreSkuFullInfo var num int64 strStoreID := utils.Int2Str(storeID) + + storeDetail, err := dao.GetStoreDetail(dao.GetDB(), storeID, model.VendorIDEBAI) + if err != nil { + return "", err + } rootTask := tasksch.NewSeqTask("SyncStoreSkus饿百1", ctx, func(rootTask *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) { if step == 0 { @@ -225,6 +216,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks task := tasksch.NewParallelTask("SyncStoreSkus饿百2", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { storeSku := batchItemList[0].(*tStoreSkuFullInfo) + pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, storeSku.Price, int(storeDetail.PricePercentage)) updateFields := []string{model.FieldEbaiSyncStatus} if storeSku.NameID == 0 || storeSku.EbaiSyncStatus&model.SyncFlagDeletedMask != 0 { if storeSku.EbaiSyncStatus&model.SyncFlagNewMask == 0 && !jxutils.IsEmptyID(storeSku.EbaiID) { @@ -250,7 +242,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks if mergedStoreSkuStatus == model.SkuStatusNormal { // 待创建且不可售的,暂不新建 if storeSku.Img != "" { if globals.EnableEbaiStoreWrite { - storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(storeSku)) + storeSku.EbaiID, err = api.EbaiAPI.SkuCreate(strStoreID, storeSku.SkuID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)) } else { storeSku.EbaiID = jxutils.GenFakeID() } @@ -259,7 +251,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks } else if ebaiapi.IsErrSkuExist(err) { if storeSku.EbaiID = api.EbaiAPI.GetEbaiSkuIDFromCustomID(strStoreID, utils.Int2Str(storeSku.SkuID)); storeSku.EbaiID > 0 { updateFields = append(updateFields, model.FieldEbaiID) - err = skuUpdate(strStoreID, storeSku) + err = skuUpdate(strStoreID, pricePercentage, storeSku) } } } else { @@ -273,7 +265,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks err = fmt.Errorf("京西数据异常,修改一个没有创建的饿百商品:%d, store:%s", storeSku.SkuID, strStoreID) } else { if storeSku.Img != "" { - err = skuUpdate(strStoreID, storeSku) + err = skuUpdate(strStoreID, pricePercentage, storeSku) } else { err = fmt.Errorf("SKUANME%d:%s没有图片,同步失败", storeSku.NameID, storeSku.Name) } @@ -302,14 +294,14 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks return rootTask.ID, err } -func skuUpdate(strStoreID string, storeSku *tStoreSkuFullInfo) (err error) { +func skuUpdate(strStoreID string, pricePercentage int, storeSku *tStoreSkuFullInfo) (err error) { if globals.EnableEbaiStoreWrite { - if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err != nil { + if _, err = api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)); err != nil { // 如果是改价错误,尝试把价格标志去掉再同步 if isErrModifyPrice(err) { storeSku.EbaiSyncStatus = storeSku.EbaiSyncStatus & ^model.SyncFlagPriceMask if storeSku.EbaiSyncStatus != 0 { - if _, err2 := api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(storeSku)); err2 != nil { + if _, err2 := api.EbaiAPI.SkuUpdate(strStoreID, storeSku.EbaiID, genSkuParamsFromStoreSkuInfo(pricePercentage, storeSku)); err2 != nil { err = err2 } } @@ -428,8 +420,8 @@ func (p *PurchaseHandler) RefreshStoresAllSkusID(ctx *jxcontext.Context, parentT } /////////// -func genSkuParamsFromStoreSkuInfo(storeSku *tStoreSkuFullInfo) (params map[string]interface{}) { - price := jxutils.CaculateSkuVendorPrice(storeSku.Price, storeSku.PricePercentage, storeSku.CatPricePercentage) +func genSkuParamsFromStoreSkuInfo(pricePercentage int, storeSku *tStoreSkuFullInfo) (params map[string]interface{}) { + price := jxutils.CaculateSkuVendorPrice(storeSku.Price, pricePercentage, storeSku.CatPricePercentage) params = map[string]interface{}{ "name": utils.LimitMixedStringLen(jxutils.ComposeSkuName(storeSku.Prefix, storeSku.Name, storeSku.Comment, storeSku.Unit, storeSku.SpecQuality, storeSku.SpecUnit, 0), ebaiapi.MaxSkuNameByteCount), "left_num": model.MaxStoreSkuStockQty, diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index f59822c0d..fa6bd64d0 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -15,14 +15,6 @@ import ( "git.rosy.net.cn/jx-callback/globals/api" ) -type tStoreSkuBindExt struct { - model.StoreSkuBind - PricePercentage int - CatPricePercentage int - VendorStoreID string `orm:"column(vendor_store_id)"` - JdID int64 `orm:"column(jd_id)"` -} - // 京东到家,以有库存表示关注(认领) func (p *PurchaseHandler) syncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, db *dao.DaoDB, storeID int, storeSkus []*dao.StoreSkuSyncInfo, isAsync, isContinueWhenError bool) (hint string, err error) { globals.SugarLogger.Debugf("jd syncStoreSkus, storeID:%d", storeID) @@ -73,9 +65,10 @@ func (p *PurchaseHandler) syncStoreSkus(ctx *jxcontext.Context, parentTask tasks } if storeSku.StoreSkuSyncStatus&(model.SyncFlagPriceMask|model.SyncFlagNewMask) != 0 { vendorSkuID4Price = storeSku.VendorSkuID + pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, int(storeSku.Price), int(storeDetail.PricePercentage)) skuPriceInfoList = append(skuPriceInfoList, &jdapi.SkuPriceInfo{ OutSkuId: utils.Int2Str(storeSku.SkuID), - Price: constrainPrice(jxutils.CaculateSkuVendorPrice(int(storeSku.Price), int(storeDetail.PricePercentage), storeSku.CatPricePercentage)), + Price: constrainPrice(jxutils.CaculateSkuVendorPrice(int(storeSku.Price), pricePercentage, storeSku.CatPricePercentage)), }) } if storeSku.StoreSkuSyncStatus&(model.SyncFlagSaleMask|model.SyncFlagNewMask) != 0 { diff --git a/business/partner/purchase/mtwm/store_sku.go b/business/partner/purchase/mtwm/store_sku.go index bd3b1410b..c3b562b37 100644 --- a/business/partner/purchase/mtwm/store_sku.go +++ b/business/partner/purchase/mtwm/store_sku.go @@ -300,9 +300,10 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks if skuItem.Img == "" { err = fmt.Errorf("SKUNAME%d:%s没有图片,同步失败", skuItem.NameID, skuItem.Name) } else { + pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, int(skuItem.Price), int(storeDetail.PricePercentage)) foodData["name"] = jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, mtwmapi.MaxSkuNameCharCount) foodData["description"] = skuItem.Comment - foodData["price"] = jxutils.IntPrice2Standard(int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), int(storeDetail.PricePercentage), skuItem.CatPricePercentage))) + foodData["price"] = jxutils.IntPrice2Standard(int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), pricePercentage, skuItem.CatPricePercentage))) foodData["min_order_count"] = 1 foodData["unit"] = skuItem.Unit foodData["box_num"] = 0 diff --git a/business/partner/purchase/weimob/wsc/store_sku.go b/business/partner/purchase/weimob/wsc/store_sku.go index 2e926ba4b..638e00a53 100644 --- a/business/partner/purchase/weimob/wsc/store_sku.go +++ b/business/partner/purchase/weimob/wsc/store_sku.go @@ -184,6 +184,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks func(rootTask *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { v := batchItemList[0] skuItem := v.(*dao.StoreSkuSyncInfo) + pricePercentage := jxutils.GetPricePercentage(storeDetail.PricePercentagePackObj, int(skuItem.Price), int(storeDetail.PricePercentage)) updateFields := []string{model.FieldWscSyncStatus} storeSkuBind := &model.StoreSkuBind{} storeSkuBind.ID = skuItem.BindID @@ -202,14 +203,14 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks outerGoodsCode := utils.Int2Str(skuItem.NameID) title := jxutils.ComposeSkuName(skuItem.Prefix, skuItem.Name, skuItem.Comment, skuItem.Unit, skuItem.SpecQuality, skuItem.SpecUnit, 30) isPutAway := jxutils.MergeSkuStatus(skuItem.Status, skuItem.StoreSkuStatus) == model.SkuStatusNormal - categoryId := skuItem.VendorVendorCatID - if categoryId == 0 { - categoryId = DefVendorCategoryId + categoryID := skuItem.VendorVendorCatID + if categoryID == 0 { + categoryID = DefVendorCategoryId } - classifyIdList := []int64{utils.Str2Int64WithDefault(skuItem.VendorCatID, 0)} + classifyIDList := []int64{utils.Str2Int64WithDefault(skuItem.VendorCatID, 0)} if skuItem.SkuVendorCatID != "" { if int64Value := utils.Str2Int64WithDefault(skuItem.SkuVendorCatID, 0); int64Value > 0 { - classifyIdList = append(classifyIdList, int64Value) + classifyIDList = append(classifyIDList, int64Value) } } b2cGoods := &weimobapi.PendingSaveB2CGoodsVo{ @@ -217,7 +218,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks DeliveryTypeIdList: []int64{DefDeliveryTypeId}, B2cGoodsType: weimobapi.GoodsTypeNormal, } - salePrice := int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), int(storeDetail.PricePercentage), skuItem.CatPricePercentage)) + salePrice := int64(jxutils.CaculateSkuVendorPrice(int(skuItem.Price), pricePercentage, skuItem.CatPricePercentage)) skuList := []map[string]interface{}{ map[string]interface{}{ weimobapi.KeyOuterSkuCode: utils.Int2Str(skuItem.ID), @@ -237,7 +238,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks skuMap map[string]int64 ) if globals.EnableWscStoreWrite { - goodsID, skuMap, err = api.WeimobAPI.AddGoods(outerGoodsCode, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryId, classifyIdList, b2cGoods, skuList, nil) + goodsID, skuMap, err = api.WeimobAPI.AddGoods(outerGoodsCode, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryID, classifyIDList, b2cGoods, skuList, nil) } else { goodsID = jxutils.GenFakeID() skuMap = map[string]int64{ @@ -261,7 +262,7 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks // skuList[0][weimobapi.KeyEditStockNum] = model.MaxStoreSkuStockQty - int(utils.MustInterface2Int64(remoteSkuList[0].(map[string]interface{})[weimobapi.KeyAvailableStockNum])) } if globals.EnableWscStoreWrite { - _, _, err = api.WeimobAPI.UpdateGoods(goodsID, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryId, classifyIdList, b2cGoods, skuList, nil) + _, _, err = api.WeimobAPI.UpdateGoods(goodsID, title, false, []string{skuItem.Img}, skuItem.Comment, isPutAway, 0, categoryID, classifyIDList, b2cGoods, skuList, nil) } } }