trendit
This commit is contained in:
@@ -20,10 +20,10 @@ func init() {
|
||||
baseapi.Init(sugarLogger)
|
||||
|
||||
// 菜市
|
||||
//api = New("589", "a81eb3df418d83d6a1a4b7c572156d2f", "", "")
|
||||
api = New("589", "a81eb3df418d83d6a1a4b7c572156d2f", "", "")
|
||||
|
||||
// 果园
|
||||
api = New("4123", "df2c88338b85f830cebce2a9eab56628", "", "")
|
||||
//api = New("4123", "df2c88338b85f830cebce2a9eab56628", "", "")
|
||||
|
||||
//商超
|
||||
//api = New("5873", "41c479790a76f86326f89e8048964739", "", "") //token_nH_IlcWQKAkZBqklwItNRw
|
||||
|
||||
@@ -24,7 +24,7 @@ func TestPoiGetIDs(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPoiMGet(t *testing.T) {
|
||||
result, err := api.PoiMGet([]string{"16708848"})
|
||||
result, err := api.PoiMGet([]string{"8040306"})
|
||||
t.Log(utils.Format4Output(result, false))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -45,8 +45,8 @@ func TestPoiSave(t *testing.T) {
|
||||
poiParams := map[string]interface{}{}
|
||||
//utils.FilterMapNilMembers(utils.Struct2FlatMap(result[0]))
|
||||
//poiParams["address"] = "成都市温江区柳城学海路585号"
|
||||
poiParams["name"] = "福果驿站·果果铺子"
|
||||
err := api.PoiSave("15467875", poiParams)
|
||||
poiParams["pic_url"] = "http://image.jxc4.com/image/5c9fc4fffb4d5ff1aecf85a2d2543e00.jpg"
|
||||
err := api.PoiSave("17218722", poiParams)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
// "authority_id": ""
|
||||
//}`
|
||||
|
||||
var token = `{"access_token":"c2e78f4f-fb23-4729-b9b1-8330209df50b","expires_in":1679259342,"scope":"SCOPE","shop_id":57939570,"shop_name":"京西菜市速食","refresh_token":"83548fb9-d9ea-4665-bd8c-4dbb949338de","authority_id":""}`
|
||||
var token = `{"access_token":"2edc427e-9ab8-430b-a502-6802f1dee387","expires_in":1679861437,"scope":"SCOPE","shop_id":57939570,"shop_name":"京西菜市速食","refresh_token":"dda56ad5-521b-4b87-9d74-bd6df13df1aa","authority_id":""}`
|
||||
|
||||
//var token = `{"access_token":"e3173e9f-266f-4d87-88e7-e7cd837bc9d9","expires_in":1672882632,"scope":"SCOPE","shop_id":68023619,"shop_name":"京西到家","refresh_token":"5070aae2-493f-46bd-b5d6-6ea0cd64729f","authority_id":""}`
|
||||
|
||||
|
||||
@@ -379,19 +379,27 @@ func TestGetAns(t *testing.T) {
|
||||
|
||||
//运费模板
|
||||
//创建运费模板
|
||||
//func TestCreateFreightTemplate(t *testing.T) {
|
||||
// param := &freightTemplate_create_request.FreightTemplateCreateParam{
|
||||
// Template: &freightTemplate_create_request.Template{
|
||||
// TemplateName: "这是一个测试固定运费模板",
|
||||
// ProductProvince: utils.Str2Int64(utils.Int2Str(storeDetail.ProvinceCode)[:2]),
|
||||
// ProductCity: int64(storeDetail.CityCode),
|
||||
// CalculateType: 2, //计价方式-1.按重量 2.按数量
|
||||
// TransferType: 1,
|
||||
// RuleType: 1, //固定运费&卖家包邮
|
||||
// FixedAmount: 500, //固定运费 单位:分
|
||||
// },
|
||||
// }
|
||||
//}
|
||||
func TestCreateFreightTemplate(t *testing.T) {
|
||||
param := &freightTemplate_create_request.FreightTemplateCreateParam{
|
||||
Template: &freightTemplate_create_request.Template{
|
||||
TemplateName: "这是一个测试满减运费模板0323",
|
||||
ProductProvince: 31,
|
||||
ProductCity: 310000,
|
||||
CalculateType: 2, //计价方式-1.按重量 2.按数量
|
||||
TransferType: 1,
|
||||
RuleType: 1, //固定运费&卖家包邮
|
||||
FixedAmount: 500, //固定运费 单位:分
|
||||
},
|
||||
Columns: []freightTemplate_create_request.ColumnsItem{{
|
||||
IsOverFree: true,
|
||||
IsLimited: false,
|
||||
OverAmount: 12,
|
||||
}},
|
||||
}
|
||||
freightID, err := a.FreightTemplateCreate(param)
|
||||
fmt.Println(freightID)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//更新运费模板
|
||||
func TestUpdateFreightTemplate(t *testing.T) {
|
||||
|
||||
156
platformapi/trenditapi/trendit.go
Normal file
156
platformapi/trenditapi/trendit.go
Normal file
@@ -0,0 +1,156 @@
|
||||
package trenditapi
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
//增加打印机
|
||||
func (a *API) AddPrinter(sn, key, name string) error {
|
||||
params := []AddPrinterReq{{
|
||||
Sn: sn,
|
||||
Key: key,
|
||||
Name: name,
|
||||
}}
|
||||
resp := a.HttpPostJson("addPrinter", params)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("添加打印机错误: %v", resp.BaseRes.Message)
|
||||
}
|
||||
retVal, _ := resp.BaseRes.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if len(retVal["fail"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["fail"].([]interface{}) {
|
||||
t := v.(FailItem)
|
||||
failMsg += t.Sn + ":" + t.Reason + " "
|
||||
}
|
||||
return fmt.Errorf("添加打印机错误: %v", failMsg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//修改打印机信息
|
||||
func (a *API) EditPrinter(sn, name string) (string, error) {
|
||||
resp := a.HttpPostJson("editPrinter", []EditPrinterReq{{
|
||||
Sn: sn,
|
||||
Name: name,
|
||||
},
|
||||
})
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return "", errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return "", fmt.Errorf("修改打印机信息错误:%v", resp.BaseRes.Message)
|
||||
}
|
||||
retVal, _ := resp.BaseRes.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if len(retVal["fail"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["fail"].([]interface{}) {
|
||||
t := v.(FailItem)
|
||||
failMsg += t.Sn + ":" + t.Reason + " "
|
||||
}
|
||||
return fmt.Sprintf("修改打印机信息错误:%v", failMsg), nil
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
|
||||
//删除打印机
|
||||
func (a *API) DelPrinter(snList []string) error {
|
||||
resp := a.HttpPostJson("delPrinter", snList)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("删除打印机错误:%v", resp.BaseRes.Message)
|
||||
}
|
||||
retVal, _ := resp.BaseRes.Data.(map[string]interface{})
|
||||
failMsg := ""
|
||||
if len(retVal["fail"].([]interface{})) > 0 {
|
||||
for _, v := range retVal["fail"].([]interface{}) {
|
||||
t := v.(FailItem)
|
||||
failMsg += t.Sn + ":" + t.Reason + " "
|
||||
}
|
||||
return fmt.Errorf("删除打印机错误:%v", failMsg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//设置打印机浓度
|
||||
func (a *API) SetDensity(sn string, density int) error {
|
||||
resp := a.HttpPostJson("setDensity", SetDensityReq{
|
||||
Sn: sn,
|
||||
Density: density,
|
||||
})
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("设置打印机浓度错误:%v", resp.BaseRes.Message)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//设置音量
|
||||
func (a *API) SetVolume(sn string, volume int) error {
|
||||
resp := a.HttpPostJson("setVolume", SetVolumeReq{
|
||||
Sn: sn,
|
||||
Volume: volume,
|
||||
})
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("设置打印机音量错误:%v", resp.BaseRes.Message)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//查询打印机状态
|
||||
func (a *API) GetDeviceStatus(sn string) (float64, float64, error) {
|
||||
resp := a.HttpPostJson("getDeviceStatus", GetDeviceStatusReq{Sn: sn})
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return 0, 0, errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return 0, 0, fmt.Errorf("查询打印机状态错误:%v", resp.BaseRes.Message)
|
||||
}
|
||||
retVal, _ := resp.BaseRes.Data.(map[string]interface{})
|
||||
return retVal["onlineStatus"].(float64), retVal["workStatus"].(float64), nil
|
||||
}
|
||||
|
||||
//清空设备待打印队列
|
||||
func (a *API) CleanWaitingQueue(sn string) error {
|
||||
resp := a.HttpPostJson("cleanWaitingQueue", sn)
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return fmt.Errorf("清空设备待打印队列错误:%v", resp.BaseRes.Message)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//打印小票
|
||||
func (a *API) Print(sn, content, voice string) (string, error) {
|
||||
resp := a.HttpPostJson("print", PrintReq{
|
||||
Sn: sn,
|
||||
Content: content,
|
||||
Voice: voice,
|
||||
VoicePlayTimes: 1,
|
||||
VoicePlayInterval: 3,
|
||||
Copies: 1,
|
||||
})
|
||||
if resp.HttpStatusCode != HttpStatusSuccessCode {
|
||||
return "", errors.New("HTTP请求错误,请检查重试")
|
||||
}
|
||||
if resp.BaseRes.Code != ResponseCodeSuccess {
|
||||
return "", fmt.Errorf("打印错误:%v", resp.BaseRes.Message)
|
||||
}
|
||||
retVal := resp.BaseRes.Data.(map[string]interface{})
|
||||
if retVal["printId"].(string) != "" {
|
||||
return retVal["printId"].(string), nil
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
144
platformapi/trenditapi/trendit_model.go
Normal file
144
platformapi/trenditapi/trendit_model.go
Normal file
@@ -0,0 +1,144 @@
|
||||
package trenditapi
|
||||
|
||||
var (
|
||||
TiAppID = "1088834319474253824"
|
||||
TiAppSecret = "79e3b918aeca427bbbf9d0503f9f9106"
|
||||
TestSn = "670020035344" //打印机编号
|
||||
TestKey = "6p7wkk" //打印机密钥
|
||||
BaseUrl = "https://printer.juhesaas.com/openapi"
|
||||
)
|
||||
|
||||
const (
|
||||
HttpStatusSuccessCode = 200 //http返回成功状态码
|
||||
ResponseCodeSuccess = 0 //请求成功码
|
||||
//优先使用语言
|
||||
LangLatin = 13 //拉丁文
|
||||
LangChinese = 16 //中文
|
||||
//打印浓度
|
||||
DensityLighter = 4 //较淡
|
||||
DensityLight = 5 //淡
|
||||
DensityStronger = 6 //较浓(默认)
|
||||
DensityStrong = 7 //浓
|
||||
//打印机音量 1~5 值越大声越大
|
||||
Volume1 = 1
|
||||
Volume2 = 2
|
||||
Volume3 = 3
|
||||
Volume4 = 4
|
||||
Volume5 = 5 //(默认)
|
||||
//打印机状态
|
||||
OnlineStatus = 1 //在线
|
||||
OfflineStatus = 0 //当前离线
|
||||
WorkStatusReady = 0 //就绪
|
||||
WorkStatusPrinting = 1 //打印中
|
||||
WorkStatusPaperLack = 2 //缺纸
|
||||
WorkStatusOverTemperature = 3 //过温
|
||||
WorkStatusPrintFail = 4 //打印故障
|
||||
//设备音源
|
||||
VoiceMTNew = "1" //美团新订单提醒
|
||||
VoiceELMNew = "2" //饿了么新订单提醒
|
||||
VoiceJDDJNew = "3" //京东到家新订单提醒
|
||||
VoiceNew = "4" //通用新订单
|
||||
VoiceCancel = "5" //通用取消订单
|
||||
VoiceRefund = "6" //通用退单
|
||||
VoiceReminders = "7" //用户催单
|
||||
VoiceNewShort = "10" //简短 - 通用新订单提醒
|
||||
VoiceCancelShort = "11" //简短 - 取消订单提醒
|
||||
)
|
||||
|
||||
//错误码信息
|
||||
var ErrMsg = map[int]string{
|
||||
1419: "打印请求过快",
|
||||
1420: "设备缓存队列发生溢出",
|
||||
31405: "消息发送失败,未知原因",
|
||||
31406: "消息发送失败,设备掉线",
|
||||
31407: "消息发送失败,接收超时",
|
||||
31408: "打印机参数列表为空",
|
||||
31409: "打印机SN号超过最大500个的限制",
|
||||
31410: "添加的SN号有重复",
|
||||
31411: "设备已绑定其他商户",
|
||||
31412: "设备已绑定",
|
||||
31413: "设备密钥错误",
|
||||
31414: "无效设备SN编码",
|
||||
31415: "打印请求记录不存在",
|
||||
31416: "音量参数无效",
|
||||
31417: "浓度参数无效",
|
||||
31418: "设备未绑定",
|
||||
31419: "无效的打印速度参数",
|
||||
1019: " 依具体错误情况返回", //传参数不合法通用异常编码,如缺少必填请求参数,参数值超范围等等
|
||||
1021: " 数据格式转换错误",
|
||||
}
|
||||
|
||||
type BaseReq struct {
|
||||
AppID string `json:"appid"` //应用ID
|
||||
Uid string `json:"uid"` //请求唯一ID,只能用来请求一次,不可以重复
|
||||
STime string `json:"stime"` //timestamp,请求时间戳,精确秒(UTC+8)
|
||||
Sign string `json:"sign"` //签名 md5(uid+appid+stime+appsecrect+请求Json内容)
|
||||
}
|
||||
|
||||
type TIResponse struct {
|
||||
HttpStatusCode int `json:"httpStatusCode"`
|
||||
BaseRes *BaseResp `json:"base_res"`
|
||||
}
|
||||
type BaseResp struct {
|
||||
Code int `json:"code"` //响应码
|
||||
Message string `json:"message"` //响应码对应说明
|
||||
Data interface{} `json:"data"` //操作结果
|
||||
}
|
||||
|
||||
//增加打印机 list
|
||||
type AddPrinterReq struct {
|
||||
Sn string `json:"sn"` //打印机编号
|
||||
Key string `json:"key"` //设备密钥
|
||||
//非必填
|
||||
Name string `json:"name"` //设备名称或备注
|
||||
Lang int `json:"lang"` //优先使用语言 13-拉丁文;16-中文; 只有设备支持对应语言时才生效,不支持时使用默认设置
|
||||
}
|
||||
type AddPrinterResp struct {
|
||||
FailItem []FailItem
|
||||
}
|
||||
|
||||
//批量操作时的错误返回
|
||||
type FailItem struct {
|
||||
Sn string `json:"sn"`
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
//修改打印机信息
|
||||
type EditPrinterReq struct {
|
||||
Sn string `json:"sn"`
|
||||
Name string `json:"name"`
|
||||
Lang string `json:"lang"`
|
||||
}
|
||||
|
||||
//查询打印机状态
|
||||
type GetDeviceStatusReq struct {
|
||||
Sn string `json:"sn"`
|
||||
}
|
||||
|
||||
//设置打印机浓度
|
||||
type SetDensityReq struct {
|
||||
Sn string `json:"sn"`
|
||||
Density int `json:"density"` //4 较淡 5 普通 6 较浓(默认) 7 浓
|
||||
}
|
||||
|
||||
//设置打印机音量
|
||||
type SetVolumeReq struct {
|
||||
Sn string `json:"sn"`
|
||||
Volume int `json:"volume"` //1~5 值越大声越大 (默认5)
|
||||
}
|
||||
|
||||
//打印小票
|
||||
type PrintReq struct {
|
||||
Sn string `json:"sn"`
|
||||
//非必填
|
||||
Voice string `json:"voice"` //播报音源,不传参数视为不播报语音,只打印小票;
|
||||
VoicePlayTimes int `json:"voicePlayTimes"` //默认播报1次 1-3
|
||||
VoicePlayInterval int `json:"voicePlayInterval"` //默认3秒 1-10
|
||||
Content string `json:"content"` //最大支持6000字节打印内容
|
||||
Copies int `json:"copies"` //不传默认1, 取值范围: 1~5
|
||||
}
|
||||
|
||||
type PrintResp struct {
|
||||
PrintID string `json:"printId"`
|
||||
QueueSize string `json:"queueSize"`
|
||||
}
|
||||
106
platformapi/trenditapi/trendit_test.go
Normal file
106
platformapi/trenditapi/trendit_test.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package trenditapi
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var api = New(TiAppID, TiAppSecret)
|
||||
|
||||
func TestLen(t *testing.T) {
|
||||
str := "--------------------------------"
|
||||
fmt.Println(len(str))
|
||||
}
|
||||
|
||||
//打印
|
||||
func TestAPI_Print(t *testing.T) {
|
||||
content := `<C><font# bolder=1 height=2 width=2>美团外卖</font#></C>
|
||||
<font# bolder=1 height=1 width=1>--------------------------------</font#>
|
||||
<LEFT>下单时间:2023-03-27 13:22:05</LEFT>
|
||||
<LEFT>期望送达:2023-03-27 14:22:05</LEFT>
|
||||
<LEFT>客户姓名:梅朵(女士)</LEFT>
|
||||
<LEFT>客户电话:163473526172</LEFT>
|
||||
<LEFT><font# bolder=0 height=2 width=1>订单编号: E22092832084572779</font#></LEFT><BR>
|
||||
<C><font# bolder=1 height=2 width=2>美团外卖#20</font#></C>
|
||||
<C><BAR>E22092832084572779</BAR></C>
|
||||
<C><font# bolder=1 height=1 width=1>--------------------------------</font#></C>
|
||||
<LEFT><font# bolder=0 height=2 width=1>客户地址:四川省成都市武侯区双流县金华镇芳草街道小区5栋1单元104号</font#></LEFT>
|
||||
<C><font# bolder=0 height=1 width=1>--------------------------------</font#></C>
|
||||
<LEFT><font# bolder=0 height=2 width=1>客户备注:缺货时电话与我沟通 收货人隐私号17882904902——5355,手机号 181****6752</font#></LEFT>
|
||||
<font# bolder=1 height=1 width=1>--------------------------------</font#>
|
||||
<LEFT>商品列表</LEFT><BR>`
|
||||
content += "商品名" + StrRepeat(" ", 3) + "数量" + StrRepeat(" ", 4) + "单价" + StrRepeat(" ", 6) + "小计" + "<BR>"
|
||||
content += `--------------------------------`
|
||||
content += FormatPrintOrderItem("[优]猪肉馅约250g/份", 1, 999)
|
||||
content += FormatPrintOrderItem("鲜鸡蛋约250g/份", 1, 17.8)
|
||||
content += FormatPrintOrderItem("豌豆米-手工剥豆约100g/份", 1, 40)
|
||||
content += FormatPrintOrderItem("娃娃菜200g/个", 5, 2)
|
||||
content += `<LEFT>共4种9件商品
|
||||
实付金额: 327.83元</LEFT><BR>
|
||||
<font# bolder=0 height=1 width=1>--------------#20完-------------</font#>`
|
||||
msg, err := api.Print(TestSn, content, VoiceNewShort)
|
||||
fmt.Println(msg)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//打印取消/退货模板
|
||||
func TestAPI_Print2(t *testing.T) {
|
||||
content := `<C><font# bolder=1 height=2 width=2>京西菜市</font#></C><BR>`
|
||||
content += StrRepeat("-", 32) + `
|
||||
<LEFT><font# bolder=1 height=1 width=1>下单时间:2023-03-27 13:22:05</font#></LEFT>
|
||||
<LEFT><font# bolder=0 height=2 width=1>订单编号: E22092832084572779</font#></LEFT><BR>
|
||||
<font# bolder=1 height=2 width=2>美团外卖#20</font#>
|
||||
<font# bolder=1 height=2 width=2>取消订单</font#>
|
||||
<font# bolder=1 height=1 width=1>--------------------------------</font#>`
|
||||
content += `<LEFT><font# bolder=1 height=2 width=1>共4种9件商品</font#></LEFT>
|
||||
<LEFT><font# bolder=1 height=2 width=1>实付金额: 327.83元</font#></LEFT><BR>
|
||||
<font# bolder=0 height=1 width=1>--------------#20完-------------</font#>`
|
||||
msg, err := api.Print(TestSn, content, VoiceCancelShort)
|
||||
fmt.Println(msg)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//增加打印机
|
||||
func TestAddPrinter(t *testing.T) {
|
||||
err := api.AddPrinter(TestSn, TestKey, "京西菜市打印机0327")
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//修改打印机信息
|
||||
func TestEditPrinter(t *testing.T) {
|
||||
msg, err := api.EditPrinter("763675325672", "京西菜市打印机v2")
|
||||
fmt.Println(msg)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//删除打印机
|
||||
func TestAPI_DelPrinter(t *testing.T) {
|
||||
err := api.DelPrinter([]string{TestSn})
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//设置打印浓度
|
||||
func TestAPI_SetDensity(t *testing.T) {
|
||||
err := api.SetDensity(TestSn, DensityStronger)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//设置音量
|
||||
func TestAPI_SetVolume(t *testing.T) {
|
||||
err := api.SetVolume(TestSn, Volume1)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//查询打印机状态
|
||||
func TestGetDevicesStatus(t *testing.T) {
|
||||
onlineStatus, workStatus, err := api.GetDeviceStatus(TestSn)
|
||||
fmt.Println(onlineStatus)
|
||||
fmt.Println(workStatus)
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
//清空设备待打印队列
|
||||
func TestAPI_CleanWaitingQueue(t *testing.T) {
|
||||
err := api.CleanWaitingQueue(TestSn)
|
||||
fmt.Println(err)
|
||||
}
|
||||
157
platformapi/trenditapi/trenditapi.go
Normal file
157
platformapi/trenditapi/trenditapi.go
Normal file
@@ -0,0 +1,157 @@
|
||||
package trenditapi
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/platformapi"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"io/ioutil"
|
||||
r "math/rand"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type API struct {
|
||||
locker sync.RWMutex
|
||||
accessToken string
|
||||
|
||||
appID string
|
||||
appSecret string
|
||||
client *http.Client
|
||||
config *platformapi.APIConfig
|
||||
}
|
||||
|
||||
func New(appID, appSecret string, config ...*platformapi.APIConfig) *API {
|
||||
curConfig := platformapi.DefAPIConfig
|
||||
if len(config) > 0 {
|
||||
curConfig = *config[0]
|
||||
}
|
||||
return &API{
|
||||
appID: appID,
|
||||
appSecret: appSecret,
|
||||
client: &http.Client{Timeout: curConfig.ClientTimeout},
|
||||
config: &curConfig,
|
||||
}
|
||||
}
|
||||
|
||||
//生成BaseReq
|
||||
func (a *API) GenBaseReq(bizParams interface{}) *BaseReq {
|
||||
//生成通用参数
|
||||
uid := utils.Time2Str(time.Now()) + RandString()
|
||||
timestamp := utils.Int64ToStr(time.Now().Unix())
|
||||
return &BaseReq{
|
||||
AppID: a.appID,
|
||||
Uid: uid,
|
||||
STime: timestamp,
|
||||
Sign: a.sign(uid, timestamp, "bizParams"),
|
||||
}
|
||||
}
|
||||
|
||||
//生成随机字符串
|
||||
func RandString() string {
|
||||
bytes := make([]byte, 16)
|
||||
for i := 0; i < 16; i++ {
|
||||
b := r.Intn(26) + 65
|
||||
bytes[i] = byte(b)
|
||||
}
|
||||
return string(bytes)
|
||||
}
|
||||
|
||||
func (a *API) sign(uid, timestamp string, param string) (sign string) {
|
||||
aa := uid + a.appID + timestamp + a.appSecret + param
|
||||
return fmt.Sprintf("%x", md5.Sum([]byte(aa)))
|
||||
}
|
||||
|
||||
func (a *API) HttpPostJson(url string, data interface{}) *TIResponse {
|
||||
//序列化参数
|
||||
b, err := json.Marshal(&data)
|
||||
if err != nil {
|
||||
var msg = fmt.Sprintf("json serialize err:%+v", err)
|
||||
fmt.Println(msg)
|
||||
result := TIResponse{
|
||||
HttpStatusCode: 500,
|
||||
}
|
||||
return &result
|
||||
}
|
||||
|
||||
fullUrl := utils.GenerateGetURL(BaseUrl, url, nil)
|
||||
|
||||
request, err := http.NewRequest(http.MethodPost, fullUrl, strings.NewReader(string(b)))
|
||||
client := &http.Client{}
|
||||
timestamp := utils.Int64ToStr(time.Now().Unix())
|
||||
uid := timestamp + RandString()
|
||||
sign := a.sign(uid, timestamp, string(b))
|
||||
|
||||
request.Header.Set("Content-Type", "application/json;charset=UTF-8")
|
||||
request.Header.Set("appid", a.appID)
|
||||
request.Header.Set("uid", uid)
|
||||
request.Header.Set("stime", timestamp)
|
||||
request.Header.Set("sign", sign)
|
||||
|
||||
resp, err := client.Do(request)
|
||||
//resp, err := http.Post(utils.GenerateGetURL(BaseUrl, url, nil), "application/json;charset=UTF-8", bytes.NewBuffer(b))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
var msg = fmt.Sprintf("post json error:%+v", err)
|
||||
fmt.Println(msg)
|
||||
}
|
||||
|
||||
result := TIResponse{
|
||||
HttpStatusCode: resp.StatusCode,
|
||||
}
|
||||
|
||||
var content BaseResp
|
||||
err = json.Unmarshal(body, &content)
|
||||
if err == nil {
|
||||
result.BaseRes = &content
|
||||
} else {
|
||||
var msg = fmt.Sprintf("unmarshal body failed, error:%+v", err)
|
||||
fmt.Println(msg)
|
||||
}
|
||||
|
||||
return &result
|
||||
}
|
||||
|
||||
func StrRepeat(str string, repeatTimes int) string {
|
||||
return strings.Repeat(str, repeatTimes)
|
||||
}
|
||||
|
||||
func CalcAsciiLenForPrint(data string) int {
|
||||
return len(data)
|
||||
}
|
||||
|
||||
func FormatPrintOrderItemBig(foodName string, quantity int, price float64) string {
|
||||
orderNameEmpty := StrRepeat(" ", 8)
|
||||
quantityStr := strconv.Itoa(quantity)
|
||||
temprice := price / 100
|
||||
priceStr := fmt.Sprintf("%.2f", temprice)
|
||||
subtotalStr := fmt.Sprintf("%.2f", utils.Int2Float64(quantity)*temprice)
|
||||
result := `<font# bolder=1 height=2 width=1>` + foodName + "</font#><BR>"
|
||||
result += `<font# bolder=1 height=2 width=1>` + orderNameEmpty + "x" + quantityStr + `</font#><font# bolder=0 height=1 width=1> </font#>`
|
||||
result += `<font# bolder=1 height=2 width=1>` + "¥" + priceStr + `</font#><font# bolder=0 height=1 width=1> </font#>`
|
||||
result += `<font# bolder=1 height=2 width=1>` + "¥" + subtotalStr + `</font#>`
|
||||
//result += "<BR>"
|
||||
return result
|
||||
}
|
||||
|
||||
func FormatPrintOrderItem(foodName string, quantity int, price float64) string {
|
||||
orderNameEmpty := StrRepeat(" ", 8)
|
||||
quantityStr := strconv.Itoa(quantity)
|
||||
temprice := price / 100
|
||||
priceStr := fmt.Sprintf("%.2f", temprice)
|
||||
subtotalStr := fmt.Sprintf("%.2f", utils.Int2Float64(quantity)*temprice)
|
||||
result := foodName + "<BR>"
|
||||
result += orderNameEmpty + "x" + quantityStr + `<font# bolder=0 height=1 width=1> </font#>`
|
||||
result += "¥" + priceStr + `<font# bolder=0 height=1 width=1> </font#>`
|
||||
result += "¥" + subtotalStr
|
||||
result += "<BR>"
|
||||
return result
|
||||
}
|
||||
@@ -21,7 +21,7 @@ var api = New(UserName, UserKey)
|
||||
//测试格式化商品列表
|
||||
func TestFormatPrintOrderItem(t *testing.T) {
|
||||
|
||||
str := FormatPrintOrderItem("测试商品名字", 100, 8.78)
|
||||
str := "鱼不用杀😁【如遇缺货】:缺货时电话与我沟通 收货人隐私号 17882960804_9913,手机号 191****1675"
|
||||
fmt.Println(str)
|
||||
request := &PrintRequest{
|
||||
RestRequest: api.GenerateRestRequest(),
|
||||
@@ -37,7 +37,7 @@ func TestFormatPrintOrderItem(t *testing.T) {
|
||||
}
|
||||
func TestPrint(t *testing.T) {
|
||||
printContent := ""
|
||||
printContent = printContent + "<IMG></IMG><BR><C>" + "<B>京西菜市</B>" + "<BR></C>"
|
||||
printContent = printContent + "<IMG></IMG><RH n=\"1\"><C>" + "<B>京西菜市</B>" + "</RH><BR></C>"
|
||||
printContent += StrRepeat("-", 32)
|
||||
printContent += "<BR><L>下单时间:2023-03-16 15:30:28"
|
||||
printContent += "<BR><L>预计送达:2023-03-16 16:30:28"
|
||||
|
||||
Reference in New Issue
Block a user