Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FMVip_LXJ
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
FMVip_LXJ
Commits
442e33db
Commit
442e33db
authored
Feb 23, 2017
by
NitefullWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. 修改激活的步骤。 2. 登录接口新增认证类型。 3. 去掉激活和锁定接口。
parent
81d610f9
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
144 additions
and
65 deletions
+144
-65
FMVip_LXJ/entityCard/reader.cpp
+43
-25
FMVip_LXJ/entityCard/reader.h
+6
-4
FMVip_LXJ/global.h
+12
-1
FMVip_LXJ/task/session.h
+2
-1
FMVip_LXJ/task/tasklogin.cpp
+10
-3
FMVip_LXJ/task/taskmanage.cpp
+10
-10
FMVip_LXJ/windows/fmviplogin.cpp
+33
-2
FMVip_LXJ/windows/fmviplogin.h
+7
-2
fmvip_card_reader/fm_mwrf32/fm_mwrf32.cpp
+11
-10
fmvip_card_reader/fm_mwrf32/fm_mwrf32.h
+2
-2
fmvip_card_reader/test/activateworker.cpp
+2
-2
fmvip_card_reader/test/mainwindow.cpp
+6
-3
No files found.
FMVip_LXJ/entityCard/reader.cpp
View file @
442e33db
#include "reader.h"
#
include
"reader.h"
Reader
*
Reader
::
instance
()
{
...
...
@@ -10,7 +10,7 @@ Reader::Reader(QObject *parent) : QObject(parent)
{
s_end
=
true
;
s_initsuc
=
false
;
isDefaultPassword
=
false
;
_
isDefaultPassword
=
false
;
s_reader
=
NULL
;
this
->
moveToThread
(
&
m_thread
);
m_thread
.
start
();
...
...
@@ -38,27 +38,44 @@ bool Reader::readVipNO()
{
QString
vipNo
;
QString
error
;
QString
uuid
;
while
(
s_end
&&
!
ReadCard
(
s_reader
,
s_readerCfg
.
Section
,
vipNo
,
error
))
while
(
s_end
&&
(
!
ReadCard
(
s_reader
,
s_readerCfg
.
Section
,
vipNo
,
uuid
,
error
)
||
_isDefaultPassword
))
{
// 如果是用默认密码读卡,则进行激活操作
if
(
_isDefaultPassword
)
{
emit
needActivate
();
qDebug
()
<<
tr
(
"修改卡[%1]密码"
).
arg
(
uuid
);
while
(
s_end
&&
!
ActivateCard
(
s_reader
,
s_readerCfg
.
Section
,
s_readerCfg
.
Password
,
error
))
{
}
emit
activateFinished
();
_isDefaultPassword
=
false
;
connectReader
();
break
;
}
if
(
error
==
ReaderError
.
ConnectedError
||
error
==
ReaderError
.
PasswordError
)
{
qDebug
()
<<
"Readcard failed: "
<<
error
;
if
(
error
==
ReaderError
.
PasswordError
)
{
isDefaultPassword
=
!
isDefaultPassword
;
_isDefaultPassword
=
true
;
}
connectReader
();
}
Sleep
(
500
);
}
if
(
!
s_end
)
{
condition
.
wakeAll
();
return
false
;
}
emit
getVipNO
(
vipNo
);
qDebug
()
<<
__FUNCTION__
<<
vipNo
<<
uuid
;
emit
getVipNO
(
vipNo
,
uuid
);
return
true
;
}
void
Reader
::
connectReader
()
...
...
@@ -71,35 +88,36 @@ void Reader::connectReader()
if
(
s_initsuc
)
{
DisConnectDevice
(
s_reader
);
}
// do
// {
int
tryTimes
=
3
;
do
{
if
(
sign
)
{
if
(
isDefaultPassword
)
{
if
(
_
isDefaultPassword
)
{
sign
=
ConnectDevice
(
s_readerCfg
.
Port
,
s_readerCfg
.
Baud
,
s_readerCfg
.
Section
,
s_readerCfg
.
Password
,
s_readerCfg
.
Password
Default
,
s_reader
,
error
);
}
else
{
sign
=
ConnectDevice
(
s_readerCfg
.
Port
,
s_readerCfg
.
Baud
,
s_readerCfg
.
Section
,
s_readerCfg
.
Password
Default
,
s_readerCfg
.
Password
,
s_reader
,
error
);
}
}
if
(
!
sign
)
{
s_reader
=
NULL
;
qDebug
()
<<
"Connect device failed: "
<<
error
;
qDebug
()
<<
"Connect
reader
device failed: "
<<
error
;
}
else
s_initsuc
=
sign
;
//
Sleep(500);
// }while(s_end && !sign
);
Sleep
(
500
);
}
while
(
s_end
&&
!
sign
&&
--
tryTimes
);
}
}
...
...
@@ -125,15 +143,15 @@ void Reader::disconnectReader()
mutex
.
unlock
();
}
bool
Reader
::
activateCard
()
{
bool
sign
=
false
;
QString
error
;
if
(
s_initsuc
)
{
sign
=
ActivateCard
(
s_reader
,
s_readerCfg
.
Section
,
s_readerCfg
.
Password
,
error
);
}
if
(
!
sign
)
{
qDebug
()
<<
"Activate card failed: "
<<
error
;
}
return
sign
;
}
//
bool Reader::activateCard()
//
{
//
bool sign = false;
//
QString error;
//
if(s_initsuc) {
//
sign = ActivateCard(s_reader, s_readerCfg.Section, s_readerCfg.Password, error);
//
}
//
if(!sign) {
//
qDebug() << "Activate card failed: " << error;
//
}
//
return sign;
//
}
FMVip_LXJ/entityCard/reader.h
View file @
442e33db
#ifndef READER_H
#
ifndef
READER_H
#define READER_H
#include "global.h"
...
...
@@ -40,7 +40,7 @@ private:
private
:
bool
s_end
;
bool
s_initsuc
;
bool
isDefaultPassword
;
bool
_
isDefaultPassword
;
QMutex
mutex
;
QWaitCondition
condition
;
HANDLE
s_reader
;
...
...
@@ -48,12 +48,14 @@ private:
ReaderCfg
s_readerCfg
;
signals
:
void
getVipNO
(
QString
VipNO
);
void
getVipNO
(
QString
VipNO
,
QString
uuid
);
void
needActivate
();
void
activateFinished
();
public
slots
:
void
disconnectReader
();
bool
readVipNO
();
bool
activateCard
();
//
bool activateCard();
};
#endif // READER_H
FMVip_LXJ/global.h
View file @
442e33db
#ifndef GLOBAL_H
#
ifndef
GLOBAL_H
#define GLOBAL_H
#include <QObject>
#include <QApplication>
...
...
@@ -46,6 +46,14 @@ enum FM_TYPE {
FM_Order_Revoke
};
enum
Member_Type
{
Unknow
=
0
,
PayCode
,
Phone
,
Account
,
EntityCard
};
// 根据POS属性名,从配置文件中读取服务属性名
class
FMPropsMap
{
...
...
@@ -80,7 +88,9 @@ struct{
const
QString
FM_Type
=
"FM_Type"
;
const
QString
TransId
=
"trans_id"
;
const
QString
Member_sign
=
"member_sign"
;
const
QString
Member_type
=
"member_type"
;
const
QString
IsActive
=
"is_active"
;
const
QString
Inner_code
=
"inner_code"
;
const
QString
Name
=
"name"
;
const
QString
Birthday
=
"birthday"
;
...
...
@@ -141,6 +151,7 @@ struct{
const
QString
Discount
=
"discount"
;
// 卡激活锁定
const
QString
CardUUID
=
"CardUUID"
;
const
QString
CardNo
=
"card_no"
;
const
QString
CardStatus
=
"card_status"
;
const
QString
CardStatusDesc
=
"card_status_desc"
;
...
...
FMVip_LXJ/task/session.h
View file @
442e33db
#ifndef SESSION_H
#
ifndef
SESSION_H
#define SESSION_H
#include <QVariant>
...
...
@@ -32,6 +32,7 @@ public:
void
addData
(
const
QString
key
,
const
QVariant
value
);
void
addData
(
const
QString
key
,
const
QMap
<
QString
,
Coupon
>
couponMap
);
bool
contains
(
const
QString
key
)
{
return
_sessionDataMap
.
contains
(
key
);}
QMap
<
QString
,
Coupon
>
getCouponMap
(
const
QString
key
);
QMap
<
QString
,
QVariant
>
sessionDataMap
()
const
{
return
this
->
_sessionDataMap
;}
...
...
FMVip_LXJ/task/tasklogin.cpp
View file @
442e33db
#include "tasklogin.h"
#
include
"tasklogin.h"
#include "fmviplogin.h"
TaskLogin
::
TaskLogin
(
QJsonObject
&
jsonObj
,
Session
*
session
,
QObject
*
parent
)
...
...
@@ -10,7 +10,6 @@ void TaskLogin::setWindow()
{
_window
=
new
FMVipLogin
;
//connect(this, SIGNAL(TaskLogin::starReader), _window, SLOT(FMVipLogin::onstartreader));
connect
(
this
,
&
TaskLogin
::
starReader
,
qobject_cast
<
FMVipLogin
*>
(
_window
),
&
FMVipLogin
::
onstartreader
);
connect
(
qobject_cast
<
FMVipLogin
*>
(
_window
),
FMVipLogin
::
login
,
this
,
TaskLogin
::
onLogin
);
}
...
...
@@ -18,6 +17,8 @@ void TaskLogin::setWindow()
void
TaskLogin
::
packageServerReq
()
{
serverReqJsonObj
[
ServerProps
(
PosProps
.
Member_sign
)]
=
_session
->
data
(
PosProps
.
Member_sign
).
toString
();
serverReqJsonObj
[
ServerProps
(
PosProps
.
Member_type
)]
=
_session
->
data
(
PosProps
.
Member_type
).
toInt
();
serverReqJsonObj
[
ServerProps
(
PosProps
.
Inner_code
)]
=
_session
->
data
(
PosProps
.
Inner_code
).
toString
();
}
void
TaskLogin
::
packagePOSRsp
()
...
...
@@ -61,7 +62,13 @@ void TaskLogin::onLogin()
session
()
->
addData
(
PosProps
.
Mobile
,
getServerJsonValue
(
PosProps
.
Mobile
).
toString
());
session
()
->
addData
(
PosProps
.
Fm_open_id
,
account
);
session
()
->
addData
(
PosProps
.
Score
,
getServerJsonValue
(
PosProps
.
Score
).
toInt
());
session
()
->
addData
(
PosProps
.
IsActive
,
getServerJsonValue
(
PosProps
.
IsActive
).
toInt
());
int
isActive
=
getServerJsonValue
(
PosProps
.
IsActive
).
toInt
();
if
(
session
()
->
contains
(
PosProps
.
IsActive
)
&&
isActive
==
1
)
{
// 刷卡、服务端已激活则看卡密码是否已修改
qDebug
()
<<
tr
(
"Server isActive: %1. Card is default password: %2."
).
arg
(
isActive
).
arg
(
session
()
->
data
(
PosProps
.
IsActive
).
toInt
());
isActive
=
session
()
->
data
(
PosProps
.
IsActive
).
toInt
();
}
session
()
->
addData
(
PosProps
.
IsActive
,
isActive
);
// QMap<QString, QVariant> couponMap;
// for (auto value : getServerJsonValue(PosProps.CouponList).toArray())
...
...
FMVip_LXJ/task/taskmanage.cpp
View file @
442e33db
#include "taskmanage.h"
#
include
"taskmanage.h"
#include "fmvippanel.h"
#include "tasklogin.h"
#include "taskfund.h"
...
...
@@ -59,19 +59,19 @@ void TaskManage::onFund()
void
TaskManage
::
onLock
()
{
childTask
=
new
TaskCardLock
(
posReqJsonObj
,
this
->
session
());
doChildTask
();
//
childTask = new TaskCardLock(posReqJsonObj, this->session());
//
doChildTask();
}
void
TaskManage
::
onActivate
()
{
bool
isOk
=
Reader
::
instance
()
->
activateCard
();
if
(
!
isOk
)
{
FMMsgWnd
::
FailureWnd
(
"fmv: 激活卡时写卡失败!"
);
return
;
}
childTask
=
new
TaskCardActive
(
posReqJsonObj
,
this
->
session
());
doChildTask
();
//
bool isOk = Reader::instance()->activateCard();
//
if(!isOk) {
//
FMMsgWnd::FailureWnd("fmv: 激活卡时写卡失败!");
//
return;
//
}
//
childTask = new TaskCardActive(posReqJsonObj, this->session());
//
doChildTask();
}
void
TaskManage
::
doChildTask
()
...
...
FMVip_LXJ/windows/fmviplogin.cpp
View file @
442e33db
#include "fmviplogin.h"
#
include
"fmviplogin.h"
#include "ui_fmviplogin.h"
#include "fmvippanel.h"
#include <QFile>
...
...
@@ -15,6 +15,8 @@ FMVipLogin::FMVipLogin(QDialog *parent) :
ui
->
setupUi
(
this
);
connect
(
this
,
&
FMVipLogin
::
startreader
,
Reader
::
instance
(),
&
Reader
::
readVipNO
);
connect
(
Reader
::
instance
(),
&
Reader
::
getVipNO
,
this
,
&
FMVipLogin
::
readVipNO
);
connect
(
Reader
::
instance
(),
&
Reader
::
needActivate
,
this
,
&
FMVipLogin
::
onNeedActivate
);
connect
(
Reader
::
instance
(),
&
Reader
::
activateFinished
,
this
,
&
FMVipLogin
::
onActivateFinished
);
emit
startreader
();
ui
->
login_edit
->
setFocus
();
qDebug
()
<<
"main:"
<<
QThread
::
currentThreadId
();
...
...
@@ -36,13 +38,15 @@ void FMVipLogin::onstartreader()
emit
startreader
();
}
void
FMVipLogin
::
readVipNO
(
QString
VipNo
)
void
FMVipLogin
::
readVipNO
(
QString
VipNo
,
QString
uuid
)
{
ui
->
login_edit
->
setText
(
VipNo
);
QString
id
=
VipNo
;
_session
->
addData
(
PosProps
.
Member_sign
,
id
);
_session
->
addData
(
PosProps
.
Inner_code
,
uuid
);
_session
->
addData
(
PosProps
.
Member_type
,
Member_Type
::
EntityCard
);
this
->
setEnabled
(
false
);
...
...
@@ -51,6 +55,18 @@ void FMVipLogin::readVipNO(QString VipNo)
emit
login
();
}
void
FMVipLogin
::
onNeedActivate
()
{
activateInfoWnd
=
new
FMMsgWnd
(
this
);
activateInfoWnd
->
show
(
FMMsgWnd
::
T_Warning
,
tr
(
"fmv:此卡需要激活,请重新刷卡!"
));
}
void
FMVipLogin
::
onActivateFinished
()
{
activateInfoWnd
->
close
();
delete
activateInfoWnd
;
}
void
FMVipLogin
::
initWnd
(
Session
*
session
)
{
this
->
_session
=
session
;
...
...
@@ -86,6 +102,21 @@ void FMVipLogin::on_login_btn_clicked()
{
QString
id
=
ui
->
login_edit
->
text
();
switch
(
id
.
length
())
{
case
20
:
session
()
->
addData
(
PosProps
.
Member_type
,
Member_Type
::
PayCode
);
break
;
case
11
:
session
()
->
addData
(
PosProps
.
Member_type
,
Member_Type
::
Phone
);
break
;
case
10
:
session
()
->
addData
(
PosProps
.
Member_type
,
Member_Type
::
Account
);
break
;
default
:
session
()
->
addData
(
PosProps
.
Member_type
,
Member_Type
::
Unknow
);
break
;
}
_session
->
addData
(
PosProps
.
Member_sign
,
id
);
this
->
setEnabled
(
false
);
...
...
FMVip_LXJ/windows/fmviplogin.h
View file @
442e33db
#ifndef FMVIPLOGIN_H
#
ifndef
FMVIPLOGIN_H
#define FMVIPLOGIN_H
#include "fmvipwnd.h"
#include "fmmsgwnd.h"
class
QNetworkReply
;
...
...
@@ -30,8 +31,11 @@ signals:
public
slots
:
void
on_login_btn_clicked
();
void
on_edit_change
(
QString
numkey
);
void
readVipNO
(
QString
VipNO
);
void
readVipNO
(
QString
VipNO
,
QString
uuid
);
void
onstartreader
();
void
onNeedActivate
();
void
onActivateFinished
();
void
on_delete_clicked
();
void
on_clear_clicked
();
void
on_confirm_clicked
();
...
...
@@ -41,6 +45,7 @@ private slots:
private
:
Ui
::
FMVipLogin
*
ui
;
FMNumPad
*
numpad
;
FMMsgWnd
*
activateInfoWnd
;
};
#endif // FMVIPLOGIN_H
fmvip_card_reader/fm_mwrf32/fm_mwrf32.cpp
View file @
442e33db
#include "fm_mwrf32.h"
#include "mwdll/mwrf32.h"
#include <QCryptographicHash>
#include <QDebug>
bool
ConnectDevice
(
int
port
,
int
baud
,
int
sector
,
const
QString
password
,
HANDLE
&
handle
,
QString
&
error
)
{
...
...
@@ -15,16 +16,17 @@ bool ConnectDevice(int port, int baud, int sector, const QString password, HANDL
if
(
st
!=
0
)
{
rf_exit
(
handle
);
error
=
"load key error"
;
error
=
QString
(
"load key error sector %1"
).
arg
(
sector
)
;
return
false
;
}
rf_beep
(
handle
,
30
);
return
true
;
}
bool
ReadCard
(
const
HANDLE
handle
,
int
sector
,
QString
&
vipNo
,
QString
&
error
)
bool
ReadCard
(
const
HANDLE
handle
,
int
sector
,
QString
&
vipNo
,
QString
&
uuid
,
QString
&
error
)
{
int
st
;
unsigned
char
rdata
[
17
];
// 寻卡
unsigned
long
snr
;
//卡片序列号
st
=
rf_card
(
handle
,
0
,
&
snr
);
...
...
@@ -33,6 +35,7 @@ bool ReadCard(const HANDLE handle, int sector, QString &vipNo, QString &error)
error
=
"could not find the card"
;
return
false
;
}
uuid
=
QString
::
number
(
snr
);
// 鉴权
st
=
rf_authentication
(
handle
,
0
,
sector
);
if
(
st
!=
0
)
...
...
@@ -41,18 +44,17 @@ bool ReadCard(const HANDLE handle, int sector, QString &vipNo, QString &error)
return
false
;
}
// 读卡号
unsigned
char
rdata
[
32
];
ZeroMemory
(
rdata
,
32
);
ZeroMemory
(
rdata
,
17
);
st
=
rf_read
(
handle
,
sector
*
4
,
rdata
);
if
(
st
!=
0
)
{
error
=
"read data error"
;
return
false
;
}
vipNo
=
QString
::
fromLatin1
((
char
*
)
rdata
);
vipNo
=
QString
(
QByteArray
((
char
*
)
rdata
,
16
).
toHex
()).
mid
(
17
);
// 读效验数据
QString
keyData
;
ZeroMemory
(
rdata
,
32
);
ZeroMemory
(
rdata
,
17
);
st
=
rf_read
(
handle
,
sector
*
4
+
1
,
rdata
);
if
(
st
!=
0
)
{
...
...
@@ -66,7 +68,6 @@ bool ReadCard(const HANDLE handle, int sector, QString &vipNo, QString &error)
error
=
"check key_data error"
;
return
false
;
}
rf_beep
(
handle
,
30
);
return
true
;
}
...
...
@@ -96,15 +97,15 @@ bool ActivateCard(const HANDLE handle, int sector, const QString newPassword, QS
return
false
;
}
// 读卡号
unsigned
char
rdata
[
32
];
ZeroMemory
(
rdata
,
32
);
unsigned
char
rdata
[
17
];
ZeroMemory
(
rdata
,
17
);
st
=
rf_read
(
handle
,
sector
*
4
,
rdata
);
if
(
st
!=
0
)
{
error
=
"read data error"
;
return
false
;
}
vipNo
=
QString
::
fromLatin1
(
(
char
*
)
rdata
);
vipNo
=
QString
::
fromLatin1
(
QByteArray
((
char
*
)
rdata
,
16
).
toHex
()).
mid
(
17
);
// 写入效验数据
QByteArray
keyData
=
QCryptographicHash
::
hash
(
QString
(
"%1%2"
).
arg
(
vipNo
,
MD5_KEY
).
toLatin1
(),
QCryptographicHash
::
Md5
);
st
=
rf_write
(
handle
,
sector
*
4
+
1
,
(
unsigned
char
*
)
keyData
.
toHex
().
mid
(
8
,
16
).
data
());
...
...
fmvip_card_reader/fm_mwrf32/fm_mwrf32.h
View file @
442e33db
...
...
@@ -26,9 +26,9 @@ FM_MWRF32SHARED_EXPORT void DisConnectDevice(const HANDLE handle);
FM_MWRF32SHARED_EXPORT
bool
ActivateCard
(
const
HANDLE
handle
,
int
sector
,
const
QString
newPassword
,
QString
&
error
);
/* 功能:读取会员号
* 参数:[1]设备句柄[2]要读取的扇区号[3_out]会员号[4_out]错误原因
* 参数:[1]设备句柄[2]要读取的扇区号[3_out]会员号[4_out]
UUID[5_out]
错误原因
* 返回:成功true
* */
FM_MWRF32SHARED_EXPORT
bool
ReadCard
(
const
HANDLE
handle
,
int
sector
,
QString
&
vipNo
,
QString
&
error
);
FM_MWRF32SHARED_EXPORT
bool
ReadCard
(
const
HANDLE
handle
,
int
sector
,
QString
&
vipNo
,
QString
&
uuid
,
QString
&
error
);
#endif // FM_MWRF32_H
fmvip_card_reader/test/activateworker.cpp
View file @
442e33db
...
...
@@ -24,9 +24,9 @@ void ActivateWorker::run()
{
QString
error
;
bool
result
;
result
=
ActivateCard
(
m_handle
,
1
,
"111111111111
"
,
error
);
result
=
ActivateCard
(
m_handle
,
1
5
,
"ffffffffffff
"
,
error
);
qDebug
()
<<
QDateTime
::
currentDateTime
()
<<
result
<<
error
;
emit
activeted
(
result
,
error
);
Sleep
(
3
00
);
Sleep
(
10
00
);
}
}
fmvip_card_reader/test/mainwindow.cpp
View file @
442e33db
...
...
@@ -25,7 +25,7 @@ MainWindow::~MainWindow()
void
MainWindow
::
on_pbt0_clicked
()
{
QString
error
;
if
(
ConnectDevice
(
4
,
9600
,
1
,
"111111111111
"
,
handle
,
error
))
if
(
ConnectDevice
(
0
,
9600
,
15
,
"ffffffffffff
"
,
handle
,
error
))
{
ui
->
label
->
setText
(
"连接设备成功!"
);
ui
->
pbt1
->
setEnabled
(
true
);
...
...
@@ -33,6 +33,8 @@ void MainWindow::on_pbt0_clicked()
}
else
{
ui
->
label
->
setText
(
"连接设备失败!"
);
qDebug
()
<<
error
;
}
}
...
...
@@ -49,9 +51,10 @@ void MainWindow::on_pbt2_clicked()
{
QString
error
;
QString
vipNo
;
if
(
ReadCard
(
handle
,
1
,
vipNo
,
error
))
QString
uuid
;
if
(
ReadCard
(
handle
,
15
,
vipNo
,
uuid
,
error
))
{
ui
->
label_3
->
setText
(
vipNo
);
ui
->
label_3
->
setText
(
uuid
+
"###"
+
vipNo
);
}
else
{
ui
->
label_3
->
setText
(
error
);
...
...
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