order

package
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 26, 2023 License: GPL-2.0 Imports: 6 Imported by: 0

README

退款

如果全部退款,订单状态已关闭。 如果是部分退款,订单不变。标记为退款

订单全流程:从父订单到仓库出库单

参考:https://www.jianshu.com/p/8c30b7503f48

正常购物的流程:选购好商品从购物车下单、生成订单、确认订单支付、然后坐等收货、收到货确认收货。

从购物车里面会选多个商家的商品一起下单,有时每个商家一个包裹,也有一个商家多个包裹的情况,这是怎么实现的呢?

在这个过程中有父订单、子订单、发货单、仓库出库单等各种单据,还存在拆单。对于非自营的平台,如淘宝来说,只有第1次拆单;对自营的平台来说,有第1次和第2次拆单;对各种平台的商家来说,只有第2次拆单。

一、第一次拆单

从购物车下单的时候,顾客会同时选择多个商家的商品一起下单,这时候可以一起支付。但是支付完成后,跟踪订单,一般一个店铺一张订单,可以在“我的订单”中看到,这里就要说到父订单和子订单。

顾客从购物车选中多件商品下单的时候,会生成一个父订单和多个子订单。一般子订单拆分的规则是按照店铺,每个店铺一张子订单,如果其中有店铺是自营的,可能会将该店铺的商品按照发货仓库提前拆分成多个子订单。

子订单是后续追踪发货物流、售后以及财务结算的依据。包括订单明细、商品明细、支付明细、收货信息、发票信息、服务信息、物流信息、发货信息等各种内容。

父订单有什么作用呢?除了记录用户这一次下多单的行为,还有合并支付。如果有跨商家优惠,父订单可以对应到相应的优惠,然后对各个商家进行摊分。一般在用户下完单之后,父订单的作用基本上是已经完成了。在订单产品架构的设计中,并不是需要拆单的订单才有父订单,而是所有的订单都需要生成父子订单。

在销售层生成子订单之后,接下来就要处理订单发货的问题。自营平台会把订单推送到自己的调度中心进行处理,平台的商家有几种处理方式,一是通过手工的方式将订单导出,然后安排发货,发完货再回到平台的店铺管理里进行更新发货信息;二是通过系统对接的方式将销售订单下载至自己的订单处理中心或ERP里,安排发货。

二、第二次拆单

销售层推送订单至调度层,也是订单系统向调度中心推送的过程。调度中心收到销售订单后,首先是根据相应的规则进行审核,如风控规则识别的风险订单进行拦截,信息不完整的订单需要人工介入,收到销售订单后,一段时间后再进行审核,比如半小时等等。

审核通过的订单开始配货,配货的时候,就是拆单规则发挥作用的时候。首先需要明确一个原则,有库存的商品才允许配货。这一层拆的是发货单,不是子订单,拆再多用户看到的还是一个子订单。但是子订单对应多个包裹,也就是多个物流单号。

拆单规则

1.仓库:按照区域调度的原则为订单商品选择发货仓库,不同的仓库需要生成不同的发货单;

2.重量/体积:在选择仓库之后,因为仓库包装的重量或者体积的限制,需要进行拆单;

3.品类:由于易燃或者贵重物品,需要单独打包,也是要进行拆单,在跨境电商中还存在包括价值限额的问题;

4.库存:没有库存的商品是不会下发到仓库的,审完发货单之后可以等发货单中的全部商品有货在下推仓库,也可以确定有货先配的原则,这时也需要拆单。

经过以上的原则,一个子订单可能拆成多个发货单,也可能一个子订单还是对应一个发货单;经过这一层拆单,最好的状态是发货单下发至仓库,仓库就可以打包成一个包裹进行出库。在发货单生成之后,就需要安排发货单进行出库,也就是推送至wms系统中。

一般情况下,仓库收到发货单之后,按照整单进行出库。只有在调度中心做的不够好的情况下,仓库才需要打包成多个包裹。

三、取消订单

在订单支付后发货前,会有用户申请取消订单的情况,这时候需要系统去拦截订单的发货流程,如果拦截不成功,顾客就只有退货了,退货的成本肯定是比取消订单的成本要高很多。

这时候有三个节点去拦截订单:

  1. 销售层

在用户下单后,销售订单还没有下发至调度层,可以直接拦截成功;如果在销售层没有拦截成功,就需要去调度层进行拦截。

  1. 调度层

我们前面说到,订单稍发到调度层,需要经过审核以及配货。如果订单未审核就直接取消,成功后返回调度层,取消相应的订单;审核后配货成功前需要去取消发货单,这时也算拦截成功;如果配货成功,已经下发至仓库,这需要再去仓库wms系统进行拦截。

  1. 仓库层

调度中心和仓库进行对接后,通过接口取消仓库出库单,如果wms拦截出库单成功,则拦截成功。如果到这个节点,拦截不成功,就是取消订单失败。

