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
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
199 additions
and
85 deletions
+199
-85
fmPrinter/fmPrinter.cpp
+136
-82
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
;
}
}
QByteArray
array
=
file
.
readAll
();
str_print
=
QString
::
fromUtf8
(
array
);
QStringList
cfgList
;
cfgList
=
pData
->
printcfg
.
split
(
'|'
);
QString
FmPrinter
::
_GetPrintData
(
OrderObject
*
pData
)
{
qDebug
()
<<
__FUNCTION__
;
QString
result_str
;
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
// 分辨出所有篮子信息
QString
str_comd_list
;
QMultiMap
<
QString
,
ProductObject
*
>
map
;
QListIterator
<
ProductObject
*>
listIte
(
pData
->
proList
);
while
(
listIte
.
hasNext
())
{
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
);
}
else
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
));
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
)
.
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"
));
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
);
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
)
{
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
);
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
;
}
// 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.
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