diff --git a/business/partner/printer/jxprint/jxprint.go b/business/partner/printer/jxprint/jxprint.go
index 6d473c56c..66535590b 100644
--- a/business/partner/printer/jxprint/jxprint.go
+++ b/business/partner/printer/jxprint/jxprint.go
@@ -11,12 +11,14 @@ import (
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/globals/api"
+ "regexp"
"strings"
"time"
)
var (
CurPrinterHandler *PrinterHandler
+ regexpPrint = regexp.MustCompile(`\${.*?}`)
)
type PrinterHandler struct {
@@ -173,6 +175,71 @@ func (c *PrinterHandler) getOrderContent(order *model.GoodsOrder, storeTel strin
return fmt.Sprintf(strings.Replace(orderFmt, "\n", "", -1), orderParams...)
}
+func (c *PrinterHandler) getOrderContentByTemplate(order *model.GoodsOrder, storeTel string, storeDetail *dao.StoreDetail) (content string) {
+ orderParams := []interface{}{}
+ orderFmt := ""
+ if storeDetail != nil {
+ //开头加上语音
+ if storeDetail.PrinterSound != "" {
+ orderFmt += `
+ %s
+ `
+ orderParams = append(orderParams, storeDetail.PrinterSound)
+ }
+ }
+ //把带有${}的变量换成实际值
+ template := storeDetail.PrinterTemplate
+ regexpValues := regexpPrint.FindAllStringSubmatch(template, -1)
+ for _, v := range regexpValues {
+ switch v[0] {
+ case "${下单时间}":
+ template = strings.ReplaceAll(template, v[0], utils.Time2Str(order.OrderCreatedAt))
+ case "${预计送达}":
+ expectedDeliveryTime := order.ExpectedDeliveredTime
+ if utils.IsTimeZero(expectedDeliveryTime) {
+ expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour)
+ }
+ template = strings.ReplaceAll(template, v[0], utils.Time2Str(expectedDeliveryTime))
+ case "${订单号}":
+ template = strings.ReplaceAll(template, v[0], order.VendorOrderID)
+ case "${平台名}":
+ template = strings.ReplaceAll(template, v[0], jxutils.GetVendorName(order.VendorID))
+ case "${订单序号}":
+ template = strings.ReplaceAll(template, v[0], utils.Int2Str(order.OrderSeq))
+ case "${客户名}":
+ template = strings.ReplaceAll(template, v[0], order.ConsigneeName)
+ case "${客户电话}":
+ template = strings.ReplaceAll(template, v[0], order.ConsigneeMobile)
+ case "${客户地址}":
+ template = strings.ReplaceAll(template, v[0], order.ConsigneeAddress)
+ case "${备注}":
+ template = strings.ReplaceAll(template, v[0], order.BuyerComment)
+ case "${商品种数}":
+ template = strings.ReplaceAll(template, v[0], utils.Int2Str(order.SkuCount))
+ case "${商品件数}":
+ template = strings.ReplaceAll(template, v[0], utils.Int2Str(order.GoodsCount))
+ case "${门店名}":
+ template = strings.ReplaceAll(template, v[0], order.StoreName)
+ case "${门店电话}":
+ template = strings.ReplaceAll(template, v[0], storeTel)
+ case "${商品明细}":
+ skus := ""
+ skuParams := []interface{}{}
+ for i := 0; i < len(order.Skus); i++ {
+ skus += "%s
"
+ skus += "%8s%10s%10s
"
+ skuParams = append(skuParams, order.Skus[i].SkuName)
+ skuParams = append(skuParams, "x"+utils.Int2Str(order.Skus[i].Count))
+ skuParams = append(skuParams, jxutils.IntPrice2StandardCurrencyString(order.Skus[i].SalePrice))
+ skuParams = append(skuParams, jxutils.IntPrice2StandardCurrencyString(order.Skus[i].SalePrice*int64(order.Skus[i].Count)))
+ }
+ template = strings.ReplaceAll(template, v[0], fmt.Sprintf(skus, skuParams))
+ }
+ }
+ orderFmt += template
+ return fmt.Sprintf(strings.Replace(orderFmt, "\n", "", -1), orderParams...)
+}
+
func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store, storeDetail *dao.StoreDetail, order *model.GoodsOrder) (printerStatus *partner.PrinterStatus, err error) {
globals.SugarLogger.Debugf("jxprint PrintOrderByOrder orderID:%s, storeID:%d", order.VendorOrderID, store.ID)
if len(order.Skus) == 0 {
@@ -182,7 +249,11 @@ func (c *PrinterHandler) PrintOrder(ctx *jxcontext.Context, store *model.Store,
if store.PrinterFontSize == partner.PrinterFontSizeBig {
//content = c.getOrderContentBig(order, store.Tel1, storeDetail)
} else {
- content = c.getOrderContent(order, store.Tel1, storeDetail)
+ if storeDetail.PrinterTemplate != "" {
+ content = c.getOrderContentByTemplate(order, store.Tel1, storeDetail)
+ } else {
+ content = c.getOrderContent(order, store.Tel1, storeDetail)
+ }
}
return c.PrintMsg(ctx, store.PrinterSN, utils.Int2Str(order.OrderSeq), order.VendorOrderID, content)
}