Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FmTakeaway
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
shangshang.dai
FmTakeaway
Commits
afd2683a
Commit
afd2683a
authored
Jul 31, 2017
by
shangshang.dai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add 1:新增打印相关代码
parent
8278d2d5
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
209 additions
and
95 deletions
+209
-95
fmPrinter/fmPrinter.cpp
+146
-92
fmPrinter/fmPrinter.h
+22
-1
fmTakeaway/Control/flowControl.cpp
+3
-0
fmTakeaway/DTools/configManger.cpp
+5
-2
fmTakeaway/DTools/configManger.h
+1
-0
fmTakeaway/Model/orderObject.cpp
+10
-0
fmTakeaway/Model/orderObject.h
+7
-0
fmTakeaway/Model/productObject.cpp
+10
-0
fmTakeaway/Model/productObject.h
+5
-0
No files found.
fmPrinter/fmPrinter.cpp
View file @
afd2683a
#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
)
...
...
fmPrinter/fmPrinter.h
View file @
afd2683a
...
...
@@ -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
fmTakeaway/Control/flowControl.cpp
View file @
afd2683a
...
...
@@ -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();
...
...
fmTakeaway/DTools/configManger.cpp
View file @
afd2683a
...
...
@@ -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
()
...
...
fmTakeaway/DTools/configManger.h
View file @
afd2683a
...
...
@@ -91,6 +91,7 @@ private:
// 程序配置和用户配置
QSettings
*
m_config
;
QSettings
*
m_userConfig
;
QSettings
*
m_fmps
;
};
#endif // CONFIGMANGER_H
fmTakeaway/Model/orderObject.cpp
View file @
afd2683a
...
...
@@ -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
;
...
...
fmTakeaway/Model/orderObject.h
View file @
afd2683a
...
...
@@ -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
);
...
...
fmTakeaway/Model/productObject.cpp
View file @
afd2683a
#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
;
...
...
fmTakeaway/Model/productObject.h
View file @
afd2683a
...
...
@@ -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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment