139 lines
3.2 KiB
Go
139 lines
3.2 KiB
Go
|
package model
|
|||
|
|
|||
|
import (
|
|||
|
"time"
|
|||
|
|
|||
|
"go-common/library/log"
|
|||
|
)
|
|||
|
|
|||
|
// LogOrder .
|
|||
|
type LogOrder struct {
|
|||
|
ID int64
|
|||
|
OrderID string
|
|||
|
FromState string
|
|||
|
ToState string
|
|||
|
Desc string
|
|||
|
CTime time.Time
|
|||
|
MTime time.Time
|
|||
|
}
|
|||
|
|
|||
|
// Order .
|
|||
|
type Order struct {
|
|||
|
ID int64
|
|||
|
OrderID string
|
|||
|
MID int64
|
|||
|
Biz string
|
|||
|
Platform string
|
|||
|
OID int64
|
|||
|
OType string
|
|||
|
Fee int64
|
|||
|
RealFee int64
|
|||
|
Currency string
|
|||
|
PayID string
|
|||
|
PayReason string
|
|||
|
PayTime time.Time
|
|||
|
RefundTime time.Time
|
|||
|
Version int64
|
|||
|
State string // created 已创建, paying 支付中, paid 已支付, failed 支付失败, closed 已关闭, expired 已超时, finished 已完成(支付成功且对账成功)
|
|||
|
CTime time.Time
|
|||
|
MTime time.Time
|
|||
|
}
|
|||
|
|
|||
|
// IsPay 是否已支付
|
|||
|
func (o Order) IsPay() bool {
|
|||
|
return o.State == OrderStatePaid || o.State == OrderStateSettled
|
|||
|
}
|
|||
|
|
|||
|
// IsRefunding 是否为退款中
|
|||
|
func (o Order) IsRefunding() bool {
|
|||
|
return o.State == OrderStateRefunding
|
|||
|
}
|
|||
|
|
|||
|
// ParsePaidTime 解析支付成功时间
|
|||
|
func (o *Order) ParsePaidTime(t string) {
|
|||
|
o.PayTime = o.parsePayTime(t)
|
|||
|
}
|
|||
|
|
|||
|
// ParseRefundedTime 解析退款成功时间
|
|||
|
func (o *Order) ParseRefundedTime(t string) {
|
|||
|
o.RefundTime = o.parsePayTime(t)
|
|||
|
}
|
|||
|
|
|||
|
func (o Order) parsePayTime(tstr string) (t time.Time) {
|
|||
|
var err error
|
|||
|
if t, err = time.ParseInLocation("2006-01-02 15:04:05", tstr, time.Local); err != nil {
|
|||
|
log.Error("Order parse pay time from timestr: %s, err: %+v", t, err)
|
|||
|
t = time.Now() // 兜底
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ReturnState 返回前端显示state,重复下单的退费状态,被认为是已付费
|
|||
|
func (o Order) ReturnState() string {
|
|||
|
if o.State == OrderStateDupRefunded {
|
|||
|
return OrderStatePaid
|
|||
|
}
|
|||
|
return o.State
|
|||
|
}
|
|||
|
|
|||
|
// UpdateState 更新状态,return true 更新成功,false 更新失败(无需更新)
|
|||
|
func (o *Order) UpdateState(state string) (changed bool) {
|
|||
|
switch o.State { // 当前state
|
|||
|
case OrderStateCreated, OrderStatePaying:
|
|||
|
switch state {
|
|||
|
case OrderStatePaying, OrderStatePaid, OrderStateFailed, OrderStateClosed, OrderStateExpired, OrderStateDupRefunded:
|
|||
|
changed = true
|
|||
|
}
|
|||
|
case OrderStatePaid:
|
|||
|
if state == OrderStateSettled || state == OrderStateRefunding || state == OrderStateDupRefunded || state == OrderStateRefunded || state == OrderStateBadDebt {
|
|||
|
changed = true
|
|||
|
}
|
|||
|
case OrderStateFailed, OrderStateClosed, OrderStateExpired:
|
|||
|
if state == OrderStatePaid {
|
|||
|
changed = true
|
|||
|
}
|
|||
|
case OrderStateRefunding:
|
|||
|
if state == OrderStateRefunded {
|
|||
|
changed = true
|
|||
|
}
|
|||
|
case OrderStateSettled:
|
|||
|
if state == OrderStateSettledRefunding || state == OrderStateSettledRefunded {
|
|||
|
changed = true
|
|||
|
}
|
|||
|
case OrderStateSettledRefunding:
|
|||
|
if state == OrderStateSettledRefunded {
|
|||
|
changed = true
|
|||
|
}
|
|||
|
case OrderStateSettledRefunded:
|
|||
|
if state == OrderStateRefundFinished {
|
|||
|
changed = true
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if changed {
|
|||
|
o.State = state
|
|||
|
} else {
|
|||
|
log.Error("order update state from : %s , to : %s", o.State, state)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// OrderRefund .
|
|||
|
type OrderRefund struct {
|
|||
|
ID int64
|
|||
|
OrderID int64
|
|||
|
State string
|
|||
|
CTime time.Time
|
|||
|
MTime time.Time
|
|||
|
}
|
|||
|
|
|||
|
// OrderBadDebt .
|
|||
|
type OrderBadDebt struct {
|
|||
|
ID int64
|
|||
|
OrderID int64
|
|||
|
Type string
|
|||
|
State string
|
|||
|
CTime time.Time
|
|||
|
MTime time.Time
|
|||
|
}
|