aa
This commit is contained in:
@@ -52,6 +52,7 @@ const (
|
|||||||
signQrCenter = "<qrc>" //二维码居中
|
signQrCenter = "<qrc>" //二维码居中
|
||||||
signQrLeft = "<qrl>" //二维码居左
|
signQrLeft = "<qrl>" //二维码居左
|
||||||
signQrRight = "<qrr>" //二维码居右
|
signQrRight = "<qrr>" //二维码居右
|
||||||
|
signSound = "<sound>" //声音
|
||||||
|
|
||||||
hexSignBROrEXE = "0a"
|
hexSignBROrEXE = "0a"
|
||||||
hexSignCenter = "1b6101"
|
hexSignCenter = "1b6101"
|
||||||
@@ -66,6 +67,7 @@ const (
|
|||||||
hexSignQrRight = "1d5804"
|
hexSignQrRight = "1d5804"
|
||||||
hexSignQr = "1b5a000106" //"1b5a000106" 0600 : 后面二维码的字节数
|
hexSignQr = "1b5a000106" //"1b5a000106" 0600 : 后面二维码的字节数
|
||||||
hexSignQrEnd = "000a1b40" //000a0a0a1b40
|
hexSignQrEnd = "000a1b40" //000a0a0a1b40
|
||||||
|
hexSignSound = "1d6b40"
|
||||||
|
|
||||||
byteSignBR = "3c62723e" //换行
|
byteSignBR = "3c62723e" //换行
|
||||||
byteSignCenter = "3c63656e7465723e" //居中
|
byteSignCenter = "3c63656e7465723e" //居中
|
||||||
@@ -77,6 +79,7 @@ const (
|
|||||||
byteSignQrCenter = "3c7172633e"
|
byteSignQrCenter = "3c7172633e"
|
||||||
byteSignQrLeft = "3c71726c3e"
|
byteSignQrLeft = "3c71726c3e"
|
||||||
byteSignQrRight = "3c7172723e"
|
byteSignQrRight = "3c7172723e"
|
||||||
|
byteSignSound = "3c736f756e643e"
|
||||||
|
|
||||||
byteSignCenterE = "3c2f63656e7465723e" //居中
|
byteSignCenterE = "3c2f63656e7465723e" //居中
|
||||||
byteSignLeftE = "3c2f6c6566743e" //居左
|
byteSignLeftE = "3c2f6c6566743e" //居左
|
||||||
@@ -87,6 +90,7 @@ const (
|
|||||||
byteSignQrCenterE = "3c2f7172633e"
|
byteSignQrCenterE = "3c2f7172633e"
|
||||||
byteSignQrLeftE = "3c2f71726c3e"
|
byteSignQrLeftE = "3c2f71726c3e"
|
||||||
byteSignQrRightE = "3c2f7172723e"
|
byteSignQrRightE = "3c2f7172723e"
|
||||||
|
byteSignSoundE = "3c2f736f756e643e"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -100,9 +104,10 @@ var (
|
|||||||
byteSignBR: hexSignBROrEXE,
|
byteSignBR: hexSignBROrEXE,
|
||||||
}
|
}
|
||||||
|
|
||||||
regexpQrc = regexp.MustCompile(byteSignQrCenter + "(.*?)" + byteSignQrCenterE)
|
regexpQrc = regexp.MustCompile(byteSignQrCenter + "(.*?)" + byteSignQrCenterE)
|
||||||
regexpQrl = regexp.MustCompile(byteSignQrLeft + "(.*?)" + byteSignQrLeftE)
|
regexpQrl = regexp.MustCompile(byteSignQrLeft + "(.*?)" + byteSignQrLeftE)
|
||||||
regexpQrr = regexp.MustCompile(byteSignQrRight + "(.*?)" + byteSignQrRightE)
|
regexpQrr = regexp.MustCompile(byteSignQrRight + "(.*?)" + byteSignQrRightE)
|
||||||
|
regexpSound = regexp.MustCompile(byteSignSound + "(.*?)" + byteSignSoundE)
|
||||||
)
|
)
|
||||||
|
|
||||||
type PrintInfo struct {
|
type PrintInfo struct {
|
||||||
@@ -374,9 +379,9 @@ func buildMsg(printMsg *model.PrintMsg) (data []byte, err error) {
|
|||||||
orderNo = printMsg.OrderNo
|
orderNo = printMsg.OrderNo
|
||||||
str = "1e"
|
str = "1e"
|
||||||
const1 = "0200ff50"
|
const1 = "0200ff50"
|
||||||
printInit = "1b40" //打印机初始化
|
printInit = "1b40" //打印机初始化
|
||||||
voice = "1d6b401dfd001a01015b7631365d736f756e64622cc4fad3d0d0c2b6a9b5a5c0b1" //语音,中国
|
//voice = "1d6b401dfd001a01015b7631365d736f756e64622cc4fad3d0d0c2b6a9b5a5c0b1" //语音,中国
|
||||||
check = "ff"
|
check = "ff"
|
||||||
//qr = "1d58021b5a0001061600747470733a2f2f7777772e62616964752e636f6d2f1b000A0A0A1B40"
|
//qr = "1d58021b5a0001061600747470733a2f2f7777772e62616964752e636f6d2f1b000A0A0A1B40"
|
||||||
orderNoHexH, orderNoHexL, printData string
|
orderNoHexH, orderNoHexL, printData string
|
||||||
)
|
)
|
||||||
@@ -384,15 +389,15 @@ func buildMsg(printMsg *model.PrintMsg) (data []byte, err error) {
|
|||||||
orderNoHexH, orderNoHexL = int2h8l8(int64(orderNo))
|
orderNoHexH, orderNoHexL = int2h8l8(int64(orderNo))
|
||||||
printDataGBK, _ := jxutils.Utf8ToGbk([]byte(content))
|
printDataGBK, _ := jxutils.Utf8ToGbk([]byte(content))
|
||||||
printData = hex.EncodeToString(printDataGBK)
|
printData = hex.EncodeToString(printDataGBK)
|
||||||
printData = replaceContent(printData)
|
printData = replaceContent(printData, printMsg)
|
||||||
lenData := int64(len(str) + len(const1) + len(orderNoHexH) + len(orderNoHexL) + len(printInit) + len(check) + len(voice) + len(hexSignBROrEXE) + 4 + len(printData))
|
lenData := int64(len(str) + len(const1) + len(orderNoHexH) + len(orderNoHexL) + len(printInit) + len(check) + len(hexSignBROrEXE) + 4 + len(printData))
|
||||||
x1, x2 := int2h8l8(lenData / 2)
|
x1, x2 := int2h8l8(lenData / 2)
|
||||||
dataStr := str + x1 + x2 + const1 + orderNoHexH + orderNoHexL + printInit + voice + printData + hexSignBROrEXE + check
|
dataStr := str + x1 + x2 + const1 + orderNoHexH + orderNoHexL + printInit + printData + hexSignBROrEXE + check
|
||||||
return jxutils.Hextob(dataStr), err
|
return jxutils.Hextob(dataStr), err
|
||||||
}
|
}
|
||||||
|
|
||||||
//内容中的标签替换成指令
|
//内容中的标签替换成指令
|
||||||
func replaceContent(content string) (result string) {
|
func replaceContent(content string, printMsg *model.PrintMsg) (result string) {
|
||||||
var (
|
var (
|
||||||
lenqr int
|
lenqr int
|
||||||
hexLenqr string
|
hexLenqr string
|
||||||
@@ -460,6 +465,23 @@ func replaceContent(content string) (result string) {
|
|||||||
result = strings.ReplaceAll(result, byteSignQrRight, hexSignQrRight+hexSignQr+hexLenqr+"00")
|
result = strings.ReplaceAll(result, byteSignQrRight, hexSignQrRight+hexSignQr+hexLenqr+"00")
|
||||||
result = strings.ReplaceAll(result, byteSignQrRightE, hexSignQrEnd)
|
result = strings.ReplaceAll(result, byteSignQrRightE, hexSignQrEnd)
|
||||||
}
|
}
|
||||||
|
if strings.Contains(result, byteSignSound) && strings.Contains(result, byteSignSoundE) {
|
||||||
|
if sounds := regexpSound.FindStringSubmatch(result); len(sounds) > 0 {
|
||||||
|
sound := sounds[1]
|
||||||
|
if printer, _ := dao.GetPrinter(dao.GetDB(), printMsg.PrintNo); printer != nil {
|
||||||
|
//先把结束标签消了
|
||||||
|
result = strings.ReplaceAll(result, byteSignSoundE, "")
|
||||||
|
//fd 固定
|
||||||
|
//001a (声音数据长度高八位低八位)
|
||||||
|
//0101 固定
|
||||||
|
soundPerfix := "[" + utils.Int2Str(printer.Volume*2) + "]" + printer.Sound + ","
|
||||||
|
realSound := soundPerfix + sound
|
||||||
|
allLen := fmt.Sprintf("%x", (len("fd001a0101")+len(realSound))/2)
|
||||||
|
soundLenH, soundLenX := int2h8l8(int64(len(realSound) / 2))
|
||||||
|
result = strings.ReplaceAll(result, byteSignSound, hexSignSound+allLen+"fd"+soundLenH+soundLenX+"0101"+soundPerfix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,4 +67,11 @@ func GetPrintMsgsFail(db *DaoDB, beginAt, endAt time.Time) (prints []*model.Prin
|
|||||||
return prints, err
|
return prints, err
|
||||||
}
|
}
|
||||||
|
|
||||||
//func GetPrinter(db *DaoDB,printNo string)(print []*model)
|
func GetPrinter(db *DaoDB, printNo string) (print *model.Printer, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT * FROM printer WHERE print_no = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{printNo}
|
||||||
|
err = GetRow(db, &print, sql, sqlParams)
|
||||||
|
return print, err
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user