Merge branch 'jdshop' of e.coding.net:rosydev/jx-callback into jdshop

This commit is contained in:
邹宗楠
2023-03-18 11:04:37 +08:00
9 changed files with 322 additions and 5 deletions

View File

@@ -23,9 +23,9 @@ const (
const (
PrinterFontSizeNormal = int8(0) //正常大小一份
PrinterFontSizeBig = int8(1) //两倍大小一份
PrinterFontSizeBig = int8(1) //两倍大小一份,大一
PrinterFontSizeNormal2 = int8(2) //正常字体两份
PrinterFontSizeBig2 = int8(3) //大字体两份
PrinterFontSizeBig2 = int8(3) //大字体两份,大二
)
var (

View File

@@ -1 +1,283 @@
package xpyun
import (
"fmt"
"strings"
"time"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/baseapi/platformapi/xpyunapi"
"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 init() {
CurPrinterHandler = new(PrinterHandler)
partner.RegisterPrinterPlatform(CurPrinterHandler)
}
func (c *PrinterHandler) GetVendorID() int {
return model.VendorIDXpYun
}
func (c *PrinterHandler) PrintMsg(ctx *jxcontext.Context, sn, copies, msgTitle, msgContent string) (printerStatus *partner.PrinterStatus, err error) {
if sn != "" {
if globals.EnableStoreWrite {
if utils.Str2Int(copies) < 0 || utils.Str2Int(copies) > 3 {
copies = "1"
}
printOrderID, err1 := api.XpyunAPI.Print(&xpyunapi.PrintRequest{
Sn: sn,
Content: msgContent,
Copies: utils.Str2Int(copies),
Voice: xpyunapi.VoicePlayOrder,
Mode: xpyunapi.ModeCheckYes,
ExpiresIn: xpyunapi.ExpiresInDefault,
})
if err1 == nil && printOrderID != "" {
printerStatus, err = c.GetPrinterStatus(ctx, sn, "")
}
}
} else {
printerStatus = &partner.PrinterStatus{
PrintResult: partner.PrintResultNoPrinter,
}
}
return printerStatus, err
}
func (c *PrinterHandler) GetPrinterStatus(ctx *jxcontext.Context, sn, s string) (printerStatus *partner.PrinterStatus, err error) {
if status, err := api.XpyunAPI.QueryPrinterStatus(sn); err == nil {
printerStatus = &partner.PrinterStatus{
PrintResult: partner.PrintResultSuccess,
}
tempStatus := utils.Float64TwoInt(status.(float64))
if tempStatus == xpyunapi.PrinterStateOffline {
printerStatus.PrinterStatus = partner.PrinterStatusOffline
} else if tempStatus == xpyunapi.PrinterStateOnlineNormal {
printerStatus.PrinterStatus = partner.PrinterStatusOnlineOK
} else if tempStatus == xpyunapi.PrinterStateOnlineUnusual {
printerStatus.PrinterStatus = partner.PrinterStatusOnlineAbnormal
} else {
printerStatus.PrinterStatus = partner.PrinterStatusUnknown
}
}
return printerStatus, err
}
func (c *PrinterHandler) RegisterPrinter(ctx *jxcontext.Context, sn, id2, printerName string, soreId int64) (newID1, newID2 string, err error) {
if globals.EnableStoreWrite {
err = api.XpyunAPI.AddPrinters(sn, printerName)
}
if strings.Contains(err.Error(), "打印机已存在") {
return "", "", nil
}
return "", "", err
}
func (c *PrinterHandler) UnregisterPrinter(ctx *jxcontext.Context, sn, id2 string) (err error) {
if globals.EnableStoreWrite {
err = api.XpyunAPI.DelPrinters([]string{sn})
}
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.VendorIDXpYun])
}
func (c *PrinterHandler) RebindPrinter(ctx *jxcontext.Context, lastBindResult *partner.BindPrinterResult) (bindResult *partner.BindPrinterResult, err error) {
return nil, fmt.Errorf("%s打印机当前不支持扫码解绑", model.VendorChineseNames[model.VendorIDXpYun])
}
func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder, printType string, asfOrder *model.AfsOrder) (printerStatus *partner.PrinterStatus, err error) {
globals.SugarLogger.Debugf("打印order参数%s", utils.Format4Output(order, false))
if len(order.Skus) == 0 {
globals.SugarLogger.Debugf("order.sku为空")
return
}
content := ""
if store.PrinterFontSize == partner.PrinterFontSizeBig || store.PrinterFontSize == partner.PrinterFontSizeBig2 {
content = c.getOrderContentBig(order, store.Tel1, storeDetail)
} else {
content = c.getOrderContent(order, store.Tel1, storeDetail)
}
count := 0
for {
printerStatus, err := c.PrintMsg(ctx, store.PrinterSN, store.PrinterKey, order.VendorOrderID, content)
if (store.PrinterFontSize == partner.PrinterFontSizeBig2 || store.PrinterFontSize == partner.PrinterFontSizeNormal2) && count < 1 {
count += 1
continue
} else {
return printerStatus, err
}
}
}
func (c *PrinterHandler) PrintStore(ctx *jxcontext.Context, store *model.Store, storeDetail *dao.StoreDetail, vendorId int) (printerStatus *partner.PrinterStatus, err error) {
return nil, err
}
func (c *PrinterHandler) PrintCancelOrRefundOrder(ctx *jxcontext.Context, printType int, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) {
return nil, err
}
func (c *PrinterHandler) EmptyPrintList(ctx *jxcontext.Context, sn, id2 string) (err error) {
if globals.EnableStoreWrite {
err = api.XpyunAPI.EmptyPrinterQueue(sn)
}
return err
}
func (c *PrinterHandler) PlayText(ctx *jxcontext.Context, id1, id2, orderID, text string) (printerStatus *partner.PrinterStatus, err error) {
return nil, err
}
func (c *PrinterHandler) SetSound(ctx *jxcontext.Context, sn, id2, sound string) (err error) {
if globals.EnableStoreWrite {
err = api.XpyunAPI.SetVoiceType(sn, utils.Str2Int(sound))
}
return err
}
// 正常打印模板
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("<CB>饿百取货码:%s</CB>", jxutils.GetEbaiOrderGetCode(order))
}
orderParams := []interface{}{}
orderFmt := ``
if storeDetail != nil {
if storeDetail.BrandIsPrint == model.NO {
orderFmt += `<BR><C>%s</C></BR>\n`
if order.VendorOrgCode == "34665" {
orderParams = append(orderParams, globals.StoreNameEbai2)
} else {
orderParams = append(orderParams, storeDetail.BrandName)
}
}
}
orderFmt += `
` + xpyunapi.StrRepeat("-", 32) + `
<BR><L>下单时间: %s
<BR><L>预计送达: %s
<BR><L>客户姓名: %s
<BR><L>客户电话: %s
<BR><HB>订单编号: %s</HB>
<IMG></IMG><BR><C><B>%s: #%d</B></C>
<C><QRCODE s=6 e=L l=center>%s</QRCODE></C>"
` + getCode + `
` + xpyunapi.StrRepeat("-", 32) + `
<HB>客户地址: %s</HB>
` + xpyunapi.StrRepeat("-", 32) + `
<BR>客户备注: %s
` + xpyunapi.StrRepeat("-", 32) + `
<BR>商品列表<BR>
商品名` + xpyunapi.StrRepeat(" ", 2) + `数量` + xpyunapi.StrRepeat(" ", 3) + `单价` + xpyunapi.StrRepeat(" ", 5) + `小计<BR>
` + xpyunapi.StrRepeat("-", 32) + `
`
orderParams = append(orderParams,
utils.Time2Str(order.OrderCreatedAt),
utils.Time2Str(expectedDeliveryTime),
order.ConsigneeName,
order.ConsigneeMobile,
order.VendorOrderID,
jxutils.GetVendorName(order.VendorID),
order.OrderSeq,
order.VendorOrderID,
order.ConsigneeAddress,
order.BuyerComment,
)
for _, sku := range order.Skus {
orderFmt += xpyunapi.FormatPrintOrderItem(sku.SkuName, sku.Count, utils.Int64ToFloat64(sku.SalePrice))
}
orderFmt += `
<L>共%d种%d件商品<BR></L>
<L>实际支付: %s元<BR></L>
`
orderFmt += `<BR><BR>`
orderFmt += xpyunapi.StrRepeat("-", 14) + "#23完" + xpyunapi.StrRepeat("-", 14)
orderParams = append(orderParams, order.SkuCount, order.GoodsCount, jxutils.IntPrice2StandardCurrencyString(order.ActualPayPrice))
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("<CB>饿百取货码:%s</CB>", jxutils.GetEbaiOrderGetCode(order))
}
orderParams := []interface{}{}
orderFmt := ``
if storeDetail != nil {
if storeDetail.BrandIsPrint == model.NO {
orderFmt += `<BR><C>%s</C></BR>\n`
if order.VendorOrgCode == "34665" {
orderParams = append(orderParams, globals.StoreNameEbai2)
} else {
orderParams = append(orderParams, storeDetail.BrandName)
}
}
}
orderFmt += `
` + xpyunapi.StrRepeat("-", 32) + `
<BR><L>下单时间: %s</BR>
<BR><L>预计送达: %s</BR>
<BR><L>客户姓名: %s</BR>
<BR><L>客户电话: %s</BR>
<BR><HB>订单编号: %s</HB></BR>
<IMG></IMG><BR><C><B>%s: #%d</B></BR></C>
<C><QRCODE s=6 e=L l=center>%s</QRCODE></C>"
` + getCode + `
` + xpyunapi.StrRepeat("-", 32) + `
<HB>客户地址: %s</HB><BR>
` + xpyunapi.StrRepeat("-", 32) + `
<BR>客户备注: %s<BR>
` + xpyunapi.StrRepeat("-", 32) + `
<BR>商品列表 ` + xpyunapi.StrRepeat("-", 6) + `<BR>
商品名` + xpyunapi.StrRepeat("-", 2) + `数量` + xpyunapi.StrRepeat("-", 3) + `单价` + xpyunapi.StrRepeat("-", 5) + `小计<BR>"
`
orderParams = append(orderParams,
utils.Time2Str(order.OrderCreatedAt),
utils.Time2Str(expectedDeliveryTime),
order.ConsigneeName,
order.ConsigneeMobile,
order.VendorOrderID,
jxutils.GetVendorName(order.VendorID),
order.OrderSeq,
order.VendorOrderID,
order.ConsigneeAddress,
order.BuyerComment,
)
for _, sku := range order.Skus {
orderFmt += xpyunapi.FormatPrintOrderItem(sku.SkuName, sku.Count, utils.Int64ToFloat64(sku.SalePrice))
}
orderFmt += `
<L>共%d种%d件商品<BR></L>
<L>实际支付: %s元<BR></L>
` + xpyunapi.StrRepeat("-", 2) + `
`
orderFmt += `<BR><BR>`
orderParams = append(orderParams, order.SkuCount, order.GoodsCount, jxutils.IntPrice2StandardCurrencyString(order.ActualPayPrice))
return fmt.Sprintf(orderFmt, orderParams...)
}