- refactor AccessAPINoPage.

- product related api added.
This commit is contained in:
gazebo
2018-08-26 09:57:43 +08:00
parent 259a8c896a
commit 8357982612
7 changed files with 625 additions and 69 deletions

View File

@@ -0,0 +1,347 @@
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 int `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"`
}
// 分页查询商品品牌信息接口
// 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 int) (catList []map[string]interface{}, 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 utils.Slice2MapSlice(result.([]interface{})), nil
}
return nil, err
}
// 新增商家店内分类信息接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=de26f24a62aa47a49e5ab7579d638cb3
func (a *API) AddShopCategory(pid int, 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.(string), nil
}
return "", err
}
// 查询商家店内分类信息接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=964f2d248a7e42b196be2ab35b4e93b4
func (a *API) QueryCategoriesByOrgCode() (catList []map[string]interface{}, 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 utils.Slice2MapSlice(result.([]interface{})), nil
}
return nil, err
}
// 修改商家店内分类信息接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=1de278c670b64da492f676ab78d62f73
func (a *API) UpdateShopCategory(id int, shopCategoryName string) error {
params := map[string]interface{}{
KeyID: id,
KeyShopCategoryName: shopCategoryName,
}
_, err := a.AccessAPINoPage("pms/updateShopCategory", params, nil, nil, nil)
return err
}
// 修改商家店内分类顺序接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=2a8267602e814be9828f0c7ce307b872
func (a *API) ChangeShopCategoryOrder(pid int, childIds []int) error {
params := map[string]interface{}{
KeyPID: pid,
KeyChildIds: childIds,
}
_, err := a.AccessAPINoPage("pms/changeShopCategoryOrder", params, nil, nil, nil)
return err
}
// 删除商家店内分类接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=c17b96e9fe254b2a8574f6d1bc0c1667
func (a *API) DelShopCategory(id int) error {
_, err := a.AccessAPINoPage("pms/delShopCategory", utils.Params2Map(KeyID, id), nil, nil, nil)
return err
}
// 新增商品信息接口
// https://opendj.jd.com/staticnew/widgets/resources.html?groupid=180&apiid=dfe6a5ca73fa421da1c9f969b848113e
func (a *API) AddSku(outSkuId string, cagtegoryId int, shopCategories []int, 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.(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.(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 []int, 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
}
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
}