service.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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 打印机 → COPY /B 到共享路径
  27. write = func(data []byte) {
  28. err = copyToPrinter(printer.Name, data)
  29. }
  30. }
  31. if err != nil {
  32. global.GVA_DB.Model(&printer).Update("status", "offline")
  33. return fmt.Errorf("连接打印机失败: %w", err)
  34. }
  35. now := time.Now().Format("02-01-2006 15:04:05")
  36. slipNo := fmt.Sprintf("%d", ticketID)
  37. // Print ticket
  38. write(InitCmd)
  39. write(AlignCenterCmd)
  40. write(DoubleHeightCmd)
  41. write(BoldOnCmd)
  42. write(ESCPOS_Text("PARKING TICKET"))
  43. write(BoldOffCmd)
  44. write(NormalCmd)
  45. write(ESCPOS_Text(""))
  46. write(ESCPOS_Text(lotName))
  47. write(ESCPOS_Text("A-General Car"))
  48. write(ESCPOS_Text(""))
  49. write(BoldOnCmd)
  50. write(ESCPOS_Text("PARK AT YOUR OWN RISK"))
  51. write(BoldOffCmd)
  52. write(InitCmd)
  53. write(AlignLeftCmd)
  54. write(ESCPOS_Text("In-Time::" + now))
  55. if channelCode != "" {
  56. write(ESCPOS_Text("InGate::" + channelCode))
  57. }
  58. if plateNo != "" {
  59. write(ESCPOS_Text("Veh No::" + plateNo))
  60. }
  61. write(InitCmd)
  62. write(ESCPOS_Text(""))
  63. write(ESCPOS_Text("Slip No::" + slipNo))
  64. write(InitCmd)
  65. write(AlignCenterCmd)
  66. write(ESCPOS_Text(""))
  67. write(ESCPOS_QRCode(ticketNo))
  68. write(ESCPOS_Text(""))
  69. write(AlignCenterCmd)
  70. write(ESCPOS_Text("SCAN AND PAY WITH"))
  71. write(ESCPOS_Text("NEW THE CANADIA BANK APP"))
  72. write(InitCmd)
  73. write(ESCPOS_Text(""))
  74. write(ESCPOS_Text(""))
  75. write(CutPaperCmd)
  76. global.GVA_DB.Model(&printer).Update("status", "online")
  77. return nil
  78. }