api.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. }