|
|
@@ -2,6 +2,8 @@ package service
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
+ "os"
|
|
|
+ "os/exec"
|
|
|
"time"
|
|
|
"wails-app/internal/dao"
|
|
|
"wails-app/internal/global"
|
|
|
@@ -34,6 +36,9 @@ func (s *PrintService) PrintTicket(printerID uint, lotName, channelCode, plateNo
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("加载 CSN DLL 失败: %w (path=%s)", err, sdkDllPath)
|
|
|
}
|
|
|
+ // 枚举初始化(C# Demo 在 initForm() 中调用,可能是必要的初始化步骤)
|
|
|
+ Csn_EnumUSB()
|
|
|
+ Csn_EnumPRN()
|
|
|
// 尝试 OpenUSB → OpenPRN
|
|
|
name := printer.PortName
|
|
|
if name == "USB" || name == "auto" || name == "" {
|
|
|
@@ -55,7 +60,7 @@ func (s *PrintService) PrintTicket(printerID uint, lotName, channelCode, plateNo
|
|
|
slipNo := fmt.Sprintf("%d", ticketID)
|
|
|
|
|
|
if useCSN {
|
|
|
- // 用 WriteData 直发 ESC/POS 字节(绕过高阶函数兼容性问题)
|
|
|
+ // 构造 ESC/POS 数据 → 写成临时文件 → 调 32 位辅助工具打印
|
|
|
var buf []byte
|
|
|
add := func(b []byte) { buf = append(buf, b...) }
|
|
|
add(InitCmd); add(AlignCenterCmd); add(DoubleHeightCmd); add(BoldOnCmd)
|
|
|
@@ -79,7 +84,16 @@ func (s *PrintService) PrintTicket(printerID uint, lotName, channelCode, plateNo
|
|
|
add(ESCPOS_Text("NEW THE CANADIA BANK APP"))
|
|
|
add(InitCmd); add(ESCPOS_Text("")); add(ESCPOS_Text("")); add(ESCPOS_Text(""))
|
|
|
add(CutPaperCmd)
|
|
|
- Csn_WriteData(buf)
|
|
|
+ // 先尝试 CSN DLL WriteData,失败则用 32 位辅助工具
|
|
|
+ n := Csn_WriteData(buf)
|
|
|
+ if n == 0 {
|
|
|
+ tmp, _ := os.CreateTemp("", "ticket_*.bin")
|
|
|
+ if tmp != nil {
|
|
|
+ tmp.Write(buf); tmp.Close()
|
|
|
+ exec.Command("build/bin/ticket-print.exe", printer.PortName, tmp.Name()).Run()
|
|
|
+ os.Remove(tmp.Name())
|
|
|
+ }
|
|
|
+ }
|
|
|
global.GVA_DB.Model(&printer).Update("status", "online")
|
|
|
return nil
|
|
|
}
|