一般WMS系统都支持在仓库出库之前都可以拦截成功,但是如果调度中心没有实现和wms系统的完整对接,就无法实现这个功能。

经过以上三个节点,如果拦截成功,那订单就可以允许取消,发起退款。如果拦截不成功,就只有等用户收到货之后进行退货。

四、几个单据

在整个流程之中,有父订单、子订单、发货单、仓库出库单等几种类型的单据,千万不要搞混,每个单据在不同的环节发挥着不同的作用。

为什么要做这么复杂?我们希望送到用户手中的每一个包裹在系统中都有详细的数据记录,而不会因为有些数据空白而产生纠纷。

支付订单

https://www.woshipm.com/pd/2972697.html

用户把订单提交后此时后台会有两步操作:

1)拆单

多商家情况下,提交订单就进行拆单,拆后流转至对应的商家后台,用户也会看到多个子订单;其他还可以按发货仓库等维度拆;

2)生成账单

生成账单的目的是为了记录该笔母订单的金额,如商品金额、抵扣总金额、各商品分别抵扣金额、用户需支付金额等,用户将要支付的是母订单的账单,当该笔账单已完成,则各子订单状态跳转为待发货;

注意,如果用户在支付页面退出,此时账单也会随着商家拆分成各子账单,因为用户可以在订单列表里分别对拆分后的子订单进行支付

Documentation

Index

Constants

View Source
const (

	// StatAwaitingPayment 等待支付
	StatAwaitingPayment = 1
	// StatAwaitingConfirm 等待确认
	StatAwaitingConfirm = 2
	// StatAwaitingPickup 等待备货
	StatAwaitingPickup = 3
	// StatAwaitingShipment 等待发货
	StatAwaitingShipment = 4

	// StatCancelled 系统取消
	StatCancelled = 11
	// StatAwaitingCancel 买家申请取消,等待卖家确认
	StatAwaitingCancel = 12
	// StatDeclined 卖家谢绝订单,由于无货等原因
	StatDeclined = 13
	// StatRefunded 已退款,完成取消
	StatRefunded = 14

	// PartiallyShipped 部分发货(将订单商品分多个包裹发货)
	PartiallyShipped = 5
	// StatShipped 完成发货
	StatShipped = 6
	// StatBreak 订单已拆分
	StatBreak = 7
	// StatCompleted 订单完成
	StatCompleted = 8

	// StatGoodsRefunded 已退货
	StatGoodsRefunded = 15
)
View Source
const (
	// BreakDefault 默认
	BreakDefault = 0
	// BreakAwaitBreak 待拆分
	BreakAwaitBreak = 1
	// BreakNoBreak 无需拆分
	BreakNoBreak = 2
	// Breaked 已拆分
	Breaked = 3
)

Variables

View Source
var (
	ErrNoCheckedItem = domain.NewError(
		"err_order_no_checked_item", "没有可结算的商品")

	ErrRequireCart = domain.NewError(
		"err_require_cart", "订单已生成,无法引入购物车")

	ErrNoSuchOrder = domain.NewError(
		"err_no_such_order", "订单不存在")

	ErrOrderPayed = domain.NewError(
		"err_order_payed ", "订单已支付")

	ErrNoYetCreated = domain.NewError(
		"err_order_not_yet_created ", "订单尚未生成")

	ErrUnusualOrder = domain.NewError(
		"err_unusual_order", "订单异常")

	ErrMissingShipAddress = domain.NewError(
		"err_missing_ship_address", "未设置收货地址")

	ErrUnusualOrderStat = domain.NewError(
		"err_except_order_stat", "订单状态不匹配、无法执行此操作!")

	ErrPartialShipment = domain.NewError(
		"err_order_partial_shipment", "订单部分商品已经发货")

	ErrOrderNotPayed = domain.NewError(
		"err_order_not_payed ", "订单未支付")

	ErrOutOfQuantity = domain.NewError(
		"err_order_out_of_quantity", "超出数量")
	ErrNoSuchGoodsOfOrder = domain.NewError(
		"err_order_no_such_goods_of_order", "订单中不包括该商品")
	ErrOrderHasConfirm = domain.NewError(
		"err_order_has_confirm", "订单已经确认")

	ErrOrderNotConfirm = domain.NewError(
		"err_order_not_confirm", "请等待系统确认")

	ErrOrderHasPickUp = domain.NewError(
		"err_order_has_pick_up", "订单已经备货")

	ErrOrderHasShipment = domain.NewError(
		"err_order_has_shipment", "订单已经发货")

	ErrNoSuchAddress = domain.NewError(
		"err_order_no_address", "请选择收货地址")

	ErrOrderShipped = domain.NewError(
		"err_order_shipped", "订单已经发货")

	ErrOrderNotShipped = domain.NewError(
		"err_order_not_shipped", "订单尚未发货")

	ErrIsCompleted = domain.NewError(
		"err_order_is_completed", "订单已经完成")

	ErrOrderBreakUpFail = domain.NewError(
		"err_order_break_up_fail", "拆分订单操作失败")

	ErrPromotionApplied = domain.NewError(
		"err_promotion_applied", "已经使用相同的促销")

	ErrEmptyReason = domain.NewError(
		"err_order_empty_reason", "原因不能为空")

	ErrOrderCancelled = domain.NewError(
		"err_order_can_not_cancel", "订单已经取消")

	ErrOrderShippedCancel = domain.NewError(
		"err_order_shipped_cancel", "订单已发货,无法取消")

	ErrHasRefund = domain.NewError(
		"err_order_has_refund", "订单已经退款")

	ErrDisallowRefund = domain.NewError(
		"err_order_disallow_refund", "订单不允许退款")
	ErrDisallowCancel = domain.NewError(
		"err_order_disallow_cancel", "会员无法取消此订单")
	ErrTradeRateLessZero = domain.NewError(
		"err_order_trade_rate_less_zero", "交易类订单结算比例不能小于零")

	ErrTradeRateMoreThan100 = domain.NewError(
		"err_order_trade_rate_more_than_100", "交易类订单结算比例必须小于或等于100%")

	ErrMissingSubject = domain.NewError(
		"err_order_missing_subject", "缺少订单标题")

	ErrTicketImage = domain.NewError(
		"err_order_ticket_image", "请上传正确的发票凭证")

	ErrForbidStatus = domain.NewError(
		"err_order_forbid_status", "仅已取消或完成的订单才能删除")
)

