diff --git a/business/jxstore/event/event_tcp.go b/business/jxstore/event/event_tcp.go index 79519be76..f2329631a 100644 --- a/business/jxstore/event/event_tcp.go +++ b/business/jxstore/event/event_tcp.go @@ -192,6 +192,7 @@ func handleConn(c net.Conn) { printNoData, _ := hex.DecodeString(data[len(heartText) : len(data)-8]) printNo = string(printNoData) globals.SugarLogger.Debugf("handleConn printno :[%v]", printNo) + status := printStatus2JxStatus(data[len(data)-8 : len(data)-6]) tcpClient.s.Lock() if tcpClient.Clients[printNo] == nil { printInfo := &PrintInfo{ @@ -200,12 +201,14 @@ func handleConn(c net.Conn) { StatusTime: time.Now(), } tcpClient.Clients[printNo] = printInfo - printFail() + changePrinterStatus(printNo, status) + if status > 0 { + printFail() + } } else { //改变打印机状态 - //changePrinterStatus(printNo, printerStatusOnline) + changePrinterStatus(printNo, status) if tcpClient.Clients[printNo] != nil { - status := printStatus2JxStatus(data[len(data)-8 : len(data)-6]) if tcpClient.Clients[printNo].Status != status { tcpClient.Clients[printNo].Status = status } @@ -220,6 +223,32 @@ func handleConn(c net.Conn) { } } +func changePrinterStatus(printNo string, status int) { + var ( + db = dao.GetDB() + ) + if printer, err := dao.GetPrinter(db, printNo); err == nil && printer != nil { + feilds := []string{} + if printer.Status != status { + printer.Status = status + feilds = append(feilds, "Status") + } + isOnline := 0 + if status == printerStatusOnline || status == printerStatusOnlineWithoutPaper { + isOnline = model.YES + } else { + isOnline = model.NO + } + if isOnline != printer.IsOnline { + printer.IsOnline = isOnline + feilds = append(feilds, "IsOnline") + } + if len(feilds) > 0 { + dao.UpdateEntity(db, printer, feilds...) + } + } +} + func printFail() (err error) { //新开机的打印失败和错误的 var ( @@ -241,7 +270,7 @@ func printFail() (err error) { } } tcpClient.s.RUnlock() - if c != nil { + if c != nil && tcpClient.Clients[printMsg.PrintNo].Status == printerStatusOnline { if _, err = c.Write(data); err != nil { globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err) delete(tcpClient.Clients, printMsg.PrintNo) @@ -324,15 +353,18 @@ func HandleTcpMessages() { if err = checkPrintMsg(printMsg); err == nil { tcpClient.s.RLock() if tcpClient.Clients[printMsg.PrintNo] != nil { - if tcpClient.Clients[printMsg.PrintNo].C != nil { - c = tcpClient.Clients[printMsg.PrintNo].C - data, err = buildMsg(printMsg) + 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("打印机缺纸!") } } tcpClient.s.RUnlock() - //else { - // changePrinterStatus(printMsg.PrintNo, printerStatusOffline) - //} } } else { err = fmt.Errorf("未查询到此printMsg") @@ -374,6 +406,7 @@ func HandleCheckTcpHeart() { } tcpClient.s.Unlock() for _, v := range keys { + changePrinterStatus(v, printerStatusOffline) delete(tcpClient.Clients, v) } }