Files
jx-callback/business/jxutils/netprinter/netprinter.go
gazebo 60de9f64bd + PrintOrder
+ GetPrinterStatus
2019-04-01 23:29:47 +08:00

160 lines
4.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package netprinter
import (
"fmt"
"strings"
"time"
"git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils"
"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/globals"
"git.rosy.net.cn/jx-callback/globals/api"
)
type PrinterStatus struct {
PrintResult int // 0成功1没有配置网络打印机
// PrinterStatusUnknown = 0
// PrinterStatusOffline = 1
// PrinterStatusOnlineOK = 2
// PrinterStatusOnlineAbnormal = 3
PrinterStatus int
Printed int // 已经打印的单数
Waiting int // 等待打印的单数超过1一般不太正常
}
const (
PrintResultSuccess = 0
PrintResultNoNetPrinter = 1
)
func GetFeieOrderContent(order *model.GoodsOrder, storeTel string) (content string) {
expectedDeliveryTime := order.ExpectedDeliveredTime
if utils.IsTimeZero(expectedDeliveryTime) {
expectedDeliveryTime = order.OrderCreatedAt.Add(1 * time.Hour)
}
orderFmt := `
<CB>京西菜市</CB><BR>
<C>手机买菜上京西</C><BR>
<C>极速到家送惊喜</C>
--------------------------------<BR>
下单时间: %s<BR>
预计送达: %s<BR>
订单编号: %s<BR>
<BR>
<B>%s#%d</B><BR><BR>
<QR>%s</QR>
<BR>
客户: %s<BR>
电话: %s<BR>
地址: %s<BR>
<BR>
客户备注: <BR>
<B>%s</B><BR>
<BR>
<BOLD>实际支付:</BOLD>%.2f<BR>
<BR>
商品明细: <BR>
品名 数量 单价 小计
--------------------------------<BR>`
orderParams := []interface{}{
utils.Time2Str(order.OrderCreatedAt),
utils.Time2Str(expectedDeliveryTime),
order.VendorOrderID,
jxutils.GetVendorName(order.VendorID),
order.OrderSeq,
order.VendorOrderID,
order.ConsigneeName,
order.ConsigneeMobile,
order.ConsigneeAddress,
order.BuyerComment,
jxutils.IntPrice2Standard(order.ActualPayPrice),
}
for _, sku := range order.Skus {
orderFmt += `%s<BR>`
orderFmt += `%10d%10.2f%10.2f<BR>`
orderParams = append(orderParams, sku.SkuName, sku.Count, jxutils.IntPrice2Standard(sku.SalePrice), jxutils.IntPrice2Standard(sku.SalePrice*int64(sku.Count)))
}
orderFmt += `<BR>
<BOLD>共%d种%d件商品</BOLD>
<BR>
--------------------------------<BR>
<C><L><BOLD>商品质量问题请联系:</BOLD></L><BR></C>
<C><L><BOLD>%s:%s</BOLD></L><BR></C><BR>
<BR>
官方服务热线: 18011516898<BR>
更多信息请关注官方微信: 京西菜市<BR>
<BR>
<BR><BR>
--------------------------------
--------------------------------
<BR><BR>
`
// <QR>http://weixin.qq.com/r/tkkDGzTERmk5rXB49xyk</QR>
orderParams = append(orderParams, order.SkuCount, order.GoodsCount, order.StoreName, storeTel)
return fmt.Sprintf(strings.Replace(orderFmt, "\n", "", -1), orderParams...)
}
func PrintOrder(ctx *jxcontext.Context, vendorOrderID string, vendorID int) (printResult *PrinterStatus, err error) {
order, err := partner.CurOrderManager.LoadOrder(vendorOrderID, vendorID)
if err == nil {
printResult, err = PrintOrderByOrder(ctx, order)
}
return printResult, err
}
func PrintOrderByOrder(ctx *jxcontext.Context, order *model.GoodsOrder) (printResult *PrinterStatus, err error) {
globals.SugarLogger.Debugf("PrintOrderByOrder orderID:%s", order.VendorOrderID)
store := &model.Store{}
store.ID = jxutils.GetSaleStoreIDFromOrder(order)
db := dao.GetDB()
if err = dao.GetEntity(db, store); err == nil {
if store.PrinterSN != "" {
content := GetFeieOrderContent(order, store.Tel1)
if _, err = api.FeieAPI.PrintMsg(store.PrinterSN, content, 1); err == nil {
printResult, err = getNetPrinterStatus(ctx, store.PrinterSN)
dao.SetOrderPrintFlag(db, order.VendorOrderID, order.VendorID, true)
}
} else {
printResult = &PrinterStatus{
PrintResult: PrintResultNoNetPrinter,
}
}
}
if err != nil {
globals.SugarLogger.Infof("PrintOrderByOrder orderID:%s failed with error:%v", order.VendorOrderID, err)
}
return printResult, err
}
func GetNetPrinterStatus(ctx *jxcontext.Context, storeID int) (printResult *PrinterStatus, err error) {
store := &model.Store{}
store.ID = storeID
db := dao.GetDB()
if err = dao.GetEntity(db, store); err == nil {
if store.PrinterSN != "" {
return getNetPrinterStatus(ctx, store.PrinterSN)
}
return &PrinterStatus{
PrintResult: PrintResultNoNetPrinter,
}, nil
}
return nil, err
}
func getNetPrinterStatus(ctx *jxcontext.Context, sn string) (printResult *PrinterStatus, err error) {
printResult = &PrinterStatus{}
if printResult.PrintResult, err = api.FeieAPI.QueryPrinterStatus(sn); err == nil {
printResult.Printed, printResult.Waiting, err = api.FeieAPI.QueryOrderInfoByDate(sn, time.Now())
}
return printResult, nil
}