From b18672e92d9aed2572b47e716d046d5d6faa8e9f Mon Sep 17 00:00:00 2001 From: suyl <770236076@qq.com> Date: Thu, 29 Jul 2021 18:11:20 +0800 Subject: [PATCH] aa --- business/jxstore/event/event_tcp.go | 39 ++++++++++++++++------- business/jxstore/event/event_tcp_utils.go | 17 +++++++--- 2 files changed, 40 insertions(+), 16 deletions(-) diff --git a/business/jxstore/event/event_tcp.go b/business/jxstore/event/event_tcp.go index ba73edf56..892999fc4 100644 --- a/business/jxstore/event/event_tcp.go +++ b/business/jxstore/event/event_tcp.go @@ -93,6 +93,7 @@ func (t *TcpClient) handleConn(c net.Conn) { //t.Clients[printNo] = printInfo //t.Unlock() t.addConn(c, printNo, printStatus2JxStatus(data[len(data)-8:len(data)-6])) + t.buildCallBackMap(printNo) changePrinterStatus(printNo, status) if status == printerStatusOnline { printFail() @@ -114,7 +115,9 @@ func (t *TcpClient) handleConn(c net.Conn) { } } else if strings.Contains(data, printText) { globals.SugarLogger.Debugf("handleConn print callback: %v", data) - printMsgCallbackChan <- data + _, printNo = getCallbackMsgInfo(data) + t.CallBackMap[printNo] <- data + //printMsgCallbackChan <- printMsgCallbackMap //changePrintMsg(data) } } @@ -167,17 +170,25 @@ func printStatus2JxStatus(printStatus string) (status int) { return status } -func (t *TcpClient) changePrintMsg(data string) (err error) { - var ( - db = dao.GetDB() - printNo, comment string - orderNo int64 - status int - ) - //1、先找出打印机编号和订单序列号,这两个确定唯一一条消息? +func getCallbackMsgInfo(data string) (orderNo int64, printNo string) { orderNo = h8l82int(data[len(data)-6:len(data)-4], data[len(data)-4:len(data)-2]) printNoData, _ := hex.DecodeString(data[len(printSuccessText) : len(data)-6]) printNo = string(printNoData) + return orderNo, printNo +} + +func (t *TcpClient) changePrintMsg(data string, orderNo int64, printNo string) (err error) { + var ( + db = dao.GetDB() + //printNo, + comment string + //orderNo int64 + status int + ) + //1、先找出打印机编号和订单序列号,这两个确定唯一一条消息? + //orderNo = h8l82int(data[len(data)-6:len(data)-4], data[len(data)-4:len(data)-2]) + //printNoData, _ := hex.DecodeString(data[len(printSuccessText) : len(data)-6]) + //printNo = string(printNoData) //2、打印成功改变打印表的状态 if strings.Contains(data, printSuccessText) { //1e001802000150323032313036313530303030313000013c @@ -285,8 +296,14 @@ func (t *TcpClient) doPrint2(printMsgChan chan *model.PrintMsg) (err error) { globals.SugarLogger.Debugf("handleTcpMessages success, data: %v", hex.EncodeToString(data)) printMsg.Status = printMsgAlreadySend dao.UpdateEntity(db, printMsg, "Status", "Comment") - dataStr := <-printMsgCallbackChan - t.changePrintMsg(dataStr) + if t.CallBackMap[printMsg.PrintNo] != nil { + t.RLock() + dataStr := <-t.CallBackMap[printMsg.PrintNo] + t.RUnlock() + a, b := getCallbackMsgInfo(dataStr) + t.changePrintMsg(dataStr, a, b) + } + //dataStr := <-printMsgCallbackChan } } } diff --git a/business/jxstore/event/event_tcp_utils.go b/business/jxstore/event/event_tcp_utils.go index 50e43df80..a9afe8b53 100644 --- a/business/jxstore/event/event_tcp_utils.go +++ b/business/jxstore/event/event_tcp_utils.go @@ -99,9 +99,9 @@ var ( regexpQrr = regexp.MustCompile(byteSignQrRight + "(.*?)" + byteSignQrRightE) regexpSound = regexp.MustCompile(byteSignSound + "(.*?)" + byteSignSoundE) - printMsgChan = make(chan *model.PrintMsg, 1024) - printMsgCallbackChan = make(chan string, 1024) - printMsgChanFail = make(chan *model.PrintMsg, 1024) + printMsgChan = make(chan *model.PrintMsg, 1024) + //printMsgCallbackMap = make(map[string]chan string, 1024) + printMsgChanFail = make(chan *model.PrintMsg, 1024) ) type PrintInfo struct { @@ -112,7 +112,8 @@ type PrintInfo struct { //连接的客户端,吧每个客户端都放进来 type TcpClient struct { - Clients map[string]*PrintInfo + Clients map[string]*PrintInfo + CallBackMap map[string]chan string *sync.RWMutex } @@ -142,6 +143,11 @@ func (t *TcpClient) addConn(c net.Conn, key string, status int) { } } +func (t *TcpClient) buildCallBackMap(key string) { + dataChan := make(chan string, 1024) + t.CallBackMap[key] = dataChan +} + func (t *TcpClient) getPrintStatus(key string) int { t.RLock() defer t.RUnlock() @@ -185,7 +191,8 @@ func (t *TcpClient) setPrintStatus(key string, status int) { func NewTcpClient() *TcpClient { t := &TcpClient{ - Clients: make(map[string]*PrintInfo), + Clients: make(map[string]*PrintInfo), + CallBackMap: make(map[string]chan string, 1024), } t.RWMutex = new(sync.RWMutex) return t