api.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package printer
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "wails-app/internal/dao"
  5. "wails-app/internal/global"
  6. "wails-app/internal/model/common/response"
  7. "wails-app/internal/model/vehicle/request"
  8. printService "wails-app/internal/modules/printer/service"
  9. svc "wails-app/internal/service"
  10. )
  11. var printSvc = printService.NewPrintService()
  12. var vehicleSvc = svc.ServiceGroupApp.VehicleServiceGroup.VehicleService
  13. type buttonReq struct {
  14. PrinterID uint `json:"printer_id"`
  15. ChannelCode string `json:"channel_code"`
  16. PlateNo string `json:"plate_number"`
  17. }
  18. func TicketMachineButton(c *gin.Context) {
  19. var req buttonReq
  20. if err := c.ShouldBindJSON(&req); err != nil {
  21. response.FailWithMessage(err.Error(), c)
  22. return
  23. }
  24. // 创建入场记录(临时车,可能无车牌)
  25. entryResp, err := vehicleSvc.VehicleEntry(request.VehicleEntry{
  26. PlateNumber: req.PlateNo, RFIDTag: "",
  27. ParkingLotID: 1, ParkingSpaceID: 1,
  28. })
  29. if err != nil {
  30. response.FailWithMessage(err.Error(), c)
  31. return
  32. }
  33. // 获取刚创建的数字票
  34. var tickets []dao.DigitalTicket
  35. global.GVA_DB.Where("plate_number = ?", entryResp.Data.PlateNumber).Order("id DESC").Limit(1).Find(&tickets)
  36. if len(tickets) == 0 {
  37. response.FailWithMessage("数字票创建失败", c)
  38. return
  39. }
  40. // 获取停车场名
  41. var lot dao.ParkingLot
  42. global.GVA_DB.First(&lot, entryResp.Data.ParkingLotID)
  43. // 打印小票
  44. if err := printSvc.PrintTicket(req.PrinterID, lot.LotName, req.ChannelCode, req.PlateNo, tickets[0].ID, tickets[0].TicketNo); err != nil {
  45. response.FailWithMessage("打印失败: "+err.Error(), c)
  46. return
  47. }
  48. response.OkWithData(gin.H{
  49. "ticket_id": tickets[0].ID,
  50. "ticket_no": tickets[0].TicketNo,
  51. "slip_no": tickets[0].ID,
  52. "entry_time": entryResp.Data.EntryTime,
  53. "plate_number": entryResp.Data.PlateNumber,
  54. }, c)
  55. }
  56. func SetupPrinterRouter(router *gin.RouterGroup) {
  57. router.POST("/ticket-machine/button", TicketMachineButton)
  58. }
  59. // SetupPrinterPublic 公开测试路由(无需JWT)
  60. func SetupPrinterPublic(router *gin.RouterGroup) {
  61. router.GET("/ticket-machine/test", TicketMachineButtonTest)
  62. }
  63. func TicketMachineButtonTest(c *gin.Context) {
  64. entryResp, err := vehicleSvc.VehicleEntry(request.VehicleEntry{
  65. PlateNumber: "", RFIDTag: "",
  66. ParkingLotID: 1, ParkingSpaceID: 1,
  67. })
  68. if err != nil {
  69. response.FailWithMessage(err.Error(), c)
  70. return
  71. }
  72. var tickets []dao.DigitalTicket
  73. global.GVA_DB.Where("plate_number = ?", entryResp.Data.PlateNumber).Order("id DESC").Limit(1).Find(&tickets)
  74. if len(tickets) == 0 {
  75. response.FailWithMessage("票创建失败", c)
  76. return
  77. }
  78. var lot dao.ParkingLot
  79. global.GVA_DB.First(&lot, entryResp.Data.ParkingLotID)
  80. // 尝试打印
  81. printErr := ""
  82. if err := printSvc.PrintTicket(1, lot.LotName, "IN01", entryResp.Data.PlateNumber, tickets[0].ID, tickets[0].TicketNo); err != nil {
  83. printErr = err.Error()
  84. }
  85. response.OkWithData(gin.H{
  86. "ticket_id": tickets[0].ID,
  87. "ticket_no": tickets[0].TicketNo,
  88. "slip_no": tickets[0].ID,
  89. "plate_number": entryResp.Data.PlateNumber,
  90. "entry_time": entryResp.Data.EntryTime,
  91. "lot_name": lot.LotName,
  92. "channel_code": "IN01",
  93. "print_result": printErr,
  94. }, c)
  95. }