- 支持易联云开放应用

This commit is contained in:
gazebo
2019-07-11 10:41:45 +08:00
parent e8f93aed2d
commit 630f1b02e6
15 changed files with 249 additions and 61 deletions

View File

@@ -0,0 +1,52 @@
package partner
import (
"fmt"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/model"
)
type BindPrinterResult struct {
PrinterSN string
PrinterKey string
PrinterKey2 string
ExpiresIn int64 `json:"expires_in"`
}
type IPrinterHandler interface {
GetVendorID() int
PrintMsg(ctx *jxcontext.Context, id1, id2, msgTitle, msgContent string) (printerStatus *PrinterStatus, err error)
GetPrinterStatus(ctx *jxcontext.Context, id1, id2 string) (printerStatus *PrinterStatus, err error)
RegisterPrinter(ctx *jxcontext.Context, id1, id2, printerName string) (newID1, newID2 string, err error)
UnregisterPrinter(ctx *jxcontext.Context, id1, id2 string) (err error)
BindPrinter(ctx *jxcontext.Context, mapData map[string]interface{}) (bindResult *BindPrinterResult, err error)
RebindPrinter(ctx *jxcontext.Context, lastBindResult *BindPrinterResult) (bindResult *BindPrinterResult, err error)
PrintOrder(ctx *jxcontext.Context, store *model.Store, order *model.GoodsOrder) (printerStatus *PrinterStatus, err error)
}
var (
PrinterPlatformHandlers map[int]IPrinterHandler
)
func init() {
PrinterPlatformHandlers = make(map[int]IPrinterHandler)
}
func RegisterPrinterPlatform(handler IPrinterHandler) {
vendorID := handler.GetVendorID()
if !(model.IsPrinterVendorExist(vendorID)) {
panic(fmt.Sprintf("printer vendor:%d is illegal", vendorID))
}
if _, ok := PrinterPlatformHandlers[vendorID]; ok {
panic(fmt.Sprintf("printer vendor:%d, already exists", vendorID))
}
PrinterPlatformHandlers[vendorID] = handler
}
func GetPrinterPlatformFromVendorID(vendorID int) IPrinterHandler {
return PrinterPlatformHandlers[vendorID]
}

View File

