- jd store_sku api added.
This commit is contained in:
405
platformapi/jdapi/sku.go
Normal file
405
platformapi/jdapi/sku.go
Normal file
@@ -0,0 +1,405 @@
|
||||
package jdapi
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
)
|
||||
|
||||
const (
|
||||
KeyBrandId = "brandId"
|
||||
KeyBrandName = "brandName"
|
||||
KeyBrandStatus = "brandStatus"
|
||||
KeyCategoryId = "categoryId"
|
||||
KeyChildIds = "childIds"
|
||||
KeyFields = "fields"
|
||||
KeyFixedStatus = "fixedStatus"
|
||||
KeyHandleStatus = "handleStatus"
|
||||
KeyHeight = "height"
|
||||
KeyID = "id"
|
||||
KeyImages = "images"
|
||||
KeyImgType = "imgType"
|
||||
KeyIfViewDesc = "ifViewDesc"
|
||||
KeyIsFilterDel = "isFilterDel"
|
||||
KeyIsSale = "isSale"
|
||||
KeyKeyValue = "keyValue"
|
||||
KeyLength = "length"
|
||||
KeyLiquidStatue = "liquidStatue"
|
||||
KeyOutSkuId = "outSkuId"
|
||||
KeyPID = "pid"
|
||||
KeyProductDesc = "productDesc"
|
||||
KeyPageNo = "pageNo"
|
||||
KeyPageSize = "pageSize"
|
||||
KeyPrefixKey = "prefixKey"
|
||||
KeyPrefixKeyId = "prefixKeyId"
|
||||
KeyPreKeyEndTime = "preKeyEndTime"
|
||||
KeyPreKeyStartTime = "preKeyStartTime"
|
||||
KeyPrescripition = "prescripition"
|
||||
KeyShopCategoryLevel = "shopCategoryLevel"
|
||||
KeyShopCategoryName = "shopCategoryName"
|
||||
KeyShopCategories = "shopCategories"
|
||||
KeySellCities = "sellCities"
|
||||
KeySlogan = "slogan"
|
||||
KeySloganEndTime = "sloganEndTime"
|
||||
KeySloganStartTime = "sloganStartTime"
|
||||
KeySort = "sort"
|
||||
KeySkuId = "skuId"
|
||||
KeySkuName = "skuName"
|
||||
KeySkuPrice = "skuPrice"
|
||||
KeyStoreId = "storeId"
|
||||
KeySystemFixedStatus = "systemFixedStatus"
|
||||
KeyTransportAttribute = "transportAttribute"
|
||||
KeyUpcCode = "upcCode"
|
||||
KeyWeight = "weight"
|
||||
)
|
||||
|
||||
type SkuIDPair struct {
|
||||
SkuId int64 `json:"skuId"`
|
||||
OutSkuId string `json:"outSkuId"`
|
||||
}
|
||||
|
||||
type BrandInfo struct {
|
||||
ID int `json:"id"`
|
||||
BrandName string `json:"brandName"`
|
||||
BrandStatus int `json:"brandStatus"`
|
||||
}
|
||||
|
||||
type IDKeyValuePair struct {
|
||||
ID string `json:"_id"`
|
||||
KeyValue string `json:"keyValue"`
|
||||
}
|
||||
|
||||
type ProductStatus struct {
|
||||
Synchronized bool `json:"synchronized"`
|
||||
EsEntity map[string]interface{} `json:"esEntity"`
|
||||
ProductEntity map[string]interface{} `json:"productEntity"`
|
||||
}
|
||||
|
||||
// 这个类型商家店内分类与到家分类共用,
|
||||
type CategoryInfo struct {
|
||||
Id int64 `json:"id"`
|
||||
ParentId int64 `json:"pid"`
|
||||
Name string `json:"categoryName"`
|
||||
Level int `json:"categoryLevel"`
|
||||
Sort int `json:"sort"` // 店内分类独有
|
||||
Status int `json:"status"` // 到家分类独有
|
||||
FullPath string `json:"fullPath"` // 到家分类独有
|
||||
}
|
||||
|
||||
// 分页查询商品品牌信息接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=1ca07a3e767649a7a44fc6ea7e9ed8dd
|
||||
func (a *API) QueryPageBrandInfo(pageNo, pageSize, brandId int, brandName string) (brandList []*BrandInfo, totalCount int, err error) {
|
||||
if pageNo <= 0 {
|
||||
pageNo = 1
|
||||
}
|
||||
if pageSize == 0 {
|
||||
pageSize = 50
|
||||
}
|
||||
params := map[string]interface{}{
|
||||
KeyPageNo: pageNo, // pageNo好像必须要有值,否则一直不返回
|
||||
KeyPageSize: pageSize,
|
||||
KeyFields: []string{
|
||||
"BRAND_ID",
|
||||
"BRAND_NAME",
|
||||
"BRAND_STATUS",
|
||||
},
|
||||
}
|
||||
if brandId != 0 {
|
||||
params[KeyBrandId] = brandId
|
||||
}
|
||||
if brandName == "" {
|
||||
params[KeyBrandName] = brandName
|
||||
}
|
||||
|
||||
result, totalCount, err := a.AccessAPIHavePage("pms/queryPageBrandInfo", params, nil, nil, nil)
|
||||
if err == nil {
|
||||
brandList = make([]*BrandInfo, len(result))
|
||||
for index, v := range result {
|
||||
mapData := v.(map[string]interface{})
|
||||
brandList[index] = &BrandInfo{
|
||||
ID: int(utils.MustInterface2Int64(mapData[KeyID])),
|
||||
BrandName: utils.Interface2String(mapData[KeyBrandName]),
|
||||
BrandStatus: int(utils.MustInterface2Int64(mapData[KeyBrandStatus])),
|
||||
}
|
||||
}
|
||||
return brandList, totalCount, nil
|
||||
}
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 获取京东到家类目信息接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=d287d326124d42c090cff03c16385706
|
||||
func (a *API) QueryChildCategoriesForOP(pid int64) (catList []*CategoryInfo, err error) {
|
||||
result, err := a.AccessAPINoPage("api/queryChildCategoriesForOP", utils.Params2Map("fields", []string{
|
||||
"ID",
|
||||
"PID",
|
||||
"CATEGORY_NAME",
|
||||
"CATEGORY_LEVEL",
|
||||
"CATEGORY_STATUS",
|
||||
"FULLPATH",
|
||||
}, "id", pid), nil, nil, nil)
|
||||
if err == nil {
|
||||
return interface2CatList(result, 1, func(data interface{}, level int) (cat *CategoryInfo) {
|
||||
mapData, ok := data.(map[string]interface{})
|
||||
if ok {
|
||||
cat = &CategoryInfo{
|
||||
Id: utils.MustInterface2Int64(mapData["id"]),
|
||||
ParentId: utils.MustInterface2Int64(mapData["pid"]),
|
||||
Name: utils.Interface2String(mapData["categoryName"]),
|
||||
Level: int(utils.MustInterface2Int64(mapData["categoryLevel"])),
|
||||
Status: int(utils.MustInterface2Int64(mapData["categoryStatus"])),
|
||||
FullPath: utils.Interface2String(mapData["fullPath"]),
|
||||
}
|
||||
}
|
||||
return cat
|
||||
}), nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 新增商家店内分类信息接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=de26f24a62aa47a49e5ab7579d638cb3
|
||||
func (a *API) AddShopCategory(pid int64, shopCategoryName string, shopCategoryLevel, sort int, userName string) (catId string, err error) {
|
||||
params := map[string]interface{}{
|
||||
KeyPID: pid,
|
||||
KeyShopCategoryName: shopCategoryName,
|
||||
KeyShopCategoryLevel: shopCategoryLevel,
|
||||
KeySort: sort,
|
||||
"createPin": utils.GetAPIOperator(userName),
|
||||
}
|
||||
result, err := a.AccessAPINoPage("pms/addShopCategory", params, nil, nil, nil)
|
||||
if err == nil {
|
||||
return (result.(map[string]interface{}))["id"].(string), nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
// 查询商家店内分类信息接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=964f2d248a7e42b196be2ab35b4e93b4
|
||||
func (a *API) QueryCategoriesByOrgCode() (catList []*CategoryInfo, err error) {
|
||||
result, err := a.AccessAPINoPage("pms/queryCategoriesByOrgCode", utils.Params2Map("fields", []string{
|
||||
"ID",
|
||||
"PID",
|
||||
"SHOP_CATEGORY_NAME",
|
||||
"SORT",
|
||||
}), nil, nil, nil)
|
||||
if err == nil {
|
||||
return interface2CatList(result, 1, nil), nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 修改商家店内分类信息接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=1de278c670b64da492f676ab78d62f73
|
||||
func (a *API) UpdateShopCategory(id int64, shopCategoryName string) error {
|
||||
params := map[string]interface{}{
|
||||
KeyID: id,
|
||||
KeyShopCategoryName: shopCategoryName,
|
||||
}
|
||||
_, err := a.AccessAPINoPage("pms/updateShopCategory", params, nil, nil, nullResultParser)
|
||||
return err
|
||||
}
|
||||
|
||||
// 修改商家店内分类顺序接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=2a8267602e814be9828f0c7ce307b872
|
||||
func (a *API) ChangeShopCategoryOrder(pid int64, childIds []int) error {
|
||||
params := map[string]interface{}{
|
||||
KeyPID: pid,
|
||||
KeyChildIds: childIds,
|
||||
}
|
||||
_, err := a.AccessAPINoPage("pms/changeShopCategoryOrder", params, nil, nil, nullResultParser)
|
||||
return err
|
||||
}
|
||||
|
||||
// 删除商家店内分类接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=c17b96e9fe254b2a8574f6d1bc0c1667
|
||||
func (a *API) DelShopCategory(id int64) error {
|
||||
_, err := a.AccessAPINoPage("pms/delShopCategory", utils.Params2Map(KeyID, id), nil, nil, nullResultParser)
|
||||
return err
|
||||
}
|
||||
|
||||
// 新增商品信息接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=dfe6a5ca73fa421da1c9f969b848113e
|
||||
func (a *API) AddSku(outSkuId string, cagtegoryId int, shopCategories []int64, brandId int, skuName string, skuPrice int, weight float32, images []string, fixedStatus int, isSale bool, addParams map[string]interface{}) (skuId string, err error) {
|
||||
fixedParams := map[string]interface{}{
|
||||
KeyOutSkuId: outSkuId,
|
||||
KeyCategoryId: cagtegoryId,
|
||||
KeyShopCategories: shopCategories,
|
||||
KeyBrandId: brandId,
|
||||
KeySkuName: skuName,
|
||||
KeySkuPrice: skuPrice,
|
||||
KeyWeight: weight,
|
||||
KeyImages: images,
|
||||
KeyFixedStatus: fixedStatus,
|
||||
KeyIsSale: isSale,
|
||||
}
|
||||
result, err := a.AccessAPINoPage("pms/sku/addSku", utils.MergeMaps(fixedParams, addParams), nil, nil, nil)
|
||||
if err == nil {
|
||||
return (result.(map[string]interface{}))["skuId"].(string), nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
// 根据商家商品编码修改商品信息接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=290bdb0ea8a44e10b86b05591254ad68
|
||||
func (a *API) UpdateSku(outSkuId string, params map[string]interface{}) (skuId string, err error) {
|
||||
result, err := a.AccessAPINoPage("pms/sku/updateSku", utils.MergeMaps(params, utils.Params2Map("outSkuId", outSkuId)), nil, nil, nil)
|
||||
if err == nil {
|
||||
return (result.(map[string]interface{}))["skuId"].(string), nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
|
||||
// 根据到家商品编码批量更新商家商品编码接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=4155d29bbdf649b69c67473b705ce7e7
|
||||
func (a *API) BatchUpdateOutSkuId(skuInfoList []*SkuIDPair) (retVal interface{}, err error) {
|
||||
result, err := a.AccessAPINoPage("pms/sku/batchUpdateOutSkuId", utils.Params2Map("skuInfoList", skuInfoList), nil, nil, nil)
|
||||
if err == nil {
|
||||
return result, nil
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 查询商家已上传商品信息列表接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=e433b95f74524dab91718432c0358977
|
||||
// pageNo 从1开始
|
||||
func (a *API) QuerySkuInfos(skuName string, skuId, pageNo, pageSize int, isFilterDel bool) (retVal []map[string]interface{}, totalCount int, err error) {
|
||||
if pageNo <= 0 {
|
||||
pageNo = 1
|
||||
}
|
||||
if pageSize == 0 {
|
||||
pageSize = 50
|
||||
}
|
||||
params := map[string]interface{}{
|
||||
KeyPageNo: pageNo, // pageNo好像必须要有值,否则一直不返回
|
||||
KeyPageSize: pageSize,
|
||||
}
|
||||
if skuName != "" {
|
||||
params[KeySkuName] = skuName
|
||||
}
|
||||
if skuId != 0 {
|
||||
params[KeySkuId] = skuId
|
||||
}
|
||||
if isFilterDel {
|
||||
params[KeyIsFilterDel] = "1"
|
||||
} else {
|
||||
params[KeyIsFilterDel] = "0"
|
||||
}
|
||||
result, totalCount, err := a.AccessAPIHavePage("pms/querySkuInfos", params, nil, nil, nil)
|
||||
if err == nil {
|
||||
return utils.Slice2MapSlice(result), totalCount, nil
|
||||
}
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 查询商品图片处理结果接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=17506653e03542f9a49023711780c30d
|
||||
func (a *API) QueryListBySkuIds(skuIds []int64, addParams map[string]interface{}) (retVal []map[string]interface{}, err error) {
|
||||
result, err := a.AccessAPINoPage("order/queryListBySkuIds", utils.MergeMaps(addParams, utils.Params2Map("skuIds", skuIds)), nil, nil, nil)
|
||||
if err == nil {
|
||||
return utils.Slice2MapSlice(result.([]interface{})), nil
|
||||
}
|
||||
return nil, err
|
||||
|
||||
}
|
||||
|
||||
// 分页查询京东到家商品前缀库接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=2195b87baf0c4783bb1a4fda35aea7d1
|
||||
func (a *API) QueryKeyWordDicInfo(pageNo, pageSize int, keyValue string) (values []*IDKeyValuePair, totalCount int, err error) {
|
||||
if pageNo <= 0 {
|
||||
pageNo = 1
|
||||
}
|
||||
if pageSize == 0 {
|
||||
pageSize = 50
|
||||
}
|
||||
params := map[string]interface{}{
|
||||
KeyPageNo: pageNo, // pageNo好像必须要有值,否则一直不返回
|
||||
KeyPageSize: pageSize,
|
||||
KeyFields: []string{
|
||||
"ID",
|
||||
"KEYVALUE",
|
||||
},
|
||||
}
|
||||
if keyValue != "" {
|
||||
params[KeyKeyValue] = keyValue
|
||||
}
|
||||
|
||||
result, totalCount, err := a.AccessAPIHavePage("pms/queryKeyWordDicInfo", params, nil, nil, nil)
|
||||
if err == nil {
|
||||
values = make([]*IDKeyValuePair, len(result))
|
||||
for index, v := range result {
|
||||
mapData := v.(map[string]interface{})
|
||||
values[index] = &IDKeyValuePair{
|
||||
ID: utils.Interface2String(mapData["_id"]),
|
||||
KeyValue: utils.Interface2String(mapData[KeyKeyValue]),
|
||||
}
|
||||
}
|
||||
return values, totalCount, nil
|
||||
}
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 商家商品状态同步接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=5e29d6c9317847e58b8cbcc70702fd52
|
||||
func (a *API) SyncProduct(storeId, skuId string) (retVal bool, err error) {
|
||||
result, err := a.AccessAPINoPage("search/syncProduct", utils.Params2Map(KeyStoreId, storeId, KeySkuId, skuId), nil, nil, func(data map[string]interface{}) (interface{}, error) {
|
||||
status := utils.MustInterface2Int64(data["status"])
|
||||
if status == 200 {
|
||||
return data["synchronized"].(bool), nil
|
||||
}
|
||||
return nil, utils.NewErrorIntCode(data["message"].(string), int(status))
|
||||
})
|
||||
if err == nil {
|
||||
return result.(bool), nil
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
|
||||
// 商家商品状态检查接口
|
||||
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=a348122182ef459982cae1280407ff17
|
||||
func (a *API) GetProductStatus(storeId, skuId string) (retVal *ProductStatus, err error) {
|
||||
result, err := a.AccessAPINoPage("search/getProductStatus", utils.Params2Map(KeyStoreId, storeId, KeySkuId, skuId), nil, nil, func(data map[string]interface{}) (interface{}, error) {
|
||||
status := utils.MustInterface2Int64(data["status"])
|
||||
if status == 200 {
|
||||
return &ProductStatus{
|
||||
Synchronized: data["synchronized"].(bool),
|
||||
EsEntity: data["esEntity"].(map[string]interface{}),
|
||||
ProductEntity: data["productEntity"].(map[string]interface{}),
|
||||
}, nil
|
||||
}
|
||||
return nil, utils.NewErrorIntCode(data["message"].(string), int(status))
|
||||
})
|
||||
if err == nil {
|
||||
return result.(*ProductStatus), nil
|
||||
}
|
||||
return nil, err
|
||||
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
// 私有辅助函数
|
||||
func interface2Cat(data interface{}, level int) (cat *CategoryInfo) {
|
||||
mapData, ok := data.(map[string]interface{})
|
||||
if ok {
|
||||
cat = &CategoryInfo{
|
||||
Id: utils.MustInterface2Int64(mapData["id"]),
|
||||
ParentId: utils.MustInterface2Int64(mapData["pid"]),
|
||||
Name: utils.Interface2String(mapData["shopCategoryName"]),
|
||||
Level: int(utils.Interface2Int64WithDefault(mapData["shopCategoryLevel"], 0)),
|
||||
Sort: int(utils.MustInterface2Int64(mapData["sort"])),
|
||||
}
|
||||
}
|
||||
return cat
|
||||
}
|
||||
|
||||
func interface2CatList(data interface{}, level int, interface2CatHandler func(data interface{}, level int) (cat *CategoryInfo)) (cats []*CategoryInfo) {
|
||||
if interface2CatHandler == nil {
|
||||
interface2CatHandler = interface2Cat
|
||||
}
|
||||
maps, ok := data.([]interface{})
|
||||
if ok {
|
||||
cats = make([]*CategoryInfo, len(maps))
|
||||
for index, v := range maps {
|
||||
cats[index] = interface2CatHandler(v, level)
|
||||
}
|
||||
}
|
||||
return cats
|
||||
}
|
||||
Reference in New Issue
Block a user