package trendit import ( "fmt" "time" "git.rosy.net.cn/baseapi/platformapi/xpyunapi" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/baseapi/platformapi/trenditapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) var ( CurPrinterHandler *PrinterHandler ) type PrinterHandler struct { } func (p PrinterHandler) GetVendorID() int { return model.VendorIDTrendIT } func init() { CurPrinterHandler = new(PrinterHandler) partner.RegisterPrinterPlatform(CurPrinterHandler) } func (p PrinterHandler) PrintMsg(ctx *jxcontext.Context, sn, copies, voice, msgContent string) (printerStatus *partner.PrinterStatus, err error) { if sn != "" { //if globals.EnableStoreWrite { printOrderID, err1 := api.TrendITAPI.Print(sn, msgContent, voice) if err1 == nil && printOrderID != "" { printerStatus, err = p.GetPrinterStatus(ctx, sn, "") } // } //} else { // printerStatus = &partner.PrinterStatus{ // PrintResult: partner.PrintResultNoPrinter, // } } return printerStatus, err } func (p PrinterHandler) GetPrinterStatus(ctx *jxcontext.Context, sn, id2 string) (printerStatus *partner.PrinterStatus, err error) { if onlineStatus, workStatus, err := api.TrendITAPI.GetDeviceStatus(sn); err == nil { printerStatus = &partner.PrinterStatus{ PrintResult: partner.PrintResultSuccess, } tempOnline := utils.Float64TwoInt(onlineStatus) tempWork := utils.Float64TwoInt(workStatus) if tempOnline == trenditapi.OnlineStatus && (tempWork == trenditapi.WorkStatusReady || tempWork == trenditapi.WorkStatusPrinting) { printerStatus.PrinterStatus = partner.PrinterStatusOnlineOK } else if tempOnline == trenditapi.OfflineStatus { printerStatus.PrinterStatus = partner.PrinterStatusOffline } else if tempWork == trenditapi.WorkStatusPaperLack || tempWork == trenditapi.WorkStatusOverTemperature || tempWork == trenditapi.WorkStatusPrintFail { printerStatus.PrinterStatus = partner.PrinterStatusOnlineAbnormal } else { printerStatus.PrinterStatus = partner.PrinterStatusUnknown } } return printerStatus, err } func (p PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, sn, key, printerName string, soreId int64) (newID1, newID2 string, err error) { if globals.EnableStoreWrite { err = api.TrendITAPI.AddPrinter(sn, key, printerName) } //if strings.Contains(err.Error(), "设备已绑定") { // return "", "", errors.New("") //} return "", "", err } func (p PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, sn, id2 string) (err error) { if globals.EnableStoreWrite { err = api.TrendITAPI.DelPrinter([]string{sn}) } return err } func (p PrinterHandler) BindPrinter(ctx *jxcontext.Context, mapData map[string]interface{}) (bindResult *partner.BindPrinterResult, err error) { return nil, fmt.Errorf("%s打印机当前不支持扫码绑定", model.VendorChineseNames[model.VendorIDTrendIT]) } func (p PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *partner.BindPrinterResult) (bindResult *partner.BindPrinterResult, err error) { return nil, fmt.Errorf("%s打印机当前不支持扫码解绑", model.VendorChineseNames[model.VendorIDTrendIT]) } func (p PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder, printType string, asfOrder *model.AfsOrder) (printerStatus *partner.PrinterStatus, err error) { if len(order.Skus) == 0 { globals.SugarLogger.Debugf("order.sku为空") return } content := "" if store.ID == 669063 { if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { content = p.getOrderContentBig(order, store.Tel1, storeDetail) } else { content = p.getOrderContent(order, store.Tel1, storeDetail) } } else { if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { content = p.getOrderContentBigV2(order, store.Tel1, storeDetail) } else { content = p.getOrderContentV2(order, store.Tel1, storeDetail) } } count := 0 for { printerStatus, err := p.PrintMsg(ctx, store.PrinterSN, "", trenditapi.VoiceNewShort, content) if (store.PrinterFontSize == partner.PrinterFontSizeBig2 || store.PrinterFontSize == partner.PrinterFontSizeNormal2) && count < 1 { count += 1 continue } else { return printerStatus, err } } } func (p PrinterHandler) PrintStore(ctx *jxcontext.Context, store *model.Store, storeDetail *dao.StoreDetail, vendorId int) (printerStatus *partner.PrinterStatus, err error) { return nil, err } func (p PrinterHandler) PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) { if len(order.Skus) == 0 { return } content := "" voiceType := "" if printType == model.YES { // 取消订单 voiceType = trenditapi.VoiceCancel } else { // 售后订单 voiceType = trenditapi.VoiceRefund } if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 { content = p.getCancelOrRefundOrderContent(order, printType, storeDetail) } else { content = p.getCancelOrRefundOrderContentBig(order, printType, storeDetail) } if content == "" { return nil, nil } return p.PrintMsg(ctx, store.PrinterSN, "", voiceType, content) } func (p PrinterHandler) EmptyPrintList(ctx *jxcontext.Context, sn, id2 string) (err error) { if globals.EnableStoreWrite { err = api.TrendITAPI.CleanWaitingQueue(sn) } return err } func (p PrinterHandler) PlayText(ctx *jxcontext.Context, id1, id2, orderID, text string) (printerStatus *partner.PrinterStatus, err error) { return nil, err } func (p PrinterHandler) SetSound(ctx *jxcontext.Context, sn, id2, sound string) (err error) { if globals.EnableStoreWrite { err = api.TrendITAPI.SetVolume(sn, utils.Str2Int(sound)) } return err } //不包括价格版本 func (c *PrinterHandler) getOrderContentV2(order *model.GoodsOrder, storeTel string, storeDetail *dao.StoreDetail) (content string) { expectedDeliveryTime := order.ExpectedDeliveredTime if utils.IsTimeZero(expectedDeliveryTime) { expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour) } getCode := "" if order.VendorID == model.VendorIDEBAI { getCode = fmt.Sprintf("饿百取货码:%s", jxutils.GetEbaiOrderGetCode(order)) } if order.BuyerComment == "" { order.BuyerComment = "客户电话: " + order.ConsigneeMobile + ",配送遇到问题,可联系18048531223取消配送单,禁止未配送直接完成订单!" } orderParams := []interface{}{} orderFmt := `` if storeDetail != nil { if storeDetail.BrandIsPrint == model.NO { orderFmt += `%s` if order.VendorOrgCode == "34665" { orderParams = append(orderParams, globals.StoreNameEbai2) } else { orderParams = append(orderParams, storeDetail.BrandName) } } } orderFmt += ` -------------------------------- 下单时间: %s 期望送达: %s 客户姓名: %s 客户电话: %s 店铺名称: %s 订单编号: %s
%s#%d %s ` + getCode + `-------------------------------- 客户地址: %s -------------------------------- 客户备注:%s -------------------------------- 商品名` + trenditapi.StrRepeat(" ", 20) + `数量 ` + trenditapi.StrRepeat("-", 32) + ` ` orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, order.VendorOrderID, order.ConsigneeAddress, order.BuyerComment, ) for k, sku := range order.Skus { orderFmt += trenditapi.FormatPrintOrderItemV2(sku.SkuName, sku.Count, k+1) } orderFmt += `
共%d种%d件商品 --------------#%d完-------------` orderParams = append(orderParams, order.SkuCount, order.GoodsCount, order.OrderSeq) return fmt.Sprintf(orderFmt, orderParams...) } func (c *PrinterHandler) getOrderContentBigV2(order *model.GoodsOrder, storeTel string, storeDetail *dao.StoreDetail) (content string) { expectedDeliveryTime := order.ExpectedDeliveredTime if utils.IsTimeZero(expectedDeliveryTime) { expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour) } getCode := "" if order.VendorID == model.VendorIDEBAI { getCode = fmt.Sprintf("饿百取货码:%s", jxutils.GetEbaiOrderGetCode(order)) } if order.BuyerComment == "" { order.BuyerComment = "客户电话: " + order.ConsigneeMobile + ",配送遇到问题,可联系18048531223取消配送单,禁止未配送直接完成订单!" } orderParams := []interface{}{} orderFmt := `` if storeDetail != nil { if storeDetail.BrandIsPrint == model.NO { orderFmt += `%s` if order.VendorOrgCode == "34665" { orderParams = append(orderParams, globals.StoreNameEbai2) } else { orderParams = append(orderParams, storeDetail.BrandName) } } } orderFmt += ` -------------------------------- 下单时间: %s 期望送达: %s 客户姓名: %s 客户电话: %s 店铺名称: %s 订单编号: %s
%s#%d %s ` + getCode + `-------------------------------- 客户地址: %s -------------------------------- 客户备注:%s -------------------------------- 商品名` + trenditapi.StrRepeat(" ", 20) + `数量 ` + trenditapi.StrRepeat("-", 32) + ` ` orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, order.VendorOrderID, order.ConsigneeAddress, order.BuyerComment, ) for k, sku := range order.Skus { orderFmt += trenditapi.FormatPrintOrderItemBigV2(sku.SkuName, sku.Count, k+1) } orderFmt += `
共%d种%d件商品 --------------#%d完-------------` orderParams = append(orderParams, order.SkuCount, order.GoodsCount, order.OrderSeq) return fmt.Sprintf(orderFmt, orderParams...) } //打印单价版本 //正常尺寸打印模板 func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel string, storeDetail *dao.StoreDetail) (content string) { expectedDeliveryTime := order.ExpectedDeliveredTime if utils.IsTimeZero(expectedDeliveryTime) { expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour) } getCode := "" if order.VendorID == model.VendorIDEBAI { getCode = fmt.Sprintf("饿百取货码:%s", jxutils.GetEbaiOrderGetCode(order)) } if order.BuyerComment == "" { order.BuyerComment = "客户电话: " + order.ConsigneeMobile + ",配送遇到问题,可联系18048531223取消配送单,禁止未配送直接完成订单!" } orderParams := []interface{}{} orderFmt := `` if storeDetail != nil { if storeDetail.BrandIsPrint == model.NO { orderFmt += `%s` if order.VendorOrgCode == "34665" { orderParams = append(orderParams, globals.StoreNameEbai2) } else { orderParams = append(orderParams, storeDetail.BrandName) } } } orderFmt += ` -------------------------------- 下单时间: %s 期望送达: %s 客户姓名: %s 客户电话: %s 店铺名称: %s 订单编号: %s
%s#%d %s ` + getCode + `-------------------------------- 客户地址: %s -------------------------------- 客户备注:%s -------------------------------- 商品名` + trenditapi.StrRepeat(" ", 2) + `数量` + trenditapi.StrRepeat(" ", 3) + `单价` + trenditapi.StrRepeat(" ", 5) + `小计 ` + trenditapi.StrRepeat("-", 32) + ` ` orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, order.VendorOrderID, order.ConsigneeAddress, order.BuyerComment, ) for _, sku := range order.Skus { orderFmt += trenditapi.FormatPrintOrderItem(sku.SkuName, sku.Count, utils.Int64ToFloat64(sku.VendorPrice)) } orderFmt += ` 共%d种%d件商品 实付金额: %s
--------------#%d完-------------` orderParams = append(orderParams, order.SkuCount, order.GoodsCount, jxutils.IntPrice2StandardCurrencyString(order.ActualPayPrice), order.OrderSeq) return fmt.Sprintf(orderFmt, orderParams...) } //大尺寸打印模板 func (c *PrinterHandler) getOrderContentBig(order *model.GoodsOrder, storeTel string, storeDetail *dao.StoreDetail) (content string) { expectedDeliveryTime := order.ExpectedDeliveredTime if utils.IsTimeZero(expectedDeliveryTime) { expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour) } getCode := "" if order.VendorID == model.VendorIDEBAI { getCode = fmt.Sprintf("饿百取货码:%s", jxutils.GetEbaiOrderGetCode(order)) } order.BuyerComment = "" if order.BuyerComment == "" { order.BuyerComment = "客户电话: " + order.ConsigneeMobile + ",配送遇到问题,可联系18048531223取消配送单,禁止未配送直接完成订单!" } orderParams := []interface{}{} orderFmt := `` if storeDetail != nil { if storeDetail.BrandIsPrint == model.NO { orderFmt += `%s` if order.VendorOrgCode == "34665" { orderParams = append(orderParams, globals.StoreNameEbai2) } else { orderParams = append(orderParams, storeDetail.BrandName) } } } orderFmt += ` -------------------------------- 下单时间: %s 期望送达: %s 客户姓名: %s 客户电话: %s 店铺名称: %s 订单编号: %s
%s#%d %s ` + getCode + `-------------------------------- 客户地址: %s -------------------------------- 客户备注:%s -------------------------------- 商品名 数量 单价 小计 -------------------------------- ` orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), utils.Time2Str(expectedDeliveryTime), order.ConsigneeName, order.ConsigneeMobile, order.StoreName, order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, order.VendorOrderID, order.ConsigneeAddress, order.BuyerComment, ) for k, sku := range order.Skus { orderFmt += trenditapi.FormatPrintOrderItemBig(sku.SkuName, sku.Count, utils.Int64ToFloat64(sku.VendorPrice)) if k != len(order.Skus) { orderFmt += `
` } } orderFmt += ` 共%d种%d件商品 实付金额: %s
--------------#%d完-------------` orderParams = append(orderParams, order.SkuCount, order.GoodsCount, jxutils.IntPrice2StandardCurrencyString(order.ActualPayPrice), order.OrderSeq) return fmt.Sprintf(orderFmt, orderParams...) } //取消/退货 正常尺寸模板 func (c *PrinterHandler) getCancelOrRefundOrderContent(order *model.GoodsOrder, printType int, storeDetail *dao.StoreDetail) (content string) { var orderParams []interface{} orderFmt := `` if storeDetail != nil { if storeDetail.BrandIsPrint == model.NO { orderFmt += `%s` if order.VendorOrgCode == "34665" { orderParams = append(orderParams, globals.StoreNameEbai2) } else { orderParams = append(orderParams, storeDetail.BrandName) } } } title := "" if printType == model.YES { // 取消订单 title = "取消订单详情" } else { // 售后订单 title = "退货订单详情" } //orderFmt += `
--------------------------------` orderFmt += ` 下单时间: %s 订单编号: %s
%s#%d %s
` orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, title, ) orderFmt += `共%d种%d件商品 --------------#%d完-------------` /*实付金额: %s*/ orderParams = append(orderParams, order.SkuCount, order.GoodsCount /* jxutils.IntPrice2StandardCurrencyString(order.ActualPayPrice),*/, order.OrderSeq) return fmt.Sprintf(orderFmt, orderParams...) } //取消/退货 大尺寸模板 func (c *PrinterHandler) getCancelOrRefundOrderContentBig(order *model.GoodsOrder, printType int, storeDetail *dao.StoreDetail) (content string) { var orderParams []interface{} orderFmt := `` if storeDetail != nil { if storeDetail.BrandIsPrint == model.NO { orderFmt += `%s` if order.VendorOrgCode == "34665" { orderParams = append(orderParams, globals.StoreNameEbai2) } else { orderParams = append(orderParams, storeDetail.BrandName) } } } title := `` if printType == model.YES { // 取消订单 title = `取消订单详情` } else { // 售后订单 title = `退款订单详情` } orderFmt += xpyunapi.StrRepeat("-", 32) + ` 下单时间: %s 订单编号: %s
%s#%d ` + title orderParams = append(orderParams, utils.Time2Str(order.OrderCreatedAt), order.VendorOrderID, jxutils.GetVendorName(order.VendorID), order.OrderSeq, ) orderFmt += xpyunapi.StrRepeat("-", 32) orderFmt += `共%d种%d件商品 --------------#%d完-------------` /*实付金额: %s*/ orderParams = append(orderParams, order.SkuCount, order.GoodsCount /*jxutils.IntPrice2StandardCurrencyString(order.ActualPayPrice),*/, order.OrderSeq) return fmt.Sprintf(orderFmt, orderParams...) }