@@ -123,7 +123,6 @@ var (
PurchasePlatformHandlers map[int]IPurchasePlatformHandler
DeliveryPlatformHandlers map[int]*DeliveryPlatformHandlerInfo
UseableDeliveryVendorIDs []int
PrinterPlatformHandlers map[int]IPrinterHandler
)
type IOrderManager interface {
@@ -279,17 +278,6 @@ type IDeliveryPlatformHandler interface {
GetWaybillFee(order *model.GoodsOrder) (deliveryFeeInfo *WaybillFeeInfo, err error)
}
type IPrinterHandler interface {
GetVendorID() int
PrintMsg(ctx *jxcontext.Context, id1, id2, msgTitle, msgContent string) (printerStatus *PrinterStatus, err error)
GetPrinterStatus(ctx *jxcontext.Context, id1, id2 string) (printerStatus *PrinterStatus, err error)
RegisterPrinter(ctx *jxcontext.Context, id1, id2, printerName string) (newID1, newID2 string, err error)
UnregisterPrinter(ctx *jxcontext.Context, id1, id2 string) (err error)
PrintOrder(ctx *jxcontext.Context, store *model.Store, order *model.GoodsOrder) (printerStatus *PrinterStatus, err error)
}
type DeliveryPlatformHandlerInfo struct {
Handler IDeliveryPlatformHandler
Use4CreateWaybill bool
@@ -305,7 +293,6 @@ func (p *BasePurchasePlatform) GetStatusActionTimeout(order *model.GoodsOrder, s
func init() {
PurchasePlatformHandlers = make(map[int]IPurchasePlatformHandler)
DeliveryPlatformHandlers = make(map[int]*DeliveryPlatformHandlerInfo)
PrinterPlatformHandlers = make(map[int]IPrinterHandler)
}
func InitOrderManager(curOrderManager IOrderManager) {
@@ -342,17 +329,6 @@ func RegisterDeliveryPlatform(handler IDeliveryPlatformHandler, isUse4CreateWayb
UseableDeliveryVendorIDs = append(UseableDeliveryVendorIDs, vendorID)
}
func RegisterPrinterPlatform(handler IPrinterHandler) {
vendorID := handler.GetVendorID()
if !(model.IsPrinterVendorExist(vendorID)) {
panic(fmt.Sprintf("printer vendor:%d is illegal", vendorID))
}
if _, ok := PrinterPlatformHandlers[vendorID]; ok {
panic(fmt.Sprintf("printer vendor:%d, already exists", vendorID))
}
PrinterPlatformHandlers[vendorID] = handler
}
func GetPurchasePlatformFromVendorID(vendorID int) IPurchasePlatformHandler {
return PurchasePlatformHandlers[vendorID]
}
@@ -360,7 +336,3 @@ func GetPurchasePlatformFromVendorID(vendorID int) IPurchasePlatformHandler {
func GetDeliveryPlatformFromVendorID(vendorID int) *DeliveryPlatformHandlerInfo {
return DeliveryPlatformHandlers[vendorID]
}
func GetPrinterPlatformFromVendorID(vendorID int) IPrinterHandler {
return PrinterPlatformHandlers[vendorID]
}

View File

@@ -161,3 +161,11 @@ func (c *PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, printerSN, no
_, _, err = api.FeieAPI.PrinterDelList([]string{printerSN})
return err
}
func (c *PrinterHandler) BindPrinter(ctx *jxcontext.Context, mapData map[string]interface{}) (bindResult *partner.BindPrinterResult, err error) {
return nil, fmt.Errorf("%s打印机当前不支持扫码绑定", model.VendorChineseNames[model.VendorIDFeiE])
}
func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *partner.BindPrinterResult) (bindResult *partner.BindPrinterResult, err error) {
return nil, fmt.Errorf("%s打印机当前不支持扫码绑定", model.VendorChineseNames[model.VendorIDFeiE])
}

View File

@@ -259,3 +259,11 @@ func escapeString4Printer(params []interface{}) []interface{} {
}
return params
}
func (c *PrinterHandler) BindPrinter(ctx *jxcontext.Context, mapData map[string]interface{}) (bindResult *partner.BindPrinterResult, err error) {
return nil, fmt.Errorf("%s打印机当前不支持扫码绑定", model.VendorChineseNames[model.VendorIDXiaoWM])
}
func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *partner.BindPrinterResult) (bindResult *partner.BindPrinterResult, err error) {
return nil, fmt.Errorf("%s打印机当前不支持扫码绑定", model.VendorChineseNames[model.VendorIDXiaoWM])
}

View File

@@ -99,11 +99,11 @@ func (c *PrinterHandler) GetVendorID() int {
return model.VendorIDYiLianYun
}
func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, machineCode, notUsed, msgTitle, msgContent string) (printerStatus *partner.PrinterStatus, err error) {
func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, machineCode, possibleToken, msgTitle, msgContent string) (printerStatus *partner.PrinterStatus, err error) {
globals.SugarLogger.Debugf("PrintMsg machineCode:%s", machineCode)
if machineCode != "" {
if err = api.YilianyunAPI.PrintMsg(machineCode, msgTitle, msgContent); err == nil {
printerStatus, err = c.GetPrinterStatus(ctx, machineCode, "")
if err = api.YilianyunAPI.PrintMsgWithToken(machineCode, msgTitle, msgContent, possibleToken); err == nil {
printerStatus, err = c.GetPrinterStatus(ctx, machineCode, possibleToken)
}
} else {
printerStatus = &partner.PrinterStatus{
@@ -113,8 +113,8 @@ func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, machineCode, notUsed,
return printerStatus, err
}
func (c *PrinterHandler) GetPrinterStatus(ctx *jxcontext.Context, machineCode, notUsed string) (printerStatus *partner.PrinterStatus, err error) {
status, err := api.YilianyunAPI.GetPrintStatus(machineCode)
func (c *PrinterHandler) GetPrinterStatus(ctx *jxcontext.Context, machineCode, possibleToken string) (printerStatus *partner.PrinterStatus, err error) {
status, err := api.YilianyunAPI.GetPrintStatusWithToken(machineCode, possibleToken)
if err == nil {
printerStatus = &partner.PrinterStatus{
PrintResult: partner.PrintResultSuccess,
@@ -133,7 +133,7 @@ func (c *PrinterHandler) GetPrinterStatus(ctx *jxcontext.Context, machineCode, n
func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) {
globals.SugarLogger.Debugf("yilianyun PrintOrderByOrder orderID:%s", order.VendorOrderID)
content := c.getOrderContent(order, store.Tel1)
return c.PrintMsg(ctx, store.PrinterSN, "", order.VendorOrderID, content)
return c.PrintMsg(ctx, store.PrinterSN, store.PrinterKey, order.VendorOrderID, content)
}
func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, machineCode, secret, printerName string) (notUsed1, notUsed2 string, err error) {
@@ -145,3 +145,33 @@ func (c *PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, machineCode,
err = api.YilianyunAPI.DeletePrinter(machineCode)
return err
}
func (c *PrinterHandler) BindPrinter(ctx *jxcontext.Context, mapData map[string]interface{}) (bindResult *partner.BindPrinterResult, err error) {
machineCode := utils.Interface2String(mapData["machineCode"])
qrKey := utils.Interface2String(mapData["qrKey"])
if machineCode == "" || qrKey == "" {
return nil, fmt.Errorf("易联云扫描数据格式不正确")
}
tokenInfo, err := api.YilianyunAPI2.GetPrinterToken(machineCode, qrKey)
if err != nil {
return nil, err
}
return yilianyunToken2BindResult(tokenInfo), nil
}
func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *partner.BindPrinterResult) (bindResult *partner.BindPrinterResult, err error) {
tokenInfo, err := api.YilianyunAPI2.RefreshToken(lastBindResult.PrinterKey2)
if err == nil {
bindResult = yilianyunToken2BindResult(tokenInfo)
}
return bindResult, err
}
func yilianyunToken2BindResult(tokenInfo *yilianyunapi.TokenInfo) (bindResult *partner.BindPrinterResult) {
return &partner.BindPrinterResult{
PrinterSN: tokenInfo.MachineCode,
PrinterKey: tokenInfo.AccessToken,
PrinterKey2: tokenInfo.RefreshToken,
ExpiresIn: tokenInfo.ExpiresIn,
}
}

View File

@@ -156,3 +156,11 @@ func (c *PrinterHandler) translateStatus(status int) (printerStatus *partner.Pri
}
return printerStatus
}
func (c *PrinterHandler) BindPrinter(ctx *jxcontext.Context, mapData map[string]interface{}) (bindResult *partner.BindPrinterResult, err error) {
return nil, fmt.Errorf("%s打印机当前不支持扫码绑定", model.VendorChineseNames[model.VendorIDZhongWu])
}
func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *partner.BindPrinterResult) (bindResult *partner.BindPrinterResult, err error) {
return nil, fmt.Errorf("%s打印机当前不支持扫码绑定", model.VendorChineseNames[model.VendorIDZhongWu])
}