Functions

This section is empty.

Types

type AffiliateDistribution added in v0.4.10

type AffiliateDistribution struct {
	// 编号
	Id int64 `db:"id" pk:"yes" auto:"yes" json:"id"`
	// 返利方案Id
	PlanId int `db:"plan_id" json:"planId"`
	// 买家
	BuyerId int64 `db:"buyer_id" json:"buyerId"`
	// 返利所有人编号
	OwnerId int64 `db:"owner_id" json:"ownerId"`
	// 标志
	Flag int16 `db:"flag" json:"flag"`
	// 是否已读
	IsRead int16 `db:"is_read" json:"isRead"`
	// 分享码
	AffiliateCode string `db:"affiliate_code" json:"affiliateCode"`
	// 订单号
	OrderNo string `db:"order_no" json:"orderNo"`
	// 订单标题
	OrderSubject string `db:"order_subject" json:"orderSubject"`
	// 订单金额
	OrderAmount int64 `db:"order_amount" json:"orderAmount"`
	// 分销奖励金额
	DistributeAmount int64 `db:"distribute_amount" json:"distributeAmount"`
	// 返利状态
	Status int `db:"status" json:"status"`
	// 创建时间
	CreateTime int64 `db:"create_time" json:"createTime"`
	// 更新时间
	UpdateTime int64 `db:"update_time" json:"updateTime"`
}

AffiliateDistribution 订单分销

type ComplexConsignee

type ComplexConsignee struct {
	// 收货人
	ConsigneeName string
	// 收货人联系电话
	ConsigneePhone string
	// 收货地址
	ShippingAddress string
}

ComplexConsignee 收货人信息

type ComplexItem

type ComplexItem struct {
	// 编号
	ID int64 `db:"id" pk:"yes" auto:"yes" json:"id"`
	// 商品编号
	ItemId int64 `db:"item_id"`
	// 商品SKU编号
	SkuId int64 `db:"sku_id"`
	// SKU名称
	SkuWord string `db:"-"`
	// 快照编号
	SnapshotId int64 `db:"snap_id"`
	// 商品标题
	ItemTitle string `db:"item_title"`
	// 商品图片
	MainImage string `db:"image"`
	// 商品单价
	Price int64 `db:"-"`
	// 商品实际单价
	FinalPrice int64 `db:"-"`
	// 数量
	Quantity int32 `db:"quantity"`
	// 退回数量(退货)
	ReturnQuantity int32 `db:"return_quantity"`
	// 金额
	Amount int64 `db:"amount"`
	// 最终金额, 可能会有优惠均摊抵扣的金额
	FinalAmount int64 `db:"final_amount"`
	// 是否发货
	IsShipped int32 `db:"is_shipped"`
	// 其他数据
	Data map[string]string
}

ComplexItem 符合的订单项

type ComplexOrder

type ComplexOrder struct {
	// 订单编号
	OrderId int64
	// 订单类型
	OrderType int32
	// 订单号
	OrderNo string
	// 购买人编号
	BuyerId int64
	// 卖家编号-
	SellerId int64
	// 买家用户名
	BuyerUser string
	// 订单标题
	Subject string
	// 商品数量
	ItemCount int
	// 商品金额
	ItemAmount int64
	// 优惠减免金额
	DiscountAmount int64
	// 运费
	ExpressFee int64
	// 包装费用
	PackageFee int64
	// 实际金额
	FinalAmount int64
	// 收货人信息
	Consignee *ComplexConsignee
	// 地址下单后是否修改
	ConsigneeModified int
	// 订单是否拆分
	IsBreak int32
	// 是否支付
	IsPaid int32
	// 订单状态
	Status int
	// 状态文本
	StatusText string
	// 订单生成时间
	CreateTime int64
	// 更新时间
	UpdateTime int64
	// 扩展数据
	Data map[string]string
	// 订单详情
	Details []*ComplexOrderDetails
}

