From 8fd1ecd4e88b92b9bf341547017521f0e1b940b9 Mon Sep 17 00:00:00 2001 From: kanade Date: Tue, 7 May 2024 17:42:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=91=E4=B8=AD=E9=B9=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rpc.go | 2 + skycrane/address.go | 85 +++++++++++++++++ skycrane/brand.go | 62 ++++++++++++ skycrane/callback.go | 74 +++++++++++++++ skycrane/category.go | 65 +++++++++++++ skycrane/sku.go | 193 ++++++++++++++++++++++++++++++++++++++ skycrane/skycrane.go | 10 ++ skycrane/task.go | 45 +++++++++ supply/interface/order.go | 1 + supply/sku.go | 1 + 10 files changed, 538 insertions(+) create mode 100644 skycrane/address.go create mode 100644 skycrane/brand.go create mode 100644 skycrane/callback.go create mode 100644 skycrane/category.go create mode 100644 skycrane/sku.go create mode 100644 skycrane/skycrane.go create mode 100644 skycrane/task.go diff --git a/rpc.go b/rpc.go index 762be91..f1d39a6 100644 --- a/rpc.go +++ b/rpc.go @@ -4,6 +4,7 @@ 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/skycrane" "git.oa00.com/supply-chain/service/supplier" "git.oa00.com/supply-chain/service/supply" "git.oa00.com/supply-chain/service/wholesale" @@ -18,4 +19,5 @@ type rpc struct { Supplier supplier.Supplier Wholesale wholesale.Wholesale OtoSaas otosaas.OtoSaas + Skycrane skycrane.Skycrane } diff --git a/skycrane/address.go b/skycrane/address.go new file mode 100644 index 0000000..df519de --- /dev/null +++ b/skycrane/address.go @@ -0,0 +1,85 @@ +package skycrane + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "git.oa00.com/supply-chain/service/lib/bean" +) + +type address struct { +} +type AddressSearch struct { + AddressId int64 + Mate int // 1=已匹配 2=未匹配 +} +type ArgsAddressList struct { + Search AddressSearch + Page bean.Page +} + +type AddressItem struct { + Id int64 `json:"id"` + ProvinceName string `json:"provinceName"` + CityName string `json:"cityName"` + CountyName string `json:"countyName"` + MateAddressId int64 `json:"mateAddressId"` + MateProvinceName string `json:"mateProvinceName"` + MateCityName string `json:"mateCityName"` + MateCountyName string `json:"mateCountyName"` +} +type ReplyAddressList struct { + Lists []AddressItem `json:"lists"` + Total int64 `json:"total"` +} + +// List @Title 地址列表 +func (c *address) List(ctx context.Context, args ArgsAddressList) (reply ReplyAddressList, err error) { + xClient, err := client.GetClient(c) + if err != nil { + return + } + xClient.Call(ctx, "List", args, &reply) + return +} + +type ArgsAddressMate struct { + AddressId int64 // 地址id + MateAddressID int64 // 修改匹配地址id +} + +// Mate @Title 地址匹配 +func (c *address) Mate(ctx context.Context, args ArgsAddressMate) error { + reply := 0 + xClient, err := client.GetClient(c) + if err != nil { + return err + } + return xClient.Call(ctx, "Mate", args, &reply) +} + +// All @Title 地址 +func (c *address) All(ctx context.Context, args AddressSearch) (reply []AddressItem, err error) { + xClient, err := client.GetClient(c) + if err != nil { + return + } + xClient.Call(ctx, "All", args, &reply) + return +} + +type MateAddressItem struct { + Id int64 `json:"id"` + ProvinceName string `json:"provinceName"` + CityName string `json:"cityName"` + CountyName string `json:"countyName"` +} + +// MateAll @Title 匹配地址 +func (c *address) MateAll(ctx context.Context) (reply []MateAddressItem, err error) { + xClient, err := client.GetClient(c) + if err != nil { + return + } + xClient.Call(ctx, "MateAll", 0, &reply) + return +} diff --git a/skycrane/brand.go b/skycrane/brand.go new file mode 100644 index 0000000..35b3704 --- /dev/null +++ b/skycrane/brand.go @@ -0,0 +1,62 @@ +package skycrane + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "git.oa00.com/supply-chain/service/lib/bean" +) + +type brand struct { +} +type BrandSearch struct { + Name string // 商品名称 +} +type ArgsBrandList struct { + Search BrandSearch + Page bean.Page +} + +type BrandItem struct { + Id int64 `json:"id"` + Name string `json:"name"` + MateBrandID int64 `json:"mateBrandID"` +} +type ReplyBrandList struct { + Lists []BrandItem `json:"lists"` + Total int64 `json:"total"` +} + +// List @Title 品牌列表 +func (b *brand) List(ctx context.Context, args ArgsBrandList) (reply ReplyBrandList, err error) { + xClient, err := client.GetClient(b) + if err != nil { + return + } + xClient.Call(ctx, "List", args, &reply) + return +} + +type ArgsBrandMate struct { + BrandId int64 // 品牌id + SupplyBrandId int64 // 修改匹配品牌id +} + +// Mate @Title 品牌匹配 +func (b *brand) Mate(ctx context.Context, args ArgsBrandMate) error { + reply := 0 + xClient, err := client.GetClient(b) + if err != nil { + return err + } + return xClient.Call(ctx, "Mate", args, &reply) +} + +// All @Title 品牌 +func (b *brand) All(ctx context.Context, args BrandSearch) (reply []BrandItem, err error) { + xClient, err := client.GetClient(b) + if err != nil { + return + } + xClient.Call(ctx, "All", args, &reply) + return +} diff --git a/skycrane/callback.go b/skycrane/callback.go new file mode 100644 index 0000000..dd81c4e --- /dev/null +++ b/skycrane/callback.go @@ -0,0 +1,74 @@ +package skycrane + +import ( + "context" + "git.oa00.com/supply-chain/service/client" +) + +type callback struct { +} + +// Cancel @TITLE 取消订单 +func (c *callback) Cancel(ctx context.Context, sourceOrderSn string) error { + xClient, err := client.GetClient(c) + if err != nil { + return err + } + reply := 0 + return xClient.Call(ctx, "Cancel", sourceOrderSn, &reply) +} + +// StockOut @Title 出库 +func (c *callback) StockOut(ctx context.Context, sourceOrderSn string) error { + xClient, err := client.GetClient(c) + if err != nil { + return err + } + reply := 0 + return xClient.Call(ctx, "StockOut", sourceOrderSn, &reply) +} + +// Delivered @Title 订单妥投 +func (c *callback) Delivered(ctx context.Context, sourceOrderSn string) error { + xClient, err := client.GetClient(c) + if err != nil { + return err + } + reply := 0 + return xClient.Call(ctx, "Delivered", sourceOrderSn, &reply) +} + +// Finish @Title 订单完成 +func (c *callback) Finish(ctx context.Context, sourceOrderSn string) error { + xClient, err := client.GetClient(c) + if err != nil { + return err + } + reply := 0 + return xClient.Call(ctx, "Finish", sourceOrderSn, &reply) +} + +// Logistics @Title 更新包裹信息 +func (c *callback) Logistics(ctx context.Context, sourceOrderSn string) error { + xClient, err := client.GetClient(c) + if err != nil { + return err + } + reply := 0 + return xClient.Call(ctx, "Logistics", sourceOrderSn, &reply) +} + +type ArgsCallbackAfsStepResult struct { + ReturnOrderCode string + ReturnOrderStatus int64 +} + +// AfsStepResult @Title 售后处理 +func (c *callback) AfsStepResult(ctx context.Context, args ArgsCallbackAfsStepResult) error { + xClient, err := client.GetClient(c) + if err != nil { + return err + } + reply := 0 + return xClient.Call(ctx, "AfsStepResult", args, &reply) +} diff --git a/skycrane/category.go b/skycrane/category.go new file mode 100644 index 0000000..4e1ecdd --- /dev/null +++ b/skycrane/category.go @@ -0,0 +1,65 @@ +package skycrane + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "git.oa00.com/supply-chain/service/lib/bean" +) + +type category struct { +} +type CategorySearch struct { + CategoryId int64 + Mate int // 1=已匹配 2=未匹配 +} +type ArgsCategoryList struct { + Search CategorySearch + Page bean.Page +} + +type CategoryItem struct { + Id int64 `json:"id"` + FirstCategoryName string `json:"firstCategoryName"` + SecondCategoryName string `json:"secondCategoryName"` + ThirdCategoryName string `json:"thirdCategoryName"` + MateCategoryID int64 `json:"mateCategoryID"` +} +type ReplyCategoryList struct { + Lists []CategoryItem `json:"lists"` + Total int64 `json:"total"` +} + +// List @Title 类目列表 +func (c *category) List(ctx context.Context, args ArgsCategoryList) (reply ReplyCategoryList, err error) { + xClient, err := client.GetClient(c) + if err != nil { + return + } + xClient.Call(ctx, "List", args, &reply) + return +} + +type ArgsCategoryMate struct { + CategoryId int64 // 类目id + SupplyCategoryId int64 // 修改匹配类目id +} + +// Mate @Title 类目匹配 +func (c *category) Mate(ctx context.Context, args ArgsCategoryMate) error { + reply := 0 + xClient, err := client.GetClient(c) + if err != nil { + return err + } + return xClient.Call(ctx, "Mate", args, &reply) +} + +// All @Title 类目 +func (c *category) All(ctx context.Context, args CategorySearch) (reply []CategoryItem, err error) { + xClient, err := client.GetClient(c) + if err != nil { + return + } + xClient.Call(ctx, "All", args, &reply) + return +} diff --git a/skycrane/sku.go b/skycrane/sku.go new file mode 100644 index 0000000..9360a7d --- /dev/null +++ b/skycrane/sku.go @@ -0,0 +1,193 @@ +package skycrane + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "git.oa00.com/supply-chain/service/lib/bean" + "github.com/shopspring/decimal" +) + +const ( + SkuStatusNone = 1 // 待处理 + SkuStatusAdopt = 2 // 同步入库 + SkuStatusReject = 3 // 废弃商品 +) + +type sku struct { +} +type SkuSearch struct { + Status int // 状态 + Name string // 商品名称 + Code string // sku编码 + CategoryId int64 // 类目id + BrandName string // 品牌 + MinSupplyPrice decimal.Decimal // 采购价最小 + MaxSupplyPrice decimal.Decimal // 采购价最大 +} +type ArgsSkuList struct { + Search SkuSearch + Page bean.Page +} +type SkuItem struct { + Id int64 `json:"id"` + Name string `json:"name"` + Code string `json:"code"` + MainPhoto string `json:"mainPhoto"` + BrandName string `json:"brandName"` + FirstCategoryName string `json:"firstCategoryName"` + SecondCategoryName string `json:"secondCategoryName"` + ThirdCategoryName string `json:"thirdCategoryName"` + SupplyPrice decimal.Decimal `json:"supplyPrice"` + GuidePrice decimal.Decimal `json:"guidePrice"` + ShelvesStatus int64 `json:"shelvesStatus"` + Status int64 `json:"status"` + CreatedAt int64 `json:"createdAt"` + UpdatedAt int64 `json:"updatedAt"` + MateSkuId int64 `json:"mateSkuId"` + MateBrandId int64 `json:"mateBrandId"` + MateCategoryId int64 `json:"mateCategoryId"` +} +type ReplySkuList struct { + Lists []SkuItem `json:"lists"` + Total int64 `json:"total"` +} + +// List @Title 商品列表 +func (s *sku) List(ctx context.Context, args ArgsSkuList) (reply ReplySkuList, err error) { + xClient, err := client.GetClient(s) + if err != nil { + return + } + xClient.Call(ctx, "List", args, &reply) + return +} + +type SkuImg struct { + Id int64 `json:"id"` + Path string `json:"path"` + ReplacePath string `json:"replacePath"` +} + +// Imgs @Title 获取预览图 +func (s *sku) Imgs(ctx context.Context, skuId int64) (reply []SkuImg, err error) { + xClient, err := client.GetClient(s) + if err != nil { + return + } + err = xClient.Call(ctx, "Imgs", skuId, &reply) + return +} + +type ReplySkuInfo struct { + Id int64 `json:"id"` + GoodsCode string `json:"goodsCode"` + GoodsName string `json:"goodsName"` + Code string `json:"code"` + Name string `json:"name"` + Title string `json:"title"` + SellPrice decimal.Decimal `json:"sellPrice"` + MarketPrice decimal.Decimal `json:"marketPrice"` + StartQty int64 `json:"startQty"` + ShelvesStatus int64 `json:"shelvesStatus"` + TaxCode string `json:"taxCode"` + TaxRate decimal.Decimal `json:"taxRate"` + BarCode string `json:"barCode"` + IsDeleted int64 `json:"isDeleted"` + BrandId int64 `json:"brandId"` + BrandCode string `json:"brandCode"` + BrandName string `json:"brandName"` + CategoryId int64 `json:"categoryId"` + FirstCategoryCode string `json:"firstCategoryCode"` + FirstCategoryName string `json:"firstCategoryName"` + SecondCategoryCode string `json:"secondCategoryCode"` + SecondCategoryName string `json:"secondCategoryName"` + ThirdCategoryCode string `json:"thirdCategoryCode"` + ThirdCategoryName string `json:"thirdCategoryName"` + ReturnGoodsRules int64 `json:"returnGoodsRules"` + GoodsCharacteristic string `json:"goodsCharacteristic"` + GoodsUnit string `json:"goodsUnit"` + ModelNumber string `json:"modelNumber"` + ProductPlace string `json:"productPlace"` + HaveShelfLife int64 `json:"haveShelfLife"` + ShelfLife string `json:"shelfLife"` + FragileGoods int64 `json:"fragileGoods"` + GrossWeight decimal.Decimal `json:"grossWeight"` + GrossWeightUnit string `json:"grossWeightUnit"` + Density decimal.Decimal `json:"density"` + Extent decimal.Decimal `json:"extent"` + Width decimal.Decimal `json:"width"` + Height decimal.Decimal `json:"height"` + CreatedAt int64 `json:"createdAt"` + UpdatedAt int64 `json:"updatedAt"` + MateSkuId int64 `json:"mateSkuId"` + MateBrandId int64 `json:"mateBrandId"` + MateCategoryId int64 `json:"mateCategoryId"` + Content string `json:"content"` + Imgs []SkuImg `json:"imgs"` + Attributes []SkuAttribute `json:"attributes"` + Specs []SkuSpec `json:"specs"` +} + +type SkuAttribute struct { + Id int64 `json:"id"` + Name string `json:"name"` + Value string `json:"value"` +} +type SkuSpec struct { + Id int64 `json:"id"` + Name string `json:"name"` + Value string `json:"value"` +} + +// Info @Title 获取详情 +func (s *sku) Info(ctx context.Context, skuId int64) (reply ReplySkuInfo, err error) { + xClient, err := client.GetClient(s) + if err != nil { + return + } + err = xClient.Call(ctx, "Info", skuId, &reply) + return +} + +type ArgsSkuReplaceImg struct { + SkuId int64 // 商品id + ImgId int64 // 图片id + ImgPath string // 图片路径 +} + +// ReplaceImg @Title 替换图片 +func (s *sku) ReplaceImg(ctx context.Context, args ArgsSkuReplaceImg) error { + reply := 0 + xClient, err := client.GetClient(s) + if err != nil { + return err + } + return xClient.Call(ctx, "ReplaceImg", args, &reply) +} + +type AdoptItem struct { + Id int64 `json:"id"` + Code string `json:"code"` + Name string `json:"name"` + Error string `json:"error"` +} + +// Adopt @Title 入库 +func (s *sku) Adopt(ctx context.Context, skuIds []int64) (reply []AdoptItem, err error) { + xClient, err := client.GetClient(s) + if err != nil { + return + } + err = xClient.Call(ctx, "Adopt", skuIds, &reply) + return +} + +// Discard @Title 废弃 +func (s *sku) Discard(ctx context.Context, skuIds []int64) error { + reply := 0 + xClient, err := client.GetClient(s) + if err != nil { + return err + } + return xClient.Call(ctx, "Discard", skuIds, &reply) +} diff --git a/skycrane/skycrane.go b/skycrane/skycrane.go new file mode 100644 index 0000000..7064e0c --- /dev/null +++ b/skycrane/skycrane.go @@ -0,0 +1,10 @@ +package skycrane + +type Skycrane struct { + Task task + Sku sku + Brand brand + Category category + Address address + Callback callback +} diff --git a/skycrane/task.go b/skycrane/task.go new file mode 100644 index 0000000..31b6871 --- /dev/null +++ b/skycrane/task.go @@ -0,0 +1,45 @@ +package skycrane + +import ( + "context" + "git.oa00.com/supply-chain/service/client" + "time" +) + +const ( + TaskStatusIng = 1 // 进行中 + TaskStatusFinish = 2 // 结束 +) + +type task struct { +} + +// Pull @Title 拉取商品 +func (t *task) Pull(ctx context.Context) error { + a := 0 + xClient, err := client.GetClient(t) + if err != nil { + return err + } + return xClient.Call(ctx, "Pull", 0, &a) +} + +type TaskStatus struct { + ScrollId string `json:"scrollId"` + Total int64 `json:"total"` + Count int64 `json:"count"` + Status int `json:"status"` // 1=运行中 2=已完成 + Msg string `json:"msg"` + StartTime time.Time `json:"startTime"` + LastTime time.Time `json:"lastTime"` +} + +// GetPullStatus @Title 获取拉取状态 +func (t *task) GetPullStatus(ctx context.Context) (reply TaskStatus, err error) { + xClient, err := client.GetClient(t) + if err != nil { + return + } + err = xClient.Call(ctx, "GetPullStatus", 0, &reply) + return +} diff --git a/supply/interface/order.go b/supply/interface/order.go index 554dde8..1b6a1f9 100644 --- a/supply/interface/order.go +++ b/supply/interface/order.go @@ -47,6 +47,7 @@ type ArgsOrderSubmit struct { FreightFee decimal.Decimal // 运费 Receiver OrderReceiver // 收件信息 UserIp string // 用户ip + BuyerMsg string // 用户备注 } type OrderReceiver struct { diff --git a/supply/sku.go b/supply/sku.go index c9e6a64..54cc76f 100644 --- a/supply/sku.go +++ b/supply/sku.go @@ -16,6 +16,7 @@ const ( SkuSourceJd source = 1 // 京东开普勒渠道 SkuSourceSupplier source = 2 // 供应链供应商渠道 SkuSourceOtoSaas source = 3 // 海旅供应商渠道 + SkuSourceSkycrane source = 4 // 云中鹤渠道 ) const (