trade_order.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package models
  2. import (
  3. "github.com/beego/beego/v2/client/orm"
  4. "time"
  5. )
  6. type PaymentType string
  7. type PaymentStatus string
  8. const (
  9. PaymentTypePay PaymentType = "pay"
  10. PaymentTypeRefund PaymentType = "refund"
  11. PaymentStatusDone PaymentStatus = "done"
  12. PaymentStatusFailed PaymentStatus = "failed"
  13. PaymentStatusProcessing PaymentStatus = "processing"
  14. )
  15. type TradeOrderView struct {
  16. RealName string
  17. Mobile string
  18. ProductName string
  19. TransactionID string `gorm:"column:transaction_id;size:255;default:null;comment:'第三方平台ID'" json:"transaction_id"`
  20. ProductOrderID string `gorm:"column:product_order_id;size:255;default:null;comment:'商品订单号'" json:"product_order_id"`
  21. PaymentAccount string `gorm:"column:payment_account;size:255;default:null;comment:'支付账号'" json:"payment_account"`
  22. PaymentWay string `gorm:"column:payment_way;type:enum('wechat');default:null;comment:'支付渠道'" json:"payment_way"`
  23. Amount string `gorm:"column:amount;size:20;default:null;comment:'支付金额'" json:"amount"`
  24. Currency string `gorm:"column:currency;size:255;default:null;comment:'货币'" json:"currency"`
  25. MerchantID string `gorm:"column:merchant_id;size:255;default:null;comment:'商户id'" json:"merchant_id"`
  26. UserID int `gorm:"column:user_id;default:null;comment:'用户id'" json:"user_id"`
  27. TemplateUserID int `gorm:"column:template_user_id;default:null;comment:'临时用户id'" json:"template_user_id"`
  28. PaymentType string `gorm:"column:payment_type;type:enum('pay','refund');default:null;comment:'订单类型'" json:"payment_type"`
  29. PaymentStatus string `gorm:"column:payment_status;type:enum('pending','done','failed');default:null;comment:'支付状态'" json:"payment_status"`
  30. DealTime string
  31. CreatedTime string
  32. }
  33. type TradeOrder struct {
  34. Id uint `gorm:"primaryKey;autoIncrement" json:"id"`
  35. TransactionId string `gorm:"column:transaction_id;size:255;default:null;comment:'第三方平台ID'" json:"transaction_id"`
  36. OrgTransactionId string `gorm:"column:org_transaction_id;size:255;default:null;comment:'原支付第三方平台ID'" json:"org_transaction_id"`
  37. ProductOrderId string `gorm:"column:product_order_id;size:255;default:null;comment:'商品订单号'" json:"product_order_id"`
  38. PaymentAccount string `gorm:"column:payment_account;size:255;default:null;comment:'支付账号'" json:"payment_account"`
  39. PaymentWay PaymentWay `gorm:"column:payment_way;type:enum('wechat');default:null;comment:'支付渠道'" json:"payment_way"`
  40. Amount string `gorm:"column:amount;size:20;default:null;comment:'支付金额'" json:"amount"`
  41. Currency string `gorm:"column:currency;size:255;default:null;comment:'货币'" json:"currency"`
  42. MerchantId string `gorm:"column:merchant_id;size:255;default:null;comment:'商户id'" json:"merchant_id"`
  43. UserId int `gorm:"column:user_id;default:null;comment:'用户id'" json:"user_id"`
  44. TemplateUserId int `gorm:"column:template_user_id;default:null;comment:'临时用户id'" json:"template_user_id"`
  45. PaymentType PaymentType `gorm:"column:payment_type;type:enum('pay','refund');default:null;comment:'订单类型'" json:"payment_type"`
  46. PaymentStatus PaymentStatus `gorm:"column:payment_status;type:enum('pending','done','failed');default:null;comment:'支付状态'" json:"payment_status"`
  47. DealTime time.Time `gorm:"column:deal_time;default:null;comment:'完成时间'" json:"deal_time"`
  48. CreatedTime time.Time `gorm:"column:created_time;default:null" json:"created_time"`
  49. UpdatedTime time.Time `gorm:"column:updated_time;default:null" json:"updated_time"`
  50. }
  51. func (TradeOrder) TableName() string {
  52. return "trade_orders"
  53. }
  54. func GetTradeOrderByCondition(condition string, sortCondition string, startSize int, pageSize int) (list []*TradeOrder, err error) {
  55. o := orm.NewOrm()
  56. sql := `select * from trade_orders where 1=1 `
  57. if condition != "" {
  58. sql += condition
  59. }
  60. if sortCondition != "" {
  61. sql += sortCondition
  62. }
  63. sql += ` LIMIT ?,?`
  64. _, err = o.Raw(sql, startSize, pageSize).QueryRows(&list)
  65. return
  66. }
  67. func GetTradeOrderListByCondition(condition string, sortCondition string) (list []*TradeOrder, err error) {
  68. o := orm.NewOrm()
  69. sql := `select * from trade_orders where 1=1 `
  70. if condition != "" {
  71. sql += condition
  72. }
  73. if sortCondition != "" {
  74. sql += sortCondition
  75. }
  76. _, err = o.Raw(sql).QueryRows(&list)
  77. return
  78. }
  79. func GetTradeOrderCountByCondition(condition string) (total int, err error) {
  80. o := orm.NewOrm()
  81. err = o.Raw("select count(*) from trade_orders where 1=1 " + condition).QueryRow(&total)
  82. return
  83. }
  84. func GetTradeOrderByNo(tradeNo string) (tradeOrder TradeOrder, err error) {
  85. o := orm.NewOrm()
  86. err = o.Raw("select * from trade_orders where transaction_id=? ", tradeNo).QueryRow(&tradeOrder)
  87. return
  88. }
  89. func (to *TradeOrder) Refund(productOrder *ProductOrder) (err error) {
  90. o := orm.NewOrm()
  91. tx, _ := o.Begin()
  92. defer func() {
  93. if err != nil {
  94. tx.Rollback()
  95. } else {
  96. tx.Commit()
  97. }
  98. }()
  99. _, err = tx.Insert(to)
  100. _, err = tx.Update(productOrder, "status", "refund_status", "refund_trade_id", "remark", "refund_amount")
  101. return
  102. }