diff --git a/business/jxstore/event/event_tcp_utils.go b/business/jxstore/event/event_tcp_utils.go
index 2a122e688..e9fbd52e3 100644
--- a/business/jxstore/event/event_tcp_utils.go
+++ b/business/jxstore/event/event_tcp_utils.go
@@ -54,7 +54,7 @@ const (
signSound, signSoundEnd = "", "" // 声音结束标签
// GPRS通讯说明,打印机识别二进制码
- hexSignBROrEXE = "0a"
+ hexSignBROrEXE = "0a" // 换行
hexSignCenter = "1b6101" // 居中打印
hexSignLeft = "1b6100" // 恢复居左打印
hexSignRight = "1b6102" // 居右打印
@@ -368,8 +368,8 @@ func buildMsg(printMsg *model.PrintMsg) (data []byte, err error) {
)
//写入数据
orderNoHexH, orderNoHexL = int2h8l8(int64(orderNo))
- // 将数据与模板组装
+ // 将数据与模板组装
printDataGBK, _ := jxutils.Utf8ToGbk([]byte(replaceContentOther(content)))
printData = hex.EncodeToString(printDataGBK)
printData = replaceContent(printData, printMsg)
@@ -474,7 +474,7 @@ func replaceContent(content string, printMsg *model.PrintMsg) (result string) {
result = strings.ReplaceAll(result, byteSignQrRight, hexSignQrRight+hexSignQr+hexLenqr+"00")
result = strings.ReplaceAll(result, byteSignQrRightE, hexSignQrEnd)
}
- // 声音
+ // 固定模板输出语音
if strings.Contains(result, byteSignSound) && strings.Contains(result, byteSignSoundE) {
if sounds := regexpSound.FindStringSubmatch(result); len(sounds) > 0 {
sound := sounds[1]
@@ -492,16 +492,60 @@ func replaceContent(content string, printMsg *model.PrintMsg) (result string) {
}
hexPrefix, _ := jxutils.Utf8ToGbk([]byte(soundPrefix))
hexPrefixStr := hex.EncodeToString(hexPrefix)
- realSound := hexPrefixStr + sound
+
+ // 将语音包转换为十六进制
+ voice := ""
+ for _, v := range strings.Split(sound, "2c") {
+ soundNum, _ := hex.DecodeString(v) // 十六进制转字符串
+ intSound, _ := strconv.ParseInt(string(soundNum), 10, 64)
+ int16Sound := strconv.FormatInt(intSound, 16)
+ voice += int16Sound
+ }
+ globals.SugarLogger.Debug("voice============", voice)
+
+ realSound := hexPrefixStr + voice
allLen := fmt.Sprintf("%x", (len("fd001a0101")+len(realSound))/2)
if len(allLen) < 2 {
allLen = "0" + allLen
}
+ globals.SugarLogger.Debug("realSound============", realSound)
+ globals.SugarLogger.Debug("allLen============", allLen)
+
soundLenH, soundLenX := int2h8l8(int64((len(realSound) + len("0101")) / 2))
+ globals.SugarLogger.Debug("result1============", result)
result = strings.ReplaceAll(result, byteSignSound, hexSignSound+allLen+"fd"+soundLenH+soundLenX+"0100"+hexPrefixStr)
+ globals.SugarLogger.Debug("result2============", result)
}
}
}
+ // 自动合成语音功能
+ //if strings.Contains(result, byteSignSound) && strings.Contains(result, byteSignSoundE) {
+ // if sounds := regexpSound.FindStringSubmatch(result); len(sounds) > 0 {
+ // sound := sounds[1]
+ // if printer, _ := dao.GetPrinter(dao.GetDB(), printMsg.PrintNo); printer != nil {
+ // //先把结束标签消了
+ // result = strings.ReplaceAll(result, byteSignSoundE, "")
+ // //fd 固定
+ // //001a (声音数据长度高八位低八位)
+ // //0101 固定
+ // soundPrefix := ""
+ // if printer.Sound != "" {
+ // soundPrefix = "[v" + utils.Int2Str(printer.Volume*2) + "]" + printer.Sound
+ // } else {
+ // soundPrefix = "[v" + utils.Int2Str(printer.Volume*2) + "]"
+ // }
+ // hexPrefix, _ := jxutils.Utf8ToGbk([]byte(soundPrefix))
+ // hexPrefixStr := hex.EncodeToString(hexPrefix)
+ // realSound := hexPrefixStr + sound
+ // allLen := fmt.Sprintf("%x", (len("fd001a0101")+len(realSound))/2)
+ // if len(allLen) < 2 {
+ // allLen = "0" + allLen
+ // }
+ // soundLenH, soundLenX := int2h8l8(int64((len(realSound) + len("0101")) / 2))
+ // result = strings.ReplaceAll(result, byteSignSound, hexSignSound+allLen+"fd"+soundLenH+soundLenX+"0100"+hexPrefixStr)
+ // }
+ // }
+ //}
return result
}
diff --git a/business/jxstore/event/print_test.go b/business/jxstore/event/print_test.go
index 194d0159d..9ad290f72 100644
--- a/business/jxstore/event/print_test.go
+++ b/business/jxstore/event/print_test.go
@@ -1,8 +1,10 @@
package event
import (
+ "encoding/hex"
"fmt"
"git.rosy.net.cn/jx-callback/business/model"
+ "strconv"
"testing"
)
@@ -10,8 +12,8 @@ func TestPrintMsg(t *testing.T) {
msg := &model.PrintMsg{
ModelIDCULD: model.ModelIDCULD{},
- PrintNo: "1111",
- Content: "\t您有新订单啦!\t\t
京西果园
\t\t手机买菜上京西
极速到家送惊喜
--------------------------------
下单时间: 2021-08-27 21:57:26
预计送达: 2021-08-27 22:57:26
订单编号: 93154441730211100
美团外卖#19
93154441730211100
客户: 李大梦(先生)
电话: 15987200340
地址: 北浦伟业广场-2号楼 (伟业广场B区)@#云南省楚雄彝族自治州楚雄市鹿城镇伟业广场
客户备注:
【如遇缺货】: 缺货时电话与我沟通
商品明细:
品名 数量 单价 小计
--------------------------------
【自由拼】洗净红提160g/盒
x1 ¥9.20 ¥9.20
【果切】 牛奶木瓜约300g/份
x1 ¥9.70 ¥9.70
【自由拼】严选香蕉果切180g/盒
x1 ¥8.80 ¥8.80
[网红果切]乌梅小番茄25g/个
x10 ¥0.80 ¥8.00
[现剥]甜石榴籽约250g/份(1个)
x1 ¥3.50 ¥3.50
【爆品特惠】新鲜脆甜半斤哈密瓜 哈蜜瓜果切一盒250g/盒(230~260g)
x1 ¥0.01 ¥0.01
【爆品特惠】新鲜脆甜半斤哈密瓜 哈蜜瓜果切一盒250g/盒(230~260g)
x1 ¥8.60 ¥8.60
共7种16件商品
--------------------------------
商品质量问题请联系:
京西果园·果切·水果捞(果果屋店):15841011397
更多信息请关注官方微信: 京西菜市
--------------------------------
--------------------------------
\n",
+ PrintNo: "20220707000002",
+ Content: "\t01,01,01\t\t京西果园
\t\t手机买菜上京西
极速到家送惊喜
--------------------------------
下单时间: 2021-08-27 21:57:26
预计送达: 2021-08-27 22:57:26
订单编号: 93154441730211100
美团外卖#19
93154441730211100
客户: 李大梦(先生)
电话: 15987200340
地址: 北浦伟业广场-2号楼 (伟业广场B区)@#云南省楚雄彝族自治州楚雄市鹿城镇伟业广场
客户备注:
【如遇缺货】: 缺货时电话与我沟通
商品明细:
品名 数量 单价 小计
--------------------------------
【自由拼】洗净红提160g/盒
x1 ¥9.20 ¥9.20
【果切】 牛奶木瓜约300g/份
x1 ¥9.70 ¥9.70
【自由拼】严选香蕉果切180g/盒
x1 ¥8.80 ¥8.80
[网红果切]乌梅小番茄25g/个
x10 ¥0.80 ¥8.00
[现剥]甜石榴籽约250g/份(1个)
x1 ¥3.50 ¥3.50
【爆品特惠】新鲜脆甜半斤哈密瓜 哈蜜瓜果切一盒250g/盒(230~260g)
x1 ¥0.01 ¥0.01
【爆品特惠】新鲜脆甜半斤哈密瓜 哈蜜瓜果切一盒250g/盒(230~260g)
x1 ¥8.60 ¥8.60
共7种16件商品
--------------------------------
商品质量问题请联系:
京西果园·果切·水果捞(果果屋店):15841011397
更多信息请关注官方微信: 京西菜市
--------------------------------
--------------------------------
\n",
OrderNo: 2022071109,
Status: 0,
Comment: "",
@@ -22,3 +24,15 @@ func TestPrintMsg(t *testing.T) {
fmt.Println("data=", string(data))
fmt.Println("err=", err)
}
+
+// 十六进制转字符串
+func TestDC(t *testing.T) {
+ str := "3031"
+ str2, _ := hex.DecodeString(str)
+ fmt.Println(string(str2))
+}
+
+// 十进制字符串转十六进制
+func Test10Two16(t *testing.T) {
+ fmt.Println(strconv.FormatInt(11, 16)) // 2 to 10
+}