api.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package digital_ticket
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "strings"
  5. "wails-app/internal/model/common/response"
  6. "wails-app/internal/modules/digital-ticket/repository"
  7. "wails-app/internal/modules/digital-ticket/service"
  8. paymentService "wails-app/internal/modules/payment/service"
  9. )
  10. var ticketSvc = service.NewTicketService()
  11. var ticketPaymentSvc = paymentService.NewPaymentService()
  12. func GetTicket(c *gin.Context) {
  13. t, err := ticketSvc.GetByTicketNo(c.Param("ticketNo"))
  14. if err != nil {
  15. response.FailWithMessage("票不存在", c)
  16. return
  17. }
  18. response.OkWithData(t, c)
  19. }
  20. type payReq struct {
  21. PaymentEntry string `json:"payment_entry"`
  22. PaymentMethod string `json:"payment_method"`
  23. PaymentOrderNo string `json:"payment_order_no"`
  24. PaidAmount float64 `json:"paid_amount"`
  25. }
  26. func PayTicket(c *gin.Context) {
  27. var req payReq
  28. if err := c.ShouldBindJSON(&req); err != nil {
  29. response.FailWithMessage(err.Error(), c)
  30. return
  31. }
  32. t, err := ticketSvc.GetByTicketNo(c.Param("ticketNo"))
  33. if err != nil {
  34. response.FailWithMessage("票不存在", c)
  35. return
  36. }
  37. entryCode := req.PaymentEntry
  38. entryCode = strings.TrimSpace(entryCode)
  39. if entryCode == "" {
  40. response.FailWithMessage("数字票支付必须指定支付入口", c)
  41. return
  42. }
  43. _, paidAmount, err := ticketPaymentSvc.ValidatePayment(nil, req.PaymentMethod, entryCode, t.Fee, req.PaidAmount)
  44. if err != nil {
  45. response.FailWithMessage(err.Error(), c)
  46. return
  47. }
  48. extra := map[string]interface{}{
  49. "payment_entry": entryCode, "payment_method": req.PaymentMethod, "payment_order_no": req.PaymentOrderNo,
  50. "paid_amount": paidAmount,
  51. "fee": t.Fee,
  52. }
  53. if err := ticketSvc.Transition(t.ID, service.StatePaid, extra); err != nil {
  54. response.FailWithMessage(err.Error(), c)
  55. return
  56. }
  57. response.OkWithMessage("支付成功", c)
  58. }
  59. func ExitTicket(c *gin.Context) {
  60. t, err := ticketSvc.GetByTicketNo(c.Param("ticketNo"))
  61. if err != nil {
  62. response.FailWithMessage("票不存在", c)
  63. return
  64. }
  65. if err := ticketSvc.Transition(t.ID, service.StateExited, nil); err != nil {
  66. response.FailWithMessage(err.Error(), c)
  67. return
  68. }
  69. response.OkWithMessage("已离场", c)
  70. }
  71. func ListTickets(c *gin.Context) {
  72. var q repository.TicketListQuery
  73. if err := c.ShouldBindQuery(&q); err != nil {
  74. response.FailWithMessage(err.Error(), c)
  75. return
  76. }
  77. list, total, err := ticketSvc.List(q)
  78. if err != nil {
  79. response.FailWithMessage(err.Error(), c)
  80. return
  81. }
  82. response.OkWithDetailed(response.PageResult{List: list, Total: total, Page: q.Page, PageSize: q.PageSize}, "查询成功", c)
  83. }
  84. func SetupDigitalTicketRouter(router *gin.RouterGroup) {
  85. dt := router.Group("/digital-ticket")
  86. {
  87. dt.GET("/:ticketNo", GetTicket)
  88. dt.POST("/:ticketNo/pay", PayTicket)
  89. dt.POST("/:ticketNo/exit", ExitTicket)
  90. }
  91. dt2 := router.Group("/digital-ticket")
  92. {
  93. dt2.GET("/list", ListTickets)
  94. }
  95. }