ComplexOrder 订单复合信息

type ComplexOrderDetails added in v0.4.10

type ComplexOrderDetails struct {
	// 编号
	Id int64
	// 订单号
	OrderNo string
	// 店铺编号
	ShopId int64
	// 店铺名称
	ShopName string
	// 商品数量
	ItemCount int
	// 商品金额
	ItemAmount int64
	// 优惠减免金额
	DiscountAmount int64
	// 运费
	ExpressFee int64
	// 包装费用
	PackageFee int64
	// 实际金额
	FinalAmount int64
	// 买家留言
	BuyerComment string
	// 订单状态
	Status int
	// 状态文本
	StatusText string
	// 商品项
	Items []*ComplexItem
	// 关闭时间
	CloseTime int64
	// 支付时间
	PaymentTime int64
	// 更新时间
	UpdateTime int64
}

ComplexOrderDetails 订单详情

type DistributionItem added in v0.4.10

type DistributionItem struct {
	// 编号
	Id int64 `db:"id" pk:"yes" auto:"yes" json:"id"`
	// 分销单Id
	DistributeId int64 `db:"distribute_id" json:"distributeId"`
	// 商品编号
	ItemId int64 `db:"item_id" json:"itemId"`
	// 商品名称
	ItemName string `db:"item_name" json:"itemName"`
	// 商品图片
	ItemImage string `db:"item_image" json:"itemImage"`
	// 商品金额
	ItemAmount int64 `db:"item_amount" json:"itemAmount"`
	// 分销金额
	DistributeAmount int64 `db:"distribute_amount" json:"distributeAmount"`
}

DistributionItem 订单返利详情

type INormalOrder

type INormalOrder interface {
	// RequireCart 读取购物车数据,用于预生成订单
	RequireCart(c cart.ICart) error
	// GetByVendor 根据运营商获取商品和运费信息,限未生成的订单
	GetByVendor() (items map[int][]*SubOrderItem, expressFee map[int]int64)
	// OnlinePaymentTradeFinish 在线支付交易完成
	OnlinePaymentTradeFinish() error
	// Submit 提交订单。如遇拆单,需均摊优惠抵扣金额到商品
	Submit() error
	// BreakPaymentOrder 拆分支付单
	BreakPaymentOrder() ([]payment.IPaymentOrder, error)
	// Cancel 取消订单
	Cancel(buyerCancel bool, reason string) error

	// GetSubOrders 获取子订单列表
	GetSubOrders() []ISubOrder
	// ApplyTraderCode 应用成交人代码,用于订单返利
	ApplyTraderCode(code string) error
	// ApplyCoupon 应用优惠券
	ApplyCoupon(coupon promotion.ICouponPromotion) error
	// GetCoupons 获取应用的优惠券
	GetCoupons() []promotion.ICouponPromotion
	// GetAvailableOrderPromotions 获取可用的促销,不包含优惠券
	GetAvailableOrderPromotions() []promotion.IPromotion
	// GetBestSavePromotion 获取最省的促销
	GetBestSavePromotion() (p promotion.IPromotion,
		saveFee float32, integral int)
	// GetPromotionBinds 获取促销绑定
	GetPromotionBinds() []*OrderPromotionBind
}

INormalOrder 普通订单

type IOrder

type IOrder interface {
	// GetAggregateRootId 获取编号
	GetAggregateRootId() int64
	// Type 订单类型
	Type() OrderType
	// State 获取订单状态
	State() OrderStatus
	// Buyer 获取购买的会员
	Buyer() member.IMember
	// SetShipmentAddress 设置配送地址
	SetShipmentAddress(addressId int64) error
	// 更改收货人信息
	ChangeShipmentAddress(addressId int64) error
	// OrderNo 获取订单号
	OrderNo() string
	// Complex 复合的订单信息
	Complex() *ComplexOrder
	// Submit 提交订单。如遇拆单,需均摊优惠抵扣金额到商品
	Submit() error
	// BuildCart 通过订单创建购物车 */
	BuildCart() cart.ICart
	// GetPaymentOrder 获取支付单
	GetPaymentOrder() payment.IPaymentOrder
}

type IOrderManager

