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) }