diff --git a/business/jxstore/event/event_tcp.go b/business/jxstore/event/event_tcp.go index d2fd474c3..cf4c500a0 100644 --- a/business/jxstore/event/event_tcp.go +++ b/business/jxstore/event/event_tcp.go @@ -142,6 +142,8 @@ func ListenTcp() { globals.SugarLogger.Debugf("begin listenTcp port 8000......") go HandleTcpMessages() go HandleCheckTcpHeart() + go doPrint(printMsgChanFail) + go doPrint2(printMsgChan) for { c, err := l.Accept() if err != nil { @@ -272,32 +274,34 @@ func doPrint(printMsgChanFail chan *model.PrintMsg) (err error) { db = dao.GetDB() ) for { - printMsg := <-printMsgChanFail - var ( - data []byte - c net.Conn - ) - if printMsg != nil { - if err = checkPrintMsg(db, printMsg); err == nil { - tcpClient.s.RLock() - if tcpClient.Clients[printMsg.PrintNo] != nil { - if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOnline { - if tcpClient.Clients[printMsg.PrintNo].C != nil { - c = tcpClient.Clients[printMsg.PrintNo].C - data, err = buildMsg(printMsg) + select { + case printMsg, _ := <-printMsgChanFail: + var ( + data []byte + c net.Conn + ) + if printMsg != nil { + if err = checkPrintMsg(db, printMsg); err == nil { + tcpClient.s.RLock() + if tcpClient.Clients[printMsg.PrintNo] != nil { + if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOnline { + if tcpClient.Clients[printMsg.PrintNo].C != nil { + c = tcpClient.Clients[printMsg.PrintNo].C + data, err = buildMsg(printMsg) + } } } - } - tcpClient.s.RUnlock() - if c != nil { - if _, err = c.Write(data); err != nil { - globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err) - delete(tcpClient.Clients, printMsg.PrintNo) - c.Close() - } else { - globals.SugarLogger.Debugf("handleTcpMessages success, data: %v", hex.EncodeToString(data)) - printMsg.Status = printMsgAlreadySend - dao.UpdateEntity(db, printMsg, "Status", "Comment") + tcpClient.s.RUnlock() + if c != nil { + if _, err = c.Write(data); err != nil { + globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err) + delete(tcpClient.Clients, printMsg.PrintNo) + c.Close() + } else { + globals.SugarLogger.Debugf("handleTcpMessages success, data: %v", hex.EncodeToString(data)) + printMsg.Status = printMsgAlreadySend + dao.UpdateEntity(db, printMsg, "Status", "Comment") + } } } } @@ -359,7 +363,6 @@ func HandleTcpMessages() { ) for { //一直读? - time.Sleep(time.Second / 2) prints, _ := dao.GetPrintMsgs(db, []int{printMsgWait}, time.Now().Add(-time.Hour*3), time.Now(), offset, pageSize) for _, printMsg := range prints { printMsgChan <- printMsg @@ -372,49 +375,51 @@ func doPrint2(printMsgChan chan *model.PrintMsg) (err error) { db = dao.GetDB() ) for { - printMsg := <-printMsgChan - var ( - data []byte - c net.Conn - ) - if printMsg != nil { - if err = checkPrintMsg(db, printMsg); err == nil { - tcpClient.s.RLock() - if tcpClient.Clients[printMsg.PrintNo] != nil { - if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOnline { - if tcpClient.Clients[printMsg.PrintNo].C != nil { - c = tcpClient.Clients[printMsg.PrintNo].C - data, err = buildMsg(printMsg) + select { + case printMsg, _ := <-printMsgChan: + var ( + data []byte + c net.Conn + ) + if printMsg != nil { + if err = checkPrintMsg(db, printMsg); err == nil { + tcpClient.s.RLock() + if tcpClient.Clients[printMsg.PrintNo] != nil { + if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOnline { + if tcpClient.Clients[printMsg.PrintNo].C != nil { + c = tcpClient.Clients[printMsg.PrintNo].C + data, err = buildMsg(printMsg) + } + } else if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOffline { + err = fmt.Errorf("打印机离线!") + } else if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOnlineWithoutPaper { + err = fmt.Errorf("打印机缺纸!") } - } else if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOffline { - err = fmt.Errorf("打印机离线!") - } else if tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOnlineWithoutPaper { - err = fmt.Errorf("打印机缺纸!") } + tcpClient.s.RUnlock() } - tcpClient.s.RUnlock() + } else { + err = fmt.Errorf("未查询到此printMsg") } - } else { - err = fmt.Errorf("未查询到此printMsg") - } - if err != nil { - printMsg.Status = printMsgErr - printMsg.Comment = err.Error() - dao.UpdateEntity(db, printMsg, "Status", "Comment") - delete(tcpClient.Clients, printMsg.PrintNo) - if c != nil { - c.Close() - } - } else { - if c != nil { - if _, err = c.Write(data); err != nil { - globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err) - delete(tcpClient.Clients, printMsg.PrintNo) + if err != nil { + printMsg.Status = printMsgErr + printMsg.Comment = err.Error() + dao.UpdateEntity(db, printMsg, "Status", "Comment") + delete(tcpClient.Clients, printMsg.PrintNo) + if c != nil { c.Close() - } else { - globals.SugarLogger.Debugf("handleTcpMessages success, data: %v", hex.EncodeToString(data)) - printMsg.Status = printMsgAlreadySend - dao.UpdateEntity(db, printMsg, "Status", "Comment") + } + } else { + if c != nil { + if _, err = c.Write(data); err != nil { + globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err) + delete(tcpClient.Clients, printMsg.PrintNo) + c.Close() + } else { + globals.SugarLogger.Debugf("handleTcpMessages success, data: %v", hex.EncodeToString(data)) + printMsg.Status = printMsgAlreadySend + dao.UpdateEntity(db, printMsg, "Status", "Comment") + } } } }