|
|
|
|
package sku
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"git.oa00.com/go/jdsdk/address"
|
|
|
|
|
"git.oa00.com/go/jdsdk/request"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
publicSkuList = "jingdong.ctp.ware.skupool.getSkuPoolList" // 公共池商品
|
|
|
|
|
publicSkuAdd = "jingdong.ctp.ware.skupool.addSkuIntoChannel" // 添加到渠道池
|
|
|
|
|
brotherList = "jingdong.ctp.ware.sku.getBrotherList" // 兄弟sku
|
|
|
|
|
skuList = "jingdong.ctp.ware.sku.getSkuList" // sku列表
|
|
|
|
|
skuPriceList = "jingdong.ctp.ware.price.getSkuPriceInfoList" // 价格列表
|
|
|
|
|
skuDetail = "jingdong.ctp.ware.sku.getSkuDetail" // sku详情
|
|
|
|
|
skuStock = "jingdong.ctp.ware.stock.queryAreaStockState" // sku库存
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Sku struct {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ApiSkuPoolListParam struct {
|
|
|
|
|
ScrollId string `json:"scrollId"`
|
|
|
|
|
SkuPoolType uint `json:"skuPoolType"`
|
|
|
|
|
PageSize uint `json:"pageSize"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type poolSku struct {
|
|
|
|
|
SkuPoolId uint64 `json:"skuPoolId"`
|
|
|
|
|
SkuId uint64 `json:"skuId"`
|
|
|
|
|
SkuName string `json:"skuName"`
|
|
|
|
|
SkuPoolType uint `json:"skuPoolType"`
|
|
|
|
|
SkuPoolTypeName string `json:"skuPoolTypeName"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type poolData struct {
|
|
|
|
|
ScrollId string `json:"scrollId"`
|
|
|
|
|
Total uint `json:"total"`
|
|
|
|
|
Entries []poolSku `json:"entries"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetPublicList @Title 获取公共商品列表
|
|
|
|
|
func (s *Sku) GetPublicList(data ApiSkuPoolListParam) (result poolData, err error) {
|
|
|
|
|
err = request.ExecCtlProtocol(publicSkuList, data, &result)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type PoolItem struct {
|
|
|
|
|
SkuPoolId uint64 `json:"skuPoolId"`
|
|
|
|
|
SkuId uint64 `json:"skuId"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type apiSkuPoolAddParam struct {
|
|
|
|
|
SkuPoolAddList []PoolItem `json:"skuPoolAddList"`
|
|
|
|
|
}
|
|
|
|
|
type skuPoolAdd struct {
|
|
|
|
|
ErrorMessage string `json:"errorMessage"`
|
|
|
|
|
SkuPoolId uint64 `json:"skuPoolId"`
|
|
|
|
|
SkuId uint64 `json:"skuId"`
|
|
|
|
|
IsSuccess bool `json:"isSuccess"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// PublicAdd @Title 添加公共商品到商品库
|
|
|
|
|
func (s *Sku) PublicAdd(data []PoolItem) (result []skuPoolAdd, err error) {
|
|
|
|
|
err = request.ExecCtlProtocol(publicSkuAdd, apiSkuPoolAddParam{
|
|
|
|
|
SkuPoolAddList: data,
|
|
|
|
|
}, &result)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type apiBrotherListParam struct {
|
|
|
|
|
SkuIdSet []uint64 `json:"skuIdSet"`
|
|
|
|
|
}
|
|
|
|
|
type brotherItem struct {
|
|
|
|
|
BrotherSkuIds []uint64 `json:"brotherSkuIds"` // 兄弟sku集合
|
|
|
|
|
ErrorMessage string `json:"errorMessage"` // 错误原因
|
|
|
|
|
SkuId uint64 `json:"skuId"` // skuId
|
|
|
|
|
IsSuccess bool `json:"isSuccess"` // 是否成功
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetBrother @Title 获取商品兄弟关系 最大20个
|
|
|
|
|
func (s *Sku) GetBrother(skuIds []uint64) (result []brotherItem, err error) {
|
|
|
|
|
err = request.ExecCtlProtocol(brotherList, apiBrotherListParam{
|
|
|
|
|
SkuIdSet: skuIds,
|
|
|
|
|
}, &result)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type ApiSkuListParam struct {
|
|
|
|
|
ScrollId string `json:"scrollId"`
|
|
|
|
|
OrderBy string `json:"orderBy,omitempty"` // 排序方式。格式为column:asc/desc。column可选值:modified(最近修改时间)
|
|
|
|
|
SkuStatus uint `json:"skuStatus,omitempty"` // sku上下架状态(1 上架,2 下架)
|
|
|
|
|
CategoryId uint `json:"categoryId,omitempty"` // 三级分类
|
|
|
|
|
StartModified string `json:"startModified,omitempty"` // 起始的修改时间,非必填
|
|
|
|
|
EndModified string `json:"endModified,omitempty"` // 结束的修改时间,非必填
|
|
|
|
|
PageSize uint `json:"pageSize"` // 分页大小,size小于等于20
|
|
|
|
|
SkuName string `json:"skuName,omitempty"` // 搜索条件
|
|
|
|
|
}
|
|
|
|
|
type EntryParams struct {
|
|
|
|
|
SkuId uint64 `json:"skuId"` // skuId
|
|
|
|
|
SkuName string `json:"skuName"` // 商品名称
|
|
|
|
|
OuterId string `json:"outerId"` // 渠道sku编号 无意义
|
|
|
|
|
ImgUrl string `json:"imgUrl"` // 商品主图
|
|
|
|
|
CategoryId1 uint `json:"categoryId1"` // 一级分类
|
|
|
|
|
CategoryName1 string `json:"categoryName1"` // 一级分类
|
|
|
|
|
CategoryId2 uint `json:"categoryId2"` // 二级分类
|
|
|
|
|
CategoryName2 string `json:"categoryName2"` // 二级分类
|
|
|
|
|
CategoryId uint `json:"categoryId"` // 三级分类
|
|
|
|
|
CategoryName string `json:"categoryName"` // 三级分类
|
|
|
|
|
BrandId uint `json:"brandId"` // 品牌id
|
|
|
|
|
BrandName string `json:"brandName"` // 品牌名称
|
|
|
|
|
SkuStatus uint `json:"skuStatus"` // 上下加状态 1=上架 2=下架
|
|
|
|
|
Created int64 `json:"created"` // 创建时间
|
|
|
|
|
Modified int64 `json:"modified"` // 修改时间
|
|
|
|
|
EnBrandName string `json:"enBrandName"` // 品牌英文名
|
|
|
|
|
BrandCountry string `json:"brandCountry"` // 品牌国家
|
|
|
|
|
WareType uint `json:"wareType"` // 品牌类型(1-普通商品; 2-虚拟组套)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type skuData struct {
|
|
|
|
|
ScrollId string `json:"scrollId"`
|
|
|
|
|
Total uint `json:"total"`
|
|
|
|
|
Entries []EntryParams `json:"entries"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetList @Title 获取商品列表
|
|
|
|
|
func (s *Sku) GetList(data ApiSkuListParam) (result skuData, err error) {
|
|
|
|
|
err = request.ExecCtlProtocol(skuList, data, &result)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type skuPriceInfoParam struct {
|
|
|
|
|
SkuIdSet []uint64 `json:"skuIdSet"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type priceDetail struct {
|
|
|
|
|
SkuPriceList []PriceItem `json:"skuPriceList"`
|
|
|
|
|
CustomerId uint `json:"customerId"`
|
|
|
|
|
ChannelId uint `json:"channelId"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type PriceItem struct {
|
|
|
|
|
IsSuccess bool `json:"isSuccess"` // 是否获取价格成功(若成功,则skuPrice字段返回该sku价格;否则,errorMessage字段返回查询失败原因)
|
|
|
|
|
ErrorMessage string `json:"errorMessage"` // 若sku价格查询失败(isSuccess!=true),则返回原因
|
|
|
|
|
SkuPrice float64 `json:"skuPrice"` // sku价格,仅获取价格成功时(isSuccess=true)有值,单位:元 小数点后两位
|
|
|
|
|
SkuId uint64 `json:"skuId"` // skuId
|
|
|
|
|
//PriceTypeMark string `json:"priceTypeMark"` // 商品价格类型标识(1:基础价格,2:促销价格)
|
|
|
|
|
ProfitRate float64 `json:"profitRate"` // 商品利润率
|
|
|
|
|
BackStagePrice string `json:"backStagePrice"` // 京东后台价
|
|
|
|
|
//PsriceUpdateTime string `json:"priceUpdateTime"` // 商品价格更新时间
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetPriceList @Title 获取商品价格列表 最大100
|
|
|
|
|
func (s *Sku) GetPriceList(skuIds []uint64) ([]PriceItem, error) {
|
|
|
|
|
detail := priceDetail{}
|
|
|
|
|
err := request.ExecCtlProtocol(skuPriceList, skuPriceInfoParam{
|
|
|
|
|
SkuIdSet: skuIds,
|
|
|
|
|
}, &detail)
|
|
|
|
|
return detail.SkuPriceList, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type skuDetailParam struct {
|
|
|
|
|
SkuIdSet []uint64 `json:"skuIdSet"` // 最大20
|
|
|
|
|
DetailAssemblyType uint `json:"detailAssemblyType"` // 商品详情类型。0:返回sku详情全部信息
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type imageInfo struct {
|
|
|
|
|
Path string `json:"path"` // 图片路径
|
|
|
|
|
Features string `json:"features"` // 特征 无意义
|
|
|
|
|
OrderSort uint `json:"orderSort"` // 排序 1-n 可能为null
|
|
|
|
|
IsPrimary uint `json:"isPrimary"` // 是否主图
|
|
|
|
|
Position uint `json:"position"` // 未知 无意义
|
|
|
|
|
Type uint `json:"type"` // 类型 0=方图 1=长图
|
|
|
|
|
}
|
|
|
|
|
type skuBaseBookInfo struct {
|
|
|
|
|
Id string `json:"id"`
|
|
|
|
|
ISBN string `json:"ISBN"`
|
|
|
|
|
ISSN string `json:"ISSN"`
|
|
|
|
|
BookName string `json:"bookName"`
|
|
|
|
|
ForeignBookName string `json:"foreignBookName"`
|
|
|
|
|
Language string `json:"language"`
|
|
|
|
|
Author string `json:"author"`
|
|
|
|
|
Editer string `json:"editer"`
|
|
|
|
|
Proofreader string `json:"proofreader"`
|
|
|
|
|
Remarker string `json:"remarker"`
|
|
|
|
|
Transfer string `json:"transfer"`
|
|
|
|
|
Drawer string `json:"drawer"`
|
|
|
|
|
Publishers string `json:"publishers"`
|
|
|
|
|
PublishNo string `json:"publishNo"`
|
|
|
|
|
Series string `json:"series"`
|
|
|
|
|
Brand string `json:"brand"`
|
|
|
|
|
Format string `json:"format"`
|
|
|
|
|
PackageStr string `json:"packageStr"`
|
|
|
|
|
Pages string `json:"pages"`
|
|
|
|
|
BatchNo string `json:"batchNo"`
|
|
|
|
|
PublishTime string `json:"publishTime"`
|
|
|
|
|
PrintNo string `json:"printNo"`
|
|
|
|
|
PrintTime string `json:"printTime"`
|
|
|
|
|
SizeAndHeight string `json:"sizeAndHeight"`
|
|
|
|
|
ChinaCatalog string `json:"chinaCatalog"`
|
|
|
|
|
Attachment string `json:"attachment"`
|
|
|
|
|
AttachmentNum string `json:"attachmentNum"`
|
|
|
|
|
PackNum string `json:"packNum"`
|
|
|
|
|
Letters string `json:"letters"`
|
|
|
|
|
BarCode string `json:"barCode"`
|
|
|
|
|
Compile string `json:"compile"`
|
|
|
|
|
Photography string `json:"photography"`
|
|
|
|
|
PicNo string `json:"picNo"`
|
|
|
|
|
MarketPrice string `json:"marketPrice"`
|
|
|
|
|
}
|
|
|
|
|
type skuBaseInfo struct {
|
|
|
|
|
SkuName string `json:"skuName"` // 商品名称
|
|
|
|
|
VenderName string `json:"venderName"` // 商家名称
|
|
|
|
|
ShopName string `json:"shopName"` // 店铺名称
|
|
|
|
|
CategoryId1 uint `json:"categoryId1"` // 一级分类id
|
|
|
|
|
CategoryId2 uint `json:"categoryId2"` // 二级分类id
|
|
|
|
|
CategoryId uint `json:"categoryId"` // 三级分类id
|
|
|
|
|
Length float64 `json:"length"` // 长 mm
|
|
|
|
|
Width float64 `json:"width"` // 宽 mm
|
|
|
|
|
Height float64 `json:"height"` // 高 mm
|
|
|
|
|
Weight float64 `json:"weight"` // 重 kg
|
|
|
|
|
PackageType string `json:"packageType"` // 包装规格
|
|
|
|
|
Model string `json:"model"` // 型号
|
|
|
|
|
Color string `json:"color"` // 颜色
|
|
|
|
|
ColorSequence string `json:"colorSequence"` // 颜色顺序
|
|
|
|
|
UpcCode string `json:"upcCode"` // upc码
|
|
|
|
|
Size string `json:"size"` // 尺码
|
|
|
|
|
SizeSequence string `json:"sizeSequence"` // 尺码顺序
|
|
|
|
|
Unit string `json:"unit"` // 单位
|
|
|
|
|
Warranty string `json:"warranty"` // 质保
|
|
|
|
|
ShelfLife string `json:"shelfLife"` // 保质期天数
|
|
|
|
|
Delivery string `json:"delivery"` // 发货地址
|
|
|
|
|
PlaceOfProduction string `json:"placeOfProduction"` // 产地
|
|
|
|
|
Tax string `json:"tax"` // 税率
|
|
|
|
|
ProductId uint `json:"productId"` // 商品编号 无意义
|
|
|
|
|
SkuStatus uint `json:"skuStatus"` // 商家状态 1=上架 2=下架 与京东商品无关
|
|
|
|
|
Yn uint `json:"yn"` // 是否有效 0=无效 1=有效 京东可能会将商品设置成无效商品
|
|
|
|
|
Fare uint `json:"fare"` // 运费模版id 无意义
|
|
|
|
|
CategoryName1 string `json:"categoryName1"` // 一级分类
|
|
|
|
|
CategoryName2 string `json:"categoryName2"` // 二级分类
|
|
|
|
|
CategoryName string `json:"categoryName"` // 三级分类
|
|
|
|
|
//SkuInfoType string `json:"skuInfoType"` // sku信息类型 1-图书 2-音像
|
|
|
|
|
//BookSkuBaseInfo skuBaseBookInfo `json:"bookSkuBaseInfo"` // 图书基本信息 skuInfoType=1时获取
|
|
|
|
|
//WareType uint `json:"wareType"` // 商品类型 (1-普通商品; 2-虚拟组套)
|
|
|
|
|
}
|
|
|
|
|
type skuAttribute struct {
|
|
|
|
|
AttName string `json:"attName"` // 属性名
|
|
|
|
|
ValNames []string `json:"valNames"` // 属性值列表
|
|
|
|
|
}
|
|
|
|
|
type skuSpecification struct {
|
|
|
|
|
GroupName string `json:"groupName"` // 组名称
|
|
|
|
|
Attributes []skuAttribute `json:"attributes"` // 属性信息列表
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type skuBigFieldInfo struct {
|
|
|
|
|
PcWdis string `json:"pcWdis"` // pc端商品介绍
|
|
|
|
|
PcHtmlContent string `json:"pcHtmlContent"` // PC HTML 可能为null
|
|
|
|
|
PcJsContent string `json:"pcJsContent"` // PC CSS 可能为null
|
|
|
|
|
PcCssContent string `json:"pcCssContent"` // PC JS 可能为null
|
|
|
|
|
}
|
|
|
|
|
type Detail struct {
|
|
|
|
|
ImageInfos []imageInfo `json:"imageInfos"` // 图片信息
|
|
|
|
|
Specifications []skuSpecification `json:"specifications"` // 规格参数
|
|
|
|
|
SkuId uint64 `json:"skuId"` // skuId
|
|
|
|
|
SkuBaseInfo skuBaseInfo `json:"skuBaseInfo"` // 基础信息
|
|
|
|
|
SkuBigFieldInfo skuBigFieldInfo `json:"skuBigFieldInfo"` // 大字段 商品详情
|
|
|
|
|
ExtAtts []skuAttribute `json:"extAtts"`
|
|
|
|
|
//WReadMe string `json:"wReadMe"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetDetail @Title 获取商品详情 sku最大20
|
|
|
|
|
func (s *Sku) GetDetail(skuIds []uint64) (result []Detail, err error) {
|
|
|
|
|
err = request.ExecCtlProtocol(skuDetail, skuDetailParam{
|
|
|
|
|
SkuIdSet: skuIds,
|
|
|
|
|
}, &result)
|
|
|
|
|
return result, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type SkuQuantityItem struct {
|
|
|
|
|
Quantity uint `json:"quantity"` // 数量
|
|
|
|
|
SkuId uint64 `json:"skuId"` // skuId
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type StockStateParam struct {
|
|
|
|
|
SkuQuantityList []SkuQuantityItem `json:"skuQuantityList"` // 商品信息 最多20个
|
|
|
|
|
Address address.Address `json:"address"` // 收货地址
|
|
|
|
|
}
|
|
|
|
|
type stockStateList struct {
|
|
|
|
|
SkuQuantity SkuQuantityItem `json:"skuQuantity"` // 对应商品信息
|
|
|
|
|
AreaStockState uint `json:"areaStockState"` // 库存状态。0:无货 1:有货 2:采购中
|
|
|
|
|
LeadTime string `json:"leadTime"` // 采购中商品的预计到货时间
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetStock @Title 获取商品库存 最多20个
|
|
|
|
|
func (s *Sku) GetStock(data StockStateParam) (result []stockStateList, err error) {
|
|
|
|
|
err = request.ExecCtlProtocol(skuStock, data, &result)
|
|
|
|
|
return result, err
|
|
|
|
|
}
|