处理打印信息
This commit is contained in:
@@ -3,6 +3,7 @@ package event
|
|||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
"github.com/astaxie/beego/client/orm"
|
"github.com/astaxie/beego/client/orm"
|
||||||
@@ -17,10 +18,20 @@ const (
|
|||||||
heartText = "1e000f02000151"
|
heartText = "1e000f02000151"
|
||||||
printText = "1e00180200"
|
printText = "1e00180200"
|
||||||
printSuccessText = "1e001802000150"
|
printSuccessText = "1e001802000150"
|
||||||
|
|
||||||
|
printErrWithoutPaper = "05"
|
||||||
|
|
||||||
|
printMsgSuccess = 1 //打印成功
|
||||||
|
printMsgWait = 0 //待打印
|
||||||
|
printMsgFail = -1 //打印失败
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
tcpClient = &TcpClient{}
|
tcpClient = &TcpClient{}
|
||||||
|
|
||||||
|
printErrMap = map[string]string{
|
||||||
|
printErrWithoutPaper: "打印机缺纸!",
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
//连接的客户端,吧每个客户端都放进来
|
//连接的客户端,吧每个客户端都放进来
|
||||||
@@ -77,27 +88,85 @@ func handleConn(c net.Conn) {
|
|||||||
data := hex.EncodeToString(buffer[:n])
|
data := hex.EncodeToString(buffer[:n])
|
||||||
//证明是心跳
|
//证明是心跳
|
||||||
if strings.Contains(data, heartText) {
|
if strings.Contains(data, heartText) {
|
||||||
printNo = data[len(heartText) : len(data)-8]
|
printNoData, _ := hex.DecodeString(data[len(heartText) : len(data)-8])
|
||||||
|
printNo = string(printNoData)
|
||||||
if tcpClient.Clients[printNo] == nil {
|
if tcpClient.Clients[printNo] == nil {
|
||||||
tcpClient.Clients[printNo] = c
|
tcpClient.Clients[printNo] = c
|
||||||
} else {
|
} else {
|
||||||
//改变打印机状态
|
//改变打印机状态
|
||||||
}
|
}
|
||||||
} else if strings.Contains(data, printText) {
|
} else if strings.Contains(data, printText) {
|
||||||
//证明是打印成功
|
changePrintMsg(db, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func changePrintMsg(db *dao.DaoDB, data string) (err error) {
|
||||||
|
var (
|
||||||
|
printNo, comment string
|
||||||
|
orderNo int64
|
||||||
|
status int
|
||||||
|
printMsg = &model.PrintMsg{}
|
||||||
|
)
|
||||||
|
//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) {
|
if strings.Contains(data, printSuccessText) {
|
||||||
//打印成功改变打印表的状态
|
//1e001802000150323032313036313530303030313000013c
|
||||||
|
status = printMsgSuccess
|
||||||
} else {
|
} else {
|
||||||
//打印失败也改变状态并更新失败原因
|
//打印失败也改变状态并更新失败原因
|
||||||
|
status = printMsgFail
|
||||||
|
comment = printErrMap[data[12:14]]
|
||||||
|
}
|
||||||
|
if printMsg, err = dao.GetPrintMsg(db, printNo, orderNo); err != nil {
|
||||||
|
globals.SugarLogger.Debugf("changePrintMsg err :[%v]", err)
|
||||||
|
return
|
||||||
|
} else if printMsg == nil {
|
||||||
|
globals.SugarLogger.Debugf("changePrintMsg err ,not found printMsg printNo:[%v], orderNo :[%v]", printNo, orderNo)
|
||||||
|
} else {
|
||||||
|
printMsg.Comment = comment
|
||||||
|
printMsg.Status = status
|
||||||
|
dao.UpdateEntity(db, printMsg, "Comment", "Status")
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func handleTcpMessages() {
|
||||||
|
var (
|
||||||
|
db = dao.GetDB()
|
||||||
|
offset, pageSize = 0, 10
|
||||||
|
)
|
||||||
|
db.Db = orm.NewOrmUsingDB("api") //读写这个库
|
||||||
|
for {
|
||||||
|
//一直读?
|
||||||
|
var err error
|
||||||
|
prints, _ := dao.GetPrintMsgs(db, printMsgWait, offset, pageSize)
|
||||||
|
for _, printMsg := range prints {
|
||||||
|
if printMsg != nil {
|
||||||
|
if err = checkPrintMsg(printMsg); err == nil {
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = fmt.Errorf("未查询到此printMsg")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleTcpMessages() {
|
func checkPrintMsg(printMsg *model.PrintMsg) (err error) {
|
||||||
for {
|
if printMsg.Content == "" {
|
||||||
|
return fmt.Errorf("此打印信息内容为空!printMsg printNo:[%v], orderNo :[%v]", printMsg.PrintNo, printMsg.OrderNo)
|
||||||
}
|
}
|
||||||
|
if printMsg.PrintNo == "" {
|
||||||
|
return fmt.Errorf("此打印信息打印机编号为空!printMsg printNo:[%v], orderNo :[%v]", printMsg.PrintNo, printMsg.OrderNo)
|
||||||
|
}
|
||||||
|
if printMsg.OrderNo == 0 {
|
||||||
|
return fmt.Errorf("此打印信息订单序号为空!printMsg printNo:[%v], orderNo :[%v]", printMsg.PrintNo, printMsg.OrderNo)
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func Hextob(str string) []byte {
|
func Hextob(str string) []byte {
|
||||||
@@ -136,3 +205,22 @@ func int2h8l8(i int64) (h, l string) {
|
|||||||
}
|
}
|
||||||
return h, l
|
return h, l
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func h8l82int(h, l string) (i int64) {
|
||||||
|
s1, s2 := xtob(h), xtob(l)
|
||||||
|
flag1 := 8 - len(s1)
|
||||||
|
flag2 := 8 - len(s2)
|
||||||
|
for m := 0; m < flag1; m++ {
|
||||||
|
s1 = "0" + s1
|
||||||
|
}
|
||||||
|
for j := 0; j < flag2; j++ {
|
||||||
|
s2 = "0" + s2
|
||||||
|
}
|
||||||
|
i, _ = strconv.ParseInt(s1+s2, 2, 10)
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func xtob(x string) string {
|
||||||
|
base, _ := strconv.ParseInt(x, 16, 10)
|
||||||
|
return strconv.FormatInt(base, 2)
|
||||||
|
}
|
||||||
|
|||||||
@@ -476,8 +476,10 @@ func (t *BaseTask) run(taskHandler func()) {
|
|||||||
if t.finishHook != nil {
|
if t.finishHook != nil {
|
||||||
t.finishHook(t)
|
t.finishHook(t)
|
||||||
} else {
|
} else {
|
||||||
|
if globals.IsMainProductEnv() {
|
||||||
SendMessage(t)
|
SendMessage(t)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
37
business/model/dao/dao_print.go
Normal file
37
business/model/dao/dao_print.go
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package dao
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.rosy.net.cn/jx-callback/business/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetPrintMsg(db *DaoDB, printNo string, orderNo int64) (prints *model.PrintMsg, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT *
|
||||||
|
FROM print_msg
|
||||||
|
WHERE 1 = 1
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{}
|
||||||
|
if printNo != "" {
|
||||||
|
sql += ` AND print_no = ?`
|
||||||
|
sqlParams = append(sqlParams, printNo)
|
||||||
|
}
|
||||||
|
if orderNo != 0 {
|
||||||
|
sql += ` AND order_no = ?`
|
||||||
|
sqlParams = append(sqlParams, orderNo)
|
||||||
|
}
|
||||||
|
err = GetRow(db, &prints, sql, sqlParams)
|
||||||
|
return prints, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetPrintMsgs(db *DaoDB, status, offset, pageSize int) (prints []*model.PrintMsg, err error) {
|
||||||
|
sql := `
|
||||||
|
SELECT *
|
||||||
|
FROM print_msg
|
||||||
|
WHERE 1 = 1
|
||||||
|
AND status = ?
|
||||||
|
LIMIT ? OFFSET
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{status, pageSize, offset}
|
||||||
|
err = GetRows(db, &prints, sql, sqlParams)
|
||||||
|
return prints, err
|
||||||
|
}
|
||||||
11
business/model/print.go
Normal file
11
business/model/print.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
type PrintMsg struct {
|
||||||
|
ModelIDCULD
|
||||||
|
|
||||||
|
PrintNo string `json:"print_no"` //打印机编号
|
||||||
|
Content string `orm:"type(text)" json:"content"` //订单内容
|
||||||
|
OrderNo int `json:"order_no"` //订单序号
|
||||||
|
Status int `json:"status"` //打印状态
|
||||||
|
Comment string `json:"comment"` //失败原因
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user