1
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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("初始化打印机对象")
|
||||||
|
|||||||
@@ -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], ¶m); err != nil {
|
// PrintNoClear json.Number `json:"print_no_clear"`
|
||||||
c.Write([]byte(err.Error()))
|
// }{}
|
||||||
return err
|
// if err := json.Unmarshal(buffer[0:n], ¶m); 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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
2
main.go
2
main.go
@@ -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))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user