Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
takeaway
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
shuai.liu
takeaway
Commits
f8b41bc5
Commit
f8b41bc5
authored
Aug 20, 2018
by
刘帅
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
TCP通信加上包头信息,添加商品管理功能
parent
a498c1bc
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
147 additions
and
30 deletions
+147
-30
fmTakeaway/controls/flowControl.cpp
+77
-23
fmTakeaway/controls/flowControl.h
+9
-1
fmTakeaway/controls/sales.cpp
+26
-5
fmTakeaway/mainwindow.cpp
+20
-1
fmTakeaway/tools/dataManage.cpp
+9
-0
fmTakeaway/tools/dataManage.h
+1
-0
fmTakeaway/tools/util.h
+5
-0
No files found.
fmTakeaway/controls/flowControl.cpp
View file @
f8b41bc5
...
...
@@ -58,7 +58,8 @@ FlowControl::FlowControl()
socket
->
write
(
replyData
.
toUtf8
());
socket
->
waitForBytesWritten
(
1000
);
}
if
(
recvObj
.
contains
(
"reqtype"
)
&&
recvObj
[
"reqtype"
]
==
25
)
//商品库存同步
if
(
recvObj
.
contains
(
"reqtype"
)
&&
(
recvObj
[
"reqtype"
]
==
25
||
recvObj
[
"reqtype"
]
==
80
))
//商品库存同步
{
recvObj
.
insert
(
"token"
,
m_token
);
_onStockSync
(
recvObj
);
...
...
@@ -128,6 +129,38 @@ int FlowControl::_ParseTcpData(QJsonObject& recvObj, QString& error)
return
result
;
}
void
FlowControl
::
sendTcpData
(
QTcpSocket
*
socket
,
QByteArray
&
byteArray
)
{
int
byteSize
=
byteArray
.
size
();
QLOG_INFO
()
<<
"byteSize "
<<
byteSize
;
char
*
m_pFmPackage
=
new
char
[
byteSize
+
sizeof
(
FMSOCKEHEADER
)];
FMSOCKEHEADER
header
=
{
0
,
0
,
0
};
header
.
flag
=
0x4d46
;
header
.
len
=
byteSize
;
header
.
ver
=
0x1
;
memcpy
(
m_pFmPackage
,
&
header
,
sizeof
(
FMSOCKEHEADER
));
memcpy
(
m_pFmPackage
+
sizeof
(
FMSOCKEHEADER
),
byteArray
,
byteSize
);
int
toSendLength
=
byteSize
+
sizeof
(
FMSOCKEHEADER
);
int
curSendLength
=
0
;
while
(
curSendLength
<
toSendLength
)
{
int
rlt
=
socket
->
write
(
m_pFmPackage
+
curSendLength
,
toSendLength
-
curSendLength
);
socket
->
waitForBytesWritten
();
if
(
rlt
==
-
1
)
{
QLOG_ERROR
()
<<
"发送菜单数据失败"
;
break
;
}
curSendLength
+=
rlt
;
}
delete
[]
m_pFmPackage
;
}
void
FlowControl
::
_onLogin
()
{
m_bLogged
=
true
;
...
...
@@ -254,7 +287,7 @@ void FlowControl::_onProcessOrderHandle(const QString& orderId, const QString &o
(
recvObj
[
"refund_status"
].
toInt
()
==
100
||
recvObj
[
"refund_status"
].
toInt
()
==
30
))
//同意部分退款
{
partialRefund
(
order_id
);
partialRefund
(
order_id
,
orderObj
->
fm_id
);
}
onSucessful
();
}
else
...
...
@@ -291,23 +324,7 @@ void FlowControl::_onGetCode()
return
;
}
QByteArray
byteArray
=
QJsonDocument
(
recvObj
).
toJson
(
QJsonDocument
::
Compact
);
int
byteSize
=
byteArray
.
size
();
int
send
=
0
;
while
(
true
)
{
int
temp
=
0
;
temp
=
socket
->
write
(
byteArray
.
data
()
+
send
);
if
(
temp
==
-
1
)
//or -1 if an error occurred
break
;
send
+=
temp
;
if
(
send
==
byteSize
)
break
;
}
if
(
!
socket
->
waitForBytesWritten
(
LOCAL_SOCKET_TIMEOUT
))
{
QLOG_ERROR
()
<<
"write to takeaway component failed!"
;
return
;
}
sendTcpData
(
socket
,
byteArray
);
socket
->
disconnectFromHost
();
if
(
socket
->
state
()
==
QAbstractSocket
::
UnconnectedState
||
socket
->
waitForDisconnected
(
1000
))
...
...
@@ -324,6 +341,40 @@ void FlowControl::_onGetCode()
);
}
void
FlowControl
::
_onGetMenu
()
{
QByteArray
request
=
DataManage
::
getMenuData
(
m_token
);
m_http
.
Post
(
request
,[
this
](
const
QByteArray
&
data
)
{
QLOG_INFO
()
<<
QString
(
"获取菜单返回数据: %1"
).
arg
(
QString
(
data
).
simplified
());
QJsonObject
recvObj
=
QJsonDocument
::
fromJson
(
data
).
object
();
if
(
recvObj
[
"statusCode"
].
toInt
()
==
100
)
{
QTcpSocket
*
socket
=
new
QTcpSocket
();
socket
->
connectToHost
(
"127.0.0.1"
,
34956
);
if
(
!
socket
->
waitForConnected
(
LOCAL_SOCKET_TIMEOUT
))
{
QLOG_ERROR
()
<<
"connect takeaway component failed!"
;
return
;
}
QByteArray
byteArray
=
QJsonDocument
(
recvObj
).
toJson
(
QJsonDocument
::
Compact
);
sendTcpData
(
socket
,
byteArray
);
socket
->
disconnectFromHost
();
if
(
socket
->
state
()
==
QAbstractSocket
::
UnconnectedState
||
socket
->
waitForDisconnected
(
1000
))
delete
socket
;
}
else
{
QLOG_ERROR
()
<<
QString
(
"菜单接口返回错误: %1"
).
arg
(
recvObj
[
"msg"
].
toString
());
}
}
,[
this
](
const
QNetworkReply
::
NetworkError
&
error
)
{
QLOG_ERROR
()
<<
QString
(
"获取菜单失败: %1"
).
arg
(
error
);
}
);
}
//TODO STOCK_SYNC
void
FlowControl
::
_onStockSync
(
QJsonObject
obj
)
...
...
@@ -342,15 +393,16 @@ void FlowControl::_onStockSync(QJsonObject obj)
);
}
void
FlowControl
::
partialRefund
(
QString
order_id
)
void
FlowControl
::
partialRefund
(
QString
order_id
,
QString
fm_id
)
{
QByteArray
appendData
=
DataManage
::
getRefundDetail
(
m_token
,
order_id
);
m_http
.
Post
(
appendData
,[
this
](
const
QByteArray
&
data
)
,[
this
,
fm_id
](
const
QByteArray
&
data
)
{
QLOG_INFO
()
<<
QString
(
"退款详情: %1"
).
arg
(
QString
(
data
).
simplified
());
QJsonObject
recvObj
=
QJsonDocument
::
fromJson
(
data
).
object
();
recvObj
.
insert
(
"fm_id"
,
fm_id
);
if
(
recvObj
[
"statusCode"
].
toInt
()
==
100
)
{
QTcpSocket
*
socket
=
new
QTcpSocket
();
...
...
@@ -360,8 +412,10 @@ void FlowControl::partialRefund(QString order_id)
{
QLOG_ERROR
()
<<
"connect takeaway component failed!"
;
return
;
}
socket
->
write
(
QJsonDocument
(
recvObj
).
toJson
(
QJsonDocument
::
Compact
));
}
QByteArray
byteArray
=
QJsonDocument
(
recvObj
).
toJson
(
QJsonDocument
::
Compact
);
sendTcpData
(
socket
,
byteArray
);
if
(
!
socket
->
waitForBytesWritten
(
LOCAL_SOCKET_TIMEOUT
))
{
QLOG_ERROR
()
<<
"write to takeaway component failed!"
;
...
...
fmTakeaway/controls/flowControl.h
View file @
f8b41bc5
...
...
@@ -55,6 +55,7 @@ private:
* 返回:0失败 100成功
* */
int
_ParseTcpData
(
QJsonObject
&
recvObj
,
QString
&
error
);
void
sendTcpData
(
QTcpSocket
*
socket
,
QByteArray
&
byteArray
);
private
:
// 标记是否已经登陆
...
...
@@ -71,6 +72,13 @@ private:
// 用于存储订单信息<订单ID, 订单对象>
QMap
<
QString
,
OrderObject
*>
m_ordersMap
;
public
slots
:
/* 功能:获取菜单
* 参数:NULL
* 返回:NULL
* */
void
_onGetMenu
();
private
slots
:
/* 功能:登录
* 参数:NULL
...
...
@@ -107,7 +115,7 @@ private slots:
* 参数:[1]订单id
* 返回:NULL
* */
void
partialRefund
(
QString
order_id
);
void
partialRefund
(
QString
order_id
,
QString
fm_id
);
public
slots
:
/* 功能:请求部分退款详情
...
...
fmTakeaway/controls/sales.cpp
View file @
f8b41bc5
...
...
@@ -56,18 +56,39 @@ void Sales::onRecordSale(QJsonObject obj)
{
QTcpSocket
*
socket
=
new
QTcpSocket
();
socket
->
connectToHost
(
"127.0.0.1"
,
34956
);
if
(
!
socket
->
waitForConnected
(
3000
))
{
QLOG_ERROR
()
<<
"connect takeaway component failed!"
;
return
;
}
socket
->
write
(
QJsonDocument
(
obj
).
toJson
(
QJsonDocument
::
Compact
));
if
(
!
socket
->
waitForBytesWritten
(
3000
))
QByteArray
byteArray
=
QJsonDocument
(
obj
).
toJson
(
QJsonDocument
::
Compact
);
int
byteSize
=
byteArray
.
size
();
char
*
m_pFmPackage
=
new
char
[
byteSize
+
sizeof
(
FMSOCKEHEADER
)];
FMSOCKEHEADER
header
=
{
0
,
0
,
0
};
header
.
flag
=
0x4d46
;
header
.
len
=
byteSize
;
header
.
ver
=
0x1
;
memcpy
(
m_pFmPackage
,
&
header
,
sizeof
(
FMSOCKEHEADER
));
memcpy
(
m_pFmPackage
+
sizeof
(
FMSOCKEHEADER
),
byteArray
,
byteSize
);
int
toSendLength
=
byteSize
+
sizeof
(
FMSOCKEHEADER
);
int
curSendLength
=
0
;
while
(
curSendLength
<
toSendLength
)
{
QLOG_ERROR
()
<<
"write to takeaway component failed!"
;
return
;
int
rlt
=
socket
->
write
(
m_pFmPackage
+
curSendLength
,
toSendLength
-
curSendLength
);
socket
->
waitForBytesWritten
(
3000
);
if
(
rlt
==
-
1
)
{
QLOG_ERROR
()
<<
"发送订单数据失败
\n
"
<<
(
const
char
*
)
byteArray
;
break
;
}
curSendLength
+=
rlt
;
}
delete
[]
m_pFmPackage
;
socket
->
disconnectFromHost
();
if
(
socket
->
state
()
==
QAbstractSocket
::
UnconnectedState
||
socket
->
waitForDisconnected
(
1000
))
...
...
fmTakeaway/mainwindow.cpp
View file @
f8b41bc5
...
...
@@ -86,6 +86,12 @@ MainWindow::MainWindow(QWidget *parent) :
{
FlowControl
::
Instance
().
GetDailyInfo
();
});
//商品管理
connect
(
ui
->
main_btnSPGL
,
&
QPushButton
::
clicked
,
[]()
{
FlowControl
::
Instance
().
_onGetMenu
();
});
connect
(
&
FlowControl
::
Instance
(),
&
FlowControl
::
showDailyForm
,
[
this
](
QList
<
DailyInfo
>
infos
)
{
m_dailyForm
->
move
(
pos
());
...
...
@@ -142,12 +148,25 @@ MainWindow::MainWindow(QWidget *parent) :
if
(
socket
->
waitForConnected
(
1000
))
{
socket
->
write
(
"quit"
);
QByteArray
ba
(
"quit"
);
FMSOCKEHEADER
header
=
{
0
,
0
,
0
};
header
.
flag
=
0x4d46
;
header
.
len
=
ba
.
length
();
header
.
ver
=
0x1
;
char
*
m_pFmPackage
=
new
char
[
ba
.
length
()
+
sizeof
(
FMSOCKEHEADER
)];
memcpy
(
m_pFmPackage
,
&
header
,
sizeof
(
FMSOCKEHEADER
));
memcpy
(
m_pFmPackage
+
sizeof
(
FMSOCKEHEADER
),
ba
,
ba
.
length
());
socket
->
write
(
m_pFmPackage
,
ba
.
length
()
+
sizeof
(
FMSOCKEHEADER
));
if
(
!
socket
->
waitForBytesWritten
(
1000
))
{
QLOG_INFO
()
<<
"takeaway component maybe cannot timinate"
;
}
socket
->
disconnectFromHost
();
delete
[]
m_pFmPackage
;
}
if
(
socket
->
state
()
==
QAbstractSocket
::
UnconnectedState
||
socket
->
waitForDisconnected
(
1000
))
...
...
fmTakeaway/tools/dataManage.cpp
View file @
f8b41bc5
...
...
@@ -156,6 +156,15 @@ QByteArray DataManage::getCodeData(const QString &token)
return
QJsonDocument
(
json
).
toJson
().
simplified
();
}
QByteArray
DataManage
::
getMenuData
(
const
QString
&
token
)
{
QJsonObject
json
;
json
.
insert
(
"reqtype"
,
24
);
json
.
insert
(
"token"
,
token
);
json
.
insert
(
"channel"
,
"eleme2"
);
return
QJsonDocument
(
json
).
toJson
().
simplified
();
}
QByteArray
DataManage
::
getRefundDetail
(
const
QString
&
token
,
const
QString
&
orderId
)
{
QJsonObject
json
,
order
;
...
...
fmTakeaway/tools/dataManage.h
View file @
f8b41bc5
...
...
@@ -23,6 +23,7 @@ public:
static
QByteArray
getMenuData
(
const
QString
&
token
,
const
QString
&
channel
);
static
QByteArray
getCodeData
(
const
QString
&
token
);
static
QByteArray
getMenuData
(
const
QString
&
token
);
static
QByteArray
getRefundDetail
(
const
QString
&
token
,
const
QString
&
orderId
);
};
...
...
fmTakeaway/tools/util.h
View file @
f8b41bc5
...
...
@@ -102,6 +102,11 @@ typedef struct DailyInfo
int
total_projected_revenue
;
}
DailyInfo
;
typedef
struct
{
int
flag
;
int
ver
;
int
len
;
}
FMSOCKEHEADER
;
#endif // UTIL_H
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