type IOrderManager interface {
	// 统一调用
	Unified(orderNo string, sub bool) IUnifiedOrderAdapter
	// 预创建普通订单
	PrepareNormalOrder(c cart.ICart) (IOrder, error)
	// 预创建批发订单
	PrepareWholesaleOrder(c cart.ICart) ([]IOrder, error)
	// 接收在线交易支付的通知,不主动调用
	NotifyOrderTradeSuccess(orderNo string, subOrder bool) error
	// 提交订单
	SubmitOrder(data SubmitOrderData) (IOrder, *SubmitReturnData, error)
	// 获取可用的订单号, 系统直营传入vendor为0
	GetFreeOrderNo(vendor int64) string
	// 根据订单编号获取订单
	GetOrderById(orderId int64) IOrder
	// 根据订单号获取订单
	GetOrderByNo(orderNo string) IOrder
	// 获取子订单
	GetSubOrder(id int64) ISubOrder
	// 取消订单
	Cancel(orderNo string, subOrder bool, userCancel bool, reason string) error
}

订单服务

type IOrderRepo

type IOrderRepo interface {
	// 获取订单服务
	Manager() IOrderManager
	// 创建订单
	CreateOrder(*Order) IOrder
	// 获取可用的订单号, 系统直营传入vendor为0
	GetFreeOrderNo(vendorId int64) string
	// 获取订单编号
	GetOrderId(orderNo string, subOrder bool) int64
	// Get OrderList
	GetOrder(where string, arg ...interface{}) *Order
	// Save OrderList
	SaveOrder(v *Order) (int, error)

	// 保存订单优惠券绑定
	SaveOrderCouponBind(*OrderCoupon) error
	// 获取订单的促销绑定
	GetOrderPromotionBinds(orderNo string) []*OrderPromotionBind
	// 保存订单的促销绑定
	SavePromotionBindForOrder(*OrderPromotionBind) (int32, error)

	// CreateNormalSubOrder 生成空白订单,并保存返回对象
	CreateNormalSubOrder(*NormalSubOrder) ISubOrder
	// GetNormalSubOrders 获取订单的所有子订单
	GetNormalSubOrders(orderId int64) []*NormalSubOrder
	// SaveNormalSubOrderLog 保存订单日志
	SaveNormalSubOrderLog(*OrderLog) error
	// GetSubOrder 获取子订单,todo: 删除
	GetSubOrder(id int64) *NormalSubOrder
	// GetSubOrderByOrderNo 根据子订单
	GetSubOrderByOrderNo(s string) ISubOrder
	// SaveOrderItem 保存子订单
	SaveSubOrder(value *NormalSubOrder) (int, error)
	// SaveOrderItem 保存子订单的商品项,并返回编号和错误
	SaveOrderItem(subOrderId int64, value *SubOrderItem) (int32, error)
	// UpdateSubOrderId 更新子订单商品项订单编号为买家订单编号
	UpdateSubOrderId(subOrderId int64) error
	// UpdateSubOrderId 删除子订单
	DeleteSubOrder(subOrderId int64) error
	// DeleteSubOrderItems 删除子订单商品
	DeleteSubOrderItems(subOrderId int64) error

	// 获取订单项
	GetSubOrderItems(orderId int64) []*SubOrderItem
	// 获取订单的操作记录
	GetSubOrderLogs(orderId int64) []*OrderLog
	// 根据商品快照获取订单项
	GetOrderItemBySnapshotId(orderId int64, snapshotId int32) *SubOrderItem
	// 根据商品快照获取订单项数据传输对象
	GetOrderItemDtoBySnapshotId(orderId int64, snapshotId int32) *dto.OrderItem

	// Get WholesaleOrder
	GetWholesaleOrder(where string, v ...interface{}) *WholesaleOrder
	// Save WholesaleOrder
	SaveWholesaleOrder(v *WholesaleOrder) (int, error)
	// Save WholesaleItem
	SaveWholesaleItem(v *WholesaleItem) (int, error)
	// Select WholesaleItem
	SelectWholesaleItem(where string, v ...interface{}) []*WholesaleItem

	// Get TradeOrder
	GetTradeOrder(where string, v ...interface{}) *TradeOrder
	// SaveTradeOrder 保存交易类订单
	SaveTradeOrder(v *TradeOrder) (int, error)

	// SaveOrderRebate 保存订单返利
	SaveOrderRebate(v *AffiliateDistribution) (int, error)
}

type IPostedData

type IPostedData interface {
	// 获取勾选的商品和SKU数据
	CheckedData() map[int64][]int64
	// 获取收货地址编号
	AddressId() int64
	// 获取订单留言
	GetComment(sellerId int64) string
	// 获取店铺编号
	TradeOrderStoreId() int64
	// 获取交易金额
	TradeOrderAmount() int64
	// 获取优惠比例
	TradeOrderDiscount() float32
}

订单提交附带的数据, //todo: 改为struct

type ISubOrder

