package channel import ( "context" "git.oa00.com/supply-chain/service/client" "git.oa00.com/supply-chain/service/lib/bean" "github.com/shopspring/decimal" "github.com/smallnest/rpcx/share" ) type sku struct { } const ( SkuOrderTypePrice = 1 // 价格排序 SkuOrderTypeDiscount = 2 // 价格折扣 SkuOrderSortUp = 1 // 升序 SkuOrderSortDown = 2 // 降序 ) type SkuSearch struct { Status uint // 1=上架 2=下架 SkuName string // 商品名称 } type ArgsSkuList struct { Search SkuSearch Page bean.Page } type SkuItemHighlight struct { Name string `json:"name"` } type SkuItem struct { Id uint `json:"id"` Name string `json:"name"` BrandId uint `json:"brandId"` BrandName string `json:"brandName"` FirstCategoryId uint `json:"firstCategoryId"` FirstCategoryName string `json:"firstCategoryName"` SecondCategoryId uint `json:"secondCategoryId"` SecondCategoryName string `json:"secondCategoryName"` ThirdCategoryId uint `json:"thirdCategoryId"` ThirdCategoryName string `json:"thirdCategoryName"` Price decimal.Decimal `json:"price"` Discount decimal.Decimal `json:"discount"` GuidePrice decimal.Decimal `json:"guidePrice"` ImgUrl string `json:"imgUrl"` Profit decimal.Decimal `json:"profit"` Size string `json:"size"` Color string `json:"color"` Tax string `json:"tax"` Unit string `json:"unit"` UpcCode string `json:"upcCode"` TaxName string `json:"taxName"` TaxCode string `json:"taxCode"` Status uint `json:"status"` Length decimal.Decimal `json:"length"` // 长 Width decimal.Decimal `json:"width"` // 宽 Height decimal.Decimal `json:"height"` // 高 Weight decimal.Decimal `json:"weight"` // 重 PackingRate uint `json:"packingRate"` // 装箱率 StartingBatch uint `json:"startingBatch"` // 起批量 InitialFreight decimal.Decimal `json:"initialFreight"` // 起批运费 CreatedAt int64 `json:"createdAt"` UpdatedAt int64 `json:"updatedAt"` Highlight SkuItemHighlight `json:"highlight"` } type ReplySkuList struct { Lists []SkuItem `json:"lists"` Total int64 `json:"total"` } // Lists @Title 商品列表 func (s *sku) Lists(ctx context.Context, channelId string, args ArgsSkuList) (reply ReplySkuList, err error) { xClient, err := client.GetClient(s) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Lists", args, &reply) return } type SkuEsSearch struct { SkuIds []uint // 商品SkuIds Status uint // 1=上架 2=下架 SkuName string // 商品名称 BrandId uint // 品牌id BrandName string // 品牌名称 全词匹配 FirstCategoryId uint // 一级分类id FirstCategoryName string // 一级分类名称 全词匹配 SecondCategoryId uint // 二级分类id SecondCategoryName string // 二级分类名称 全词匹配 ThirdCategoryId uint // 三级分类id ThirdCategoryName string // 三级分类名称 全词匹配 MaxPrice decimal.Decimal // 最高金额 MinPrice decimal.Decimal // 最低金额 MinDiscount decimal.Decimal // 最低折扣 MaxDiscount decimal.Decimal // 最高折扣 Expand []map[string]interface{} // 拓展查询 CustomerSearch string // 客户系统搜索参数 MinGuidePrice decimal.Decimal // 市场参考价 MaxGuidePrice decimal.Decimal // 市场参考价 Source uint // 所属供应商 ThirdCategoryIds []uint // 三级分类Ids TagIds []uint // 标签Ids OrderType uint // 排序类型 OrderSort uint // 排序顺序 } type CustomerSearch struct { SkuName string SkuId uint BrandName string } type SkuEsConfig struct { Highlight bool } type ArgsSkuListsEs struct { Search SkuEsSearch Config SkuEsConfig Page bean.Page } // ListsEs @Title es商品列表 目前最大10000条数据,超出不显示 func (s *sku) ListsEs(ctx context.Context, channelId string, args ArgsSkuListsEs) (reply ReplySkuList, err error) { xClient, err := client.GetClient(s) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "ListsEs", args, &reply) return } type ArgsSkuDetails struct { SkuIds []uint // sku数组 } type SkuDetailItem struct { Id uint `json:"id"` Name string `json:"name"` BrandId uint `json:"brandId"` BrandName string `json:"brandName"` FirstCategoryId uint `json:"firstCategoryId"` FirstCategoryName string `json:"firstCategoryName"` SecondCategoryId uint `json:"secondCategoryId"` SecondCategoryName string `json:"secondCategoryName"` ThirdCategoryId uint `json:"thirdCategoryId"` ThirdCategoryName string `json:"thirdCategoryName"` Price decimal.Decimal `json:"price"` GuidePrice decimal.Decimal `json:"guidePrice"` ImgUrl string `json:"imgUrl"` Profit decimal.Decimal `json:"profit"` Size string `json:"size"` Color string `json:"color"` Tax string `json:"tax"` Unit string `json:"unit"` UpcCode string `json:"upcCode"` TaxName string `json:"taxName"` TaxCode string `json:"taxCode"` Status uint `json:"status"` CreatedAt int64 `json:"createdAt"` UpdatedAt int64 `json:"updatedAt"` Content string `json:"content"` Imgs []SkuImg `json:"imgs"` Specifications []SkuSpecification `json:"specifications"` GroupSkuIds []uint `json:"groupSkuIds"` Length decimal.Decimal `json:"length"` // 长 Width decimal.Decimal `json:"width"` // 宽 Height decimal.Decimal `json:"height"` // 高 Weight decimal.Decimal `json:"weight"` // 重 PackingRate uint `json:"packingRate"` // 装箱率 StartingBatch uint `json:"startingBatch"` // 起批量 InitialFreight decimal.Decimal `json:"initialFreight"` // 起批运费 } type SkuImg struct { Path string `json:"path"` } type SkuSpecification struct { Name string `json:"name"` Attributes []SkuAttribute `json:"attributes"` } type SkuAttribute struct { Name string `json:"name"` Value []string `json:"value"` } // Details @Title 获取sku详情 func (s *sku) Details(ctx context.Context, channelId string, args ArgsSkuDetails) (reply []SkuDetailItem, err error) { xClient, err := client.GetClient(s) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Details", args, &reply) return } type ArgsSkuPrices struct { SkuIds []uint // sku数组 } type SkuPrice struct { Id uint `json:"id"` Name string `json:"name"` Price decimal.Decimal `json:"price"` GuidePrice decimal.Decimal `json:"guidePrice"` Profit decimal.Decimal `json:"profit"` Status uint `json:"status"` CreatedAt int64 `json:"createdAt"` UpdatedAt int64 `json:"updatedAt"` } // Prices @Title 获取sku价格 func (s *sku) Prices(ctx context.Context, channelId string, args ArgsSkuPrices) (reply []SkuPrice, err error) { xClient, err := client.GetClient(s) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Prices", args, &reply) return } type ArgsSkuGroups struct { SkuIds []uint // sku数组 } type SkuGroup struct { SkuId uint `json:"skuId"` GroupSkuIds []uint `json:"groupSkuIds"` } // Groups @Title 获取sku分组信息 func (s *sku) Groups(ctx context.Context, channelId string, args ArgsSkuGroups) (reply []SkuGroup, err error) { xClient, err := client.GetClient(s) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Groups", args, &reply) return } type ArgsSkuStock struct { Address string // 地址 Skus []SkuStockItem // sku信息 } type SkuStockItem struct { SkuId uint // skuId Quantity uint // 数量 } type ReplySkuStock struct { SkuId uint `json:"skuId"` // skuId State uint `json:"state"` // 库存状态 } // Stock @Title 库存查询 func (s *sku) Stock(ctx context.Context, channelId string, args ArgsSkuStock) (reply []ReplySkuStock, err error) { xClient, err := client.GetClient(s) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Stock", args, &reply) return }