diff --git a/otosaas/category.go b/otosaas/category.go new file mode 100644 index 0000000..40c7869 --- /dev/null +++ b/otosaas/category.go @@ -0,0 +1,62 @@ +package otosaas + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "git.oa00.com/supply-chain/service/lib/bean" +) + +type category struct { +} +type ArgsCategoryList struct { + ThirdCategoryId uint + Page bean.Page +} + +type CategoryItem struct { + Id uint `json:"id"` + FirstCategoryName string `json:"firstCategoryName"` + SecondCategoryName string `json:"secondCategoryName"` + ThirdCategoryName string `json:"thirdCategoryName"` + SupplyCategoryId uint `json:"supplyCategoryId"` +} +type ReplyCategoryList struct { + Lists []CategoryItem `json:"lists"` + Total int64 `json:"total"` +} + +// Lists @Title 获取品牌匹配列表 +func (c *category) Lists(ctx context.Context, args ArgsCategoryList) (reply ReplyCategoryList, err error) { + xClient, err := client.GetClient(c) + if err != nil { + return + } + err = xClient.Call(ctx, "Lists", args, &reply) + return +} + +type ArgsCategoryEdit struct { + CategoryId uint // 分类id + SupplyCategoryId uint // 匹配分类id +} + +// Edit @Title 编辑品牌匹配 +func (c *category) Edit(ctx context.Context, args ArgsCategoryEdit) error { + reply := 0 + xClient, err := client.GetClient(c) + if err != nil { + return err + } + return xClient.Call(ctx, "Edit", args, &reply) +} + +// Select @Title 类目筛选 +func (c *category) Select(ctx context.Context) (reply []CategoryItem, err error) { + args := 0 + xClient, err := client.GetClient(c) + if err != nil { + return + } + err = xClient.Call(ctx, "Select", args, &reply) + return +} diff --git a/otosaas/commodity.go b/otosaas/commodity.go new file mode 100644 index 0000000..0558d78 --- /dev/null +++ b/otosaas/commodity.go @@ -0,0 +1,185 @@ +package otosaas + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "git.oa00.com/supply-chain/service/lib/bean" + "github.com/shopspring/decimal" +) + +const ( + CommodityStatusNone = 1 // 待处理 + CommodityStatusAdopt = 2 // 同步入库 + CommodityStatusReject = 3 // 废弃商品 + + CommodityHandleNone = 1 // 未处理 + CommodityHandleStart = 2 // 开始处理 + + CommoditySaasSkuStatusUp = 1 // 商品上架 + CommoditySaasSkuStatusDown = 2 // 商品下架 +) + +type commodity struct { +} +type CommoditySearch struct { + Name string // 商品名称 + CategoryIds []uint // 类目id + SkuCode string // 商品条码 + Handle uint // 处理状态 1=待处理 2=入库 3=废弃 + CommodityCode string // 商品编码 + MinSupplyPrice decimal.Decimal // 最小采购价 + MaxSupplyPrice decimal.Decimal // 最大采购价 +} +type ArgsCommodityList struct { + Search CommoditySearch + Page bean.Page +} + +type CommodityItem struct { + Id uint `json:"id"` + Name string `json:"name"` + CommodityCode string `json:"commodityCode"` + Img string `json:"img"` + CategoryId uint `json:"categoryId"` + CategoryNames string `json:"categoryNames"` + Skus []CommoditySkuItem `json:"skus"` + GuidePrices []decimal.Decimal `json:"guidePrices"` + SupplyPrices []decimal.Decimal `json:"supplyPrices"` + Status uint `json:"status"` + CreatedAt int64 `json:"createdAt"` +} + +type CommoditySkuItem struct { + Id uint `json:"id"` + Img string `json:"img"` + SupplyPrice decimal.Decimal `json:"supplyPrice"` + SpecValue string `json:"specValue"` + SkuCode string `json:"skuCode"` +} + +type ReplyCommodityLists struct { + List []CommodityItem `json:"list"` + Total int64 `json:"total"` +} + +// Lists @Title 获取商品列表 +func (g *commodity) Lists(ctx context.Context, args ArgsCommodityList) (reply ReplyCommodityLists, err error) { + xClient, err := client.GetClient(g) + if err != nil { + return + } + err = xClient.Call(ctx, "Lists", args, &reply) + return +} + +type ReplyCommodityInfo struct { + Id uint `json:"id"` + CommodityCode string `json:"commodityCode"` + Name string `json:"name"` + ImgUrl string `json:"imgUrl"` + FirstCategoryId uint `json:"firstCategoryId"` + FirstCategoryName string `json:"firstCategoryName"` + SecondCategoryId uint `json:"secondCategoryId"` + SecondCategoryName string `json:"secondCategoryName"` + ThirdCategoryId uint `json:"thirdCategoryId"` + ThirdCategoryName string `json:"thirdCategoryName"` + SupplyCategoryId uint `json:"supplyCategoryId"` + Handle uint `json:"handle"` + Status uint `json:"status"` + Skus []SkuItem `json:"skus"` + Imgs []CommodityImgItem `json:"imgs"` +} + +type CommodityImgItem struct { + Id uint `json:"id"` + Path string `json:"path"` + ReplacePath string `json:"replacePath"` +} + +type SkuItem struct { + Id uint `json:"id"` + SkuCode string `json:"skuCode"` + SpecName string `json:"specName"` + SpecValue string `json:"specValue"` + SupplyPrice decimal.Decimal `json:"supplyPrice"` + GuidePrice decimal.Decimal `json:"guidePrice"` + ImgUrl string `json:"imgUrl"` +} + +// Info @Title 商品详情 +func (g *commodity) Info(ctx context.Context, goodsId uint) (reply ReplyCommodityInfo, err error) { + xClient, err := client.GetClient(g) + if err != nil { + return + } + err = xClient.Call(ctx, "Info", goodsId, &reply) + return +} + +type ReplyImgs struct { + GoodsId uint `json:"goodsId"` + Imgs []string `json:"imgs"` +} + +// GetImgs @Title 获取商品主图 +func (g *commodity) GetImgs(ctx context.Context, goodsIds []uint) (reply []ReplyImgs, err error) { + xClient, err := client.GetClient(g) + if err != nil { + return + } + err = xClient.Call(ctx, "GetImgs", goodsIds, &reply) + return +} + +type AdoptItem struct { + Id uint `json:"id"` + Name string `json:"name"` + Error string `json:"error"` +} + +// Adopt @Title 批量入库 +func (g *commodity) Adopt(ctx context.Context, goodsIds []uint) (reply []AdoptItem, err error) { + xClient, err := client.GetClient(g) + if err != nil { + return + } + err = xClient.Call(ctx, "Adopt", goodsIds, &reply) + return +} + +// Discard @Title 批量废弃 +func (g *commodity) Discard(ctx context.Context, goodsIds []uint) (err error) { + xClient, err := client.GetClient(g) + if err != nil { + return + } + reply := 0 + err = xClient.Call(ctx, "Discard", goodsIds, &reply) + return +} + +// ReHandle @Title 重新处理商品 +func (g *commodity) ReHandle(ctx context.Context, goodsIds []uint) (reply []AdoptItem, err error) { + xClient, err := client.GetClient(g) + if err != nil { + return nil, err + } + err = xClient.Call(ctx, "ReHandle", goodsIds, &reply) + return +} + +type ReplyByIdItem struct { + SkuId uint `json:"skuId"` + SupplierId uint `json:"supplierIds"` + SupplierName string `json:"supplierName"` +} + +// FindBySkuIds @Title 根据商品Ids获取商品信息 +func (g *commodity) FindBySkuIds(ctx context.Context, skuIds []uint) (reply []ReplyByIdItem, err error) { + xClient, err := client.GetClient(g) + if err != nil { + return nil, err + } + err = xClient.Call(ctx, "FindBySkuIds", skuIds, &reply) + return +} diff --git a/otosaas/otosaas.go b/otosaas/otosaas.go new file mode 100644 index 0000000..92ab618 --- /dev/null +++ b/otosaas/otosaas.go @@ -0,0 +1,6 @@ +package otosaas + +type OtoSaas struct { + Category category + Commodity commodity +} diff --git a/rpc.go b/rpc.go index 3046df6..762be91 100644 --- a/rpc.go +++ b/rpc.go @@ -3,6 +3,7 @@ package service import ( "git.oa00.com/supply-chain/service/customer" "git.oa00.com/supply-chain/service/jd" + "git.oa00.com/supply-chain/service/otosaas" "git.oa00.com/supply-chain/service/supplier" "git.oa00.com/supply-chain/service/supply" "git.oa00.com/supply-chain/service/wholesale" @@ -16,4 +17,5 @@ type rpc struct { Customer customer.Customer Supplier supplier.Supplier Wholesale wholesale.Wholesale + OtoSaas otosaas.OtoSaas } diff --git a/wholesale/channel/channel.go b/wholesale/channel/channel.go index 44d18f4..ee22bfe 100644 --- a/wholesale/channel/channel.go +++ b/wholesale/channel/channel.go @@ -1,6 +1,7 @@ package channel type Channel struct { - Sku sku - Mq mq + Sku sku + Order order + Mq mq } diff --git a/wholesale/channel/order.go b/wholesale/channel/order.go new file mode 100644 index 0000000..323eef7 --- /dev/null +++ b/wholesale/channel/order.go @@ -0,0 +1,75 @@ +package channel + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "github.com/shopspring/decimal" + "github.com/smallnest/rpcx/share" +) + +const ( + ReplyOrderFreightFeeErrCodeNone = 0 // 无错误 + ReplyOrderFreightFeeErrCodeErr = 1 // 有错误 + ReplyOrderFreightFeeErrCodeDone = 2 // 已下架 + + OrderStatusSubmit = 1 // 下单 + OrderStatusFreightFee = 2 // 已确认运费 + OrderStatusPay = 3 // 已支付 + OrderStatusClose = 4 // 关闭 + + OrderSubStatusSubmit = 1 // 下单 + OrderSubStatusFreightFee = 2 // 确认运费 + OrderSubStatusPay = 3 // 已支付 + OrderSubStatusCheckout = 4 // 出库 + OrderSubStatusFinish = 5 // 完成 + + OrderCancelSubStatusFalse = 1 // 未取消 + OrderCancelSubStatusTrue = 2 // 已取消 + + OrderSubIsSplitFalse = 1 // 无 + OrderSubIsSplitTrue = 2 // 被拆单 + + OrderSubTypeApi = 1 // api接口下单 + OrderSubTypeCustomerWeb = 2 // 客户商城下单 + +) + +type order struct { +} +type SkuOrderItem struct { + SkuId uint // skuId + Price decimal.Decimal // 单价 + Quantity uint // 数量 (箱) + PackingRate uint // 装箱率 +} +type ArgsOrderSubmit struct { + ChannelOrderSn string // 渠道订单编号 + Address string // 地址 + Skus []SkuOrderItem // sku信息 + Receiver Receiver // 收件信息 + OrderFee decimal.Decimal // 订单金额-不含运费 + UserIp string // 下单用户ip + Type uint // 下单方式 +} + +type Receiver struct { + Name string // 姓名 + Mobile string // 手机号 + Email string // 邮箱 + ZipCode string // 邮编 +} + +type ReplyOrderSubmit struct { + OrderSn string `json:"orderSn"` + ChannelOrderSn string `json:"channelOrderSn"` +} + +// Submit @Title 下单 +func (o *order) Submit(ctx context.Context, channelId string, args ArgsOrderSubmit) (reply ReplyOrderSubmit, err error) { + xClient, err := client.GetClient(o) + if err != nil { + return + } + err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Submit", args, &reply) + return +} diff --git a/wholesale/interface/order.go b/wholesale/interface/order.go index 56edcc0..0d8e393 100644 --- a/wholesale/interface/order.go +++ b/wholesale/interface/order.go @@ -44,7 +44,6 @@ type ArgsOrderSubmit struct { OrderSn uint64 // 订单号 Skus []OrderFreightFeeSkuItem // 商品信息 Address string // 地址 - FreightFee decimal.Decimal // 运费 Receiver OrderReceiver // 收件信息 UserIp string // 用户ip } diff --git a/wholesale/order.go b/wholesale/order.go new file mode 100644 index 0000000..3dab488 --- /dev/null +++ b/wholesale/order.go @@ -0,0 +1,42 @@ +package wholesale + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "github.com/shopspring/decimal" +) + +const ( + OrderCancelStatusSuccess = 1 // 取消成功 + OrderCancelStatusFail = 2 // 取消失败 +) + +type order struct { +} +type ArgsOrderSplit struct { + Source source // 商品来源 + ParentSourceOrderSn string // 上级订单号 + OrderSubs []OrderSub // 子订单 +} +type OrderSub struct { + SourceOrderSn string // 供应商订单号 + FreightFee decimal.Decimal // 运费 + OrderFee decimal.Decimal // 订单金额 + Skus []OrderSplitSkuItem // 拆分订单sku +} +type OrderSplitSkuItem struct { + SourceSkuId string + Quantity uint + SupplyPrice decimal.Decimal +} + +// Split @Title 拆单 +func (o *order) Split(ctx context.Context, args ArgsOrderSplit) (err error) { + xClient, err := client.GetClient(o) + if err != nil { + return + } + reply := 0 + err = xClient.Call(ctx, "Split", args, &reply) + return +}