type ISubOrder interface {
	// GetDomainId 获取领域对象编号
	GetDomainId() int64
	// GetValue 获取值对象
	GetValue() *NormalSubOrder
	// Complex 复合的订单信息
	Complex() *ComplexOrder
	// ParentOrder 获取父订单
	ParentOrder() IOrder
	// GetPaymentOrder 获取支付单
	GetPaymentOrder() payment.IPaymentOrder
	// Items 获取商品项
	Items() []*SubOrderItem
	// 更改收货人信息
	ChangeShipmentAddress(addressId int64) error
	// PaymentFinishByOnlineTrade 在线支付交易完成
	PaymentFinishByOnlineTrade() error
	// AppendLog 记录订单日志
	AppendLog(logType LogType, system bool, message string) error
	// AddRemark 添加备注
	AddRemark(string)
	// Confirm 确认订单
	Confirm() error
	// PickUp 捡货(备货)
	PickUp() error
	// Ship 发货
	Ship(spId int32, spOrder string) error
	// BuyerReceived 已收货
	BuyerReceived() error
	// LogBytes 获取订单的日志
	LogBytes() []byte
	// Cancel 取消订单/退款
	Cancel(buyerCancel bool, reason string) error
	// Return 退回商品
	Return(snapshotId int64, quantity int32) error
	// RevertReturn 撤销退回商品
	RevertReturn(snapshotId int64, quantity int32) error
	// Decline 谢绝订单
	Decline(reason string) error
	// Submit 提交子订单
	Submit() (int64, error)
	// Forbid 删除订单,无法显示和操作
	Forbid() error
	// Destory 销毁订单
	Destory() error
}

ISubOrder 子订单(普通订单拆分)

type ITradeOrder

type ITradeOrder interface {
	// Set 从订单信息中拷贝相应的数据,并设置订单结算比例
	Set(o *TradeOrderValue, rate float64) error
	// CashPay 现金支付
	CashPay() error
	// TradePaymentFinish 交易支付完成
	TradePaymentFinish() error
	// UpdateTicket 更新发票数据
	UpdateTicket(img string) error
}

ITradeOrder 交易订单

type IUnifiedOrderAdapter

type IUnifiedOrderAdapter interface {
	// 复合的订单信息
	Complex() *ComplexOrder
	// 取消订单
	Cancel(buyerCancel bool, reason string) error
	// 订单确认
	Confirm() error
	// 备货完成
	PickUp() error
	// 订单发货,并记录配送服务商编号及单号
	Ship(spId int32, spOrder string) error
	// 更改收货人信息
	ChangeShipmentAddress(addressId int64) error
	// 消费者收货
	BuyerReceived() error
	// 删除订单
	Forbid() error
	// 获取订单日志
	LogBytes() []byte
}

统一订单适配器

type IWholesaleOrder

type IWholesaleOrder interface {
	// SetItems 设置商品项
	SetItems(items []*cart.ItemPair)
	// SetComment 设置或添加买家留言,如已经提交订单,将在原留言后附加
	SetComment(comment string)
	// Items 获取商品项
	Items() []*WholesaleItem
	// OnlinePaymentTradeFinish 在线支付交易完成
	OnlinePaymentTradeFinish() error

	// AppendLog 记录订单日志
	AppendLog(logType LogType, system bool, message string) error
	// AddRemark 添加备注
	AddRemark(string)
	// Confirm 确认订单
	Confirm() error
	// PickUp 捡货(备货)
	PickUp() error
	// Ship 发货
	Ship(spId int32, spOrder string) error
	// BuyerReceived 已收货
	BuyerReceived() error
	// LogBytes 获取订单的日志
	LogBytes() []byte
	// Cancel 取消订单/退款
	Cancel(reason string) error
	// Decline 谢绝订单
	Decline(reason string) error
}

IWholesaleOrder 批发订单

type LogType

type LogType int
const (
	LogSetup       LogType = 1
	LogChangePrice LogType = 2
)

func (LogType) String

func (o LogType) String() string

type MinifyItem

type MinifyItem struct {
	ItemId   int32
	SkuId    int32
	Quantity int32
}

MinifyItem 订单商品项

type NormalSubOrder

