From c6954769a146e979d5e96e7a819e12d51d6771c5 Mon Sep 17 00:00:00 2001 From: gazebo Date: Sun, 26 May 2019 22:06:04 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=B8=80=E4=BA=9B=E4=B8=8E=E9=97=A8?= =?UTF-8?q?=E5=BA=97=E5=95=86=E5=93=81=E4=BF=A1=E6=81=AF=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- platformapi/ebaiapi/shop.go | 1 + platformapi/ebaiapi/shop_sku.go | 69 ++++++++++++++++++++++++------ platformapi/mtwmapi/retail.go | 24 ++++++++++- platformapi/weimobapi/goods.go | 75 +++++++++++++++++++++++++-------- 4 files changed, 135 insertions(+), 34 deletions(-) diff --git a/platformapi/ebaiapi/shop.go b/platformapi/ebaiapi/shop.go index 544d7da2..8bd38e27 100644 --- a/platformapi/ebaiapi/shop.go +++ b/platformapi/ebaiapi/shop.go @@ -37,6 +37,7 @@ const ( KeyCustomSkuID = "custom_sku_id" KeySkuID = "sku_id" + KeyUPC = "upc" KeyName = "name" KeyPhone = "phone" diff --git a/platformapi/ebaiapi/shop_sku.go b/platformapi/ebaiapi/shop_sku.go index efe94f91..c1113fa5 100644 --- a/platformapi/ebaiapi/shop_sku.go +++ b/platformapi/ebaiapi/shop_sku.go @@ -40,6 +40,20 @@ var ( skuExistReg = regexp.MustCompile(`\s?,\s?sku_id:(\d+)`) ) +func genSkuIDParams(skuID int64, customSkuID, upc string) map[string]interface{} { + params := map[string]interface{}{} + if skuID != 0 { + params[KeySkuID] = skuID + } else if customSkuID != "" { + params[KeyCustomSkuID] = customSkuID + } else if upc != "" { + params[KeyUPC] = upc + } else { + panic("skuID, customSkuID and upc are all no value!") + } + return params +} + // category相关的函数,shop_custom_id可重 func (a *API) ShopCategoryCreate(shopID string, parentID int64, name string, rank int) (catID int64, err error) { @@ -169,9 +183,6 @@ func (a *API) SkuDelete(shopID, skuIDsStr string) (err error) { KeySkuID: skuIDsStr, } _, err = a.AccessAPI("sku.delete", params) - if err == nil { - return nil - } return err } @@ -181,9 +192,6 @@ func (a *API) SkuDeleteByCustomIDs(shopID, customSkuIDsStr string) (err error) { KeyCustomSkuID: customSkuIDsStr, } _, err = a.AccessAPI("sku.delete", params) - if err == nil { - return nil - } return err } @@ -193,9 +201,13 @@ func (a *API) SkuOnline(shopID, skuIDsStr string) (err error) { KeySkuID: skuIDsStr, } _, err = a.AccessAPI("sku.online", params) - if err == nil { - return nil - } + return err +} + +func (a *API) SkuOnlineOne(shopID string, skuID int64, customSkuID, upc string) (err error) { + params := genSkuIDParams(skuID, customSkuID, upc) + params[KeyShopID] = shopID + _, err = a.AccessAPI("sku.online.one", params) return err } @@ -205,9 +217,41 @@ func (a *API) SkuOffline(shopID, skuIDsStr string) (err error) { KeySkuID: skuIDsStr, } _, err = a.AccessAPI("sku.offline", params) - if err == nil { - return nil + return err +} + +func (a *API) SkuOfflineOne(shopID string, skuID int64, customSkuID, upc string) (err error) { + params := genSkuIDParams(skuID, customSkuID, upc) + params[KeyShopID] = shopID + _, err = a.AccessAPI("sku.offline.one", params) + return err +} + +func genSkuPriceParams(skuPriceStr, customSkuPriceStr, upcPriceStr string) map[string]interface{} { + params := map[string]interface{}{} + if skuPriceStr != "" { + params["skuid_price"] = skuPriceStr + } else if skuPriceStr != "" { + params["custom_sku_id"] = customSkuPriceStr + } else if upcPriceStr != "" { + params["upc_price"] = upcPriceStr + } else { + panic("skuPriceStr, customSkuPriceStr and upcPriceStr are all empty!") } + return params +} + +func (a *API) SkuPriceUpdateBatch(shopID, skuPriceStr, customSkuPriceStr, upcPriceStr string) (err error) { + params := genSkuPriceParams(skuPriceStr, customSkuPriceStr, upcPriceStr) + params[KeyShopID] = shopID + _, err = a.AccessAPI("sku.price.update.batch", params) + return err +} + +func (a *API) SkuPriceUpdateOne(shopID, skuPriceStr, customSkuPriceStr, upcPriceStr string) (err error) { + params := genSkuPriceParams(skuPriceStr, customSkuPriceStr, upcPriceStr) + params[KeyShopID] = shopID + _, err = a.AccessAPI("sku.price.update.one", params) return err } @@ -218,9 +262,6 @@ func (a *API) SkuShopCategoryMap(shopID string, skuID int64, categoryIDsStr stri "category_id": categoryIDsStr, } _, err = a.AccessAPI("sku.shop.category.map", params) - if err == nil { - return nil - } return err } diff --git a/platformapi/mtwmapi/retail.go b/platformapi/mtwmapi/retail.go index 75f41093..aec116c1 100644 --- a/platformapi/mtwmapi/retail.go +++ b/platformapi/mtwmapi/retail.go @@ -20,6 +20,17 @@ type RetailTag struct { NamePath string `json:"namePath"` } +type BareStoreSkuInfo struct { + SkuID string `json:"sku_id"` + Price string `json:"price,omitempty"` + Stock string `json:"stock,omitempty"` +} + +type BareStoreFoodInfo struct { + AppFoodCode string `json:"app_food_code"` + Skus []*BareStoreSkuInfo `json:"skus"` +} + // 美团分类没有ID,就以名字为唯一标识,不论级别都必须不能重名 // name(和originName)的长度不能超过10个字符(字符,不是字节) // 创建一级分类,originName为空,name为新分类名,secondaryName为空 @@ -100,7 +111,7 @@ func (a *API) RetailBatchInitData(poiCode string, foodDataList []map[string]inte return err } -func (a *API) RetailSkuPrice(poiCode string, foodData []map[string]interface{}) (err error) { +func (a *API) RetailSkuPrice(poiCode string, foodData []*BareStoreFoodInfo) (err error) { _, err = a.AccessAPI("retail/sku/price", false, map[string]interface{}{ KeyAppPoiCode: poiCode, "food_data": string(utils.MustMarshal(foodData)), @@ -108,7 +119,7 @@ func (a *API) RetailSkuPrice(poiCode string, foodData []map[string]interface{}) return err } -func (a *API) RetailSkuStock(poiCode string, foodData []map[string]interface{}) (err error) { +func (a *API) RetailSkuStock(poiCode string, foodData []*BareStoreFoodInfo) (err error) { _, err = a.AccessAPI("retail/sku/stock", false, map[string]interface{}{ KeyAppPoiCode: poiCode, "food_data": string(utils.MustMarshal(foodData)), @@ -146,6 +157,15 @@ func (a *API) RetailSkuSellStatus(poiCode string, foodData []map[string]interfac return err } +func (a *API) RetailSkuSellStatus2(poiCode string, foodData []*BareStoreFoodInfo, sellStatus int) (err error) { + _, err = a.AccessAPI("retail/sku/sellStatus", false, map[string]interface{}{ + KeyAppPoiCode: poiCode, + "food_data": string(utils.MustMarshal(foodData)), + "sell_status": sellStatus, + }) + return err +} + func (a *API) RetailDelete(poiCode, foodCode string) (err error) { _, err = a.AccessAPI("retail/delete", false, map[string]interface{}{ KeyAppPoiCode: poiCode, diff --git a/platformapi/weimobapi/goods.go b/platformapi/weimobapi/goods.go index 98616472..aafd0f51 100644 --- a/platformapi/weimobapi/goods.go +++ b/platformapi/weimobapi/goods.go @@ -32,14 +32,29 @@ type PendingSaveB2CSkuVo struct { type PendingSaveSkuVo struct { OuterSkuCode string `json:"outerSkuCode"` - ImageURL string `json:"imageUrl"` - SalePrice float32 `json:"salePrice"` - OriginalPrice float32 `json:"originalPrice"` - CostPrice float32 `json:"costPrice"` + ImageURL string `json:"imageUrl,omitempty"` + SalePrice float64 `json:"salePrice"` + OriginalPrice float64 `json:"originalPrice,omitempty"` + CostPrice float64 `json:"costPrice"` EditStockNum int `json:"editStockNum"` B2cSku *PendingSaveB2CSkuVo `json:"b2cSku"` } +type PendingSaveGoodsVo struct { + Title string `json:"title"` + OuterGoodsCode string `json:"outerGoodsCode,omitempty"` + IsMultiSku int `json:"isMultiSku"` + GoodsImageURL []string `json:"goodsImageUrl"` + GoodsDesc string `json:"goodsDesc"` + InitialSales int `json:"initialSales,omitempty"` + DeductStockType int `json:"deductStockType"` + IsPutAway int `json:"isPutAway"` + Sort int `json:"Sort,omitempty"` + CategoryID int64 `json:"categoryId"` + B2cGoods []*PendingSaveB2CGoodsVo `json:"b2cGoods"` + SkuList []*PendingSaveSkuVo `json:"skuList"` +} + type Category struct { CategoryID int64 `json:"categoryId"` Title string `json:"title"` @@ -198,6 +213,16 @@ func (a *API) UpdateClassify(classifyID int64, title string, imageURL string) (e return err } +func getDataFromCUGoodsResult(result interface{}) (goodsId int64, skuMap map[string]int64, err error) { + skuMap = make(map[string]int64) + skuList := result.(map[string]interface{})["skuList"].([]interface{}) + for _, v := range skuList { + sku := v.(map[string]interface{}) + skuMap[utils.Interface2String(sku[KeyOuterSkuCode])] = utils.MustInterface2Int64(sku[KeySkuID]) + } + return utils.MustInterface2Int64(result.(map[string]interface{})["goodsId"]), skuMap, nil +} + func (a *API) AddGoods(outerGoodsCode, title string, isMultiSku bool, goodsImageUrl []string, goodsDesc string, isPutAway bool, sort int, categoryId int64, classifyIdList []int64, b2cGoods *PendingSaveB2CGoodsVo, skuList []map[string]interface{}, addParams map[string]interface{}) (goodsId int64, skuMap map[string]int64, err error) { goodsInfo := map[string]interface{}{ "outerGoodsCode": outerGoodsCode, @@ -221,13 +246,20 @@ func (a *API) AddGoods(outerGoodsCode, title string, isMultiSku bool, goodsImage "goods": mergedMap, }) if err == nil { - skuMap := make(map[string]int64) - skuList := result.(map[string]interface{})["skuList"].([]interface{}) - for _, v := range skuList { - sku := v.(map[string]interface{}) - skuMap[utils.Interface2String(sku[KeyOuterSkuCode])] = utils.MustInterface2Int64(sku[KeySkuID]) - } - return utils.MustInterface2Int64(result.(map[string]interface{})["goodsId"]), skuMap, nil + return getDataFromCUGoodsResult(result) + } + return 0, nil, err +} + +func (a *API) AddGoods2(goodsInfo *PendingSaveGoodsVo) (goodsId int64, skuMap map[string]int64, err error) { + if goodsInfo.DeductStockType == 0 { + goodsInfo.DeductStockType = DeductStockTypePay + } + result, err := a.AccessAPI("goods/addGoods", map[string]interface{}{ + "goods": goodsInfo, + }) + if err == nil { + return getDataFromCUGoodsResult(result) } return 0, nil, err } @@ -254,13 +286,20 @@ func (a *API) UpdateGoods(goodsID int64, title string, isMultiSku bool, goodsIma "goods": mergedMap, }) if err == nil { - skuMap := make(map[string]int64) - skuList := result.(map[string]interface{})["skuList"].([]interface{}) - for _, v := range skuList { - sku := v.(map[string]interface{}) - skuMap[utils.Interface2String(sku[KeyOuterSkuCode])] = utils.MustInterface2Int64(sku[KeySkuID]) - } - return utils.MustInterface2Int64(result.(map[string]interface{})["goodsId"]), skuMap, nil + return getDataFromCUGoodsResult(result) + } + return 0, nil, err +} + +func (a *API) UpdateGoods2(goodsInfo *PendingSaveGoodsVo) (goodsId int64, skuMap map[string]int64, err error) { + if goodsInfo.DeductStockType == 0 { + goodsInfo.DeductStockType = DeductStockTypePay + } + result, err := a.AccessAPI("goods/updateGoods", map[string]interface{}{ + "goods": goodsInfo, + }) + if err == nil { + return getDataFromCUGoodsResult(result) } return 0, nil, err }