Files
baseapi/platformapi/jxprintapi/jxprintapi.go
邹宗楠 7213c0470c 1
2025-12-24 15:14:45 +08:00

232 lines
7.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package jxprintapi
import (
"crypto/md5"
"encoding/json"
"fmt"
"git.rosy.net.cn/baseapi/platformapi"
"git.rosy.net.cn/baseapi/utils"
"net/http"
"strings"
"time"
)
const (
prodURL = "http://api.jxc4.com/openapi/CallOpenAPI" // 老版本的URL
prodURLNew = "http://print.jxcs.net/v2/openapi/CallOpenAPI" // 新版本的URL
signKey = "sign"
)
const (
// ResponseCodeSuccess 操作成功
ResponseCodeSuccess = 0
)
const (
PrinterStatusStrOffline = "离线。"
PrinterStatusStrOnlineOK = "在线,工作状态正常。"
PrinterStatusStrOnlineAbnormal = "在线,工作状态不正常。"
PrinterStatusUnknown = 0
PrinterStatusOffline = -1
PrinterStatusOnlineOK = 1
PrinterStatusOnlineAbnormal = 2
)
var (
printStatusMap = map[string]int{
PrinterStatusStrOffline: PrinterStatusOffline,
PrinterStatusStrOnlineOK: PrinterStatusOnlineOK,
PrinterStatusStrOnlineAbnormal: PrinterStatusOnlineAbnormal,
}
)
type API struct {
platformapi.APICookie
appID string
appKey string
client *http.Client
config *platformapi.APIConfig
}
func New(appID, appKey string, config ...*platformapi.APIConfig) *API {
curConfig := platformapi.DefAPIConfig
if len(config) > 0 {
curConfig = *config[0]
}
return &API{
appID: appID,
appKey: appKey,
client: &http.Client{Timeout: curConfig.ClientTimeout},
config: &curConfig,
}
}
func (a *API) signParams(apiParams map[string]interface{}) string {
return fmt.Sprintf("%x", md5.Sum([]byte(a.appID+a.appKey+apiParams["timestamp"].(string))))
}
func (a *API) AccessAPI(apiName string, apiParams map[string]interface{}) (retVal map[string]interface{}, err error) {
params := utils.MergeMaps(map[string]interface{}{
"app_id": a.appID,
"method": apiName,
}, apiParams)
err = platformapi.AccessPlatformAPIWithRetry(a.client,
func() *http.Request {
params["timestamp"] = utils.Int64ToStr(time.Now().Unix())
sign := a.signParams(params)
params[signKey] = sign
fullURL := prodURLNew
request, _ := http.NewRequest(http.MethodPost, fullURL, strings.NewReader(utils.Map2URLValues(params).Encode()))
request.Header.Set("charset", "UTF-8")
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
return request
},
a.config,
func(response *http.Response, bodyStr string, jsonResult1 map[string]interface{}) (errLevel string, err error) {
if jsonResult1 == nil {
return platformapi.ErrLevelRecoverableErr, fmt.Errorf("mapData is nil")
}
code := int(utils.Interface2Int64WithDefault(jsonResult1["code"], ResponseCodeSuccess))
if code == ResponseCodeSuccess {
retVal = jsonResult1
return platformapi.ErrLevelSuccess, nil
}
newErr := utils.NewErrorIntCode(jsonResult1["desc"].(string), code)
return platformapi.ErrLevelCodeIsNotOK, newErr
})
return retVal, err
}
type AddPrinterParam struct {
PrintNo string `json:"print_no"` //打印机编号
Name string `json:"name"` //打印机备注名
SIM string `json:"sim"` //sim卡号-电话号码,接受验证的电话
StoreId int64 `json:"store_id"` // 门店id
}
func (a *API) AddPrinter(addPrinterParams []*AddPrinterParam) (err error) {
data, _ := json.Marshal(addPrinterParams)
_, err = a.AccessAPI("AddPrinter", map[string]interface{}{
"prints": string(data),
})
return err
}
func (a *API) DelPrinter(printNos []string, storeId string) (err error) {
data, _ := json.Marshal(printNos)
_, err = a.AccessAPI("DelPrinter", map[string]interface{}{
"print_nos": string(data),
"storeId": storeId,
})
return err
}
type UpdatePrinterParam struct {
PrintNo string `json:"print_no"` //打印机编号
Name string `json:"name,omitempty"` //打印机备注名
//SIM string `json:"sim,omitempty"` //sim卡号
Sound string `json:"sound,omitempty"`
Volume int `json:"volume,omitempty"`
}
func (a *API) UpdatePrinter(updatePrinterParam *UpdatePrinterParam) (err error) {
_, err = a.AccessAPI("UpdatePrinter", utils.Struct2FlatMap(updatePrinterParam))
return err
}
func (a *API) DelPrinterSeq(printNo string) (err error) {
_, err = a.AccessAPI("DelPrinterSeq", map[string]interface{}{
"print_no": printNo,
})
return err
}
type GetPrintMsgResult struct {
MsgID string `json:"msg_id"`
PrintNo string `json:"print_no"`
OrderNo int `json:"order_no"`
Content string `json:"content"`
Status int `json:"status"`
Comment string `json:"comment"`
}
func (a *API) GetPrintMsg(msgID string) (getPrintMsgResult *GetPrintMsgResult, err error) {
result, err := a.AccessAPI("GetPrintMsg", map[string]interface{}{
"msg_id": msgID,
})
if err == nil {
utils.Map2StructByJson(result["data"].(map[string]interface{}), &getPrintMsgResult, false)
}
return getPrintMsgResult, err
}
func (a *API) GetPrinterStatus(printNo string) (status int64, err error) {
result, err := a.AccessAPI("GetPrinterStatus", map[string]interface{}{
"print_no": printNo,
})
if err == nil {
status = utils.Interface2Int64WithDefault(result["data"], 0)
}
return status, err
}
func (a *API) DoPrint(printNo, content string, orderNo int) (msgID string, err error) {
content = utils.FilterMb4(content)
result, err := a.AccessAPI("DoPrint", map[string]interface{}{
"print_no": printNo,
"content": content,
"order_no": orderNo,
})
if err == nil {
msgID = result["data"].(string)
}
return msgID, err
}
func (a *API) GetPrintList(printNo, printKey string, status, isOnline int, page, size int) ([]*PrintList, int64, error) {
result, err := a.AccessAPI("QueryPrintList", map[string]interface{}{
"print_no": printNo,
"print_key": printKey,
"status": status,
"is_online": isOnline,
"page": page,
"size": size,
})
if err != nil {
return nil, 0, err
}
list := result["data"].(map[string]interface{})
printList := make([]*PrintList, 0, 0)
byteDate, err := json.Marshal(list["printList"].([]interface{}))
if err != nil {
return nil, 0, err
}
if err = json.Unmarshal(byteDate, &printList); err != nil {
return nil, 0, err
}
return printList, utils.MustInterface2Int64(list["count"]), nil
}
type PrintList struct {
ID int `orm:"column(id)" json:"id"`
CreatedAt string `orm:"auto_now_add;type(datetime)" json:"createdAt"`
UpdatedAt string `orm:"auto_now;type(datetime)" json:"updatedAt"`
DeletedAt string `orm:"type(datetime);null" json:"deletedAt"`
LastOperator string `orm:"size(32)" json:"lastOperator"` // 最后操作员
AppID int `orm:"column(app_id)" json:"app_id" db:"app_id"` //应用编号
PrintNo string `json:"print_no" db:"print_no"` //打印机编号
PrintKey string `json:"print_key" db:"print_key"` //打印机识别码
Name string `json:"name" db:"name"` //打印机备注名
Status int `json:"status" db:"status"` //打印机状态
IsOnline int `json:"is_online" db:"is_online"` //1在线0离线
IccID string `orm:"column(icc_id)" json:"iccid" db:"icc_id"` //sim卡号
Sound string `json:"sound" db:"sound"` //声音类型 sounda ,b,c,d,e,f,g
Volume int `json:"volume" db:"volume"` //音量1-5 对应打印机2-10
FlowFlag int `json:"flowFlag" db:"flow_flag"` //是否超流量了1表示超了
OfflineCount int `json:"offlineCount" db:"offline_count"` //掉线次数
UserId string `json:"user_id" db:"user_id"` //打印机所属用户
}