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
52e819c6
Commit
52e819c6
authored
Nov 20, 2018
by
戴尚尚
Browse files
Options
Browse Files
Download
Plain Diff
1
parents
1e88c64c
2707a861
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 @
52e819c6
...
...
@@ -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 @
52e819c6
...
...
@@ -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 @
52e819c6
...
...
@@ -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