处理打印信息
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
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