diff --git a/controllers/api_controller.go b/controllers/api_controller.go index 0da1b7e44..1e3069037 100644 --- a/controllers/api_controller.go +++ b/controllers/api_controller.go @@ -1,14 +1,18 @@ package controllers import ( + "encoding/hex" "encoding/json" "fmt" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/globals" "github.com/astaxie/beego/server/web" + "net" "net/url" + "os" "reflect" + "strconv" ) type ApiController struct { @@ -24,6 +28,7 @@ const ( var ( routerMap map[string]reflect.Value + textChan chan string ) func Init() { @@ -148,3 +153,64 @@ func (c *ApiController) AddPrint(dataMap map[string]interface{}) (data string, e data2, err := json.Marshal(dataMap) return string(data2), err } + +func (c *ApiController) DoPrint(dataMap map[string]interface{}) (data string, err error) { + data = dataMap["data"].(string) + server := "print.jxcs.net:8000" + tcpAddr, err := net.ResolveTCPAddr("tcp4", server) + if err != nil { + fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) + os.Exit(1) + } + conn, err := net.DialTCP("tcp", nil, tcpAddr) + if err != nil { + return + } + textChan = make(chan string, 10) + textChan <- data + connHandler(conn) + return data, err +} + +func connHandler(c net.Conn) { + str := "1e" + const1 := "0200ff50" + orderNo := "0001" //订单序列号 + printInit := "1b40" //打印机初始化 + voice := "1b59415501" //语音响一次 + check := "ff" + go func() { + s := <-textChan + //写入数据 + printData := hex.EncodeToString([]byte(s)) + lenData := int64(len(str) + len(const1) + len(orderNo) + len(printInit) + len(voice) + 1 + 2 + len(printData)) + x1, x2 := int2h8l8(lenData) + data := const1 + x1 + x2 + orderNo + printInit + voice + printData + check + n, err := c.Write([]byte(data)) + if err != nil { + fmt.Println("Write err:", err, n) + return + } + }() +} + +func int2h8l8(i int64) (h, l string) { + origin2 := fmt.Sprintf("%b", i) + flag := 16 - len(origin2) + for i := 0; i < flag; i++ { + origin2 = "0" + origin2 + } + begin8 := origin2[:8] + end8 := origin2[8:] + r1, _ := strconv.ParseInt(begin8, 2, 32) + r2, _ := strconv.ParseInt(end8, 2, 32) + h = fmt.Sprintf("%x", r1) + l = fmt.Sprintf("%x", r2) + if len(h) < 2 { + h = "0" + h + } + if len(l) < 2 { + l = "0" + l + } + return h, l +}