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 `json:"printResult"` // 0:成功,1:没有配置网络打印机 // PrinterStatusUnknown = 0 // PrinterStatusOffline = 1 // PrinterStatusOnlineOK = 2 // PrinterStatusOnlineAbnormal = 3 PrinterStatus int `json:"printerStatus"` Printed int `json:"printed"` // 已经打印的单数 Waiting int `json:"waiting"` // 等待打印的单数,超过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 := ` 京西菜市
手机买菜上京西
极速到家送惊喜
--------------------------------
下单时间: %s
预计送达: %s
订单编号: %s

%s#%d

%s
客户: %s
电话: %s
地址: %s

客户备注:
%s

实际支付:%s

商品明细:
品名 数量 单价 小计
--------------------------------
` 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.IntPrice2StandardCurrencyString(order.ActualPayPrice), } for _, sku := range order.Skus { orderFmt += `%s
` orderFmt += `%10s%10s%10s
` orderParams = append(orderParams, sku.SkuName, "x"+utils.Int2Str(sku.Count), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice), jxutils.IntPrice2StandardCurrencyString(sku.SalePrice*int64(sku.Count))) } orderFmt += `
共%d种%d件商品
--------------------------------
商品质量问题请联系:
%s:%s


官方服务热线: 18011516898
更多信息请关注官方微信: 京西菜市



--------------------------------
--------------------------------


` // http://weixin.qq.com/r/tkkDGzTERmk5rXB49xyk 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{ PrintResult: PrintResultSuccess, } if printResult.PrinterStatus, err = api.FeieAPI.QueryPrinterStatus(sn); err == nil { printResult.Printed, printResult.Waiting, err = api.FeieAPI.QueryOrderInfoByDate(sn, time.Now()) } return printResult, nil }