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
7a00d66d
Commit
7a00d66d
authored
Oct 18, 2018
by
刘帅
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加对商米打印机的支持
parent
31985820
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
284 additions
and
14 deletions
+284
-14
fmPrinter/fmPrinter.cpp
+251
-14
fmPrinter/fmPrinter.h
+31
-0
fmPrinter/fmPrinter.pro
+2
-0
No files found.
fmPrinter/fmPrinter.cpp
View file @
7a00d66d
...
...
@@ -11,26 +11,48 @@ FmPrinter &FmPrinter::GetInstance()
return
fp
;
}
FmPrinter
::~
FmPrinter
()
{
if
(
m_UAN_lib
.
isLoaded
())
m_UAN_lib
.
unload
();
}
bool
FmPrinter
::
DoPrint
(
QString
printerName
,
OrderObject
*
pData
)
{
bool
rlt
;
if
(
bNewPos
){
switch
(
printer
)
{
case
ZHONGKEYINGTAI
:
rlt
=
_fmPrintData
(
pData
);
}
else
{
rlt
=
_RawDataToPrinter
(
printerName
,
_GetPrintData
(
pData
));
break
;
case
SHANGMI
:
rlt
=
_shangmiPrinter
(
pData
);
break
;
case
OTHER
:
rlt
=
_RawDataToPrinter
(
printerName
,
_GetPrintData
(
pData
));
break
;
default
:
break
;
}
return
rlt
;
}
bool
FmPrinter
::
TestPrint
(
QString
printerName
,
QString
data
)
{
bool
rlt
;
if
(
bNewPos
){
bool
rlt
;
switch
(
printer
)
{
case
ZHONGKEYINGTAI
:
rlt
=
_fmPrintData
(
data
);
}
else
{
rlt
=
_RawDataToPrinter
(
printerName
,
data
);
break
;
case
SHANGMI
:
rlt
=
_shangmiPrinter
(
data
);
break
;
case
OTHER
:
rlt
=
_RawDataToPrinter
(
printerName
,
data
);
break
;
default
:
break
;
}
return
rlt
;
}
...
...
@@ -55,9 +77,16 @@ FmPrinter::FmPrinter()
fmps
->
setIniCodec
(
"GB2312"
);
QString
printerName
=
fmps
->
value
(
"DRIVER/driver"
).
toString
();
bNewPos
=!
printerName
.
compare
(
QString
(
"中科英泰"
));
if
(
!
printerName
.
compare
(
QString
(
"中科英泰"
)))
printer
=
ZHONGKEYINGTAI
;
else
if
(
!
printerName
.
compare
(
QString
(
"SHANGMI"
)))
printer
=
SHANGMI
;
else
printer
=
OTHER
;
if
(
bNewPos
){
switch
(
printer
)
{
case
ZHONGKEYINGTAI
:
m_print_lib
.
setFileName
(
"pos_ad_dll.dll"
);
if
(
m_print_lib
.
load
())
{
...
...
@@ -74,8 +103,23 @@ FmPrinter::FmPrinter()
{
m_b_load_sucfl
=
true
;
}
}
else
{
break
;
case
SHANGMI
:
m_UAN_lib
.
setFileName
(
"pos_ad_UAN.dll"
);
if
(
m_UAN_lib
.
load
())
{
m_printTextWithStyles
=
(
PrintTextWithStyles
*
)
m_UAN_lib
.
resolve
(
"PrintTextWithStyles"
);
m_printBitmapFile
=
(
PrintBitmapFile
*
)
m_UAN_lib
.
resolve
(
"PrintBitmapFile"
);
m_beginPrint
=
(
BeginPrint
*
)
m_UAN_lib
.
resolve
(
"BeginPrint"
);
m_printTicketBarcode
=
(
PrintTicketBarcode
*
)
m_UAN_lib
.
resolve
(
"PrintTicketBarcode"
);
}
if
(
m_printTextWithStyles
&&
m_printBitmapFile
&&
m_beginPrint
&&
m_printTicketBarcode
)
{
m_b_load_sucfl
=
true
;
}
break
;
case
OTHER
:
{
QSettings
*
fmps
=
new
QSettings
(
apppath
+
"/fmps.ini"
,
QSettings
::
IniFormat
);
fmps
->
setIniCodec
(
"GB2312"
);
fmps
->
setValue
(
"MODEWIDTH/width"
,
printsize
);
...
...
@@ -93,8 +137,12 @@ FmPrinter::FmPrinter()
{
m_b_load_sucfl
=
true
;
}
delete
fmps
;
}
break
;
default
:
break
;
}
}
...
...
@@ -277,6 +325,169 @@ QString FmPrinter::_GetPrintData(OrderObject *pData)
return
str_list
;
}
bool
FmPrinter
::
_PrintBodyForShangmiPrinter
(
OrderObject
*
pData
)
{
QString
str_comd_list
;
total
=
pData
->
proList
.
count
()
*
2
;
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
));
str_comd_list
.
append
(
QString
(
name
+
"
\n
"
+
price
+
"
\n
"
));
}
foreach
(
QString
comm
,
pData
->
dis_desc
)
{
str_comd_list
.
append
(
QString
(
"(赠)"
+
comm
+
"$"
));
}
QStringList
cfgList
;
cfgList
=
pData
->
printcfg
.
split
(
'|'
);
QString
invoice
;
if
(
pData
->
has_invoiced
)
{
invoice
=
QString
(
"是"
);
if
(
pData
->
invoice_title
.
isEmpty
())
{
pData
->
invoice_title
=
QString
(
"无"
);
}
}
else
{
invoice
=
QString
(
"否"
);
pData
->
invoice_title
=
QString
(
"NULL"
);
}
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
;
}
QString
remark
;
if
(
pData
->
remark
.
isEmpty
())
{
remark
=
"NULL"
;
}
else
{
remark
=
QString
(
"备注:"
)
+
pData
->
remark
.
remove
(
QChar
(
'|'
),
Qt
::
CaseInsensitive
);
}
QString
str0
=
pData
->
channelName
;
QString
strUrl
(
"http://qr10.cn/Du2Cfw"
);
QString
strDesc
(
"下载APP 积分换好礼"
);
QString
bPrintImg
(
"1"
);
QString
bPrintCode
(
"1"
);
QString
bPrintXXCHC
(
"1"
);
if
(
pData
->
status
==
20
)
{
str0
=
pData
->
channelName
+
"(顾客申请退单)"
;
remark
=
QString
(
"请马上联系站点沟通顾客,否则取消单将算入门店异常取消单,影响门店排名,站点电话在平台软件订单里面点击更多联系人"
);
strUrl
=
"NULL"
;
strDesc
=
"NULL"
;
bPrintImg
=
"0"
;
bPrintCode
=
"0"
;
deliveryStr
=
"NULL"
;
bPrintXXCHC
=
"0"
;
}
else
if
(
pData
->
status
==
21
)
{
str0
=
pData
->
channelName
+
"(顾客申请部分退单)"
;
remark
=
QString
(
"请马上联系站点沟通顾客,否则取消单将算入门店异常取消单,影响门店排名,站点电话在平台软件订单里面点击更多联系人"
);
strUrl
=
"NULL"
;
strDesc
=
"NULL"
;
bPrintImg
=
"0"
;
bPrintCode
=
"0"
;
deliveryStr
=
"NULL"
;
bPrintXXCHC
=
"0"
;
}
QString
section1
,
section2
,
section3
,
section4
,
section5
;
QString
text
=
section1
.
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
).
append
(
QString
(
"(鲜丰水果)"
)
+
storename
).
append
(
"
\n
"
);
m_printTextWithStyles
(
text
.
toLocal8Bit
().
data
(),
24
,
0
,
0
);
bool
rlt
=
m_beginPrint
(
0
)
==
HS_OK
?
true
:
false
;
text
=
section2
.
append
(
"#"
+
QString
::
number
(
pData
->
order_index
)).
append
(
str0
).
append
(
"
\n
"
);
m_printTextWithStyles
(
text
.
toLocal8Bit
().
data
(),
32
,
0
,
0
);
rlt
=
rlt
&&
m_beginPrint
(
0
)
==
HS_OK
?
true
:
false
;
text
=
section3
.
append
(
pData
->
order_type
==
3
?
"自提"
:
pData
->
delivery_party
).
append
(
"
\n
"
).
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
);
m_printTextWithStyles
(
text
.
toLocal8Bit
().
data
(),
24
,
0
,
0
);
rlt
=
rlt
&&
m_beginPrint
(
0
)
==
HS_OK
?
true
:
false
;
QString
order_id
=
pData
->
order_view_id
.
isEmpty
()
?
pData
->
order_id
:
pData
->
order_view_id
;
m_printTicketBarcode
(
100
,
73
,
2
,
order_id
.
toLocal8Bit
().
data
());
rlt
=
rlt
&&
m_beginPrint
(
0
)
==
HS_OK
?
true
:
false
;
text
=
section4
.
append
(
QString
(
"订单编号:"
)).
append
(
pData
->
order_view_id
.
isEmpty
()
?
pData
->
order_id
:
pData
->
order_view_id
).
append
(
"
\n
"
).
append
(
QString
(
"下单时间:"
)).
append
(
QDateTime
::
fromTime_t
(
pData
->
create_time
).
toString
(
"yy-MM-dd hh:mm"
)).
append
(
"
\n
"
).
append
(
QString
(
"期望送达时间:"
)).
append
(
deliveryStr
).
append
(
"
\n
"
).
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
);
m_printTextWithStyles
(
text
.
toLocal8Bit
().
data
(),
24
,
0
,
0
);
rlt
=
rlt
&&
m_beginPrint
(
0
)
==
HS_OK
?
true
:
false
;
QString
apppath
=
QCoreApplication
::
applicationDirPath
();
QString
helloBmp
=
apppath
+
"/Hello.bmp"
;
m_printBitmapFile
(
helloBmp
.
toLocal8Bit
().
data
(),
0
);
rlt
=
rlt
&&
m_beginPrint
(
7
)
==
HS_OK
?
true
:
false
;
text
=
section5
.
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
).
append
(
remark
).
append
(
"
\n
"
).
append
(
QString
(
"发票:"
)).
append
(
invoice
).
append
(
"
\n
"
).
append
(
QString
(
"发票抬头:"
)).
append
(
pData
->
invoice_title
).
append
(
"
\n
"
).
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
).
append
(
str_comd_list
).
append
(
"
\n
"
).
append
(
QString
(
"商品数量:"
)).
append
(
QString
::
number
(
pData
->
total_amount
)).
append
(
"
\n
"
).
// append(QString("商品总额:")).append(_Penny2Dollar(pData->total_fee-pData->send_fee)).append("\n").
// append(QString("优惠金额:")).append(_Penny2Dollar(pData->discount_fee)).append("\n").
// append(QString("配送费:")).append(_Penny2Dollar(pData->send_fee)).append("\n").
append
(
QString
(
"在线支付:"
)).
append
(
_Penny2Dollar
(
pData
->
total_fee
-
pData
->
discount_fee
)).
append
(
"
\n
"
).
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
).
append
(
QString
(
"姓名:"
)).
append
(
pData
->
customer
).
append
(
"
\n
"
).
append
(
QString
(
"地址:"
)).
append
(
pData
->
address
).
append
(
"
\n
"
).
append
(
QString
(
"电话:"
)).
append
(
pData
->
phone
).
append
(
"
\n
"
).
//append(bPrintXXCHC).append("\n").
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
).
append
(
strUrl
).
append
(
"
\n
"
).
append
(
strDesc
).
append
(
"
\n
"
).
append
(
QString
(
"-------------------------------"
)).
append
(
"
\n
"
);
m_printTextWithStyles
(
text
.
toLocal8Bit
().
data
(),
24
,
0
,
0
);
rlt
=
rlt
&&
m_beginPrint
(
0
)
==
HS_OK
?
true
:
false
;
return
rlt
;
}
bool
FmPrinter
::
_RawDataToPrinter
(
QString
printerName
,
QString
data
)
{
QByteArray
tmpData
=
data
.
toLocal8Bit
();
...
...
@@ -312,6 +523,32 @@ QString FmPrinter::_Penny2Dollar(int penny)
return
QString
::
number
(
dollar
,
'f'
,
2
);
}
bool
FmPrinter
::
_shangmiPrinter
(
OrderObject
*
pData
)
{
QString
apppath
=
QCoreApplication
::
applicationDirPath
();
QString
titleBmp
=
apppath
+
"/Kitty.bmp"
;
QString
bottomBmp
=
apppath
+
"/Look.bmp"
;
m_printBitmapFile
(
titleBmp
.
toLocal8Bit
().
data
(),
0
);
int
rlt1
=
m_beginPrint
(
7
);
bool
rlt2
=
_PrintBodyForShangmiPrinter
(
pData
);
m_printBitmapFile
(
bottomBmp
.
toLocal8Bit
().
data
(),
0
);
int
rlt3
=
m_beginPrint
(
7
);
m_beginPrint
(
8
);
return
(
rlt1
==
HS_OK
&&
rlt2
&&
rlt3
==
HS_OK
);
}
bool
FmPrinter
::
_shangmiPrinter
(
QString
data
)
{
m_printTextWithStyles
(
data
.
toLocal8Bit
().
data
(),
24
,
0
,
0
);
int
rlt
=
m_beginPrint
(
0
);
m_beginPrint
(
8
);
return
(
rlt
==
HS_OK
);
}
bool
FmPrinter
::
_fmPrintData
(
QString
data
)
{
if
(
m_b_load_sucfl
){
...
...
fmPrinter/fmPrinter.h
View file @
7a00d66d
...
...
@@ -5,6 +5,8 @@
#include "Model/orderObject.h"
#include "Model/productObject.h"
#include <QLibrary>
#include <functional>
#include <iostream>
//中科英泰POS 打印接口返回值
#define HS_OK 0xF0
...
...
@@ -15,6 +17,7 @@ class FMPRINTERSHARED_EXPORT FmPrinter
public
:
static
FmPrinter
&
GetInstance
();
~
FmPrinter
();
/* 功能:打印订单
* 参数:[1]物理打印机名[2]订单对象
* 返回:true成功false失败
...
...
@@ -39,6 +42,13 @@ private:
* 返回:打印数据
* */
QString
_GetPrintData
(
OrderObject
*
pData
);
/* 功能:从订单对象获取打印数据
* 参数:[1]订单对象
* 返回:打印数据
* */
bool
_PrintBodyForShangmiPrinter
(
OrderObject
*
pData
);
/* 功能:打印数据
* 参数:[1]物理打印机名[2]信息内容
* 返回:打印数据
...
...
@@ -79,6 +89,27 @@ private:
typedef
int
(
*
fmCutPaper
)(
int
i
);
typedef
int
(
*
fmPrintHex
)(
char
*
pStr
,
int
nLength
);
//商米打印机接口
QLibrary
m_UAN_lib
;
using
PrintTextWithStyles
=
int
(
char
*
,
int
,
int
,
int
);
using
PrintBitmapFile
=
int
(
char
*
,
int
);
using
BeginPrint
=
int
(
int
);
using
PrintTicketBarcode
=
int
(
int
,
int
,
int
,
char
*
);
std
::
function
<
PrintTextWithStyles
>
m_printTextWithStyles
;
std
::
function
<
PrintBitmapFile
>
m_printBitmapFile
;
std
::
function
<
BeginPrint
>
m_beginPrint
;
std
::
function
<
PrintTicketBarcode
>
m_printTicketBarcode
;
bool
_shangmiPrinter
(
OrderObject
*
pData
);
bool
_shangmiPrinter
(
QString
data
);
enum
PRINTERTYPE
{
//打印机类型
SHANGMI
,
ZHONGKEYINGTAI
,
OTHER
};
PRINTERTYPE
printer
;
fmOpenPrinter
m_pOpenPrinter
;
fmPrintText
m_pPrintText
;
fmPrintBitmapFile
m_pPrintBitmapFile
;
...
...
fmPrinter/fmPrinter.pro
View file @
7a00d66d
...
...
@@ -9,6 +9,8 @@ QT -= gui
TARGET
=
fmPrinter
TEMPLATE
=
lib
CONFIG
+=
C
++
11
DEFINES
+=
FMPRINTER_LIBRARY
INCLUDEPATH
+=
..
/
fmTakeaway
...
...
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