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
9a008913
Commit
9a008913
authored
Jun 20, 2018
by
guanghui.cui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加“中科英泰”pos打印
parent
6233f948
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
237 additions
and
18 deletions
+237
-18
fmPrinter/fmPrinter.cpp
+197
-16
fmPrinter/fmPrinter.h
+38
-2
fmTakeaway/settingForm.cpp
+2
-0
run/Hello.bmp
+0
-0
run/pos_ad_dll.dll
+0
-0
No files found.
fmPrinter/fmPrinter.cpp
View file @
9a008913
...
...
@@ -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,29 +42,59 @@ 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
();
QSettings
*
fmps
=
new
QSettings
(
apppath
+
"/fmps.ini"
,
QSettings
::
IniFormat
);
QString
iniFmpsPath
=
apppath
+
"/fmps.ini"
;
QSettings
*
fmps
=
new
QSettings
(
iniFmpsPath
,
QSettings
::
IniFormat
);
fmps
->
setIniCodec
(
"GB2312"
);
fmps
->
setValue
(
"MODEWIDTH/width"
,
printsize
);
m_print_lib
.
setFileName
(
"fmposdll.dll"
);
if
(
m_print_lib
.
load
())
{
f_OpenPrinter
=
(
OpenPrinter
)
m_print_lib
.
resolve
(
"inItConfig"
);
f_PrintText
=
(
PrintText
)
m_print_lib
.
resolve
(
"PrintData"
);
f_ClosePrinter
=
(
ClosePrinter
)
m_print_lib
.
resolve
(
"unloaddll"
);
f_LaodAddress
=
(
LoadAddress
)
m_print_lib
.
resolve
(
"LoadAddress"
);
//test
f_total
=
(
Total
)
m_print_lib
.
resolve
(
"Total"
);
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
;
}
}
if
(
f_OpenPrinter
&&
f_PrintText
&&
f_ClosePrinter
&&
f_LaodAddress
&&
f_total
)
//test
{
m_b_load_sucfl
=
true
;
else
{
QSettings
*
fmps
=
new
QSettings
(
apppath
+
"/fmps.ini"
,
QSettings
::
IniFormat
);
fmps
->
setIniCodec
(
"GB2312"
);
fmps
->
setValue
(
"MODEWIDTH/width"
,
printsize
);
m_print_lib
.
setFileName
(
"fmposdll.dll"
);
if
(
m_print_lib
.
load
())
{
f_OpenPrinter
=
(
OpenPrinter
)
m_print_lib
.
resolve
(
"inItConfig"
);
f_PrintText
=
(
PrintText
)
m_print_lib
.
resolve
(
"PrintData"
);
f_ClosePrinter
=
(
ClosePrinter
)
m_print_lib
.
resolve
(
"unloaddll"
);
f_LaodAddress
=
(
LoadAddress
)
m_print_lib
.
resolve
(
"LoadAddress"
);
//test
f_total
=
(
Total
)
m_print_lib
.
resolve
(
"Total"
);
}
if
(
f_OpenPrinter
&&
f_PrintText
&&
f_ClosePrinter
&&
f_LaodAddress
&&
f_total
)
//test
{
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
();
}
}
fmPrinter/fmPrinter.h
View file @
9a008913
...
...
@@ -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
;
};
...
...
fmTakeaway/settingForm.cpp
View file @
9a008913
...
...
@@ -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");
...
...
run/Hello.bmp
0 → 100644
View file @
9a008913
209 KB
run/pos_ad_dll.dll
0 → 100644
View file @
9a008913
File added
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