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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}