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" ) const ( AfterServiceStatusApply = 1 // 售后申请中 AfterServiceStatusDeliver = 2 // 客户发货 AfterServiceStatusHandle = 3 // 收货处理中 AfterServiceStatusFinal = 4 // 售后完成 AfterServiceStatusClose = 5 // 售后关闭 AfterServicePackageSendNone = 1 // 无 AfterServicePackageSendWait = 2 // 待客户发货 AfterServicePackageSendAlready = 3 // 客户已发货 ) type afterService struct { } type ArgsAfterServiceCan struct { OrderSn string // 订单编号 SkuId uint // skuId } type ReplyAfterServiceCan struct { CanApply uint `json:"canApply"` // 是否可申请售后 1=可申请 2=不可申请 SkuId uint `json:"skuId"` // skuId AppliedNum uint `json:"appliedNum"` // 已申请售后商品数量 CannotApplyTip string `json:"cannotApplyTip"` // 不可申请原因 Types []AfterServiceType `json:"types"` } type AfterServiceType struct { TypeId string `json:"typeId"` // 类型 TypeName string `json:"typeName"` // 类型名称 } // Can @Title 获取是否可发起售后 func (a *afterService) Can(ctx context.Context, channelId string, args ArgsAfterServiceCan) (reply ReplyAfterServiceCan, err error) { xClient, err := client.GetClient(a) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Can", args, &reply) return } type ArgsAfterServiceReason struct { OrderSn string // 订单编号 SkuId uint // skuId Type string // 售后类型 } type ReplyAfterServiceReason struct { ReasonCode string `json:"reasonCode"` // 售后原因编码 ReasonName string `json:"reasonName"` // 售后原因描述 NeedPicture uint `json:"needPicture"` // 是否需要上传图片 1=需要上传 2=不需要上传 } // Reason @Title 获取售后原因 func (a *afterService) Reason(ctx context.Context, channelId string, args ArgsAfterServiceReason) (reply []ReplyAfterServiceReason, err error) { xClient, err := client.GetClient(a) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Reason", args, &reply) return } type ArgsAfterServiceApply struct { TypeId string // 售后类型 TypeName string // 售后名称 ReasonCode string // 售后原因编码 ReasonName string // 售后原因描述 ChannelAfterServiceSn string // 渠道售后单号 OrderSn string // 订单编号 SkuId uint // skuId Pictures []string // 图片地址数组 Quantity uint // 售后申请数量 } type ReplyAfterServiceApply struct { AfterServiceSn string `json:"afterServiceSn"` // 渠道售后单号 ChannelAfterServiceSn string `json:"channelAfterServiceSn"` // 渠道售后单号 } // Apply @Title 发起售后 func (a *afterService) Apply(ctx context.Context, channelId string, args ArgsAfterServiceApply) (reply ReplyAfterServiceApply, err error) { xClient, err := client.GetClient(a) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Apply", args, &reply) return } type ReplyAfterServiceLogisticsAddress struct { Name string `json:"name"` // 姓名 Mobile string `json:"mobile"` // 手机号 ZipCode string `json:"zipCode"` // 邮编 Address string `json:"address"` // 地址 } // LogisticsAddress @Title 寄回地址 func (a *afterService) LogisticsAddress(ctx context.Context, channelId string, afterServiceSn string) (reply ReplyAfterServiceLogisticsAddress, err error) { xClient, err := client.GetClient(a) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "LogisticsAddress", afterServiceSn, &reply) return } type ArgsAfterServiceBackLogisticsBill struct { AfterServiceSn string // 售后单号 LogisticsCompany string // 物流公司 WaybillCode string // 运单号 SendGoodsDate int64 // 运单发货日期 } // BackLogisticsBill @Title 回传物流信息 func (a *afterService) BackLogisticsBill(ctx context.Context, channelId string, args ArgsAfterServiceBackLogisticsBill) (err error) { xClient, err := client.GetClient(a) if err != nil { return } reply := 0 err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "BackLogisticsBill", args, &reply) return } // Cancel @Title 取消售后 func (a *afterService) Cancel(ctx context.Context, channelId string, afterServiceSn string) (err error) { xClient, err := client.GetClient(a) if err != nil { return } reply := 0 err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Cancel", afterServiceSn, &reply) return } type AfterServiceSearch struct { Name string // 商品名称 OrderSn string // 订单单号 AfsSn string // 售后单号 CreatedDateStart string // 售后日期开始 CreatedDateEnd string // 售后日期结束 } type ArgsAfterServiceLists struct { Search AfterServiceSearch Page bean.Page } type ReplyAfterServiceLists struct { Lists []AfterServiceItem `json:"lists"` Total int64 `json:"total"` } type AfterServiceItem struct { Id uint `json:"id"` AfsSn string `json:"afsSn"` OrderSubSn string `json:"orderSubSn"` Name string `json:"name"` ImgUrl string `json:"imgUrl"` Quantity uint `json:"quantity"` TypeReasonName string `json:"typeReasonName"` OrderSubId uint `json:"orderSubId"` Result string `json:"result"` Status uint `json:"status"` CreatedAt int64 `json:"createdAt"` UpdatedAt int64 `json:"updatedAt"` } // Lists @Title 售后列表 func (a *afterService) Lists(ctx context.Context, channelId string, args ArgsAfterServiceLists) (reply ReplyAfterServiceLists, err error) { xClient, err := client.GetClient(a) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Lists", args, &reply) return } type ReplyAfterServiceDetail struct { Id uint `json:"id"` AfsSn string `json:"afsSn"` OrderSubSn string `json:"orderSubSn"` Status uint `json:"status"` ApproveNotes string `json:"approveNotes"` Result string `json:"result"` CreatedAt int64 `json:"createdAt"` UpdatedAt int64 `json:"updatedAt"` SkuName string `json:"skuName"` ImgUrl string `json:"imgUrl"` SkuId uint `json:"skuId"` Price decimal.Decimal `json:"price"` Quantity uint `json:"quantity"` HopeTypeName string `json:"hopeTypeName"` TypeReasonName string `json:"typeReasonName"` Imgs []string `json:"imgs"` LogisticsCompany string `json:"logisticsCompany"` WaybillCode string `json:"waybillCode"` SendAt int64 `json:"sendAt"` ReturnAddress string `json:"returnAddress"` PackageSend uint `json:"packageSend"` AfsPackageSend AfsPackageSend `json:"afsPackageSend"` RefundFee decimal.Decimal `json:"refundFee"` NewOrderSubSn string `json:"NewOrderSubSn"` } type AfsPackageSend struct { Name string `json:"name"` Mobile string `json:"mobile"` ZipCode string `json:"zipCode"` Address string `json:"address"` LogisticsCompany string `json:"logisticsCompany"` WaybillCode string `json:"waybillCode"` SendGoodsDate int64 `json:"sendGoodsDate"` } // Detail @Title 售后详情 func (a *afterService) Detail(ctx context.Context, channelId string, afsSn string) (reply ReplyAfterServiceDetail, err error) { xClient, err := client.GetClient(a) if err != nil { return } err = xClient.Call(context.WithValue(ctx, share.ReqMetaDataKey, map[string]string{"channelId": channelId}), "Detail", afsSn, &reply) return }