Commit 9a008913 by guanghui.cui

增加“中科英泰”pos打印

parent 6233f948
......@@ -13,12 +13,26 @@ FmPrinter &FmPrinter::GetInstance()
bool FmPrinter::DoPrint(QString printerName, OrderObject *pData)
{
return _RawDataToPrinter(printerName, _GetPrintData(pData));
bool rlt;
if(bNewPos){
rlt=_fmPrintData(pData);
}
else{
rlt= _RawDataToPrinter(printerName, _GetPrintData(pData));
}
return rlt;
}
bool FmPrinter::TestPrint(QString printerName, QString data)
{
return _RawDataToPrinter(printerName, data);
bool rlt;
if(bNewPos){
rlt=_fmPrintData(data);
}
else{
rlt= _RawDataToPrinter(printerName, data);
}
return rlt;
}
void FmPrinter::setStoreName(QString name)
......@@ -28,12 +42,40 @@ void FmPrinter::setStoreName(QString name)
FmPrinter::FmPrinter()
{
QString apppath=QCoreApplication::applicationDirPath();
QString inipath=apppath+"/tmp.ini";
QSettings *tmp=new QSettings(inipath,QSettings::IniFormat);
printsize=tmp->value("info/printsize").toInt();
m_appUrl = tmp->value("App/url").toString();
QString iniFmpsPath=apppath+"/fmps.ini";
QSettings *fmps=new QSettings(iniFmpsPath,QSettings::IniFormat);
fmps->setIniCodec("GB2312");
QString printerName = fmps->value("DRIVER/driver").toString();
bNewPos=!printerName.compare(QString("中科英泰"));
if(bNewPos){
m_print_lib.setFileName("pos_ad_dll.dll");
if(m_print_lib.load())
{
m_pOpenPrinter = (fmOpenPrinter)m_print_lib.resolve("OpenPrinter");
m_pPrintText = (fmPrintText)m_print_lib.resolve("PrintText");
m_pPrintBitmapFile = (fmPrintBitmapFile)m_print_lib.resolve("PrintBitmapFile");
m_pClosePrinter = (fmClosePrinter)m_print_lib.resolve("ClosePrinterEx");
m_pBeginPrint = (fmBeginPrint)m_print_lib.resolve("BeginPrint");
m_pCutPaper = (fmCutPaper)m_print_lib.resolve("CutPaper");
m_pPrintHex= (fmPrintHex)m_print_lib.resolve("PrintHex");
}
if(m_pOpenPrinter&&m_pPrintText&&m_pPrintBitmapFile&&m_pClosePrinter&&m_pBeginPrint&&m_pCutPaper&&m_pPrintHex)
{
m_b_load_sucfl=true;
}
}
else{
QSettings *fmps=new QSettings(apppath+"/fmps.ini",QSettings::IniFormat);
fmps->setIniCodec("GB2312");
fmps->setValue("MODEWIDTH/width",printsize);
......@@ -51,6 +93,8 @@ FmPrinter::FmPrinter()
{
m_b_load_sucfl=true;
}
}
}
......@@ -267,3 +311,140 @@ QString FmPrinter::_Penny2Dollar(int penny)
double dollar = (double)penny/100;
return QString::number(dollar,'f',2);
}
bool FmPrinter::_fmPrintData(QString data)
{
if(m_b_load_sucfl){
if(HS_OK==m_pOpenPrinter()){
m_pPrintText(data.toLocal8Bit().data(),35);
// char tmpCode[40];
// m_pPrintHex("\x0A",1);
// _GetBarcodeHex("111222333444555666777",tmpCode);
// m_pPrintHex(tmpCode,21+4);
m_pPrintHex("\x0A",1);
m_pPrintHex("\x0A",1);
m_pBeginPrint(0);
m_pCutPaper(0);
m_pClosePrinter();
return true;
}
}
return false;
}
bool FmPrinter::_fmPrintData(OrderObject* pData)
{
QString apppath=QCoreApplication::applicationDirPath();
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;
}
if(HS_OK==m_pOpenPrinter()){
QString titleBmp=apppath+"/Kitty.bmp";
QString bottomBmp=apppath+"/Look.bmp";
QString helloBmp=apppath+"/Hello.bmp";
m_pPrintHex("\x1B\x61\x1",3); //居中
m_pPrintBitmapFile(titleBmp.toLocal8Bit().data(),0);
m_pPrintText("-----------------------------------------------",20);
m_pPrintHex("\x0A",1); //换行
m_pPrintText((QString("(鲜丰水果)")+storename).toLocal8Bit().data(),30);
m_pPrintHex("\x1B\x61\x1",3); //居中
m_pPrintText(QString("#"+QString::number(pData->order_index)+pData->channelName).toLocal8Bit().data(),40);
m_pPrintHex("\x1B\x61\x1",3); //居中
m_pPrintText(pData->delivery_party.toLocal8Bit().data(),30);
m_pPrintText("===============================================",20);
m_pBeginPrint(0);
char tmpCode[40];
if(pData->order_id.length()<35){
m_pPrintHex("\x1B\x61\x1",3); //居中
_GetBarcodeHex(pData->order_id,tmpCode);
m_pPrintHex(tmpCode,pData->order_id.length()+4);
m_pPrintHex("\x0A",1);
}
//m_pPrintBitmapFile(barcodePath.toLocal8Bit().data(),0);
m_pPrintHex("\x1B\x61\x0",3); //左对齐
m_pPrintText((QString("订单编号:")+pData->order_id).toLocal8Bit().data(),20);
m_pPrintHex("\x0A",1);
m_pPrintText((QString("下单时间:")+QDateTime::fromTime_t(pData->create_time).toString("yy-MM-dd hh:mm")).toLocal8Bit().data(),20);
m_pPrintHex("\x0A",1);
m_pPrintText((QString("期望送达时间:")+deliveryStr).toLocal8Bit().data(),20);
m_pPrintHex("\x0A",1);
m_pPrintText("-----------------------------------------------",20);
m_pPrintHex("\x1B\x61\x1",3); //居中
m_pBeginPrint(0);
m_pPrintBitmapFile(helloBmp.toLocal8Bit().data(),0);
m_pPrintText("-----------------------------------------------",20);
m_pPrintHex("\x0A",1);
m_pPrintHex("\x1B\x61\x0",3); //左对齐
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));
m_pPrintText(name.toLocal8Bit().data(),40);
m_pPrintText(price.toLocal8Bit().data(),40);
}
m_pPrintHex("\x0A",1);
m_pPrintText((QString("在线支付:")+_Penny2Dollar(pData->total_fee-pData->discount_fee)).toLocal8Bit().data(),20);
m_pPrintHex("\x0A",1);
m_pPrintText("-----------------------------------------------",20);
m_pPrintHex("\x0A",1);
m_pPrintText((QString("姓名:")+pData->customer).toLocal8Bit().data(),20);
m_pPrintHex("\x0A",1);
m_pPrintText((QString("地址:")+pData->address).toLocal8Bit().data(),20);
m_pPrintHex("\x0A",1);
m_pPrintText((QString("电话:")+pData->phone).toLocal8Bit().data(),20);
if(!pData->remark.isEmpty()){
m_pPrintHex("\x0A",1);
m_pPrintText((QString("备注:")+pData->remark).toLocal8Bit().data(),20);
}
m_pPrintHex("\x0A",1);
m_pPrintText("-----------------------------------------------",20);
m_pPrintHex("\x1B\x61\x1",3); //居中
m_pBeginPrint(0);
m_pPrintBitmapFile(bottomBmp.toLocal8Bit().data(),0);
m_pPrintHex("\x0A",1);
m_pPrintHex("\x0A",1);
m_pBeginPrint(0);
m_pCutPaper(0);
m_pClosePrinter();
}
return true;
}
void FmPrinter::_GetBarcodeHex(QString inData,char* outData)
{
outData[0]=0x1D;
outData[1]=0x6B;
outData[2]=0x48;
int iLength=inData.length();
outData[3]=iLength;
for(int i=0;i<iLength;i++){
outData[4+i]=(int)inData.at(i).unicode();
}
}
......@@ -6,6 +6,10 @@
#include "Model/productObject.h"
#include <QLibrary>
//中科英泰POS 打印接口返回值
#define HS_OK 0xF0
#define HS_ERROR 0xFF
class FMPRINTERSHARED_EXPORT FmPrinter
{
public:
......@@ -40,11 +44,25 @@ private:
* 返回:打印数据
* */
bool _RawDataToPrinter(QString printerName, QString data);
/* 功能:打印数据(新pos:中科英泰)
* 参数:[1]信息内容
* 返回:打印数据
* */
bool _fmPrintData(QString data);
bool _fmPrintData(OrderObject* pData);
/* 功能:获取订单号对应条码
* 参数:[1]订单号 [2]条码
* 返回:
* */
void _GetBarcodeHex(QString inData,char* outData);
/* 功能:将【分】转化为【元】
* 参数:[1]分
* 返回:元
* */
QString _Penny2Dollar(int penny);
typedef bool ( *OpenPrinter)( void);
typedef void ( *PrintText)( char str[]);
......@@ -52,6 +70,24 @@ private:
typedef bool ( *LoadAddress)(void);
typedef int (*Total)(int);
//新pos打印机接口
typedef int ( *fmOpenPrinter)( void);
typedef int ( *fmPrintText)( char *str,int fontSize);
typedef int ( *fmPrintBitmapFile)(char* bmpFileName, int LabelAngle);
typedef int ( *fmClosePrinter)(void);
typedef int ( *fmBeginPrint)(int i);
typedef int ( *fmCutPaper)(int i);
typedef int ( *fmPrintHex)(char* pStr,int nLength);
fmOpenPrinter m_pOpenPrinter;
fmPrintText m_pPrintText;
fmPrintBitmapFile m_pPrintBitmapFile;
fmClosePrinter m_pClosePrinter;
fmBeginPrint m_pBeginPrint;
fmCutPaper m_pCutPaper;
fmPrintHex m_pPrintHex;
bool bNewPos; //pos版本,用于区分新旧版本,调用打印库不一样
int total;
QLibrary m_print_lib;
bool m_b_load_sucfl;
......@@ -60,7 +96,7 @@ private:
ClosePrinter f_ClosePrinter;
LoadAddress f_LaodAddress;
Total f_total;
QString _Penny2Dollar(int penny);
QString m_appUrl;
};
......
......@@ -24,7 +24,9 @@ SettingForm::SettingForm(QWidget *parent) :
ui->settingCbxPrinter->setCurrentIndex(i);
}
}
ui->settingCbxPrinter->addItem("中科英泰");
ui->settingCbxPrinter->addItem("默认");
// ui->settingCbxPrinter->addItem("COM1");
// ui->settingCbxPrinter->addItem("COM2");
// ui->settingCbxPrinter->addItem("COM3");
......
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