This commit is contained in:
邹宗楠
2024-07-15 15:13:20 +08:00
parent 42360e124f
commit df9e1ae124
5 changed files with 58 additions and 34 deletions

View File

@@ -379,6 +379,7 @@ func DoPrintMsg(appID int, msgID, printNo, content string, orderNo string) (err
Content: content, Content: content,
OrderNo: orderNo, OrderNo: orderNo,
MsgID: msgID, MsgID: msgID,
Status: event.PrintMsgWait,
} }
t, ok := event.PrintObject[printNo] t, ok := event.PrintObject[printNo]
@@ -387,7 +388,7 @@ func DoPrintMsg(appID int, msgID, printNo, content string, orderNo string) (err
defer t.Unlock() defer t.Unlock()
t.MsgMap[printNo] <- printMsg t.MsgMap[printNo] <- printMsg
printMsg.Status = event.PrintMsgAlreadyLoad printMsg.Status = event.PrintMsgAlreadyLoad
} else { } /*else {
t = event.NewTcpClient() t = event.NewTcpClient()
event.BuildAllMap(t, printNo) event.BuildAllMap(t, printNo)
event.PrintObject[printNo] = t event.PrintObject[printNo] = t
@@ -396,7 +397,7 @@ func DoPrintMsg(appID int, msgID, printNo, content string, orderNo string) (err
defer t.Unlock() defer t.Unlock()
t.MsgMap[printNo] <- printMsg t.MsgMap[printNo] <- printMsg
printMsg.Status = event.PrintMsgAlreadyLoad printMsg.Status = event.PrintMsgAlreadyLoad
} }*/
dao.WrapAddIDCULDEntity(printMsg, "") dao.WrapAddIDCULDEntity(printMsg, "")
if err = dao.CreateEntity(db, printMsg); err != nil { if err = dao.CreateEntity(db, printMsg); err != nil {

View File

@@ -4,7 +4,9 @@ import (
"fmt" "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() { func init() {
fmt.Println("初始化打印机对象") fmt.Println("初始化打印机对象")

View File

@@ -2,7 +2,6 @@ package event
import ( import (
"encoding/hex" "encoding/hex"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
@@ -63,6 +62,7 @@ func handleConn(c net.Conn) error {
return errors.New("conn is nil") return errors.New("conn is nil")
} }
for { for {
printRemoteAddr := c.RemoteAddr().String()
buffer, n, err := ConnRead(c) buffer, n, err := ConnRead(c)
if err != nil { if err != nil {
if err == io.EOF { if err == io.EOF {
@@ -70,12 +70,11 @@ func handleConn(c net.Conn) error {
} else { } else {
fmt.Println("ReadString err:", err) fmt.Println("ReadString err:", err)
} }
delete(PrintIpAndAddr, PrintAddrAndIp[printRemoteAddr])
delete(PrintObject, PrintAddrAndIp[printRemoteAddr])
delete(PrintAddrAndIp, printRemoteAddr)
return err 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]) data := hex.EncodeToString(buffer[:n])
@@ -93,27 +92,29 @@ func handleConn(c net.Conn) error {
callback = true callback = true
} }
t, ok := PrintObject[printNo] t, _ := PrintObject[printNo]
if !ok { //if !ok {
t = NewTcpClient() // t = NewTcpClient()
buildAllMap(t, printNo) // buildAllMap(t, printNo)
PrintObject[printNo] = t // PrintObject[printNo] = t
} // PrintAddrAndIp[printRemoteAddr] = printNo
if strings.Contains(string(buffer[0:n]), "print_no_clear") { // 清理缓存 // PrintIpAndAddr[printNo] = printRemoteAddr
param := struct { //}
PrintNoClear json.Number `json:"print_no_clear"` //if strings.Contains(string(buffer[0:n]), "print_no_clear") { // 清理缓存
}{} // param := struct {
if err := json.Unmarshal(buffer[0:n], &param); err != nil { // PrintNoClear json.Number `json:"print_no_clear"`
c.Write([]byte(err.Error())) // }{}
return err // if err := json.Unmarshal(buffer[0:n], &param); err != nil {
} // c.Write([]byte(err.Error()))
t.buildMsgMap(param.PrintNoClear.String()) // return err
c.Write([]byte("ok")) // }
return err // t.buildMsgMap(param.PrintNoClear.String())
} // c.Write([]byte("ok"))
// return err
//}
if heartbeat { if heartbeat {
// 证明是心跳 // 证明是心跳
Heartbeat(c, t, data, printNo) Heartbeat(c, t, data, printNo, printRemoteAddr)
} else if callback { } else if callback {
// 打印回调 // 打印回调
Callback(c, t, data, printNo) Callback(c, t, data, printNo)
@@ -182,7 +183,7 @@ func HandleTcpMessages(t *TcpClient, printNo string) {
timeNow := time.Now() timeNow := time.Now()
timeStart := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 0, 0, 0, 0, timeNow.Location()) 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()) 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 { for _, printMsg := range prints {
printMsg.Status = PrintMsgAlreadyLoad printMsg.Status = PrintMsgAlreadyLoad
//先避免重复读再插到channel //先避免重复读再插到channel
@@ -251,6 +252,9 @@ func doPrint(t *TcpClient, key string) (err error) {
} }
if c == nil { if c == nil {
printRemoteAddrIP := PrintIpAndAddr[key]
delete(PrintIpAndAddr, PrintAddrAndIp[key])
delete(PrintAddrAndIp, printRemoteAddrIP)
delete(PrintObject, key) delete(PrintObject, key)
return return
} }
@@ -259,14 +263,19 @@ func doPrint(t *TcpClient, key string) (err error) {
printMsg.Status = printMsgErr printMsg.Status = printMsgErr
printMsg.Comment = err.Error() printMsg.Comment = err.Error()
dao.UpdateEntity(db, printMsg, "Status", "Comment") dao.UpdateEntity(db, printMsg, "Status", "Comment")
printRemoteAddrIP := PrintIpAndAddr[key]
delete(PrintIpAndAddr, PrintAddrAndIp[key])
delete(PrintAddrAndIp, printRemoteAddrIP)
delete(PrintObject, key) delete(PrintObject, key)
return return
} }
if _, err = c.Write(data); err != nil { if _, err = c.Write(data); err != nil {
globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err) globals.SugarLogger.Debugf("handleTcpMessages err [%v]", err)
//close(t.TimeoutMap[key]) printRemoteAddrIP := PrintIpAndAddr[key]
//delete(t.TimeoutMap, key) delete(PrintIpAndAddr, PrintAddrAndIp[key])
delete(PrintAddrAndIp, printRemoteAddrIP)
delete(PrintObject, key) delete(PrintObject, key)
} else { } else {
//等待回调 //等待回调
@@ -423,6 +432,11 @@ func HandleCheckTcpHeart(t *TcpClient, key string) {
if time.Now().Sub(statusTime) > time.Second*75 { if time.Now().Sub(statusTime) > time.Second*75 {
globals.SugarLogger.Debugf("超过一分十秒没有心跳的打印机[%s],当前心跳时间: %s ,上一次心跳时间 : %s", key, utils.Time2TimeStr(time.Now()), utils.Time2TimeStr(statusTime)) globals.SugarLogger.Debugf("超过一分十秒没有心跳的打印机[%s],当前心跳时间: %s ,上一次心跳时间 : %s", key, utils.Time2TimeStr(time.Now()), utils.Time2TimeStr(statusTime))
changePrinterStatus(key, printerStatusOffline) changePrinterStatus(key, printerStatusOffline)
// 链接出错,彻底删除换成
printRemoteAddrIP := PrintIpAndAddr[key]
delete(PrintIpAndAddr, PrintAddrAndIp[key])
delete(PrintAddrAndIp, printRemoteAddrIP)
delete(PrintObject, key) delete(PrintObject, key)
} }
} }
@@ -431,6 +445,11 @@ func HandleCheckTcpHeart(t *TcpClient, key string) {
close(t.MsgMap[key]) close(t.MsgMap[key])
close(t.CallBackMap[key]) close(t.CallBackMap[key])
t.delConn(key) t.delConn(key)
// 链接出错,彻底删除换成
printRemoteAddrIP := PrintIpAndAddr[key]
delete(PrintIpAndAddr, PrintAddrAndIp[key])
delete(PrintAddrAndIp, printRemoteAddrIP)
delete(PrintObject, key) delete(PrintObject, key)
return return
} }

View File

@@ -28,7 +28,7 @@ const (
printMsgAlreadySend = 2 //已经发出打印消息 printMsgAlreadySend = 2 //已经发出打印消息
printMsgSuccess = 1 //打印成功 printMsgSuccess = 1 //打印成功
printMsgWait = 0 //待打印 PrintMsgWait = 0 //待打印
printMsgFail = -1 //打印失败(打印机报出) printMsgFail = -1 //打印失败(打印机报出)
printMsgErr = -2 //京西报出 printMsgErr = -2 //京西报出
PrintMsgAlreadyLoad = 3 //已放入队列 PrintMsgAlreadyLoad = 3 //已放入队列
@@ -635,7 +635,7 @@ func xtob(x string) string {
} }
// Heartbeat 心跳回调 // 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]) //printNoData, _ := hex.DecodeString(data[len(heartText) : len(data)-8])
//printNo = string(printNoData) //printNo = string(printNoData)
status := printStatus2JxStatus(data[len(data)-8 : len(data)-6]) 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 { if err := dao.NotExistsCreate(printNo); err != nil {
globals.SugarLogger.Debugf("监听打印机心跳,不存在则创建 :[%v],printNo[%s]", err, printNo) globals.SugarLogger.Debugf("监听打印机心跳,不存在则创建 :[%v],printNo[%s]", err, printNo)
} }
PrintObject[printNo] = t
PrintAddrAndIp[printRemoteAddr] = printNo
PrintIpAndAddr[printNo] = printRemoteAddr
} else { } else {
//在加到连接池中已经更新了时间所以放在else里 //在加到连接池中已经更新了时间所以放在else里
t.setPrintStatusTime(printNo) t.setPrintStatusTime(printNo)

View File

@@ -136,7 +136,5 @@ func main() {
go event.ListenTcp() go event.ListenTcp()
} }
beego.Run() 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))
} }
} }