package digital_ticket import ( "github.com/gin-gonic/gin" "strings" "wails-app/internal/model/common/response" vehicleRequest "wails-app/internal/model/vehicle/request" "wails-app/internal/modules/digital-ticket/repository" ticketService "wails-app/internal/modules/digital-ticket/service" utils "wails-app/internal/pkg" appService "wails-app/internal/service" ) var ticketSvc = ticketService.NewTicketService() var ticketVehicleSvc = appService.ServiceGroupApp.VehicleServiceGroup.VehicleService func GetTicket(c *gin.Context) { t, err := ticketSvc.GetByTicketNo(c.Param("ticketNo")) if err != nil { response.FailWithMessage("票不存在", c) return } response.OkWithData(t, c) } type payReq struct { PaymentEntry string `json:"payment_entry"` PaymentMethod string `json:"payment_method"` PaymentOrderNo string `json:"payment_order_no"` PaidAmount float64 `json:"paid_amount"` } func PayTicket(c *gin.Context) { var req payReq if err := c.ShouldBindJSON(&req); err != nil { response.FailWithMessage(err.Error(), c) return } entryCode := strings.TrimSpace(req.PaymentEntry) if entryCode == "" { response.FailWithMessage("数字票支付必须指定支付入口", c) return } if err := ticketVehicleSvc.PayDigitalTicket( c.Param("ticketNo"), entryCode, strings.TrimSpace(req.PaymentMethod), strings.TrimSpace(req.PaymentOrderNo), req.PaidAmount, utils.GetUserID(c), ); err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithMessage("支付成功", c) } func ExitTicket(c *gin.Context) { result, err := ticketVehicleSvc.ExitConfirm(vehicleRequest.ExitConfirmRequest{ TicketNo: c.Param("ticketNo"), }, utils.GetUserID(c)) if err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithData(result, c) } func ListTickets(c *gin.Context) { var q repository.TicketListQuery if err := c.ShouldBindQuery(&q); err != nil { response.FailWithMessage(err.Error(), c) return } list, total, err := ticketSvc.List(q) if err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithDetailed(response.PageResult{List: list, Total: total, Page: q.Page, PageSize: q.PageSize}, "查询成功", c) } func SummaryTickets(c *gin.Context) { var q repository.TicketListQuery if err := c.ShouldBindQuery(&q); err != nil { response.FailWithMessage(err.Error(), c) return } summary, err := ticketSvc.Summary(q) if err != nil { response.FailWithMessage(err.Error(), c) return } response.OkWithData(summary, c) } func SetupDigitalTicketRouter(router *gin.RouterGroup) { dt := router.Group("/digital-ticket") { dt.GET("/summary", SummaryTickets) dt.GET("/list", ListTickets) dt.GET("/:ticketNo", GetTicket) dt.POST("/:ticketNo/pay", PayTicket) dt.POST("/:ticketNo/exit", ExitTicket) } }