1
This commit is contained in:
@@ -31,7 +31,7 @@ const (
|
||||
printMsgWait = 0 //待打印
|
||||
printMsgFail = -1 //打印失败(打印机报出)
|
||||
printMsgErr = -2 //京西报出
|
||||
printMsgAlreadyLoad = 3 //已放入队列
|
||||
PrintMsgAlreadyLoad = 3 //已放入队列
|
||||
|
||||
heartErrNormal = "00" //正常
|
||||
heartErrWithoutPaper = "04" //心跳错,缺纸
|
||||
@@ -409,7 +409,7 @@ func buildMsg(printMsg *model.PrintMsg) (data []byte, err error) {
|
||||
orderNoHexH, orderNoHexL = int2h8l8(no)
|
||||
|
||||
// 将数据与模板组装
|
||||
printDataGBK, _ := jxutils.Utf8ToGbk([]byte(replaceContentOther(content)))
|
||||
printDataGBK, _ := jxutils.Utf8ToGbk([]byte(utils.FilterEmoji(content)))
|
||||
printData = hex.EncodeToString(printDataGBK)
|
||||
printData = replaceContent(printData, printMsg)
|
||||
lenData := int64(len(str) + len(const1) + len(orderNoHexH) + len(orderNoHexL) + len(printInit) + 2 + 4 + len(printData))
|
||||
@@ -419,11 +419,6 @@ func buildMsg(printMsg *model.PrintMsg) (data []byte, err error) {
|
||||
return jxutils.Hextob(dataStr + check), err
|
||||
}
|
||||
|
||||
//替换特殊字符,上面那个hextob转不了,先替换一下
|
||||
func replaceContentOther(content string) string {
|
||||
return strings.ReplaceAll(strings.ReplaceAll(content, "⃣️", " "), "•", "-")
|
||||
}
|
||||
|
||||
func getCheckSum(str string) (check string) {
|
||||
var sum int64
|
||||
for i := 0; i < len(str); i = i + 2 {
|
||||
@@ -632,3 +627,50 @@ func xtob(x string) string {
|
||||
base, _ := strconv.ParseInt(x, 16, 10)
|
||||
return strconv.FormatInt(base, 2)
|
||||
}
|
||||
|
||||
// Heartbeat 心跳回调
|
||||
func Heartbeat(c net.Conn, t *TcpClient, data string, printNo string) {
|
||||
//printNoData, _ := hex.DecodeString(data[len(heartText) : len(data)-8])
|
||||
//printNo = string(printNoData)
|
||||
status := printStatus2JxStatus(data[len(data)-8 : len(data)-6])
|
||||
//如果没在连接池里
|
||||
//1、加到连接池中,不同的打印机no开不同的goroutine
|
||||
//2、初始化channel,每个打印机一个,放打印消息和打印回调消息
|
||||
//3、读数据库里的待打印信息,放到打印channel中
|
||||
//4、读打印channel并打印,并切等待回调channel中的消息
|
||||
//5、修改数据库中打印机状态(没在连接池中说明是重新连接的)
|
||||
//6、监听心跳时间,超过1分多钟就clear掉
|
||||
if t.getClients(printNo) == nil {
|
||||
addConn(c, t, printNo, status)
|
||||
buildAllMap(t, printNo)
|
||||
//t.TimeoutMap[printNo] <- true
|
||||
HandleTcpMessages(t, printNo)
|
||||
doPrint(t, printNo)
|
||||
if status == printerStatusOnline {
|
||||
//t.printFail()
|
||||
}
|
||||
changePrinterStatus(printNo, status)
|
||||
// todo 暂时关闭心跳检测
|
||||
// HandleCheckTcpHeart(t, printNo)
|
||||
// todo 证明打印机已经被激活,将激活打印机存入数据库,保证用户不能无限制绑定打印机
|
||||
if err := dao.NotExistsCreate(printNo); err != nil {
|
||||
globals.SugarLogger.Debugf("监听打印机心跳,不存在则创建 :[%v],printNo[%s]", err, printNo)
|
||||
}
|
||||
} else {
|
||||
//在加到连接池中已经更新了时间,所以放在else里
|
||||
t.setPrintStatusTime(printNo)
|
||||
}
|
||||
//状态不一致再更新状态(可能缺纸了,过热了等)
|
||||
t.setPrintStatus(printNo, status)
|
||||
changePrinterStatus(printNo, status)
|
||||
}
|
||||
|
||||
// Callback 打印成功回调
|
||||
func Callback(c net.Conn, t *TcpClient, data string, printNo string) {
|
||||
//打印消息发送后,打印机会回调该条打印消息的状态(打印成功or失败,失败原因..)
|
||||
//将回调的信息放到回调channel中,打印成功后再打印下一条消息
|
||||
//_, printNo = getCallbackMsgInfo(data)
|
||||
//更新打印机心跳时间(打印机本身不会在打印的同时,或回调的同时发心跳消息,会导致心跳判断超时,这里更新一下)
|
||||
t.setPrintStatusTime(printNo)
|
||||
t.addCallbackChan(printNo, data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user