- ebai api

This commit is contained in:
gazebo
2018-09-22 23:28:32 +08:00
parent 4da89c226e
commit 3fecfbd7a4
12 changed files with 336 additions and 10 deletions

View File

@@ -0,0 +1,152 @@
package ebaiapi
import (
"git.rosy.net.cn/baseapi"
"git.rosy.net.cn/baseapi/utils"
)
const (
SkuStatusOnline = 1
SkuStatusOffline = 0
)
const (
MaxLeftNum = 9999
DefUPC = 12345678
)
type CategoryInfo struct {
CategoryID int64 `json:"category_id"`
ShopCustomID string `json:"shop_custom_id"`
Name string `json:"name"`
Rank int `json:"rank"` // 店内分类独有
Children []*CategoryInfo `json:"children"`
Level int
}
type PageDataInfo struct {
Total int
Page int
Pages int
List []map[string]interface{}
}
// category相关的函数shop_custom_id可重
func (a *API) ShopCategoryCreate(shopID string, parentID int64, name string, rank int, shopCustomID string) (catID int64, err error) {
result, err := a.AccessAPI("sku.shop.category.create", map[string]interface{}{
KeyShopID: shopID,
"parent_category_id": parentID,
"name": name,
"rank": rank,
"shop_custom_id": shopCustomID,
})
if err == nil {
return utils.Str2Int64(utils.Interface2String(result.Data.(map[string]interface{})["category_id"])), nil
}
return 0, err
}
func (a *API) ShopCategoryGet(shopID string) (cats []*CategoryInfo, err error) {
result, err := a.AccessAPI("sku.shop.category.get", utils.Params2Map(KeyShopID, shopID))
if err == nil {
baseapi.SugarLogger.Debug(result)
cats := interface2CatList(result.Data.(map[string]interface{})["categorys"], 1)
return cats, nil
}
return nil, err
}
func (a *API) ShopCategoryUpdate(shopID string, categoryID int64, name string, rank int, shopCustomID string) (err error) {
_, err = a.AccessAPI("sku.shop.category.update", map[string]interface{}{
KeyShopID: shopID,
"category_id": categoryID,
"name": name,
"rank": rank,
"shop_custom_id": shopCustomID,
})
if errWithCode, ok := err.(*utils.ErrorWithCode); ok {
if errWithCode.Level() == 0 && errWithCode.IntCode() == 1 { //忽略同名错误
err = nil
}
}
return err
}
func (a *API) ShopCategoryDelete(shopID string, categoryID int64) (err error) {
_, err = a.AccessAPI("sku.shop.category.delete", map[string]interface{}{
KeyShopID: shopID,
"category_id": categoryID,
})
return err
}
func (a *API) SkuGetItemsByCategoryId(shopID string, categoryID int64) (skus []map[string]interface{}, err error) {
result, err := a.AccessAPI("sku.getItemsByCategoryId", map[string]interface{}{
KeyShopID: shopID,
"category_id": categoryID,
})
if err == nil {
return utils.Slice2MapSlice(result.Data.([]interface{})), nil
}
return nil, err
}
func (a *API) SkuList(shopID string, params map[string]interface{}) (skuInfo *PageDataInfo, err error) {
defParams := map[string]interface{}{
KeyShopID: shopID,
}
result, err := a.AccessAPI("sku.list", utils.MergeMaps(params, defParams))
if err == nil {
data := result.Data.(map[string]interface{})
return &PageDataInfo{
Total: int(utils.MustInterface2Int64(data["total"])),
Page: int(utils.MustInterface2Int64(data["page"])),
Pages: int(utils.MustInterface2Int64(data["pages"])),
List: utils.Slice2MapSlice(data["list"].([]interface{})),
}, nil
}
return nil, err
}
func (a *API) SkuCreate(shopID string, params map[string]interface{}) (skuID int64, err error) {
defParams := map[string]interface{}{
KeyShopID: shopID,
}
if params["upc"] == nil {
defParams["upc"] = DefUPC
}
if params["brand_id"] == nil {
defParams["brand_id"] = 0
}
result, err := a.AccessAPI("sku.create", utils.MergeMaps(params, defParams))
if err == nil {
return utils.MustInterface2Int64(result.Data.(map[string]interface{})["sku_id"]), nil
}
return 0, err
}
//
func interface2CatList(data interface{}, level int) (cats []*CategoryInfo) {
maps, ok := data.([]interface{})
if ok {
cats = make([]*CategoryInfo, len(maps))
for index, v := range maps {
cats[index] = interface2Cat(v, level)
}
}
return cats
}
func interface2Cat(data interface{}, level int) (cat *CategoryInfo) {
catMap := data.(map[string]interface{})
cat = &CategoryInfo{
CategoryID: utils.MustInterface2Int64(catMap["category_id"]),
ShopCustomID: utils.Interface2String(catMap["shop_custom_id"]),
Name: utils.Interface2String(catMap["name"]),
Rank: int(utils.MustInterface2Int64(catMap["rank"])),
Children: interface2CatList(catMap["children"], level+1),
Level: level,
}
return cat
}