Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fmPOS
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
zhenfei.zhang
fmPOS
Commits
56b36951
Commit
56b36951
authored
Nov 28, 2017
by
gujin.wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.修改卡券核心插件的部分内容 2.添加启动FMDbMonitor的功能,当fmPOS启动时,自动启动FMDbMonitor监控程序
parent
5370b406
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
141 additions
and
70 deletions
+141
-70
FreemudPOS/FreemudPOS.pro
+9
-2
FreemudPOS/fmp_app.cpp
+9
-1
FreemudPOS/monitorwrapper.cpp
+38
-0
FreemudPOS/monitorwrapper.h
+24
-0
debug/bins/log.props
+2
-2
fmp_redeem/fmp_redeem.cpp
+55
-60
fmp_redeem/fmp_redeem.h
+1
-2
fmp_redeem/fmp_redeem_i.h
+1
-1
release/bins/log.props
+2
-2
No files found.
FreemudPOS/FreemudPOS.pro
View file @
56b36951
...
...
@@ -9,11 +9,16 @@ TEMPLATE = app
INCLUDEPATH
+=
$$
PWD
/../
include
/
ctk
\
$$
PWD
/../
include
/
interface
\
#Library path
LIBS
+=
-
L
$$
PWD
/../
lib
CONFIG
(
debug
,
debug
|
release
)
{
DESTDIR
=
$$
PWD
/../
debug
/
bins
LIBS
+=
-
lCTKCored
-
lCTKPluginFrameworkd
}
else
{
DESTDIR
=
$$
PWD
/../
release
/
bins
LIBS
+=
-
lCTKCore
-
lCTKPluginFramework
}
win32
{
...
...
@@ -21,7 +26,9 @@ win32 {
}
HEADERS
+=
\
..
/
include
/
application
/
fm_singleton
.
h
..
/
include
/
application
/
fm_singleton
.
h
\
monitorwrapper
.
h
SOURCES
+=
\
fmp_app
.
cpp
fmp_app
.
cpp
\
monitorwrapper
.
cpp
FreemudPOS/fmp_app.cpp
View file @
56b36951
#
include
<
fmp_manager_i
.
h
>
#include "fmp_logger_i.h"
#include <QDebug>
#include <QPluginLoader>
#include <QSettings>
#include <QDir>
#include <QDirIterator>
#include <qtservice.h>
#include <QProcess>
#ifdef Q_OS_WIN
#include <Windows.h>
...
...
@@ -15,6 +17,7 @@
#include "../application/fm_singleton.h"
#include "../fmp_settings/fmp_settings_def.h"
#include "monitorwrapper.h"
class
FMPAppService
:
public
QtService
<
FMSingleApplication
>
{
...
...
@@ -64,7 +67,7 @@ private:
int
main
(
int
argc
,
char
**
argv
)
{
QString
app_path
=
QString
::
fromLocal8Bit
(
argv
[
0
]);
QString
app_path
=
QString
::
fromLocal8Bit
(
argv
[
0
]);
app_path
.
replace
(
"
\\
"
,
"/"
);
QString
app_dir
=
app_path
.
section
(
"/"
,
0
,
-
2
);
QString
app_name
=
app_path
.
section
(
"/"
,
-
1
);
...
...
@@ -78,6 +81,11 @@ int main(int argc, char** argv)
return
svc
->
exec
();
#else
svc
.
start
();
//先启动FMDbMonitor.exe
MonitorWrapper
mw
(
app_path
);
mw
.
StartMonitor
();
return
qApp
->
exec
();
#endif
}
...
...
FreemudPOS/monitorwrapper.cpp
0 → 100644
View file @
56b36951
#
include
"monitorwrapper.h"
#include "fmp_logger_i.h"
#include "fmp_home_i.h"
#include <QDebug>
#include <QApplication>
MonitorWrapper
::
MonitorWrapper
(
QString
appPath
,
QObject
*
parent
)
:
QObject
(
parent
)
{
this
->
appPath
=
appPath
;
process
.
setProgram
(
this
->
appPath
+
"/../../monitor/FMDbMonitor.exe"
);
connect
(
&
process
,
SIGNAL
(
started
()),
this
,
SLOT
(
StartSuccess
()));
connect
(
&
process
,
SIGNAL
(
error
(
QProcess
::
ProcessError
)),
this
,
SLOT
(
StartFailed
(
QProcess
::
ProcessError
)));
}
MonitorWrapper
::~
MonitorWrapper
()
{
process
.
kill
();
}
void
MonitorWrapper
::
StartMonitor
()
{
process
.
start
();
}
void
MonitorWrapper
::
StartSuccess
()
{
FMP_ERROR
()
<<
QString
::
fromLocal8Bit
(
"FMDbMonitor 启动成功"
);
}
void
MonitorWrapper
::
StartFailed
(
QProcess
::
ProcessError
)
{
FMP_ERROR
()
<<
QString
::
fromLocal8Bit
(
"FMDbMonitor 发生错误. "
)
<<
process
.
errorString
();
process
.
kill
();
qApp
->
exit
();
}
\ No newline at end of file
FreemudPOS/monitorwrapper.h
0 → 100644
View file @
56b36951
#
ifndef
MONITORWRAPPER_H
#define MONITORWRAPPER_H
#include <QObject>
#include <QProcess>
//该类用来管理FMDbMonitor.exe的启动和退出
class
MonitorWrapper
:
public
QObject
{
Q_OBJECT
public
:
explicit
MonitorWrapper
(
QString
appPath
,
QObject
*
parent
=
0
);
~
MonitorWrapper
();
void
StartMonitor
();
private
slots
:
void
StartSuccess
();
void
StartFailed
(
QProcess
::
ProcessError
);
private
:
QString
appPath
;
QProcess
process
;
};
#endif // MONITORWRAPPER_H
debug/bins/log.props
View file @
56b36951
...
...
@@ -4,8 +4,8 @@ log4j.appender.fa.File = ${FMP_APP}/log/fmp.log
log4j.appender.fa.MaxFileSize=512KB
log4j.appender.fa.MaxBackupIndex=10
log4j.appender.fa.layout = org.apache.log4j.PatternLayout
log4j.appender.fa.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
log4j.appender.fa.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
%n
log4j.appender.ca = org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout = org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
log4j.appender.ca.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
%n
fmp_redeem/fmp_redeem.cpp
View file @
56b36951
...
...
@@ -113,11 +113,10 @@ QJsonObject FMPRedeem::Reverse(QJsonObject request)
return
retJson
;
}
QJsonObject
FMPRedeem
::
Redeem
(
const
double
needPay
,
const
QJsonArray
&
productsInfo
)
QJsonObject
FMPRedeem
::
Redeem
(
const
QJsonArray
&
productsInfo
)
{
FMP_DEBUG
()
<<
"Recv redeem data: "
<<
QJsonDocument
(
productsInfo
).
toJson
(
QJsonDocument
::
Compact
);
_products_info
=
productsInfo
;
_needPay
=
needPay
;
//读取门店信息
QString
apppath
=
QCoreApplication
::
applicationDirPath
();
QSettings
settings
(
QString
(
"%1/FreemudPOS.ini"
).
arg
(
apppath
),
QSettings
::
IniFormat
);
...
...
@@ -252,58 +251,53 @@ QJsonObject FMPRedeem::ShowForUnConsum(QJsonObject json)
_redeem_json
[
"operator_id"
]
=
_operator_id
;
_redeem_json
[
"business_date"
]
=
QDate
::
currentDate
().
toString
(
"yyyyMMdd"
);
if
(
couponType
==
0
){
//商品券
if
(
!
IsContinue
(
SearchJsonObject
(
json
,
"paid"
).
toInt
()))
{
QJsonObject
result
;
result
[
"statusCode"
]
=
FM_API_WINDOWCLOSE
;
result
[
"msg"
]
=
QString
::
fromLocal8Bit
(
"窗口关闭"
);
return
result
;
}
if
(
couponType
==
0
){
//商品券
QJsonObject
transaction
;
QJsonArray
transactions
;
transaction
[
"code"
]
=
coupon
;
transaction
[
"ebcode"
]
=
ebcode
;
//得到该券所对应商品id,目前一张券只对应一种商品
QString
canUsedProduct
=
SearchJsonObject
(
json
,
"pid"
).
toString
();
//遍历传入的商品信息,查找是否有相同的商品id,
//若有则进行核销,否则,直接返回失败
int
i
;
for
(
i
=
0
;
i
<
_products_info
.
size
();
i
++
){
QJsonObject
obj
=
_products_info
[
i
].
toObject
();
if
(
obj
[
"pid"
].
toString
()
==
canUsedProduct
)
break
;
//根据服务端返回的可适用商品信息,校验pos请求中的商品信息是否匹配
QJsonArray
redeemProducts
;
int
seq
=
1
;
QJsonArray
posProducts
=
_products_info
;
QJsonArray
serverProducts
=
SearchJsonObject
(
json
,
"products"
).
toArray
();
for
(
int
i
=
0
;
i
<
serverProducts
.
size
();
i
++
)
{
QJsonObject
serverProduct
=
serverProducts
[
i
].
toObject
();
QString
serverPid
=
SearchJsonObject
(
serverProduct
,
"pid"
).
toString
();
int
serverNum
=
SearchJsonObject
(
serverProduct
,
"number"
).
toInt
();
for
(
int
i
=
0
;
i
<
posProducts
.
size
();
i
++
)
{
QJsonObject
posProduct
=
posProducts
[
i
].
toObject
();
QString
posPid
=
SearchJsonObject
(
posProduct
,
"pid"
).
toString
();
int
posNum
=
SearchJsonObject
(
posProduct
,
"consume_num"
).
toInt
();
if
(
posPid
==
serverPid
)
{
QJsonObject
redeemProduct
;
redeemProduct
.
insert
(
"seq"
,
seq
);
redeemProduct
.
insert
(
"pid"
,
posPid
);
//redeemProduct.insert("consume_num", posNum);
redeemProduct
.
insert
(
"consume_num"
,
qMin
(
serverNum
,
posNum
));
//目前,一张券兑换一个商品
redeemProducts
.
append
(
redeemProduct
);
seq
++
;
break
;
}
}
}
if
(
i
>=
_products_info
.
size
())
if
(
redeemProducts
.
isEmpty
())
{
//不存在对应商品
return
ShowForMismatch
(
json
);
}
QJsonArray
products
;
QJsonObject
product
;
product
.
insert
(
"seq"
,
1
);
product
.
insert
(
"pid"
,
_products_info
[
i
].
toObject
()[
"pid"
]);
//product.insert("consume_num", _products_info[i].toObject()["consume_num"]);
product
.
insert
(
"consume_num"
,
1
);
products
.
append
(
product
);
transaction
[
"products"
]
=
products
;
transaction
[
"products"
]
=
redeemProducts
;
transactions
.
append
(
transaction
);
_redeem_json
[
"transactions"
]
=
transactions
;
}
if
(
couponType
==
1
){
//代金券
if
(
!
IsContinue
(
SearchJsonObject
(
json
,
"amount"
).
toInt
()))
{
QJsonObject
result
;
result
[
"statusCode"
]
=
FM_API_WINDOWCLOSE
;
result
[
"msg"
]
=
QString
::
fromLocal8Bit
(
"窗口关闭"
);
return
result
;
}
if
(
couponType
==
1
){
//代金券
QJsonObject
transaction
;
transaction
[
"code"
]
=
coupon
;
transaction
[
"ebcode"
]
=
ebcode
;
...
...
@@ -332,12 +326,12 @@ QJsonObject FMPRedeem::ShowForUnConsum(QJsonObject json)
{
redeemResult
[
"discount"
]
=
SearchJsonObject
(
json
,
"paid"
).
toInt
();
redeemResult
[
"pid"
]
=
SearchJsonObject
(
json
,
"pid"
).
toString
();
redeemResult
[
"couponType"
]
=
"
20004
"
;
redeemResult
[
"couponType"
]
=
"
0
"
;
}
else
if
(
couponType
==
1
)
//代金券
{
redeemResult
[
"discount"
]
=
SearchJsonObject
(
json
,
"amount"
).
toInt
();
redeemResult
[
"couponType"
]
=
"
20003
"
;
redeemResult
[
"couponType"
]
=
"
1
"
;
}
redeemResult
[
"couponDesc"
]
=
act_name
;
redeemResult
[
"code"
]
=
coupon
;
...
...
@@ -383,7 +377,8 @@ QJsonObject FMPRedeem::ShowForExpird(QJsonObject json)
QJsonObject
FMPRedeem
::
ShowForErr
(
QJsonObject
json
)
{
int
statusCode
=
json
[
"statusCode"
].
toInt
();
ErrCodeDialog
::
showForErr
(
_coupon
,
QString
(
"error: "
).
append
(
QString
::
number
(
statusCode
)));
QString
msg
=
json
[
"msg"
].
toString
();
ErrCodeDialog
::
showForErr
(
_coupon
,
QString
(
"%1: %2"
).
arg
(
QString
::
number
(
statusCode
)).
arg
(
msg
));
return
json
;
}
...
...
@@ -403,23 +398,23 @@ QJsonObject FMPRedeem::GetRedeemJson() const
bool
FMPRedeem
::
IsContinue
(
int
couponAmount
)
{
if
(
_needPay
<
couponAmount
/
100.0
)
{
//如果卡券抵扣额已大于待付金额,则给出警告提示
QMessageBox
msg
;
msg
.
setWindowTitle
(
QString
::
fromLocal8Bit
(
"警告"
));
msg
.
setText
(
QString
::
fromLocal8Bit
(
"卡券总额已超出应付金额!是否继续?"
));
msg
.
setStandardButtons
(
QMessageBox
::
Yes
|
QMessageBox
::
Cancel
);
msg
.
setIcon
(
QMessageBox
::
Warning
);
//msg.setWindowModality(Qt::ApplicationModal);
msg
.
setWindowFlags
(
msg
.
windowFlags
()
|
Qt
::
WindowStaysOnTopHint
);
msg
.
setAttribute
(
Qt
::
WA_QuitOnClose
,
false
);
int
choice
=
msg
.
exec
();
if
(
choice
!=
QMessageBox
::
Yes
)
{
return
false
;
}
}
//
if(_needPay < couponAmount/100.0)
//
{
//
//如果卡券抵扣额已大于待付金额,则给出警告提示
//
QMessageBox msg;
//
msg.setWindowTitle(QString::fromLocal8Bit("警告"));
//
msg.setText(QString::fromLocal8Bit("卡券总额已超出应付金额!是否继续?"));
//
msg.setStandardButtons(QMessageBox::Yes|QMessageBox::Cancel);
//
msg.setIcon(QMessageBox::Warning);
//
//msg.setWindowModality(Qt::ApplicationModal);
//
msg.setWindowFlags(msg.windowFlags() | Qt::WindowStaysOnTopHint);
//
msg.setAttribute(Qt::WA_QuitOnClose, false);
//
int choice = msg.exec();
//
if(choice != QMessageBox::Yes)
//
{
//
return false;
//
}
//
}
return
true
;
}
...
...
fmp_redeem/fmp_redeem.h
View file @
56b36951
...
...
@@ -29,7 +29,7 @@ public:
explicit
FMPRedeem
(
const
FMPContext
context
);
virtual
~
FMPRedeem
();
QJsonObject
Redeem
(
const
double
needPay
,
const
QJsonArray
&
productsInfo
);
//券码核销
QJsonObject
Redeem
(
const
QJsonArray
&
productsInfo
);
//券码核销
QJsonObject
Reverse
(
QJsonObject
request
);
QJsonObject
GetRedeemJson
()
const
;
...
...
@@ -55,7 +55,6 @@ private:
QJsonValue
SearchJsonArray
(
QJsonArray
&
searchJson
,
QString
searchKey
);
private
:
bool
_inited
;
double
_needPay
;
QString
_store_id
;
QString
_station_id
;
QString
_operator_id
;
...
...
fmp_redeem/fmp_redeem_i.h
View file @
56b36951
...
...
@@ -20,7 +20,7 @@ public:
connect
(
this
,
&
FMPRedeemInterface
::
TriggerUninit
,
this
,
&
FMPRedeemInterface
::
OnTriggerUninit
);
}
virtual
QJsonObject
Redeem
(
const
double
needPay
,
const
QJsonArray
&
productsInfo
)
=
0
;
//券码核销
virtual
QJsonObject
Redeem
(
const
QJsonArray
&
productsInfo
)
=
0
;
//券码核销
virtual
QJsonObject
Reverse
(
QJsonObject
request
)
=
0
;
//卡券冲正
virtual
QJsonObject
GetRedeemJson
()
const
=
0
;
...
...
release/bins/log.props
View file @
56b36951
...
...
@@ -4,8 +4,8 @@ log4j.appender.fa.File = ${FMP_APP}/log/fmp.log
log4j.appender.fa.MaxFileSize=512KB
log4j.appender.fa.MaxBackupIndex=10
log4j.appender.fa.layout = org.apache.log4j.PatternLayout
log4j.appender.fa.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
log4j.appender.fa.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
%n
log4j.appender.ca = org.apache.log4j.ConsoleAppender
log4j.appender.ca.layout = org.apache.log4j.PatternLayout
log4j.appender.ca.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
log4j.appender.ca.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss,SSS}[%-5p]%F:%L %m %n
%n
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