Commit afd2683a by shangshang.dai

Add 1:新增打印相关代码

parent 8278d2d5
#include "fmPrinter.h" #include "fmPrinter.h"
#include <windows.h>
#include <winspool.h>
#include <QFile> #include <QFile>
#include <QCoreApplication> #include <QCoreApplication>
#include <QDateTime> #include <QDateTime>
#include <QSettings>
#include <QDebug>
FmPrinter &FmPrinter::GetInstance() FmPrinter &FmPrinter::GetInstance()
{ {
...@@ -13,6 +13,7 @@ FmPrinter &FmPrinter::GetInstance() ...@@ -13,6 +13,7 @@ FmPrinter &FmPrinter::GetInstance()
bool FmPrinter::DoPrint(QString printerName, OrderObject *pData) bool FmPrinter::DoPrint(QString printerName, OrderObject *pData)
{ {
qDebug() << __FUNCTION__;
return _RawDataToPrinter(printerName, _GetPrintData(pData)); return _RawDataToPrinter(printerName, _GetPrintData(pData));
} }
...@@ -21,112 +22,165 @@ bool FmPrinter::TestPrint(QString printerName, QString data) ...@@ -21,112 +22,165 @@ bool FmPrinter::TestPrint(QString printerName, QString data)
return _RawDataToPrinter(printerName, data); return _RawDataToPrinter(printerName, data);
} }
QString FmPrinter::_GetPrintData(OrderObject *pData) void FmPrinter::setStoreName(QString name)
{ {
QString str_list; storename=name;
QString str_print; }
QString str_comd_list;
QString filePath = QString("%1/printformat.txt").arg(QCoreApplication::applicationDirPath()); FmPrinter::FmPrinter()
QFile file(filePath); {
if( !file.open( QFile::ReadOnly)){ qDebug() <<__FUNCTION__;
return QString("无法打开printformat.txt!"); m_print_lib.setFileName(QString("%1/fmposdll.dll").arg(QCoreApplication::applicationDirPath()));
if(m_print_lib.load())
{
f_OpenPrinter = (OpenPrinter)m_print_lib.resolve("inItConfig");
f_PrintText = (PrintText)m_print_lib.resolve("PrintData");
f_InitPrinter = (InitPrinter)m_print_lib.resolve("Initconfigini");
f_ClosePrinter = (ClosePrinter)m_print_lib.resolve("unloaddll");
f_LaodAddress = (LoadAddress)m_print_lib.resolve("LoadAddress");
} }
for(int i=0; i<pData->proList.count(); i++) if(f_OpenPrinter&&f_PrintText&&f_ClosePrinter&&f_LaodAddress)
{ {
QString name, price; qDebug() << "Load Successful";
name = pData->proList[i]->name; m_b_load_sucfl=true;
price = QString("\r\n x%1 %2 %4\r\n").arg(pData->proList[i]->productAmount).arg(_Penny2Dollar(pData->proList[i]->price))
.arg(_Penny2Dollar(pData->proList[i]->price*pData->proList[i]->productAmount));
str_comd_list.append(QString(name+price));
} }
}
QByteArray array = file.readAll(); QString FmPrinter::_GetPrintData(OrderObject *pData)
str_print = QString::fromUtf8(array); {
qDebug() << __FUNCTION__;
QStringList cfgList; QString result_str;
cfgList = pData->printcfg.split('|');
foreach (QString v, cfgList) { // 分辨出所有篮子信息
QString print, fee; QString str_comd_list;
if(!v.compare("顾客留存")) QMultiMap<QString, ProductObject* > map;
{ QListIterator<ProductObject*> listIte(pData->proList);
fee = "应付金额:¥"+_Penny2Dollar(pData->user_fee); while(listIte.hasNext())
}else if(!v.compare("商户留存"))
{
if(!pData->pay_type.compare("货到付款"))
{
fee = "应收现金:¥"+_Penny2Dollar(pData->shop_fee);
}else
{ {
fee = "应收现金:¥ 0"; ProductObject * pObj = listIte.next();
map.insert(pObj->bsk_num, pObj);
} }
}else int index = 0;
int count = map.uniqueKeys().count();
foreach(QString key, map.uniqueKeys())
{ {
if(!pData->pay_type.compare("货到付款")) foreach(ProductObject* pObj, map.values(key))
{ {
fee = "应收现金:¥"+_Penny2Dollar(pData->user_fee); QString name, price;
}else name = pObj->name;
price = QString("%1 x%2 %3").arg(_Penny2Dollar(pObj->price)).arg(pObj->productAmount)
.arg(_Penny2Dollar(pObj->price*pObj->productAmount));
str_comd_list.append(QString(name+"#"+price+"#"));
}
index++;
if(index!=count)
{ {
fee = "应收现金:¥ 0"; str_comd_list.append("$");
} }
} }
print = str_print.arg(v).arg(pData->channelName).arg(pData->order_id).arg(pData->pay_type) result_str.append("#"+QString::number(pData->order_index));
.arg(pData->customer).arg(pData->phone).arg(pData->address.replace("埇","Yong")).arg(str_comd_list) result_str.append("|");
.arg(_Penny2Dollar(pData->total_fee-pData->send_fee)).arg(_Penny2Dollar(pData->discount_fee)).arg(_Penny2Dollar(pData->send_fee)).arg(pData->total_amount) result_str.append(pData->channelName);
.arg(fee).arg(QDateTime::fromTime_t(pData->create_time).toString("yy-MM-dd hh:mm")).arg(pData->remark).arg(pData->courier_name).arg(pData->courier_phone) result_str.append("|");
.arg(pData->delivery_time==0? "立即送出":QDateTime::fromTime_t(pData->delivery_time).toString("yyyy-MM-dd hh:mm:ss")); result_str.append(storename);
result_str.append("|");
result_str.append(pData->pay_type);
result_str.append("|");
result_str.append(QDateTime::fromTime_t(pData->create_time).toString("yy-MM-dd hh:mm"));
result_str.append("|");
result_str.append(pData->remark.isEmpty()?"无":pData->remark);
result_str.append("|");
result_str.append(str_comd_list);
result_str.append("|");
result_str.append(QString::number(pData->package_fee));
result_str.append("|");
result_str.append(_Penny2Dollar(pData->discount_fee));
result_str.append("|");
result_str.append(_Penny2Dollar(pData->send_fee));
result_str.append("|");
result_str.append(_Penny2Dollar(pData->total_fee));
result_str.append("|");
result_str.append(pData->address);
result_str.append("|");
result_str.append(pData->customer);
result_str.append("|");
result_str.append(pData->phone);
result_str.append("|");
result_str.append(pData->order_id);
str_list.append(print); qDebug() <<" 打印数据" << result_str;
} return result_str;
}
return str_list; QString _GetPrintIni()
{
QString path = QString("%1/printer.ini").arg(QCoreApplication::applicationDirPath());
QSettings config(path, QSettings::IniFormat);
QString ini;
ini.append(config.value("Printer/Name").toString());
ini.append("|");
ini.append(config.value("Printer/printType").toString());
ini.append("|");
ini.append(config.value("Printer/PaperWidth").toString());
ini.append("|");
ini.append(config.value("Printer/levlel").toString());
ini.append("|");
ini.append(config.value("Printer/parallel").toString());
ini.append("|");
ini.append(config.value("Printer/type").toString());
ini.append("|");
ini.append(config.value("Printer/usb").toString());
ini.append("|");
ini.append(config.value("Printer/IP").toString());
ini.append("|");
ini.append( config.value("Printer/Printlabel").toString());
ini.append("|");
ini.append( config.value("Printer/LogDays").toString());
ini.append("|");
return ini;
} }
bool FmPrinter::_RawDataToPrinter(QString printerName, QString data) bool FmPrinter::_RawDataToPrinter(QString printerName, QString data)
{ {
LPTSTR szPrinterName = (LPTSTR)printerName.toStdWString().c_str(); qDebug() << __FUNCTION__;
Q_UNUSED(printerName)
QByteArray tmpData = data.toLocal8Bit(); QByteArray tmpData = data.toLocal8Bit();
LPBYTE lpData=(LPBYTE)tmpData.data(); char temchar[2048]={0x0};
DWORD dwCount = strlen((char*)lpData); QByteArray iniData = _GetPrintIni().toLocal8Bit();
BOOL bStatus = FALSE; qDebug() << iniData;
HANDLE hPrinter = NULL; char inichar[2048]={0x0};
DOC_INFO_1 DocInfo; strcpy(inichar,iniData.data());
DWORD dwJob = 0L; if(m_b_load_sucfl)
DWORD dwBytesWritten = 0L; {
strcpy(temchar,tmpData.data());
// Open a handle to the printer.
bStatus = OpenPrinter( szPrinterName, &hPrinter, NULL ); if(!f_LaodAddress())
if (bStatus) { {
// Fill in the structure with info about this "document." qDebug() << "load address";
DocInfo.pDocName = (LPTSTR)L"TakeawayDoc"; return false;
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = (LPTSTR)L"RAW";
// Inform the spooler the document is beginning.
dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo );
if (dwJob > 0) {
// Start a page.
bStatus = StartPagePrinter( hPrinter );
if (bStatus) {
// Send the data to the printer.
bStatus = WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten);
EndPagePrinter (hPrinter);
} }
// Inform the spooler that the document is ending.
EndDocPrinter( hPrinter ); f_InitPrinter(inichar);
if(!f_OpenPrinter())
{
qDebug() << "f_OpenPrinter";
f_ClosePrinter();
return false;
} }
// Close the printer handle.
ClosePrinter( hPrinter ); f_PrintText(temchar);
memset(temchar,0x0,sizeof(temchar));
f_ClosePrinter();
return true;
} }
// Check to see if correct number of bytes were written. else{
if (!bStatus || (dwBytesWritten != dwCount)) { memset(temchar,0x0,sizeof(temchar));
bStatus = FALSE; return false;
} else {
bStatus = TRUE;
} }
return bStatus;
} }
QString FmPrinter::_Penny2Dollar(int penny) QString FmPrinter::_Penny2Dollar(int penny)
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "fmprinter_global.h" #include "fmprinter_global.h"
#include "Model/orderObject.h" #include "Model/orderObject.h"
#include "Model/productObject.h" #include "Model/productObject.h"
#include <QLibrary>
class FMPRINTERSHARED_EXPORT FmPrinter class FMPRINTERSHARED_EXPORT FmPrinter
{ {
...@@ -21,8 +22,10 @@ public: ...@@ -21,8 +22,10 @@ public:
* */ * */
bool TestPrint(QString printerName, QString data); bool TestPrint(QString printerName, QString data);
void setStoreName(QString name);
private: private:
FmPrinter(){} FmPrinter();
FmPrinter(FmPrinter const&); FmPrinter(FmPrinter const&);
FmPrinter& operator=(FmPrinter const&); FmPrinter& operator=(FmPrinter const&);
...@@ -41,6 +44,24 @@ private: ...@@ -41,6 +44,24 @@ private:
* 返回:元 * 返回:元
* */ * */
QString _Penny2Dollar(int penny); QString _Penny2Dollar(int penny);
typedef bool ( *OpenPrinter)( void);
typedef void ( *InitPrinter)( char str[]);
typedef void ( *PrintText)( char str[]);
typedef void ( *ClosePrinter)(void);
typedef bool ( *LoadAddress)(void);
typedef int (*Total)(int);
QString storename;
int total;
QLibrary m_print_lib;
bool m_b_load_sucfl;
OpenPrinter f_OpenPrinter;
InitPrinter f_InitPrinter;
PrintText f_PrintText;
ClosePrinter f_ClosePrinter;
LoadAddress f_LaodAddress;
Total f_total;
}; };
#endif // FMPRINTER_H #endif // FMPRINTER_H
...@@ -57,6 +57,7 @@ bool FlowControl::_Login() ...@@ -57,6 +57,7 @@ bool FlowControl::_Login()
QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login); QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login);
return false; return false;
} }
sendJson = DataManger::GetInstance().GetLoginData(ConfigManger::GetInstance().GetPrefix()+m_storeId, ConfigManger::GetInstance().GetPassword(), m_posId, m_cashierId); sendJson = DataManger::GetInstance().GetLoginData(ConfigManger::GetInstance().GetPrefix()+m_storeId, ConfigManger::GetInstance().GetPassword(), m_posId, m_cashierId);
emit showAlert(AlertForm::LOADING, "正在登录......"); emit showAlert(AlertForm::LOADING, "正在登录......");
...@@ -80,6 +81,8 @@ bool FlowControl::_Login() ...@@ -80,6 +81,8 @@ bool FlowControl::_Login()
emit hideAlert(); emit hideAlert();
emit setStoreInfo(m_storeId); emit setStoreInfo(m_storeId);
FmPrinter::GetInstance().setStoreName(recvJson["store_name"].toString());
_PullOrder(); _PullOrder();
// TODO(用于鲜丰演示) // TODO(用于鲜丰演示)
//_SynStock(); //_SynStock();
......
...@@ -14,8 +14,11 @@ ConfigManger::ConfigManger() ...@@ -14,8 +14,11 @@ ConfigManger::ConfigManger()
QString appDir = QApplication::applicationDirPath(); QString appDir = QApplication::applicationDirPath();
QString config = QString("%1/%2").arg(appDir).arg(CONFIG_NAME); QString config = QString("%1/%2").arg(appDir).arg(CONFIG_NAME);
QString userConfig = QString("%1/%2").arg(appDir).arg(USERCONFIG_NAME); QString userConfig = QString("%1/%2").arg(appDir).arg(USERCONFIG_NAME);
QString fmpsConfig = QString("%1/%2").arg(appDir).arg("printer.ini");
m_config = new QSettings(config, QSettings::IniFormat); m_config = new QSettings(config, QSettings::IniFormat);
m_userConfig = new QSettings(userConfig, QSettings::IniFormat); m_userConfig = new QSettings(userConfig, QSettings::IniFormat);
m_fmps = new QSettings(fmpsConfig,QSettings::IniFormat);
m_fmps->setIniCodec("GB2312");
} }
ConfigManger::SqlConnectInfo ConfigManger::GetSqlConnectInfo() ConfigManger::SqlConnectInfo ConfigManger::GetSqlConnectInfo()
...@@ -43,12 +46,12 @@ QUrl ConfigManger::GetServerUrl() ...@@ -43,12 +46,12 @@ QUrl ConfigManger::GetServerUrl()
QString ConfigManger::GetPrinterName() QString ConfigManger::GetPrinterName()
{ {
return m_userConfig->value(INI_PRINTERNAME).toString(); return m_fmps->value(INI_PRINTERNAME).toString();
} }
void ConfigManger::SetPrinterName(const QString &printer) void ConfigManger::SetPrinterName(const QString &printer)
{ {
m_userConfig->setValue(INI_PRINTERNAME, printer); m_fmps->setValue("Printer/Name", QString::fromLocal8Bit(printer.toLocal8Bit().data()));
} }
QPoint ConfigManger::GetFloatInitPostion() QPoint ConfigManger::GetFloatInitPostion()
......
...@@ -91,6 +91,7 @@ private: ...@@ -91,6 +91,7 @@ private:
// 程序配置和用户配置 // 程序配置和用户配置
QSettings *m_config; QSettings *m_config;
QSettings *m_userConfig; QSettings *m_userConfig;
QSettings *m_fmps;
}; };
#endif // CONFIGMANGER_H #endif // CONFIGMANGER_H
...@@ -19,6 +19,16 @@ void OrderObject::FromJson(const QJsonObject &json) ...@@ -19,6 +19,16 @@ void OrderObject::FromJson(const QJsonObject &json)
return; return;
} }
int OrderObject::getpackage_fee() const
{
return package_fee;
}
void OrderObject::setpackage_fee(const int &v)
{
package_fee = v;
}
int OrderObject::getpay() const int OrderObject::getpay() const
{ {
return pay; return pay;
......
...@@ -57,6 +57,8 @@ public: ...@@ -57,6 +57,8 @@ public:
Q_PROPERTY (int product_fee READ getproduct_fee WRITE setproduct_fee) Q_PROPERTY (int product_fee READ getproduct_fee WRITE setproduct_fee)
Q_PROPERTY (int pay READ getpay WRITE setpay) Q_PROPERTY (int pay READ getpay WRITE setpay)
Q_PROPERTY (int package_fee READ getpackage_fee WRITE setpackage_fee)
QString address; //地址 QString address; //地址
QString channel; //渠道 QString channel; //渠道
...@@ -99,9 +101,14 @@ public: ...@@ -99,9 +101,14 @@ public:
int service_fee; //外卖平台服务费 int service_fee; //外卖平台服务费
int product_fee; //商品总价 int product_fee; //商品总价
int package_fee; //打包费
int pay; int pay;
protected: protected:
int getpackage_fee() const ;
void setpackage_fee(const int& v);
int getpay() const; int getpay() const;
void setpay(const int& v); void setpay(const int& v);
......
#include "productObject.h" #include "productObject.h"
QString ProductObject::getbsk_num() const
{
return bsk_num;
}
void ProductObject::setbsk_num(const QString &v)
{
bsk_num = v;
}
QString ProductObject::getPid() const QString ProductObject::getPid() const
{ {
return pid; return pid;
......
...@@ -15,14 +15,19 @@ public: ...@@ -15,14 +15,19 @@ public:
Q_PROPERTY (QString upc READ getupc WRITE setupc) Q_PROPERTY (QString upc READ getupc WRITE setupc)
Q_PROPERTY (int price READ getprice WRITE setprice) Q_PROPERTY (int price READ getprice WRITE setprice)
Q_PROPERTY (int productAmount READ getProductAmount WRITE setProductAmount) Q_PROPERTY (int productAmount READ getProductAmount WRITE setProductAmount)
Q_PROPERTY(QString bsk_num READ getbsk_num WRITE setbsk_num)
QString pid; QString pid;
QString name; QString name;
QString upc; QString upc;
int price; int price;
int productAmount; int productAmount;
QString bsk_num;
protected: protected:
QString getbsk_num() const;
void setbsk_num(const QString& v);
QString getPid() const ; QString getPid() const ;
void setPid(const QString& v); void setPid(const QString& v);
......
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