service.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package service
  2. import (
  3. "fmt"
  4. "time"
  5. "wails-app/internal/dao"
  6. "wails-app/internal/global"
  7. )
  8. type PrintService struct{}
  9. func NewPrintService() *PrintService {
  10. return &PrintService{}
  11. }
  12. // PrintTicket 打印入场小票
  13. func (s *PrintService) PrintTicket(printerID uint, lotName, channelCode, plateNo string, ticketID uint, ticketNo string) error {
  14. var printer dao.Printer
  15. if err := global.GVA_DB.First(&printer, printerID).Error; err != nil {
  16. return fmt.Errorf("打印机未配置: id=%d", printerID)
  17. }
  18. // 根据 port_name 判断连接类型
  19. var err error
  20. var srl *SerialPrinter
  21. write := func(data []byte) {}
  22. if len(printer.PortName) >= 3 && printer.PortName[:3] == "COM" {
  23. srl, err = NewSerialPrinter(printer.PortName, printer.BaudRate)
  24. if err == nil { defer srl.Close(); write = func(data []byte) { srl.Write(data) } }
  25. } else {
  26. // USB/Windows 打印机 → WritePrinter API (RAW)
  27. write = func(data []byte) { err = PrintRaw(printer.Name, data) }
  28. }
  29. if err != nil {
  30. global.GVA_DB.Model(&printer).Update("status", "offline")
  31. return fmt.Errorf("连接打印机失败: %w", err)
  32. }
  33. now := time.Now().Format("02-01-2006 15:04:05")
  34. slipNo := fmt.Sprintf("%d", ticketID)
  35. // Print ticket
  36. write(InitCmd)
  37. write(AlignCenterCmd)
  38. write(DoubleHeightCmd)
  39. write(BoldOnCmd)
  40. write(ESCPOS_Text("PARKING TICKET"))
  41. write(BoldOffCmd)
  42. write(NormalCmd)
  43. write(ESCPOS_Text(""))
  44. write(ESCPOS_Text(lotName))
  45. write(ESCPOS_Text("A-General Car"))
  46. write(ESCPOS_Text(""))
  47. write(BoldOnCmd)
  48. write(ESCPOS_Text("PARK AT YOUR OWN RISK"))
  49. write(BoldOffCmd)
  50. write(InitCmd)
  51. write(AlignLeftCmd)
  52. write(ESCPOS_Text("In-Time::" + now))
  53. if channelCode != "" {
  54. write(ESCPOS_Text("InGate::" + channelCode))
  55. }
  56. if plateNo != "" {
  57. write(ESCPOS_Text("Veh No::" + plateNo))
  58. }
  59. write(InitCmd)
  60. write(ESCPOS_Text(""))
  61. write(ESCPOS_Text("Slip No::" + slipNo))
  62. write(InitCmd)
  63. write(AlignCenterCmd)
  64. write(ESCPOS_Text(""))
  65. write(ESCPOS_QRCode(ticketNo))
  66. write(ESCPOS_Text(""))
  67. write(AlignCenterCmd)
  68. write(ESCPOS_Text("SCAN AND PAY WITH"))
  69. write(ESCPOS_Text("NEW THE CANADIA BANK APP"))
  70. write(InitCmd)
  71. write(ESCPOS_Text(""))
  72. write(ESCPOS_Text(""))
  73. write(CutPaperCmd)
  74. global.GVA_DB.Model(&printer).Update("status", "online")
  75. return nil
  76. }