You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jdsdk/sku/sku.go

298 lines
13 KiB

2 years ago
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
}