Commit 52e819c6 by 戴尚尚

1

parents 1e88c64c 2707a861
......@@ -11,26 +11,48 @@ FmPrinter &FmPrinter::GetInstance()
return fp;
}
FmPrinter::~FmPrinter()
{
if(m_UAN_lib.isLoaded())
m_UAN_lib.unload();
}
bool FmPrinter::DoPrint(QString printerName, OrderObject *pData)
{
bool rlt;
if(bNewPos){
switch(printer)
{
case ZHONGKEYINGTAI:
rlt=_fmPrintData(pData);
}
else{
rlt= _RawDataToPrinter(printerName, _GetPrintData(pData));
break;
case SHANGMI:
rlt = _shangmiPrinter(pData);
break;
case OTHER:
rlt= _RawDataToPrinter(printerName, _GetPrintData(pData));
break;
default:
break;
}
return rlt;
}
bool FmPrinter::TestPrint(QString printerName, QString data)
{
bool rlt;
if(bNewPos){
bool rlt;
switch(printer)
{
case ZHONGKEYINGTAI:
rlt=_fmPrintData(data);
}
else{
rlt= _RawDataToPrinter(printerName, data);
break;
case SHANGMI:
rlt = _shangmiPrinter(data);
break;
case OTHER:
rlt= _RawDataToPrinter(printerName, data);
break;
default:
break;
}
return rlt;
}
......@@ -55,9 +77,16 @@ FmPrinter::FmPrinter()
fmps->setIniCodec("GB2312");
QString printerName = fmps->value("DRIVER/driver").toString();
bNewPos=!printerName.compare(QString("中科英泰"));
if(!printerName.compare(QString("中科英泰")))
printer = ZHONGKEYINGTAI;
else if(!printerName.compare(QString("SHANGMI")))
printer = SHANGMI;
else
printer = OTHER;
if(bNewPos){
switch(printer)
{
case ZHONGKEYINGTAI:
m_print_lib.setFileName("pos_ad_dll.dll");
if(m_print_lib.load())
{
......@@ -74,8 +103,23 @@ FmPrinter::FmPrinter()
{
m_b_load_sucfl=true;
}
}
else{
break;
case SHANGMI:
m_UAN_lib.setFileName("pos_ad_UAN.dll");
if(m_UAN_lib.load())
{
m_printTextWithStyles = (PrintTextWithStyles*)m_UAN_lib.resolve("PrintTextWithStyles");
m_printBitmapFile = (PrintBitmapFile*)m_UAN_lib.resolve("PrintBitmapFile");
m_beginPrint = (BeginPrint*)m_UAN_lib.resolve("BeginPrint");
m_printTicketBarcode = (PrintTicketBarcode*)m_UAN_lib.resolve("PrintTicketBarcode");
}
if(m_printTextWithStyles && m_printBitmapFile && m_beginPrint && m_printTicketBarcode)
{
m_b_load_sucfl = true;
}
break;
case OTHER:
{
QSettings *fmps=new QSettings(apppath+"/fmps.ini",QSettings::IniFormat);
fmps->setIniCodec("GB2312");
fmps->setValue("MODEWIDTH/width",printsize);
......@@ -93,8 +137,12 @@ FmPrinter::FmPrinter()
{
m_b_load_sucfl=true;
}
delete fmps;
}
break;
default:
break;
}
}
......@@ -277,6 +325,169 @@ QString FmPrinter::_GetPrintData(OrderObject *pData)
return str_list;
}
bool FmPrinter::_PrintBodyForShangmiPrinter(OrderObject *pData)
{
QString str_comd_list;
total=pData->proList.count()*2;
for(int i=0; i<pData->proList.count(); i++)
{
QString name, price;
if(pData->proList[i]->property_tags.isEmpty())
{
name = pData->proList[i]->name;
}else
{
name = pData->proList[i]->name + "[" + pData->proList[i]->property_tags + "]";
}
price = QString("%1 x%2 %3").arg(_Penny2Dollar(pData->proList[i]->price)).arg(pData->proList[i]->productAmount)
.arg(_Penny2Dollar(pData->proList[i]->price*pData->proList[i]->productAmount));
str_comd_list.append(QString(name+"\n"+price+"\n"));
}
foreach(QString comm, pData->dis_desc)
{
str_comd_list.append(QString("(赠)"+comm+"$"));
}
QStringList cfgList;
cfgList = pData->printcfg.split('|');
QString invoice;
if(pData->has_invoiced)
{
invoice=QString("是");
if(pData->invoice_title.isEmpty())
{
pData->invoice_title=QString("无");
}
}else
{
invoice=QString("否");
pData->invoice_title=QString("NULL");
}
QString deliveryStr("..");
switch(pData->order_type)
{
case 1:
deliveryStr = "立即送达";
break;
case 2:
deliveryStr = QDateTime::fromTime_t(pData->delivery_time).toString("yy-MM-dd hh:mm");
break;
case 3:
deliveryStr = "顾客自提";
break;
case 4:
deliveryStr = "堂食";
break;
}
QString remark;
if(pData->remark.isEmpty())
{
remark = "NULL";
}else
{
remark = QString("备注:")+pData->remark.remove(QChar('|'), Qt::CaseInsensitive);
}
QString str0 =pData->channelName;
QString strUrl("http://qr10.cn/Du2Cfw");
QString strDesc("下载APP 积分换好礼");
QString bPrintImg("1");
QString bPrintCode("1");
QString bPrintXXCHC("1");
if(pData->status == 20)
{
str0 = pData->channelName+"(顾客申请退单)";
remark = QString("请马上联系站点沟通顾客,否则取消单将算入门店异常取消单,影响门店排名,站点电话在平台软件订单里面点击更多联系人");
strUrl = "NULL";
strDesc = "NULL";
bPrintImg = "0";
bPrintCode = "0";
deliveryStr = "NULL";
bPrintXXCHC = "0";
}else if(pData->status == 21)
{
str0 = pData->channelName+"(顾客申请部分退单)";
remark = QString("请马上联系站点沟通顾客,否则取消单将算入门店异常取消单,影响门店排名,站点电话在平台软件订单里面点击更多联系人");
strUrl = "NULL";
strDesc = "NULL";
bPrintImg = "0";
bPrintCode = "0";
deliveryStr = "NULL";
bPrintXXCHC = "0";
}
QString section1, section2,section3,section4, section5;
QString text = section1.
append(QString("-------------------------------")).append("\n").
append(QString("(鲜丰水果)")+storename).append("\n");
m_printTextWithStyles(text.toLocal8Bit().data(),24,0,0);
bool rlt = m_beginPrint(0) == HS_OK ? true : false;
text = section2.
append("#"+QString::number(pData->order_index)).append(str0).append("\n");
m_printTextWithStyles(text.toLocal8Bit().data(),32,0,0);
rlt = rlt && m_beginPrint(0) == HS_OK ? true : false;
text = section3.
append(pData->order_type==3?"自提":pData->delivery_party).append("\n").
append(QString("-------------------------------")).append("\n");
m_printTextWithStyles(text.toLocal8Bit().data(),24,0,0);
rlt = rlt && m_beginPrint(0) == HS_OK ? true : false;
QString order_id = pData->order_view_id.isEmpty()?pData->order_id:pData->order_view_id;
m_printTicketBarcode(100,73,2,order_id.toLocal8Bit().data());
rlt = rlt && m_beginPrint(0) == HS_OK ? true : false;
text = section4.
append(QString("订单编号:")).append(pData->order_view_id.isEmpty()?pData->order_id:pData->order_view_id).append("\n").
append(QString("下单时间:")).append(QDateTime::fromTime_t(pData->create_time).toString("yy-MM-dd hh:mm")).append("\n").
append(QString("期望送达时间:")).append(deliveryStr).append("\n").
append(QString("-------------------------------")).append("\n");
m_printTextWithStyles(text.toLocal8Bit().data(),24,0,0);
rlt = rlt && m_beginPrint(0) == HS_OK ? true : false;
QString apppath = QCoreApplication::applicationDirPath();
QString helloBmp = apppath+"/Hello.bmp";
m_printBitmapFile(helloBmp.toLocal8Bit().data(),0);
rlt = rlt && m_beginPrint(7) == HS_OK ? true : false;
text = section5.
append(QString("-------------------------------")).append("\n").
append(remark).append("\n").
append(QString("发票:")).append(invoice).append("\n").
append(QString("发票抬头:")).append(pData->invoice_title).append("\n").
append(QString("-------------------------------")).append("\n").
append(str_comd_list).append("\n").
append(QString("商品数量:")).append(QString::number(pData->total_amount)).append("\n").
// append(QString("商品总额:")).append(_Penny2Dollar(pData->total_fee-pData->send_fee)).append("\n").
// append(QString("优惠金额:")).append(_Penny2Dollar(pData->discount_fee)).append("\n").
// append(QString("配送费:")).append(_Penny2Dollar(pData->send_fee)).append("\n").
append(QString("在线支付:")).append(_Penny2Dollar(pData->total_fee-pData->discount_fee)).append("\n").
append(QString("-------------------------------")).append("\n").
append(QString("姓名:")).append(pData->customer).append("\n").
append(QString("地址:")).append(pData->address).append("\n").
append(QString("电话:")).append(pData->phone).append("\n").
//append(bPrintXXCHC).append("\n").
// append(QString("-------------------------------")).append("\n").
// append(strUrl).append("\n").
// append(strDesc).append("\n").
append(QString("-------------------------------")).append("\n");
m_printTextWithStyles(text.toLocal8Bit().data(),24,0,0);
rlt = rlt && m_beginPrint(0) == HS_OK ? true : false;
return rlt;
}
bool FmPrinter::_RawDataToPrinter(QString printerName, QString data)
{
QByteArray tmpData = data.toLocal8Bit();
......@@ -312,6 +523,32 @@ QString FmPrinter::_Penny2Dollar(int penny)
return QString::number(dollar,'f',2);
}
bool FmPrinter::_shangmiPrinter(OrderObject *pData)
{
QString apppath = QCoreApplication::applicationDirPath();
QString titleBmp = apppath+"/Kitty.bmp";
QString bottomBmp = apppath+"/Look.bmp";
m_printBitmapFile(titleBmp.toLocal8Bit().data(),0);
int rlt1 = m_beginPrint(7);
bool rlt2 = _PrintBodyForShangmiPrinter(pData);
m_printBitmapFile(bottomBmp.toLocal8Bit().data(),0);
int rlt3 = m_beginPrint(7);
m_beginPrint(8);
return (rlt1 == HS_OK && rlt2 && rlt3 == HS_OK);
}
bool FmPrinter::_shangmiPrinter(QString data)
{
m_printTextWithStyles(data.toLocal8Bit().data(),24,0,0);
int rlt = m_beginPrint(0);
m_beginPrint(8);
return (rlt == HS_OK);
}
bool FmPrinter::_fmPrintData(QString data)
{
if(m_b_load_sucfl){
......
......@@ -5,6 +5,8 @@
#include "Model/orderObject.h"
#include "Model/productObject.h"
#include <QLibrary>
#include <functional>
#include <iostream>
//中科英泰POS 打印接口返回值
#define HS_OK 0xF0
......@@ -15,6 +17,7 @@ class FMPRINTERSHARED_EXPORT FmPrinter
public:
static FmPrinter& GetInstance();
~FmPrinter();
/* 功能:打印订单
* 参数:[1]物理打印机名[2]订单对象
* 返回:true成功false失败
......@@ -39,6 +42,13 @@ private:
* 返回:打印数据
* */
QString _GetPrintData(OrderObject* pData);
/* 功能:从订单对象获取打印数据
* 参数:[1]订单对象
* 返回:打印数据
* */
bool _PrintBodyForShangmiPrinter(OrderObject* pData);
/* 功能:打印数据
* 参数:[1]物理打印机名[2]信息内容
* 返回:打印数据
......@@ -79,6 +89,27 @@ private:
typedef int ( *fmCutPaper)(int i);
typedef int ( *fmPrintHex)(char* pStr,int nLength);
//商米打印机接口
QLibrary m_UAN_lib;
using PrintTextWithStyles = int(char*, int, int, int);
using PrintBitmapFile = int(char*, int);
using BeginPrint = int(int);
using PrintTicketBarcode = int(int, int, int, char *);
std::function<PrintTextWithStyles> m_printTextWithStyles;
std::function<PrintBitmapFile> m_printBitmapFile;
std::function<BeginPrint> m_beginPrint;
std::function<PrintTicketBarcode> m_printTicketBarcode;
bool _shangmiPrinter(OrderObject* pData);
bool _shangmiPrinter(QString data);
enum PRINTERTYPE{ //打印机类型
SHANGMI,
ZHONGKEYINGTAI,
OTHER
};
PRINTERTYPE printer;
fmOpenPrinter m_pOpenPrinter;
fmPrintText m_pPrintText;
fmPrintBitmapFile m_pPrintBitmapFile;
......
......@@ -9,6 +9,8 @@ QT -= gui
TARGET = fmPrinter
TEMPLATE = lib
CONFIG += C++11
DEFINES += FMPRINTER_LIBRARY
INCLUDEPATH += ../fmTakeaway
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment