From df9e1ae1245c70b8009f8befa0297e2faa590a5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=AE=97=E6=A5=A0?= Date: Mon, 15 Jul 2024 15:13:20 +0800 Subject: [PATCH] 1 --- business/jxstore/cms/api_print.go | 5 +- business/jxstore/event/event_print.go | 4 +- business/jxstore/event/event_tcp.go | 73 ++++++++++++++--------- business/jxstore/event/event_tcp_utils.go | 8 ++- main.go | 2 - 5 files changed, 58 insertions(+), 34 deletions(-) diff --git a/business/jxstore/cms/api_print.go b/business/jxstore/cms/api_print.go index 797c63e4e..7f84becf2 100644 --- a/business/jxstore/cms/api_print.go +++ b/business/jxstore/cms/api_print.go @@ -379,6 +379,7 @@ func DoPrintMsg(appID int, msgID, printNo, content string, orderNo string) (err Content: content, OrderNo: orderNo, MsgID: msgID, + Status: event.PrintMsgWait, } t, ok := event.PrintObject[printNo] @@ -387,7 +388,7 @@ func DoPrintMsg(appID int, msgID, printNo, content string, orderNo string) (err defer t.Unlock() t.MsgMap[printNo] <- printMsg printMsg.Status = event.PrintMsgAlreadyLoad - } else { + } /*else { t = event.NewTcpClient() event.BuildAllMap(t, printNo) event.PrintObject[printNo] = t @@ -396,7 +397,7 @@ func DoPrintMsg(appID int, msgID, printNo, content string, orderNo string) (err defer t.Unlock() t.MsgMap[printNo] <- printMsg printMsg.Status = event.PrintMsgAlreadyLoad - } + }*/ dao.WrapAddIDCULDEntity(printMsg, "") if err = dao.CreateEntity(db, printMsg); err != nil { diff --git a/business/jxstore/event/event_print.go b/business/jxstore/event/event_print.go index 4703a0e7d..d6a57d043 100644 --- a/business/jxstore/event/event_print.go +++ b/business/jxstore/event/event_print.go @@ -4,7 +4,9 @@ import ( "fmt" ) -var PrintObject = make(map[string]*TcpClient, 0) +var PrintObject = make(map[string]*TcpClient, 0) // 缓存的打印机对象 +var PrintAddrAndIp = make(map[string]string, 0) // 缓存打印机地址:[ip:printNo] event 文件包,connect只能获取到addr +var PrintIpAndAddr = make(map[string]string, 0) // 缓存打印机地址:[printNo:ip] api_controller 只能获取到printNo func init() { fmt.Println("初始化打印机对象") diff --git a/business/jxstore/event/event_tcp.go b/business/jxstore/event/event_tcp.go index f6cc3a4e0..d9e21a8be 100644 --- a/business/jxstore/event/event_tcp.go +++ b/business/jxstore/event/event_tcp.go @@ -2,7 +2,6 @@ package event import ( "encoding/hex" - "encoding/json" "errors" "fmt" "git.rosy.net.cn/baseapi/utils" @@ -63,6 +62,7 @@ func handleConn(c net.Conn) error { return errors.New("conn is nil") } for { + printRemoteAddr := c.RemoteAddr().String() buffer, n, err := ConnRead(c) if err != nil { if err == io.EOF { @@ -70,12 +70,11 @@ func handleConn(c net.Conn) error { } else { fmt.Println("ReadString err:", err) } + delete(PrintIpAndAddr, PrintAddrAndIp[printRemoteAddr]) + delete(PrintObject, PrintAddrAndIp[printRemoteAddr]) + delete(PrintAddrAndIp, printRemoteAddr) return err } - globals.SugarLogger.Debugf("======buffer := %s", string(buffer)) - globals.SugarLogger.Debugf("======n := %d", n) - globals.SugarLogger.Debugf("======LocalAddr := %s", c.LocalAddr().String()) - globals.SugarLogger.Debugf("======RemoteAddr := %s", c.RemoteAddr().String()) //看是心跳还是打印回调 data := hex.EncodeToString(buffer[:n]) @@ -93,27 +92,29 @@ func handleConn(c net.Conn) error { callback = true } - t, ok := PrintObject[printNo] - if !ok { - t = NewTcpClient() - buildAllMap(t, printNo) - PrintObject[printNo] = t - } - if strings.Contains(string(buffer[0:n]), "print_no_clear") { // 清理缓存 - param := struct { - PrintNoClear json.Number `json:"print_no_clear"` - }{} - if err := json.Unmarshal(buffer[0:n], ¶m); err != nil { - c.Write([]byte(err.Error())) - return err - } - t.buildMsgMap(param.PrintNoClear.String()) - c.Write([]byte("ok")) - return err - } + t, _ := PrintObject[printNo] + //if !ok { + // t = NewTcpClient() + // buildAllMap(t, printNo) + // PrintObject[printNo] = t + // PrintAddrAndIp[printRemoteAddr] = printNo + // PrintIpAndAddr[printNo] = printRemoteAddr + //} + //if strings.Contains(string(buffer[0:n]), "print_no_clear") { // 清理缓存 + // param := struct { + // PrintNoClear json.Number `json:"print_no_clear"` + // }{} + // if err := json.Unmarshal(buffer[0:n], ¶m); err != nil { + // c.Write([]byte(err.Error())) + // return err + // } + // t.buildMsgMap(param.PrintNoClear.String()) + // c.Write([]byte("ok")) + // return err + //} if heartbeat { // 证明是心跳 - Heartbeat(c, t, data, printNo) + Heartbeat(c, t, data, printNo, printRemoteAddr) } else if callback { // 打印回调 Callback(c, t, data, printNo) @@ -182,7 +183,7 @@ func HandleTcpMessages(t *TcpClient, printNo string) { timeNow := time.Now() timeStart := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 0, 0, 0, 0, timeNow.Location()) timeEnd := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 23, 59, 59, 0, timeNow.Location()) - prints, _ := dao.GetPrintMsgs(db, printNo, []int{printMsgWait}, timeStart.AddDate(0, 0, -1), timeEnd, offset, pageSize) + prints, _ := dao.GetPrintMsgs(db, printNo, []int{PrintMsgWait}, timeStart.AddDate(0, 0, -1), timeEnd, offset, pageSize) for _, printMsg := range prints { printMsg.Status = PrintMsgAlreadyLoad //先避免重复读再插到channel? @@ -251,6 +252,9 @@ func doPrint(t *TcpClient, key string) (err error) { } if c == nil { + printRemoteAddrIP := PrintIpAndAddr[key] + delete(PrintIpAndAddr, PrintAddrAndIp[key]) + delete(PrintAddrAndIp, printRemoteAddrIP) delete(PrintObject, key) return } @@ -259,14 +263,19 @@ func doPrint(t *TcpClient, key string) (err error) { printMsg.Status = printMsgErr printMsg.Comment = err.Error() dao.UpdateEntity(db, printMsg, "Status", "Comment") + + printRemoteAddrIP := PrintIpAndAddr[key] + delete(PrintIpAndAddr, PrintAddrAndIp[key]) + delete(PrintAddrAndIp, printRemoteAddrIP) delete(PrintObject, key) return } if _, err = c.Write(data); err != nil { globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err) - //close(t.TimeoutMap[key]) - //delete(t.TimeoutMap, key) + printRemoteAddrIP := PrintIpAndAddr[key] + delete(PrintIpAndAddr, PrintAddrAndIp[key]) + delete(PrintAddrAndIp, printRemoteAddrIP) delete(PrintObject, key) } else { //等待回调 @@ -423,6 +432,11 @@ func HandleCheckTcpHeart(t *TcpClient, key string) { if time.Now().Sub(statusTime) > time.Second*75 { globals.SugarLogger.Debugf("超过一分十秒没有心跳的打印机[%s],当前心跳时间: %s ,上一次心跳时间 : %s", key, utils.Time2TimeStr(time.Now()), utils.Time2TimeStr(statusTime)) changePrinterStatus(key, printerStatusOffline) + + // 链接出错,彻底删除换成 + printRemoteAddrIP := PrintIpAndAddr[key] + delete(PrintIpAndAddr, PrintAddrAndIp[key]) + delete(PrintAddrAndIp, printRemoteAddrIP) delete(PrintObject, key) } } @@ -431,6 +445,11 @@ func HandleCheckTcpHeart(t *TcpClient, key string) { close(t.MsgMap[key]) close(t.CallBackMap[key]) t.delConn(key) + + // 链接出错,彻底删除换成 + printRemoteAddrIP := PrintIpAndAddr[key] + delete(PrintIpAndAddr, PrintAddrAndIp[key]) + delete(PrintAddrAndIp, printRemoteAddrIP) delete(PrintObject, key) return } diff --git a/business/jxstore/event/event_tcp_utils.go b/business/jxstore/event/event_tcp_utils.go index 7cbce3942..edd9a4b27 100644 --- a/business/jxstore/event/event_tcp_utils.go +++ b/business/jxstore/event/event_tcp_utils.go @@ -28,7 +28,7 @@ const ( printMsgAlreadySend = 2 //已经发出打印消息 printMsgSuccess = 1 //打印成功 - printMsgWait = 0 //待打印 + PrintMsgWait = 0 //待打印 printMsgFail = -1 //打印失败(打印机报出) printMsgErr = -2 //京西报出 PrintMsgAlreadyLoad = 3 //已放入队列 @@ -635,7 +635,7 @@ func xtob(x string) string { } // Heartbeat 心跳回调 -func Heartbeat(c net.Conn, t *TcpClient, data string, printNo string) { +func Heartbeat(c net.Conn, t *TcpClient, data string, printNo string, printRemoteAddr string) { //printNoData, _ := hex.DecodeString(data[len(heartText) : len(data)-8]) //printNo = string(printNoData) status := printStatus2JxStatus(data[len(data)-8 : len(data)-6]) @@ -662,6 +662,10 @@ func Heartbeat(c net.Conn, t *TcpClient, data string, printNo string) { if err := dao.NotExistsCreate(printNo); err != nil { globals.SugarLogger.Debugf("监听打印机心跳,不存在则创建 :[%v],printNo[%s]", err, printNo) } + + PrintObject[printNo] = t + PrintAddrAndIp[printRemoteAddr] = printNo + PrintIpAndAddr[printNo] = printRemoteAddr } else { //在加到连接池中已经更新了时间,所以放在else里 t.setPrintStatusTime(printNo) diff --git a/main.go b/main.go index 3cd7725fa..8503b037f 100644 --- a/main.go +++ b/main.go @@ -136,7 +136,5 @@ func main() { go event.ListenTcp() } beego.Run() - globals.SugarLogger.Debugf("============beego.BConfig.Listen.HTTPPort :%d", beego.BConfig.Listen.HTTPPort) - globals.SugarLogger.Debugf("============beego.BConfig.Listen :%s", utils.Format4Output(beego.BConfig.Listen, false)) } }