- refactor AccessAPINoPage.
- product related api added.
This commit is contained in:
347
platformapi/jdapi/product.go
Normal file
347
platformapi/jdapi/product.go
Normal 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
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user