api.go 2.2 KB

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