payment_controller.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package payment
  2. import (
  3. "errors"
  4. "eta/eta_mini_ht_api/common/exception"
  5. "eta/eta_mini_ht_api/common/utils/lock"
  6. "eta/eta_mini_ht_api/common/utils/redis"
  7. "eta/eta_mini_ht_api/controllers"
  8. orderService "eta/eta_mini_ht_api/domian/order"
  9. userService "eta/eta_mini_ht_api/domian/user"
  10. "eta/eta_mini_ht_api/service/facade"
  11. "eta/eta_mini_ht_api/service/order"
  12. "gorm.io/gorm"
  13. )
  14. import "eta/eta_mini_ht_api/service/user"
  15. type PaymentController struct {
  16. controllers.BaseController
  17. }
  18. // 支付
  19. type PayRequest struct {
  20. ProductOrderNo string `json:"productOrderNo"`
  21. }
  22. type PayResponse struct {
  23. ProductOrderNo string `json:"productOrderNo"`
  24. TradeOrderNo string `json:"tradeOrderNo"`
  25. }
  26. // PayOrder 支付订单
  27. // @Summary 支付订单
  28. // @Description 支付订单
  29. // @Success 200 {object} controllers.BaseResponse
  30. // @router /payOrder [post]
  31. func (pc *PaymentController) PayOrder() {
  32. controllers.Wrap(&pc.BaseController, func() (result *controllers.WrapData, err error) {
  33. result = pc.InitWrapData("创建支付订单失败")
  34. payRequest := new(PayRequest)
  35. pc.GetPostParams(payRequest)
  36. if payRequest.ProductOrderNo == "" {
  37. pc.FailedResult("订单编号不能为空", result)
  38. err = exception.New(exception.IllegalOrderNo)
  39. return
  40. }
  41. userInfo := pc.Data["user"].(user.User)
  42. defer func() {
  43. lock.ReleaseLock(redis.GeneratePaymentKey(payRequest.ProductOrderNo), pc.Data["threadId"].(string))
  44. }()
  45. if lock.AcquireLock(redis.GeneratePaymentKey(payRequest.ProductOrderNo), 10, pc.Data["threadId"].(string)) {
  46. //校验商品订单状态
  47. var productOrder orderService.ProductOrderDTO
  48. productOrder, err = order.GetProductOrderByUser(userInfo.Id, payRequest.ProductOrderNo)
  49. if err != nil {
  50. if errors.Is(err, gorm.ErrRecordNotFound) {
  51. pc.FailedResult("支付失败,商品订单信息不存在", result)
  52. err = exception.New(exception.IllegalOrderNo)
  53. } else {
  54. pc.FailedResult("支付失败,查询商品订单失败", result)
  55. err = exception.New(exception.IllegalOrderNo)
  56. }
  57. return
  58. }
  59. if productOrder.Status != "pending" {
  60. if productOrder.Status == "closed" {
  61. pc.FailedResult("支付失败,商品订单已关闭", result)
  62. err = exception.New(exception.IllegalOrderStatus)
  63. } else {
  64. pc.FailedResult("支付失败,商品订单状态异常", result)
  65. err = exception.New(exception.IllegalOrderStatus)
  66. }
  67. return
  68. }
  69. var officialUser userService.OfficialUserDTO
  70. officialUser, err = user.GetUserByTemplateUserId(userInfo.Id)
  71. if err != nil {
  72. pc.FailedResult("支付失败,正式用户信息不存在", result)
  73. }
  74. var tradeOrderNo string
  75. tradeOrderNo, err = facade.PayOrder(officialUser.ID, userInfo.Id, productOrder)
  76. if err != nil {
  77. pc.FailedResult("支付订单创建失败", result)
  78. err = exception.NewWithException(exception.CreatePaymentOrderFailed, err.Error())
  79. return
  80. }
  81. pc.SuccessResult("支付订单创建成功", PayResponse{
  82. ProductOrderNo: productOrder.OrderID,
  83. TradeOrderNo: tradeOrderNo,
  84. }, result)
  85. return
  86. } else {
  87. pc.FailedResult("商品订单处理中,请稍后再试", result)
  88. err = exception.New(exception.PaymentProcessingError)
  89. return
  90. }
  91. })
  92. }
  93. //退款
  94. //