处理打印信息

This commit is contained in:
suyl
2021-06-28 16:38:43 +08:00
parent 34f4368bc7
commit 2552194dc1
4 changed files with 147 additions and 9 deletions

View File

@@ -3,6 +3,7 @@ package event
import (
"encoding/hex"
"fmt"
"git.rosy.net.cn/jx-callback/business/model"
"git.rosy.net.cn/jx-callback/business/model/dao"
"git.rosy.net.cn/jx-callback/globals"
"github.com/astaxie/beego/client/orm"
@@ -17,10 +18,20 @@ const (
heartText = "1e000f02000151"
printText = "1e00180200"
printSuccessText = "1e001802000150"
printErrWithoutPaper = "05"
printMsgSuccess = 1 //打印成功
printMsgWait = 0 //待打印
printMsgFail = -1 //打印失败
)
var (
tcpClient = &TcpClient{}
printErrMap = map[string]string{
printErrWithoutPaper: "打印机缺纸!",
}
)
//连接的客户端,吧每个客户端都放进来
@@ -77,27 +88,85 @@ func handleConn(c net.Conn) {
data := hex.EncodeToString(buffer[:n])
//证明是心跳
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 {
tcpClient.Clients[printNo] = c
} else {
//改变打印机状态
}
} else if strings.Contains(data, printText) {
//证明是打印成功
if strings.Contains(data, printSuccessText) {
//打印成功改变打印表的状态
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) {
//1e001802000150323032313036313530303030313000013c
status = printMsgSuccess
} 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() {
for {
func checkPrintMsg(printMsg *model.PrintMsg) (err error) {
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 {
@@ -136,3 +205,22 @@ func int2h8l8(i int64) (h, l string) {
}
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)
}

View File

@@ -476,7 +476,9 @@ func (t *BaseTask) run(taskHandler func()) {
if t.finishHook != nil {
t.finishHook(t)
} else {
SendMessage(t)
if globals.IsMainProductEnv() {
SendMessage(t)
}
}
})
}

View 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
View 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"` //失败原因
}