type NormalSubOrder struct {
	// 编号
	Id int64 `db:"id" pk:"yes" auto:"yes"`
	// 订单号
	OrderNo string `db:"order_no"`
	// 订单编号
	OrderId int64 `db:"order_id"`
	// 购买人编号(冗余,便于商户处理数据)
	BuyerId int64 `db:"buyer_id"`
	// 运营商编号
	VendorId int64 `db:"vendor_id"`
	// 店铺编号
	ShopId int64 `db:"shop_id"`
	// 店铺名称
	ShopName string `db:"shop_name"`
	// 订单标题
	Subject string `db:"subject"`
	// 商品数量
	ItemCount int `db:"item_count"`
	// 商品金额
	ItemAmount int64 `db:"item_amount"`
	// 优惠减免金额
	DiscountAmount int64 `db:"discount_amount"`
	// 运费
	ExpressFee int64 `db:"express_fee"`
	// 包装费用
	PackageFee int64 `db:"package_fee"`
	// 实际金额
	FinalAmount int64 `db:"final_amount"`
	// 是否删除
	IsForbidden int `db:"is_forbidden"`
	// 顾客备注
	BuyerComment string `db:"buyer_comment"`
	// 系统备注
	Remark string `db:"remark" json:"remark"`
	// 订单状态
	Status int `db:"status" json:"status"`
	// 拆分状态: 0.默认 1:待拆分 2:无需拆分 3:已拆分
	BreakStatus int `db:"break_status"`
	// 下单时间
	CreateTime int64 `db:"create_time"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
	// 支付时间
	PaymentTime int64 `db:"payment_time"`
	// 关闭时间
	CloseTime int64 `db:"close_time"`
	// 订单项
	Items []*SubOrderItem `db:"-"`
}

子订单

type Order

type Order struct {
	// 编号
	Id int64 `db:"id" pk:"yes" auto:"yes"`
	// 订单号
	OrderNo string `db:"order_no"`
	// 订单类型1:普通 2:批发 3:线下
	OrderType int `db:"order_type"`
	// 订单主题
	Subject string `db:"subject"`
	// 买家
	BuyerId int64 `db:"buyer_id"`
	// 买家用户名
	BuyerUser string `db:"buyer_user"`
	// 商品数量
	ItemCount int `db:"item_count"`
	// 商品金额
	ItemAmount int64 `db:"item_amount"`
	// 抵扣金额
	DiscountAmount int64 `db:"discount_amount"`
	// 物流费
	ExpressFee int64 `db:"express_fee"`
	// 包装费
	PackageFee int64 `db:"package_fee"`
	// 订单最终金额
	FinalAmount int64 `db:"final_amount"`
	// 收货人姓名
	ConsigneeName string `db:"consignee_name"`
	// 收货人电话
	ConsigneePhone string `db:"consignee_phone"`
	// 收货人地址
	ShippingAddress string `db:"shipping_address"`
	// 地址下单后是否修改
	ConsigneeModified int `db:"consignee_modified"`
	// 是否拆分
	IsBreak int `db:"is_break"`
	// 是否支付
	IsPaid int `db:"is_paid"`
	// 订单状态
	Status int `db:"status"`
	// 创建时间
	CreateTime int64 `db:"create_time"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

Order 订单

type OrderCoupon

type OrderCoupon struct {
	OrderId      int32  `db:"order_id"`
	CouponId     int32  `db:"coupon_id"`
	CouponCode   string `db:"coupon_code"`
	Fee          int64  `db:"coupon_fee"`
	Describe     string `db:"coupon_describe"`
	SendIntegral int    `db:"send_integral"`
}

OrderCoupon 应用到订单的优惠券

type OrderLog

type OrderLog struct {
	Id      int32 `db:"id" auto:"yes" pk:"yes"`
	OrderId int64 `db:"order_id"`
	Type    int   `db:"type"`
	// 订单状态
	OrderState int    `db:"order_state"`
	IsSystem   int    `db:"is_system"`
	Message    string `db:"message"`
	RecordTime int64  `db:"record_time"`
}

OrderLog 订单变动日志

type OrderPromotionBind

type OrderPromotionBind struct {
	// 编号
	Id int32 `db:"id" pk:"yes" auto:"yes"`
	// 订单号
	OrderId int32 `db:"order_id"`
	// 促销编号
	PromotionId int32 `db:"promotion_id"`
	// 促销类型
	PromotionType int `db:"promotion_type"`
	// 标题
	Title string `db:"title"`
	// 节省金额
	SaveFee int64 `db:"save_fee"`
	// 赠送积分
	PresentIntegral int `db:"present_integral"`
	// 是否应用
	IsApply int `db:"is_apply"`
	// 是否确认
	IsConfirm int `db:"is_confirm"`
}

type OrderStatus added in v0.4.10

type OrderStatus int

func (OrderStatus) BackEndString added in v0.4.10

func (t OrderStatus) BackEndString() string

BackEndString 后端状态描述

func (OrderStatus) String added in v0.4.10

func (t OrderStatus) String() string

type OrderType

type OrderType int32
const (
	// 零售订单(线上/线下)
	TRetail OrderType = 1
	// 零售子订单
	TRetailSubOrder OrderType = 9
	// 批发订单
	TWholesale OrderType = 2
	// 虚拟订单,如:手机充值
	TVirtual OrderType = 3
	// 交易订单,如:线下支付。
	TTrade OrderType = 4
	// 服务订单
	TService OrderType = 5
)

type SubOrderItem

type SubOrderItem struct {
	// 编号
	ID int64 `db:"id" pk:"yes" auto:"yes" json:"id"`
	// 订单编号
	OrderId int64 `db:"order_id"`
	// 卖家订单编号
	SellerOrderId int64 `db:"seller_order_id"`
	// 商品编号
	ItemId int64 `db:"item_id"`
	// 商品SKU编号
	SkuId int64 `db:"sku_id"`
	// 快照编号
	SnapshotId int64 `db:"snap_id"`
	// 数量
	Quantity int32 `db:"quantity"`
	// 退回数量(退货)
	ReturnQuantity int32 `db:"return_quantity"`
	// 金额
	Amount int64 `db:"amount"`
	// 最终金额, 可能会有优惠均摊抵扣的金额
	FinalAmount int64 `db:"final_amount"`
	// 是否发货
	IsShipped int32 `db:"is_shipped"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
	// 运营商编号
	VendorId int64 `db:"-"`
	// 商店编号
	ShopId int64 `db:"-"`
	// 重量,用于生成订单时存储数据
	Weight int32 `db:"-"`
	// 体积:毫升(ml)
	Bulk int32 `db:"-"`
	// 快递模板编号
	ExpressTplId int32 `db:"-"`
}

SubOrderItem 订单商品项

type SubmitOrderData added in v0.4.10

type SubmitOrderData struct {
	// 买家编号
	BuyerId int64
	// 订单类型
	Type OrderType
	// 订单标题
	Subject string
	// 收货地址编号
	AddressId int64
	// 优惠券
	CouponCode string
	// 是否余额支付
	BalanceDeduct bool
	// 是否钱包抵扣
	WalletDeduct bool
	// 返利推广人代码
	AffiliateCode string
	// 提交的订单数据
	PostedData IPostedData
}

SubmitData 订单提交数据

type SubmitReturnData

type SubmitReturnData struct {
	// 订单号,多个订单号,用","分割
	OrderNo string
	// 交易金额
	TradeAmount int64
	// 合并支付
	IsMergePay bool
	// 支付单号
	PaymentOrderNo string
	// 支付状态
	PaymentState int
}

SubmitReturnData 订单提交返回数据

type TradeOrder

type TradeOrder struct {
	// 编号
	ID int64 `db:"id" pk:"yes" auto:"yes"`
	// 订单编号
	OrderId int64 `db:"order_id"`
	// 商家编号
	VendorId int64 `db:"vendor_id"`
	// 店铺编号
	ShopId int64 `db:"shop_id"`
	// 订单标题
	Subject string `db:"subject"`
	// 订单金额
	OrderAmount int64 `db:"order_amount"`
	// 抵扣金额
	DiscountAmount int64 `db:"discount_amount"`
	// 订单最终金额
	FinalAmount int64 `db:"final_amount"`
	// 交易结算比例(商户),允许为0和1
	TradeRate float64 `db:"trade_rate"`
	// 是否现金支付
	CashPay int32 `db:"cash_pay"`
	// 发票图片
	TicketImage string `db:"ticket_image"`
	// 订单备注
	Remark string `db:"remark"`
	// 订单状态
	Status int `db:"status"`
	// 订单创建时间
	CreateTime int64 `db:"create_time"`
	// 订单更新时间
	UpdateTime int64 `db:"update_time"`
}

TradeOrder 交易类订单

type TradeOrderValue added in v0.4.10

type TradeOrderValue struct {
	// 商户编号
	MerchantId int
	// 门店编号
	StoreId int
	// 买家编号
	BuyerId int
	// 商品金额
	ItemAmount int
	// 抵扣金额
	DiscountAmount int
	// 订单主题
	Subject string
}

type WholesaleItem

type WholesaleItem struct {
	// 编号
	ID int64 `db:"id" pk:"yes" auto:"yes"`
	// 订单编号
	OrderId int64 `db:"order_id"`
	// 商品编号
	ItemId int64 `db:"item_id"`
	// SKU编号
	SkuId int64 `db:"sku_id"`
	// 商品快照编号
	SnapshotId int64 `db:"snapshot_id"`
	// 商品销售价格(不含优惠抵扣)
	Price int64 `db:"-"` //todo
	// 销售数量
	Quantity int32 `db:"quantity"`
	// 退货数量
	ReturnQuantity int32 `db:"return_quantity"`
	// 商品总金额
	Amount int64 `db:"amount"`
	// 商品实际金额
	FinalAmount int64 `db:"final_amount"`
	// 是否已发货
	IsShipped int32 `db:"is_shipped"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

WholesaleItem 批发订单商品

type WholesaleOrder

type WholesaleOrder struct {
	// 编号
	Id int64 `db:"id" pk:"yes" auto:"yes"`
	// 订单号
	OrderNo string `db:"order_no"`
	// 订单编号
	OrderId int64 `db:"order_id"`
	// 买家
	BuyerId int64 `db:"buyer_id"`
	// 供货商
	VendorId int64 `db:"vendor_id"`
	// 店铺编号
	ShopId int64 `db:"shop_id"`
	// 店铺名称
	ShopName string `db:"shop_name"`
	// 买家留言
	BuyerComment string `db:"buyer_comment"`
	// 备注
	Remark string `db:"remark"`
	// 订单状态
	Status int `db:"status"`
	// 创建时间
	CreateTime int64 `db:"create_time"`
	// 更新时间
	UpdateTime int64 `db:"update_time"`
}

WholesaleOrder 批发订单

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL