- 支持易联云开放应用
This commit is contained in:
@@ -2,7 +2,11 @@ package netprinter
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
|
||||
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"git.rosy.net.cn/jx-callback/business/partner"
|
||||
|
||||
"git.rosy.net.cn/jx-callback/business/jxutils"
|
||||
@@ -91,3 +95,88 @@ func GetHandlerFromStore(store *model.Store) (printerHandler partner.IPrinterHan
|
||||
}
|
||||
return printerHandler, nil
|
||||
}
|
||||
|
||||
func BindPrinter(ctx *jxcontext.Context, storeID int, data string) (printResult *partner.PrinterStatus, err error) {
|
||||
store := &model.Store{}
|
||||
store.ID = storeID
|
||||
db := dao.GetDB()
|
||||
if err = dao.GetEntity(db, store); err == nil {
|
||||
var mapData map[string]interface{}
|
||||
if err = utils.UnmarshalUseNumber([]byte(data), &mapData); err == nil {
|
||||
printerVendorID := model.VendorIDUnknown
|
||||
if mapData["machineCode"] != nil {
|
||||
printerVendorID = model.VendorIDYiLianYun
|
||||
}
|
||||
if handler := partner.GetPrinterPlatformFromVendorID(printerVendorID); handler != nil {
|
||||
if store.PrinterVendorID > 0 && store.PrinterVendorID != printerVendorID && store.PrinterBindInfo == "" {
|
||||
err = fmt.Errorf("门店:%d已经绑定了%s打印机,如果需要重新绑定,请联系运营先解绑", storeID, model.VendorChineseNames[store.PrinterVendorID])
|
||||
} else {
|
||||
bindResult, err2 := handler.BindPrinter(ctx, mapData)
|
||||
if err = err2; err == nil {
|
||||
store.PrinterVendorID = printerVendorID
|
||||
store.PrinterSN = bindResult.PrinterSN
|
||||
store.PrinterKey = bindResult.PrinterKey
|
||||
store.PrinterBindInfo = string(utils.MustMarshal(bindResult))
|
||||
if _, err = dao.UpdateEntity(db, store); err == nil {
|
||||
printResult, err = handler.GetPrinterStatus(ctx, bindResult.PrinterSN, bindResult.PrinterKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
err = fmt.Errorf("打印机类型:%d当前不支持", printerVendorID)
|
||||
}
|
||||
}
|
||||
}
|
||||
return printResult, err
|
||||
}
|
||||
|
||||
func RebindAllPrinters(ctx *jxcontext.Context, isForce, isAsync bool) (hint string, err error) {
|
||||
storeList, err := dao.GetRebindPrinterStoreList(dao.GetDB())
|
||||
if err == nil {
|
||||
var needRebindList []*model.Store
|
||||
bindResultMap := make(map[int]*partner.BindPrinterResult)
|
||||
now := time.Now()
|
||||
for _, v := range storeList {
|
||||
var bindResult partner.BindPrinterResult
|
||||
if err = utils.UnmarshalUseNumber([]byte(v.PrinterBindInfo), &bindResult); err == nil {
|
||||
if isForce || now.Sub(utils.Timestamp2Time(bindResult.ExpiresIn)) > -24*time.Hour {
|
||||
needRebindList = append(needRebindList, v)
|
||||
bindResultMap[v.ID] = &bindResult
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(needRebindList) > 0 {
|
||||
db := dao.GetDB()
|
||||
task := tasksch.NewSeqTask("RebindAllPrinters", ctx,
|
||||
func(task *tasksch.SeqTask, step int, params ...interface{}) (result interface{}, err error) {
|
||||
store := needRebindList[step]
|
||||
if handler := partner.GetPrinterPlatformFromVendorID(store.PrinterVendorID); handler != nil {
|
||||
bindResult, err2 := handler.RebindPrinter(ctx, bindResultMap[store.ID])
|
||||
if err = err2; err == nil {
|
||||
store.PrinterSN = bindResult.PrinterSN
|
||||
store.PrinterKey = bindResult.PrinterKey
|
||||
store.PrinterBindInfo = string(utils.MustMarshal(bindResult))
|
||||
if _, err = dao.UpdateEntity(db, store); err == nil {
|
||||
result = []int{1}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
globals.SugarLogger.Warnf("RebindAllPrinters strange PrinterVendorID:%d", store.PrinterVendorID)
|
||||
}
|
||||
return result, err
|
||||
}, len(needRebindList))
|
||||
|
||||
tasksch.ManageTask(task).Run()
|
||||
if !isAsync {
|
||||
hint = task.GetID()
|
||||
} else {
|
||||
result, err2 := task.GetResult(0)
|
||||
if err = err2; err == nil {
|
||||
hint = utils.Int2Str(len(result))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return hint, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user