Commit 52e819c6 by 戴尚尚

1

parents 1e88c64c 2707a861
...@@ -11,14 +11,28 @@ FmPrinter &FmPrinter::GetInstance() ...@@ -11,14 +11,28 @@ FmPrinter &FmPrinter::GetInstance()
return fp; return fp;
} }
FmPrinter::~FmPrinter()
{
if(m_UAN_lib.isLoaded())
m_UAN_lib.unload();
}
bool FmPrinter::DoPrint(QString printerName, OrderObject *pData) bool FmPrinter::DoPrint(QString printerName, OrderObject *pData)
{ {
bool rlt; bool rlt;
if(bNewPos){ switch(printer)
{
case ZHONGKEYINGTAI:
rlt=_fmPrintData(pData); rlt=_fmPrintData(pData);
} break;
else{ case SHANGMI:
rlt = _shangmiPrinter(pData);
break;
case OTHER:
rlt= _RawDataToPrinter(printerName, _GetPrintData(pData)); rlt= _RawDataToPrinter(printerName, _GetPrintData(pData));
break;
default:
break;
} }
return rlt; return rlt;
} }
...@@ -26,11 +40,19 @@ bool FmPrinter::DoPrint(QString printerName, OrderObject *pData) ...@@ -26,11 +40,19 @@ bool FmPrinter::DoPrint(QString printerName, OrderObject *pData)
bool FmPrinter::TestPrint(QString printerName, QString data) bool FmPrinter::TestPrint(QString printerName, QString data)
{ {
bool rlt; bool rlt;
if(bNewPos){ switch(printer)
{
case ZHONGKEYINGTAI:
rlt=_fmPrintData(data); rlt=_fmPrintData(data);
} break;
else{ case SHANGMI:
rlt = _shangmiPrinter(data);
break;
case OTHER:
rlt= _RawDataToPrinter(printerName, data); rlt= _RawDataToPrinter(printerName, data);
break;
default:
break;
} }
return rlt; return rlt;
} }
...@@ -55,9 +77,16 @@ FmPrinter::FmPrinter() ...@@ -55,9 +77,16 @@ FmPrinter::FmPrinter()
fmps->setIniCodec("GB2312"); fmps->setIniCodec("GB2312");
QString printerName = fmps->value("DRIVER/driver").toString(); 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"); m_print_lib.setFileName("pos_ad_dll.dll");
if(m_print_lib.load()) if(m_print_lib.load())
{ {
...@@ -74,8 +103,23 @@ FmPrinter::FmPrinter() ...@@ -74,8 +103,23 @@ FmPrinter::FmPrinter()
{ {
m_b_load_sucfl=true; m_b_load_sucfl=true;
} }
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");
} }
else{ 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); QSettings *fmps=new QSettings(apppath+"/fmps.ini",QSettings::IniFormat);
fmps->setIniCodec("GB2312"); fmps->setIniCodec("GB2312");
fmps->setValue("MODEWIDTH/width",printsize); fmps->setValue("MODEWIDTH/width",printsize);
...@@ -93,8 +137,12 @@ FmPrinter::FmPrinter() ...@@ -93,8 +137,12 @@ FmPrinter::FmPrinter()
{ {
m_b_load_sucfl=true; m_b_load_sucfl=true;
} }
delete fmps;
}
break;
default:
break;
} }
} }
...@@ -277,6 +325,169 @@ QString FmPrinter::_GetPrintData(OrderObject *pData) ...@@ -277,6 +325,169 @@ QString FmPrinter::_GetPrintData(OrderObject *pData)
return str_list; 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) bool FmPrinter::_RawDataToPrinter(QString printerName, QString data)
{ {
QByteArray tmpData = data.toLocal8Bit(); QByteArray tmpData = data.toLocal8Bit();
...@@ -312,6 +523,32 @@ QString FmPrinter::_Penny2Dollar(int penny) ...@@ -312,6 +523,32 @@ QString FmPrinter::_Penny2Dollar(int penny)
return QString::number(dollar,'f',2); 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) bool FmPrinter::_fmPrintData(QString data)
{ {
if(m_b_load_sucfl){ if(m_b_load_sucfl){
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "Model/orderObject.h" #include "Model/orderObject.h"
#include "Model/productObject.h" #include "Model/productObject.h"
#include <QLibrary> #include <QLibrary>
#include <functional>
#include <iostream>
//中科英泰POS 打印接口返回值 //中科英泰POS 打印接口返回值
#define HS_OK 0xF0 #define HS_OK 0xF0
...@@ -15,6 +17,7 @@ class FMPRINTERSHARED_EXPORT FmPrinter ...@@ -15,6 +17,7 @@ class FMPRINTERSHARED_EXPORT FmPrinter
public: public:
static FmPrinter& GetInstance(); static FmPrinter& GetInstance();
~FmPrinter();
/* 功能:打印订单 /* 功能:打印订单
* 参数:[1]物理打印机名[2]订单对象 * 参数:[1]物理打印机名[2]订单对象
* 返回:true成功false失败 * 返回:true成功false失败
...@@ -39,6 +42,13 @@ private: ...@@ -39,6 +42,13 @@ private:
* 返回:打印数据 * 返回:打印数据
* */ * */
QString _GetPrintData(OrderObject* pData); QString _GetPrintData(OrderObject* pData);
/* 功能:从订单对象获取打印数据
* 参数:[1]订单对象
* 返回:打印数据
* */
bool _PrintBodyForShangmiPrinter(OrderObject* pData);
/* 功能:打印数据 /* 功能:打印数据
* 参数:[1]物理打印机名[2]信息内容 * 参数:[1]物理打印机名[2]信息内容
* 返回:打印数据 * 返回:打印数据
...@@ -79,6 +89,27 @@ private: ...@@ -79,6 +89,27 @@ private:
typedef int ( *fmCutPaper)(int i); typedef int ( *fmCutPaper)(int i);
typedef int ( *fmPrintHex)(char* pStr,int nLength); 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; fmOpenPrinter m_pOpenPrinter;
fmPrintText m_pPrintText; fmPrintText m_pPrintText;
fmPrintBitmapFile m_pPrintBitmapFile; fmPrintBitmapFile m_pPrintBitmapFile;
......
...@@ -9,6 +9,8 @@ QT -= gui ...@@ -9,6 +9,8 @@ QT -= gui
TARGET = fmPrinter TARGET = fmPrinter
TEMPLATE = lib TEMPLATE = lib
CONFIG += C++11
DEFINES += FMPRINTER_LIBRARY DEFINES += FMPRINTER_LIBRARY
INCLUDEPATH += ../fmTakeaway 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