Commit afd2683a by shangshang.dai

Add 1:新增打印相关代码

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