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
1bdf9368
Commit
1bdf9368
authored
Sep 01, 2016
by
ss.dai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成逻辑处理
parent
2867d09b
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
173 additions
and
844 deletions
+173
-844
fmPlugin/fmPlugin.cpp
+103
-364
fmPlugin/fmPlugin.h
+19
-49
fmTakeaway/Control/flowControl.cpp
+24
-141
fmTakeaway/Control/flowControl.h
+8
-66
fmTakeaway/Control/refundControl.cpp
+0
-116
fmTakeaway/Control/refundControl.h
+0
-39
fmTakeaway/Control/sinfoControl.cpp
+4
-5
fmTakeaway/Control/sinfoControl.h
+6
-1
fmTakeaway/dbsetForm.cpp
+0
-3
fmTakeaway/fmTakeaway.pro
+0
-2
fmTakeaway/main.cpp
+8
-10
fmTakeaway/mainForm.cpp
+0
-21
fmTakeaway/mainForm.h
+0
-25
fmTakeaway/mainForm.ui
+1
-1
fmTakeaway/pickForm.cpp
+0
-1
No files found.
fmPlugin/fmPlugin.cpp
View file @
1bdf9368
...
...
@@ -11,6 +11,7 @@
#include <QEventLoop>
#include <QTimer>
#include <QJsonArray>
#include <QDataStream>
FmPlugin
&
FmPlugin
::
GetInstance
()
{
...
...
@@ -18,404 +19,142 @@ FmPlugin &FmPlugin::GetInstance()
return
fmPlugin
;
}
bool
FmPlugin
::
ConnectDb
(
const
QString
&
host
,
const
QString
&
username
,
const
QString
&
password
,
const
QString
&
dbname
,
QString
&
error
)
void
FmPlugin
::
SetRemoteInfo
(
const
QString
&
ip
,
int
port
)
{
// 清除之前的连接
QSqlDatabase
::
removeDatabase
(
m_db
.
connectionName
());
m_db
=
QSqlDatabase
::
addDatabase
(
"QODBC"
);
m_db
.
setConnectOptions
(
QString
(
"SQL_ATTR_LOGIN_TIMEOUT=5;SQL_ATTR_CONNECTION_TIMEOUT=5"
));
m_db
.
setDatabaseName
(
QString
(
"Driver={sql server}; server=%1; database=%2; uid=%3; pwd=%4"
)
.
arg
(
host
).
arg
(
dbname
).
arg
(
username
).
arg
(
password
));
if
(
m_db
.
open
())
{
error
=
QString
(
"success"
);
m_db
.
close
();
return
true
;
}
else
{
error
=
m_db
.
lastError
().
text
();
return
false
;
}
m_host
=
ip
;
m_port
=
port
;
}
bool
FmPlugin
::
GetStoreInfo
(
QString
&
storeId
,
QString
&
posId
,
QString
&
cashierId
,
QDateTime
&
dateTime
,
QString
&
error
)
bool
FmPlugin
::
DoOrderEntry
(
const
OrderObject
*
orderObject
,
QString
&
error
,
bool
bVerify
)
{
if
(
!
m_db
.
open
())
{
error
=
m_db
.
lastError
().
text
();
return
false
;
}
QSqlQuery
query
=
QSqlQuery
(
m_db
);
// 获取门店号
QString
queryStoreId
(
"select sys_var_value from sys_t_system where sys_var_id='g_branch_no'"
);
query
.
prepare
(
queryStoreId
);
if
(
!
query
.
exec
())
{
error
=
query
.
lastError
().
text
();
m_db
.
close
();
return
false
;
}
query
.
next
();
storeId
=
query
.
value
(
0
).
toString
();
m_storeId
=
storeId
;
// 获取营业日
QString
queryDateTime
(
"select sys_var_value from sys_t_system where sys_var_id='dBusiness'"
);
query
.
prepare
(
queryDateTime
);
if
(
!
query
.
exec
())
{
error
=
query
.
lastError
().
text
();
m_db
.
close
();
return
false
;
}
query
.
next
();
dateTime
=
query
.
value
(
0
).
toDateTime
();
posId
=
"1"
;
cashierId
=
"1"
;
error
=
QString
(
"success"
);
m_db
.
close
();
QTcpSocket
socket
;
// 连接
socket
.
connectToHost
(
m_host
,
m_port
);
if
(
socket
.
waitForConnected
())
{
// 初始化请求数据
QByteArray
block
;
QDataStream
out
(
&
block
,
QIODevice
::
WriteOnly
);
out
.
setVersion
(
QDataStream
::
Qt_5_3
);
out
<<
quint32
(
0
);
out
<<
_GetOrderEntryData
(
orderObject
,
bVerify
);
out
.
device
()
->
seek
(
0
);
out
<<
(
quint32
)(
block
.
size
()
-
sizeof
(
quint32
));
// 发送
socket
.
write
(
block
);
if
(
socket
.
waitForBytesWritten
())
{
// 接收返回
if
(
socket
.
waitForReadyRead
())
{
QJsonObject
recvJson
=
QJsonDocument
::
fromJson
(
socket
.
readAll
()).
object
();
if
(
recvJson
[
"statusCode"
].
toInt
()
==
100
)
{
socket
.
close
();
return
true
;
}
bool
FmPlugin
::
GetOnDutyCashiers
(
QList
<
CashierObject
>
&
cashiersList
,
QString
&
error
)
{
if
(
!
m_db
.
open
())
{
error
=
m_db
.
lastError
().
text
();
return
false
;
}
// 获取在班收银员信息
QSqlQuery
query
=
QSqlQuery
(
m_db
);
QString
queryCashiers
(
"select * from v_km_cashshift"
);
query
.
prepare
(
queryCashiers
);
if
(
!
query
.
exec
())
{
error
=
query
.
lastError
().
text
();
m_db
.
close
();
return
false
;
}
else
{
while
(
query
.
next
())
{
CashierObject
cashierObj
;
cashierObj
.
id
=
query
.
value
(
0
).
toString
();
cashierObj
.
name
=
query
.
value
(
1
).
toString
();
cashierObj
.
shiftId
=
query
.
value
(
2
).
toString
();
cashierObj
.
shiftName
=
query
.
value
(
3
).
toString
();
cashiersList
.
append
(
cashierObj
);
error
=
recvJson
[
"msg"
].
toString
();
socket
.
close
();
return
false
;
}
}
error
=
QString
(
"success"
);
m_db
.
close
();
return
true
;
}
bool
FmPlugin
::
DoOrderEntry
(
const
OrderObject
*
orderObject
,
const
QString
&
cashierId
,
const
QString
&
cashierName
,
const
QString
&
shiftId
,
const
QString
&
shiftName
,
QString
&
error
)
{
m_orderObject
=
orderObject
;
// if(!m_db.open())
// {
// error = m_db.lastError().text();
// return false;
// }
// // 开启事务
// if(!m_db.transaction())
// {
// error = m_db.lastError().text();
// m_db.close();
// return false;
// }
// // 插入三张临时表后执行存储过程有一个失败则回滚
// if(!_InsertInto_d_t_food_fmbill0(cashierId, cashierName, shiftId, shiftName))
// {
// error = m_db.lastError().text();
// m_db.rollback();
// m_db.close();
// return false;
// }
// if(!_InsertInto_d_t_food_fmbills0())
// {
// error = m_db.lastError().text();
// m_db.rollback();
// m_db.close();
// return false;
// }
// if(!_InsertInto_d_t_bill_fmpay0())
// {
// error = m_db.lastError().text();
// m_db.rollback();
// m_db.close();
// return false;
// }
// if(!_Exec_pr_fmwm())
// {
// error = m_db.lastError().text();
// m_db.rollback();
// m_db.close();
// return false;
// }
// // 都成功则提交
// m_db.commit();
// error = QString("success");
// m_db.close();
QSettings
set
(
"config.ini"
,
QSettings
::
IniFormat
);
QString
host
=
set
.
value
(
"DbServer/postUrl"
).
toString
();
QNetworkAccessManager
manger
;
QNetworkRequest
qRequset
;
qRequset
.
setUrl
(
QUrl
(
host
+
"/FMJsonInterfaceByDefault"
));
qRequset
.
setRawHeader
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
QJsonObject
rootObj
,
cObj
;
rootObj
.
insert
(
"fm_cmd"
,
"put_order"
);
rootObj
.
insert
(
"fm_ver"
,
"1.0"
);
rootObj
.
insert
(
"operator_id"
,
cashierId
);
rootObj
.
insert
(
"pos_id"
,
cashierName
.
toInt
());
rootObj
.
insert
(
"store_id"
,
"0001"
);
rootObj
.
insert
(
"business_date"
,
shiftName
);
cObj
.
insert
(
"pay_id"
,
"002"
);
cObj
.
insert
(
"pay_str"
,
"非码外卖"
);
cObj
.
insert
(
"pay_ebcode"
,
orderObject
->
channel
);
cObj
.
insert
(
"pay_ebcode_str"
,
orderObject
->
channelName
);
cObj
.
insert
(
"total_amount"
,
orderObject
->
shop_fee
);
cObj
.
insert
(
"paid_total_amount"
,
orderObject
->
shop_fee
);
cObj
.
insert
(
"incentives_amount"
,
orderObject
->
discount_fee
);
cObj
.
insert
(
"invoice_amount"
,
orderObject
->
shop_fee
);
cObj
.
insert
(
"paid_trans_id"
,
orderObject
->
order_id
);
cObj
.
insert
(
"fm_id"
,
orderObject
->
order_id
);
cObj
.
insert
(
"order_time"
,
QString
::
number
(
orderObject
->
create_time
));
rootObj
.
insert
(
"pay_id"
,
cObj
);
QJsonArray
tmpArray
;
for
(
int
i
=
0
;
i
<
orderObject
->
proList
.
count
();
i
++
)
{
QJsonObject
tmpObj
;
tmpObj
.
insert
(
"consume_num"
,
orderObject
->
proList
.
at
(
i
)
->
productAmount
);
tmpObj
.
insert
(
"pid"
,
orderObject
->
proList
.
at
(
i
)
->
pid
);
tmpObj
.
insert
(
"original_price"
,
orderObject
->
proList
.
at
(
i
)
->
price
);
tmpArray
.
insert
(
i
,
tmpObj
);
}
rootObj
.
insert
(
"products"
,
tmpArray
);
QJsonDocument
doc
(
rootObj
);
QString
strArray
=
QString
(
"jsonStr="
)
+
QString
(
doc
.
toJson
(
QJsonDocument
::
Compact
));
qDebug
()
<<
strArray
;
QNetworkReply
*
reply
=
manger
.
post
(
qRequset
,
strArray
.
toUtf8
());
QEventLoop
eventLoop
;
QObject
::
connect
(
&
manger
,
SIGNAL
(
networkAccessibleChanged
(
QNetworkAccessManager
::
NetworkAccessibility
)),
&
eventLoop
,
SLOT
(
quit
()));
QObject
::
connect
(
reply
,
SIGNAL
(
finished
()),
&
eventLoop
,
SLOT
(
quit
()));
QObject
::
connect
(
reply
,
SIGNAL
(
error
(
QNetworkReply
::
NetworkError
)),
&
eventLoop
,
SLOT
(
quit
()));
// 加用定时器防止网络出现异常长时间不返回导致的阻塞
QTimer
::
singleShot
(
10000
,
&
eventLoop
,
&
QEventLoop
::
quit
);
eventLoop
.
exec
();
if
(
reply
->
error
()
!=
QNetworkReply
::
NoError
){
error
=
reply
->
errorString
();
return
false
;
}
QByteArray
receArray
=
reply
->
readAll
();
if
(
receArray
.
size
()
==
0
)
{
error
=
"nothing recved"
;
return
false
;
}
QJsonDocument
doc1
=
QJsonDocument
::
fromJson
(
receArray
);
QJsonObject
ttmp
=
doc1
.
object
();
if
(
ttmp
[
"statusCode"
].
toInt
()
==
100
)
{
return
true
;
}
else
{
error
=
ttmp
[
"msg"
].
toString
();
error
=
socket
.
errorString
();
socket
.
close
();
return
false
;
}
}
bool
FmPlugin
::
RefundOrder
(
const
QString
&
orderId
,
QString
&
error
)
{
QSettings
set
(
"config.ini"
,
QSettings
::
IniFormat
);
QString
host
=
set
.
value
(
"DbServer/postUrl"
).
toString
();
QNetworkAccessManager
manger
;
QNetworkRequest
qRequset
;
qRequset
.
setUrl
(
QUrl
(
host
+
"/FMJsonInterfaceByDefault"
));
qRequset
.
setRawHeader
(
"Content-Type"
,
"application/x-www-form-urlencoded"
);
QJsonObject
rootObj
;
rootObj
.
insert
(
"fm_cmd"
,
"refund_order"
);
rootObj
.
insert
(
"fm_ver"
,
"1.0"
);
rootObj
.
insert
(
"fm_id"
,
orderId
);
QJsonDocument
doc
(
rootObj
);
QString
strArray
=
QString
(
"jsonStr="
)
+
QString
(
doc
.
toJson
(
QJsonDocument
::
Compact
));
QNetworkReply
*
reply
=
manger
.
post
(
qRequset
,
strArray
.
toUtf8
());
QEventLoop
eventLoop
;
QObject
::
connect
(
&
manger
,
SIGNAL
(
networkAccessibleChanged
(
QNetworkAccessManager
::
NetworkAccessibility
)),
&
eventLoop
,
SLOT
(
quit
()));
QObject
::
connect
(
reply
,
SIGNAL
(
finished
()),
&
eventLoop
,
SLOT
(
quit
()));
QObject
::
connect
(
reply
,
SIGNAL
(
error
(
QNetworkReply
::
NetworkError
)),
&
eventLoop
,
SLOT
(
quit
()));
// 加用定时器防止网络出现异常长时间不返回导致的阻塞
QTimer
::
singleShot
(
10000
,
&
eventLoop
,
&
QEventLoop
::
quit
);
eventLoop
.
exec
();
if
(
reply
->
error
()
!=
QNetworkReply
::
NoError
){
error
=
reply
->
errorString
();
return
false
;
}
QByteArray
receArray
=
reply
->
readAll
();
if
(
receArray
.
size
()
==
0
)
{
error
=
"nothing recved"
;
return
false
;
}
QJsonDocument
doc1
=
QJsonDocument
::
fromJson
(
receArray
);
QJsonObject
ttmp
=
doc1
.
object
();
if
(
ttmp
[
"statusCode"
].
toInt
()
==
100
)
{
QTcpSocket
socket
;
// 连接
socket
.
connectToHost
(
m_host
,
m_port
);
if
(
socket
.
waitForConnected
())
{
// 初始化请求数据
QByteArray
block
;
QDataStream
out
(
&
block
,
QIODevice
::
WriteOnly
);
out
.
setVersion
(
QDataStream
::
Qt_5_3
);
out
<<
quint32
(
0
);
out
<<
_GetRefundOrderData
(
orderId
);
out
.
device
()
->
seek
(
0
);
out
<<
(
quint32
)(
block
.
size
()
-
sizeof
(
quint32
));
// 发送
socket
.
write
(
block
);
if
(
socket
.
waitForBytesWritten
())
{
// 接收返回
if
(
socket
.
waitForReadyRead
())
{
QJsonObject
recvJson
=
QJsonDocument
::
fromJson
(
socket
.
readAll
()).
object
();
if
(
recvJson
[
"statusCode"
].
toInt
()
==
100
)
{
socket
.
close
();
return
true
;
}
else
{
error
=
ttmp
[
"msg"
].
toString
();
error
=
recvJson
[
"msg"
].
toString
();
socket
.
close
();
return
false
;
}
}
bool
FmPlugin
::
_InsertInto_d_t_food_fmbill0
(
const
QString
&
cashierId
,
const
QString
&
cashierName
,
const
QString
&
shiftId
,
const
QString
&
shiftName
)
{
QSqlQuery
query
=
QSqlQuery
(
m_db
);
// 查询营业日
QDateTime
dbussiness
;
QString
queryDateTime
(
"select sys_var_value from sys_t_system where sys_var_id='dBusiness'"
);
query
.
prepare
(
queryDateTime
);
if
(
!
query
.
exec
())
{
return
false
;
}
query
.
next
();
dbussiness
=
query
.
value
(
0
).
toDateTime
();
// 插入到临时表
QString
queryInsert
(
"insert into d_t_food_fmbill0(cbill_c,cbranch_c,dBusiness,"
"ccashier_c, ccashier_n, cshift_c, cshift_n,"
"iguestnum,dtbilltime,dtsettletime,noughtamt,npayamt,"
"ndisamt,sbilltype,fmwmbillid,sprovider,nfreight)"
"values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"
);
query
.
prepare
(
queryInsert
);
query
.
bindValue
(
0
,
m_orderObject
->
order_id
);
query
.
bindValue
(
1
,
m_storeId
);
query
.
bindValue
(
2
,
dbussiness
);
query
.
bindValue
(
3
,
cashierId
);
query
.
bindValue
(
4
,
cashierName
);
query
.
bindValue
(
5
,
shiftId
);
query
.
bindValue
(
6
,
shiftName
);
query
.
bindValue
(
7
,
m_orderObject
->
remark
.
mid
(
m_orderObject
->
remark
.
lastIndexOf
(
':'
)
+
1
).
toInt
());
query
.
bindValue
(
8
,
QDateTime
::
fromTime_t
(
m_orderObject
->
create_time
));
query
.
bindValue
(
9
,
QDateTime
::
fromTime_t
(
m_orderObject
->
create_time
));
query
.
bindValue
(
10
,
_Penny2Dollar
(
m_orderObject
->
shop_fee
));
query
.
bindValue
(
11
,
_Penny2Dollar
(
m_orderObject
->
shop_fee
));
query
.
bindValue
(
12
,
_Penny2Dollar
(
m_orderObject
->
discount_fee
));
query
.
bindValue
(
13
,
QString
(
"
\351\200\201\351\244\220\345\215\225
"
));
// 送餐单
query
.
bindValue
(
14
,
m_orderObject
->
order_id
);
query
.
bindValue
(
15
,
m_orderObject
->
channelName
);
query
.
bindValue
(
16
,
m_orderObject
->
pay_type
.
compare
(
"在线支付"
)
?
"0"
:
_Penny2Dollar
(
m_orderObject
->
send_fee
));
if
(
!
query
.
exec
())
{
return
false
;
}
return
true
;
}
bool
FmPlugin
::
_InsertInto_d_t_food_fmbills0
()
{
QSqlQuery
query
=
QSqlQuery
(
m_db
);
// 插入商品详情
QString
queryInsert
(
"insert into d_t_food_fmbills0(cbill_c,cfoodbill,"
"cfood_c,cfood_n,nqty,nprc,namt)"
"values(?,?,?,?,?,?,?);"
);
query
.
prepare
(
queryInsert
);
for
(
int
i
=
0
;
i
<
m_orderObject
->
proList
.
count
();
i
++
)
{
query
.
bindValue
(
0
,
m_orderObject
->
order_id
);
query
.
bindValue
(
1
,
QString
(
"%1"
).
arg
(
QString
::
number
(
i
+
1
),
4
,
QChar
(
'0'
)));
query
.
bindValue
(
2
,
m_orderObject
->
proList
.
at
(
i
)
->
pid
);
query
.
bindValue
(
3
,
m_orderObject
->
proList
.
at
(
i
)
->
name
);
query
.
bindValue
(
4
,
QString
::
number
(
m_orderObject
->
proList
.
at
(
i
)
->
productAmount
));
query
.
bindValue
(
5
,
_Penny2Dollar
(
m_orderObject
->
proList
.
at
(
i
)
->
price
));
query
.
bindValue
(
6
,
_Penny2Dollar
(
m_orderObject
->
proList
.
at
(
i
)
->
price
*
m_orderObject
->
proList
.
at
(
i
)
->
productAmount
));
if
(
!
query
.
exec
())
{
return
false
;
}
}
return
true
;
error
=
socket
.
errorString
();
socket
.
close
();
return
false
;
}
bool
FmPlugin
::
_InsertInto_d_t_bill_fmpay0
(
)
QByteArray
FmPlugin
::
_GetOrderEntryData
(
const
OrderObject
*
orderObject
,
bool
bVerify
)
{
QSqlQuery
query
=
QSqlQuery
(
m_db
);
// 插入支付详情
QString
queryInsert
(
"insert into d_t_bill_fmpay0(cbill_c,"
"cbillpay,cpay_c,cpay_n,npayamt)"
"values(?,?,?,?,?);"
);
query
.
prepare
(
queryInsert
);
query
.
bindValue
(
0
,
m_orderObject
->
order_id
);
query
.
bindValue
(
1
,
"01"
);
QString
cpay_c
,
cpay_n
;
if
(
!
m_orderObject
->
pay_type
.
compare
(
"在线支付"
))
QJsonObject
rObj
,
cObj
;
if
(
bVerify
)
{
if
(
!
m_orderObject
->
channel
.
compare
(
"mtwm"
))
{
cpay_c
=
QString
(
"14"
);
cpay_n
=
QString
(
"
\347\276\216\345\233\242\345\244\226\345\215\226
"
);
//美团外卖
}
else
if
(
!
m_orderObject
->
channel
.
compare
(
"fmwd"
))
{
cpay_c
=
QString
(
"13"
);
cpay_n
=
QString
(
"
\345\276\256\344\277\241\345\244\226\345\215\226
"
);
//微店外卖
}
rObj
.
insert
(
"fm_cmd"
,
"put_order_check"
);
}
else
{
cpay_c
=
QString
(
"01"
);
cpay_n
=
QString
(
"
\347\216\260\351\207\221
"
);
//现金
}
query
.
bindValue
(
2
,
cpay_c
);
query
.
bindValue
(
3
,
cpay_n
);
query
.
bindValue
(
4
,
_Penny2Dollar
(
m_orderObject
->
shop_fee
));
if
(
!
query
.
exec
())
rObj
.
insert
(
"fm_cmd"
,
"put_order"
);
}
rObj
.
insert
(
"fm_ver"
,
"1.0"
);
cObj
.
insert
(
"pay_id"
,
"002"
);
cObj
.
insert
(
"pay_str"
,
"非码外卖"
);
cObj
.
insert
(
"pay_ebcode"
,
orderObject
->
channel
);
cObj
.
insert
(
"pay_ebcode_str"
,
orderObject
->
channelName
);
cObj
.
insert
(
"total_fee"
,
orderObject
->
total_fee
);
cObj
.
insert
(
"discount_fee"
,
orderObject
->
discount_fee
);
cObj
.
insert
(
"send_fee"
,
orderObject
->
send_fee
);
cObj
.
insert
(
"user_fee"
,
orderObject
->
user_fee
);
cObj
.
insert
(
"shop_fee"
,
orderObject
->
shop_fee
);
cObj
.
insert
(
"invoice_amount"
,
orderObject
->
shop_fee
);
cObj
.
insert
(
"paid_trans_id"
,
orderObject
->
order_id
);
cObj
.
insert
(
"fm_id"
,
orderObject
->
order_id
);
rObj
.
insert
(
"pay_id"
,
cObj
);
QJsonArray
products
;
for
(
int
i
=
0
;
i
<
orderObject
->
proList
.
count
();
i
++
)
{
return
false
;
QJsonObject
tObj
;
tObj
.
insert
(
"consume_num"
,
orderObject
->
proList
.
at
(
i
)
->
productAmount
);
tObj
.
insert
(
"pid"
,
orderObject
->
proList
.
at
(
i
)
->
pid
);
tObj
.
insert
(
"original_price"
,
orderObject
->
proList
.
at
(
i
)
->
price
);
products
.
insert
(
i
,
tObj
);
}
return
true
;
}
rObj
.
insert
(
"products"
,
products
);
bool
FmPlugin
::
_Exec_pr_fmwm
()
{
QSqlQuery
query
=
QSqlQuery
(
m_db
);
query
.
prepare
(
"exec pr_fmwm ?, ? output;"
);
query
.
bindValue
(
0
,
m_orderObject
->
order_id
);
query
.
bindValue
(
1
,
0
,
QSql
::
Out
);
if
(
!
query
.
exec
())
{
return
false
;
}
if
(
query
.
boundValue
(
1
).
toInt
()
!=
1
)
{
return
false
;
}
return
true
;
QJsonDocument
doc
(
rObj
);
return
doc
.
toJson
(
QJsonDocument
::
Compact
);
}
Q
String
FmPlugin
::
_Penny2Dollar
(
int
penny
)
Q
ByteArray
FmPlugin
::
_GetRefundOrderData
(
const
QString
&
orderId
)
{
double
dollar
=
(
double
)
penny
/
100
;
return
QString
::
number
(
dollar
,
'f'
,
2
);
QJsonObject
rObj
;
rObj
.
insert
(
"fm_cmd"
,
"refund_order"
);
rObj
.
insert
(
"fm_ver"
,
"1.0"
);
rObj
.
insert
(
"fm_id"
,
orderId
);
QJsonDocument
doc
(
rObj
);
return
doc
.
toJson
(
QJsonDocument
::
Compact
);
}
fmPlugin/fmPlugin.h
View file @
1bdf9368
...
...
@@ -6,6 +6,8 @@
#include "Model/cashierObject.h"
#include <QtSql/QSqlDatabase>
#include <QDateTime>
#include <QThread>
#include <QTcpServer>
class
PluginWorker
;
...
...
@@ -14,29 +16,13 @@ class FMPLUGINSHARED_EXPORT FmPlugin
public
:
static
FmPlugin
&
GetInstance
();
/* 功能:连接数据库
* 参数:[1]IP[2]用户名[3]密码[4]库名[5]错误
* 返回:是否成功
* */
bool
ConnectDb
(
const
QString
&
host
,
const
QString
&
username
,
const
QString
&
password
,
const
QString
&
dbname
,
QString
&
error
);
/* 功能:获取门店信息
* 参数:[1]门店编号[2]收银机编号[3]收银员编号[4]营业日[5]错误
* 返回:是否成功
* */
bool
GetStoreInfo
(
QString
&
storeId
,
QString
&
posId
,
QString
&
cashierId
,
QDateTime
&
dateTime
,
QString
&
error
);
/* 功能:获取在班收银员信息
* 参数:[1]收银员列表[2]错误信息
* 返回:是否成功
* */
bool
GetOnDutyCashiers
(
QList
<
CashierObject
>&
cashiersList
,
QString
&
error
);
void
SetRemoteInfo
(
const
QString
&
ip
,
int
port
);
/* 功能:写入销售单
* 参数:[1]订单对象[2]错误信息
* 参数:[1]订单对象[2]错误信息
[3]是否是确认动作
* 返回:是否成功
* */
bool
DoOrderEntry
(
OrderObject
const
*
orderObject
,
const
QString
&
cashierId
,
const
QString
&
cashierName
,
const
QString
&
shiftId
,
const
QString
&
shiftName
,
QString
&
error
);
bool
DoOrderEntry
(
OrderObject
const
*
orderObject
,
QString
&
error
,
bool
bVerify
=
false
);
/* 功能:撤销销售单
* 参数:[1]订单编号[2]错误信息
* 返回:是否成功
...
...
@@ -48,39 +34,23 @@ private:
FmPlugin
(
FmPlugin
const
&
);
FmPlugin
&
operator
=
(
FmPlugin
const
&
);
//
数据库句柄
QS
qlDatabase
m_db
;
// 门店号
QString
m_storeId
;
//
通信地址
QS
tring
m_host
;
int
m_port
;
// 订单对象
const
OrderObjec
t
*
m_orderObject
;
OrderObject
cons
t
*
m_orderObject
;
/* 功能:写入表d_t_food_fmbill0
* 参数:[1]收银员ID[2]收银员姓名[3]班次ID[4]班次名称
* 返回:true成功false失败
* */
bool
_InsertInto_d_t_food_fmbill0
(
const
QString
&
cashierId
,
const
QString
&
cashierName
,
const
QString
&
shiftId
,
const
QString
&
shiftName
);
/* 功能:写入表d_t_food_fmbills0
* 参数:NULL
* 返回:true成功false失败
* */
bool
_InsertInto_d_t_food_fmbills0
();
/* 功能:写入表d_t_food_fmpay0
* 参数:NULL
* 返回:true成功false失败
* */
bool
_InsertInto_d_t_bill_fmpay0
();
/* 功能:执行存储过程pr_fmwm
* 参数:NULL
* 返回:true成功false失败
/* 功能:获取写入销售单数据
* 参数:[1]订单对象
* 返回:写入销售单数据
* */
bool
_Exec_pr_fmwm
(
);
/* 功能:
将【分】转化为【元】
* 参数:[1]
分
* 返回:
元
QByteArray
_GetOrderEntryData
(
OrderObject
const
*
orderObject
,
bool
bVerify
=
false
);
/* 功能:
获取写入销售单数据
* 参数:[1]
订单对象
* 返回:
写入销售单数据
* */
Q
String
_Penny2Dollar
(
int
penny
);
Q
ByteArray
_GetRefundOrderData
(
const
QString
&
orderId
);
};
#endif // FMPLUGIN_H
fmTakeaway/Control/flowControl.cpp
View file @
1bdf9368
...
...
@@ -20,28 +20,34 @@ FlowControl &FlowControl::GetInstance()
FlowControl
::
FlowControl
()
{
m_bFirstRecvInfo
=
true
;
m_timestamp
=
"0"
;
m_loginSocket
=
NULL
;
m_pullOrderSocket
=
NULL
;
m_procOrderSocket
=
NULL
;
}
bool
FlowControl
::
_GetStoreInfo
(
)
void
FlowControl
::
onGetNewStoreInfo
(
const
QString
&
operator_id
,
const
QString
&
pos_id
,
const
QString
&
store_id
,
const
QString
&
business_date
)
{
QString
error
;
bool
result
;
m_storeId
=
store_id
;
m_posId
=
pos_id
;
m_cashierId
=
operator_id
;
m_bDate
=
QDateTime
::
fromString
(
business_date
,
"yyyyMMdd"
);
emit
showAlert
(
AlertForm
::
LOADING
,
"正在获取门店信息......"
);
QLOG_INFO
()
<<
QString
(
"[---get storeInfo---]"
);
result
=
FmPlugin
::
GetInstance
().
GetStoreInfo
(
m_storeId
,
m_posId
,
m_cashierId
,
m_bDate
,
error
);
QLOG_INFO
()
<<
QString
(
"get storeInfo finsh. [result:%1][msg:%2][storeId:%3,posId:%4,cashierId:%5,bdate:%6]"
)
.
arg
(
result
).
arg
(
error
,
m_storeId
,
m_posId
,
m_cashierId
,
m_bDate
.
toString
(
"yyyy-MM-dd"
));
if
(
m_bFirstRecvInfo
)
{
m_bFirstRecvInfo
=
false
;
if
(
!
result
)
m_loginSocket
=
new
BillSocket
(
this
);
m_pullOrderSocket
=
new
BillSocket
(
this
);
m_procOrderSocket
=
new
BillSocket
(
this
);
_Login
();
}
else
{
emit
showAlert
(
AlertForm
::
ERROR
,
"获取门店信息失败!"
);
emit
setStoreInfo
(
m_storeId
);
emit
setCashierInfo
(
m_cashierId
);
}
return
result
;
}
bool
FlowControl
::
_Login
()
...
...
@@ -51,7 +57,6 @@ bool FlowControl::_Login()
QJsonObject
sendJson
;
QJsonObject
recvJson
;
// TODO
sendJson
=
DataManger
::
GetInstance
().
GetLoginData
(
m_storeId
,
SERVER_PASSWORD
,
m_posId
,
m_cashierId
);
emit
showAlert
(
AlertForm
::
LOADING
,
"正在登录......"
);
...
...
@@ -79,12 +84,11 @@ bool FlowControl::_Login()
}
}
/*
if
(
!
result
)
{
QLOG_INFO
()
<<
QString
(
"%1 msec after login..."
).
arg
(
VALUE_RELOGINTIME
);
QTimer
::
singleShot
(
VALUE_RELOGINTIME
,
this
,
&
FlowControl
::
_Login
);
}
*/
}
return
result
;
}
...
...
@@ -230,32 +234,21 @@ bool FlowControl::_ConfirmOrder(const QString &orderId, const DeliverObject &del
OrderObject
*
orderObject
=
m_ordersMap
.
value
(
orderId
);
emit
showAlert
(
AlertForm
::
LOADING
,
"正在写入销售单......"
);
QString
orderEntryError
(
""
);
// 写入销售单
QLOG_INFO
()
<<
QString
(
"[---begin entry order---]."
);
if
(
!
FmPlugin
::
GetInstance
().
DoOrderEntry
(
orderObject
,
m_cashierId
,
m_posId
,
m_storeId
,
m_bDate
.
toString
(
"yyyy-MM-dd"
),
error
))
if
(
!
FmPlugin
::
GetInstance
().
DoOrderEntry
(
orderObject
,
error
))
{
QString
dirPath
=
QString
(
"%1/orders"
).
arg
(
QApplication
::
applicationDirPath
());
QDir
dir
;
dir
.
mkdir
(
dirPath
);
QFile
file
(
QString
(
"%1/%2"
).
arg
(
dirPath
,
orderObject
->
order_id
));
if
(
!
file
.
exists
())
while
(
!
FmPlugin
::
GetInstance
().
DoOrderEntry
(
orderObject
,
error
,
true
))
{
file
.
open
(
QFile
::
WriteOnly
);
file
.
close
();
}
orderEntryError
=
QString
(
"
\r\n
[写入销售单失败]"
);
QLOG_INFO
()
<<
QString
(
"entry order failed[%1]"
).
arg
(
error
);
}
else
{
orderEntryError
=
QString
(
"
\r\n
[写入销售单成功]"
);
}
}
QLOG_INFO
()
<<
QString
(
"[entry order success]."
);
QString
remark
(
orderObject
->
remark
),
deliveryTime
;
remark
=
remark
.
isEmpty
()
?
""
:
QString
(
"
\r\n
[备注: %1]"
).
arg
(
remark
);
deliveryTime
=
QString
(
"
\r\n
[期望送达时间: %1]"
).
arg
(
orderObject
->
delivery_time
);
emit
showAlert
(
AlertForm
::
SUCCESS
,
QString
(
"接单成功!%1%2
%3"
).
arg
(
remark
).
arg
(
deliveryTime
).
arg
(
orderEntryError
));
emit
showAlert
(
AlertForm
::
SUCCESS
,
QString
(
"接单成功!%1%2
"
).
arg
(
remark
).
arg
(
deliveryTime
));
// 通知主界面移动订单
int
oldStatus
=
orderObject
->
status
;
...
...
@@ -487,100 +480,16 @@ bool FlowControl::_RefundOrder(const QString &orderId)
return
result
;
}
bool
FlowControl
::
_GetCashiers
(
QList
<
CashierObject
>
&
cashiersList
)
{
QString
strCashiers
,
error
;
bool
result
;
emit
showAlert
(
AlertForm
::
LOADING
,
"正在查询收银员信息....."
);
QLOG_INFO
()
<<
QString
(
"[---get cashiers---]."
);
result
=
FmPlugin
::
GetInstance
().
GetOnDutyCashiers
(
cashiersList
,
error
);
foreach
(
CashierObject
cashier
,
cashiersList
)
{
strCashiers
.
append
(
QString
(
"|%1,%2,%3,%4|"
).
arg
(
cashier
.
id
,
cashier
.
name
,
cashier
.
shiftId
,
cashier
.
shiftName
));
}
QLOG_INFO
()
<<
QString
(
"get cashiers finsh. [result:%1][msg:%2][data:%3]"
).
arg
(
result
).
arg
(
error
,
strCashiers
);
if
(
!
result
)
{
emit
showAlert
(
AlertForm
::
ERROR
,
"查询收银员信息失败!"
);
}
return
result
;
}
bool
FlowControl
::
_CheckCashiers
()
{
bool
result
=
false
;
QList
<
CashierObject
>
cashiersList
;
if
(
_GetCashiers
(
cashiersList
))
{
foreach
(
CashierObject
cashier
,
cashiersList
)
{
if
(
!
cashier
.
id
.
compare
(
m_cashierObject
.
id
))
{
m_cashierObject
=
cashier
;
result
=
true
;
break
;
}
}
if
(
result
==
false
)
{
emit
showAlert
(
AlertForm
::
ERROR
,
"当前收银员已下班请重新选择!"
);
}
}
return
result
;
}
QString
FlowControl
::
_GetJsonStr
(
const
QJsonObject
&
json
)
{
return
QString
(
QJsonDocument
(
json
).
toJson
(
QJsonDocument
::
Compact
)).
replace
(
"
\"
"
,
""
);
}
bool
FlowControl
::
_DoOrderEntry
(
OrderObject
*
orderObject
)
{
}
bool
FlowControl
::
_RefundOrder
()
{
}
void
FlowControl
::
onFlowStart
()
{
m_timestamp
=
"0"
;
m_loginSocket
=
new
BillSocket
(
this
);
m_pullOrderSocket
=
new
BillSocket
(
this
);
m_procOrderSocket
=
new
BillSocket
(
this
);
// if(_GetStoreInfo())
// {
// _Login();
// }
return
;
}
void
FlowControl
::
onConnectDb
(
const
QString
&
host
,
const
QString
&
username
,
const
QString
&
password
,
const
QString
&
dbname
)
{
QString
error
;
bool
result
;
QLOG_INFO
()
<<
QString
(
"[---connect database---]. [host:%1][username:%2][password:%3][dbname:%4]"
)
.
arg
(
host
,
username
,
password
,
dbname
);
result
=
FmPlugin
::
GetInstance
().
ConnectDb
(
host
,
username
,
password
,
dbname
,
error
);
QLOG_INFO
()
<<
QString
(
"connect finsh. [result:%1][msg:%2]"
).
arg
(
result
).
arg
(
error
);
emit
connectDbFinsh
(
result
,
error
);
return
;
}
void
FlowControl
::
onProcessOrder
(
const
QString
&
operation
,
const
QString
&
orderId
,
const
DeliverObject
&
deliverObj
)
{
if
(
!
operation
.
compare
(
OPERATION_GETDELIVERS
))
{
// 放在这检测收银员的合法性因为接单前会获取配送员
//if(_CheckCashiers())
//{
_GetDelivers
(
orderId
);
//}
}
else
if
(
!
operation
.
compare
(
OPERATION_CONFRIM
))
{
_ConfirmOrder
(
orderId
,
deliverObj
);
...
...
@@ -599,36 +508,10 @@ void FlowControl::onProcessOrder(const QString &operation, const QString &orderI
}
}
void
FlowControl
::
onGetOnDutyCashiers
()
{
QList
<
CashierObject
>
cashiersList
;
if
(
_GetCashiers
(
cashiersList
))
{
emit
hideAlert
();
emit
showCashierPickForm
(
cashiersList
);
}
}
void
FlowControl
::
onUpdateCashier
(
const
CashierObject
&
cashier
)
{
m_cashierObject
=
cashier
;
}
void
FlowControl
::
onGetOrderDetails
(
const
QString
&
orderId
)
{
//if(_CheckCashiers())
//{
emit
hideAlert
();
emit
showOrderDetails
(
m_ordersMap
.
value
(
orderId
));
//}
}
void
FlowControl
::
onGetNewStoreInfo
(
const
QString
&
operator_id
,
const
QString
&
pos_id
,
const
QString
&
store_id
,
const
QString
&
business_date
)
{
m_storeId
=
store_id
;
m_posId
=
pos_id
;
m_cashierId
=
operator_id
;
m_bDate
=
QDateTime
::
fromString
(
business_date
,
"yyyyMMdd"
);
_Login
();
}
fmTakeaway/Control/flowControl.h
View file @
1bdf9368
...
...
@@ -38,15 +38,10 @@ private:
QString
m_timestamp
;
// 订单容器
QMap
<
QString
,
OrderObject
*>
m_ordersMap
;
//
当前收银员
CashierObject
m_cashierObject
;
//
是否第一次获取到门店信息
bool
m_bFirstRecvInfo
;
signals
:
/* 功能:连接数据库完成
* 参数:[1]是否成功[2]错误信息
* 返回:NULL
* */
void
connectDbFinsh
(
bool
bSuccess
,
const
QString
&
msg
);
/* 功能:隐藏通知窗口
* 参数:NULL
* 返回:NULL
...
...
@@ -77,7 +72,7 @@ signals:
* 返回:NULL
* */
void
setNetStatus
(
const
QString
&
status
);
/* 功能:更改订单显示
列
表
/* 功能:更改订单显示表
* 参数:[1]订单对象[2]旧订单的状态
* 返回:NULL
* */
...
...
@@ -87,11 +82,6 @@ signals:
* 返回:NULL
* */
void
showDeliverPickForm
(
const
QString
&
orderId
,
const
QList
<
DeliverObject
>&
delivers
);
/* 功能:显示收银员选择窗
* 参数:[1]收银员信息
* 返回:NULL
* */
void
showCashierPickForm
(
const
QList
<
CashierObject
>&
cashiers
);
/* 功能:显示订单详情界面
* 参数:[1]收银员信息
* 返回:NULL
...
...
@@ -99,11 +89,6 @@ signals:
void
showOrderDetails
(
OrderObject
*
orderObject
);
private
slots
:
/* 功能:获取门店信息
* 参数:NULL
* 返回:是否成功
* */
bool
_GetStoreInfo
();
/* 功能:登录
* 参数:NULL
* 返回:是否成功
...
...
@@ -149,73 +134,30 @@ private slots:
* 返回:是否成功
* */
bool
_RefundOrder
(
const
QString
&
orderId
);
/* 功能:获取收银员
* 参数:[1]收银员列表
* 返回:成功true失败false
* */
bool
_GetCashiers
(
QList
<
CashierObject
>&
cashiersList
);
/* 功能:检测收银员合法性
* 参数:NULL
* 返回:合法true不合法false
* */
bool
_CheckCashiers
();
/* 功能:获取Json对象的字符
* 参数:NULL
* 返回:Json字符串
* */
QString
_GetJsonStr
(
const
QJsonObject
&
json
);
/* 功能:写入销售单
* 参数:NULL
* 返回:成功true失败false
* */
bool
_DoOrderEntry
(
OrderObject
*
orderObject
);
/* 功能:销售单退单
* 参数:NULL
* 返回:成功true失败false
* */
bool
_RefundOrder
();
public
slots
:
/* 功能:开启流程控制器
* 参数:NULL
* 返回:NULL
* */
void
onFlowStart
();
/* 功能:连接数据库
* 参数:[1]IP[2]用户名[3]密码[4]库名
/* 功能:获取到新的门店信息
* 参数:[1]操作员ID[2]POS机ID
* [3]门店ID[4]营业日
* 返回:NULL
* */
void
on
ConnectDb
(
const
QString
&
host
,
const
QString
&
username
,
const
QString
&
password
,
const
QString
&
dbnam
e
);
void
on
GetNewStoreInfo
(
const
QString
&
operator_id
,
const
QString
&
pos_id
,
const
QString
&
store_id
,
const
QString
&
business_dat
e
);
/* 功能:处理订单
* 参数:[1]操作动作名[2]订单编号[3]配送员姓名
* 返回:NULL
* */
void
onProcessOrder
(
const
QString
&
operation
,
const
QString
&
orderId
,
const
DeliverObject
&
deliverObj
);
/* 功能:获取在班收银员信息
* 参数:NULL
* 返回:NULL
* */
void
onGetOnDutyCashiers
();
/* 功能:更新收银员信息
* 参数:NULL
* 返回:NULL
* */
void
onUpdateCashier
(
const
CashierObject
&
cashier
);
/* 功能:获取订单详情
* 参数:NULL
* 返回:NULL
* */
void
onGetOrderDetails
(
const
QString
&
orderId
);
/* 功能:获取到新的门店信息
* 参数:[1]操作员ID[2]POS机ID
* [3]门店ID[4]营业日
* 返回:NULL
* */
void
onGetNewStoreInfo
(
const
QString
&
operator_id
,
const
QString
&
pos_id
,
const
QString
&
store_id
,
const
QString
&
business_date
);
};
#endif // FLOWCONTROL_H
fmTakeaway/Control/refundControl.cpp
deleted
100644 → 0
View file @
2867d09b
#include "refundControl.h"
#include "QsLog.h"
#include <QJsonObject>
#include <QJsonDocument>
#include "DTools/dataManger.h"
RefundControl
&
RefundControl
::
GetInstance
()
{
static
RefundControl
rc
;
return
rc
;
}
void
RefundControl
::
SetListenPort
(
int
port
)
{
m_port
=
port
;
}
// 同步模式
void
RefundControl
::
run
()
{
m_procOrderSocket
=
new
BillSocket
(
this
);
m_tcpServer
=
new
QTcpServer
(
this
);
if
(
!
m_tcpServer
->
listen
(
QHostAddress
::
LocalHost
,
m_port
))
{
QLOG_WARN
()
<<
QString
(
"tcp server listen failed on port[%1]"
).
arg
(
m_port
);
return
;
}
m_bContinue
=
true
;
QByteArray
recvData
;
QString
replyData
;
QJsonParseError
jsonError
;
QJsonDocument
jsonDoc
;
while
(
m_bContinue
)
{
if
(
!
m_tcpServer
->
waitForNewConnection
(
60000
))
{
continue
;
}
QLOG_INFO
()
<<
"onNewConnecion....."
;
QString
error
;
QString
orderId
,
reason
;
int
version
,
reqtype
;
m_tcpSocket
=
m_tcpServer
->
nextPendingConnection
();
if
(
!
m_tcpSocket
->
waitForReadyRead
())
{
m_tcpSocket
->
close
();
continue
;
}
recvData
=
m_tcpSocket
->
readAll
();
QLOG_INFO
()
<<
QString
(
"recv data.[%1]"
).
arg
(
QString
(
recvData
));
jsonDoc
=
QJsonDocument
::
fromJson
(
recvData
,
&
jsonError
);
if
(
jsonError
.
error
==
QJsonParseError
::
NoError
)
{
QJsonObject
jsonObject
=
jsonDoc
.
object
();
version
=
jsonObject
[
"ver"
].
toInt
();
reqtype
=
jsonObject
[
"reqtype"
].
toInt
();
orderId
=
jsonObject
[
"order_id"
].
toString
();
reason
=
jsonObject
[
"reason"
].
toString
();
if
(
version
==
1
)
{
if
(
reqtype
==
17
)
{
QString
httpError
;
bool
httpResult
;
QJsonObject
httpSendJson
;
QJsonObject
httpRecvJson
;
httpSendJson
=
DataManger
::
GetInstance
().
GetRefundOrderData
(
reason
,
orderId
);
QLOG_INFO
()
<<
QString
(
"[---refund order---]. [requestData:%1]"
)
.
arg
(
QString
(
QJsonDocument
(
httpSendJson
).
toJson
(
QJsonDocument
::
Compact
).
replace
(
"
\"
"
,
""
)));
httpResult
=
m_procOrderSocket
->
Request
(
httpSendJson
,
httpRecvJson
,
httpError
);
QLOG_INFO
()
<<
QString
(
"refund order finsh. [result:%1][msg:%2][recvData:%3]"
)
.
arg
(
httpResult
).
arg
(
httpError
)
.
arg
(
QString
(
QJsonDocument
(
httpRecvJson
).
toJson
(
QJsonDocument
::
Compact
).
replace
(
"
\"
"
,
""
)));
if
(
httpResult
)
{
if
(
100
==
httpRecvJson
[
"status"
].
toInt
())
{
replyData
=
QString
(
"{
\"
ver
\"
:1,
\"
order_id
\"
:
\"
%1
\"
,
\"
statusCode
\"
:100,
\"
msg
\"
:
\"\"
}"
).
arg
(
orderId
);
m_tcpSocket
->
write
(
replyData
.
toUtf8
());
m_tcpSocket
->
waitForBytesWritten
();
m_tcpSocket
->
close
();
continue
;
}
else
{
error
=
httpRecvJson
[
"msg"
].
toString
();
}
}
else
{
error
=
httpError
;
}
}
else
{
error
=
QString
(
"undefine reqtype [%1]"
).
arg
(
reqtype
);
}
}
else
{
error
=
QString
(
"wrong version, current[%1] right[1]"
).
arg
(
version
);
}
}
else
{
error
=
"invalid data"
;
}
// 发生错误
replyData
=
QString
(
"{
\"
ver
\"
:1,
\"
order_id
\"
:
\"
%1
\"
,
\"
statusCode
\"
:101,
\"
msg
\"
:
\"
%2
\"
}"
).
arg
(
orderId
).
arg
(
error
);
m_tcpSocket
->
write
(
replyData
.
toUtf8
());
m_tcpSocket
->
waitForBytesWritten
();
m_tcpSocket
->
close
();
continue
;
}
QLOG_INFO
()
<<
"refundControl exit."
;
}
fmTakeaway/Control/refundControl.h
deleted
100644 → 0
View file @
2867d09b
/********************
* 同意订单退款控制
* *****************/
#ifndef REFUNDCONTROL_H
#define REFUNDCONTROL_H
#include <QObject>
#include <QTcpServer>
#include <QTcpSocket>
#include "Network/billSocket.h"
class
RefundControl
:
public
QObject
{
public
:
static
RefundControl
&
GetInstance
();
void
SetListenPort
(
int
port
);
private
:
RefundControl
(){}
RefundControl
(
RefundControl
const
&
);
RefundControl
&
operator
=
(
RefundControl
const
&
);
QTcpServer
*
m_tcpServer
;
QTcpSocket
*
m_tcpSocket
;
int
m_port
;
bool
m_bContinue
;
BillSocket
*
m_procOrderSocket
;
public
slots
:
/* 功能:开启控制器
* 参数:NULL
* 返回:NULL
* */
void
run
();
};
#endif // REFUNDCONTROL_H
fmTakeaway/Control/sinfoControl.cpp
View file @
1bdf9368
...
...
@@ -20,23 +20,22 @@ void SInfoControl::run()
if
(
!
m_tcpServer
->
listen
(
QHostAddress
::
LocalHost
,
m_port
))
{
QLOG_WARN
()
<<
QString
(
"SInfoControl listen failed on port[%1]"
).
arg
(
m_port
);
emit
listenFailed
(
QString
(
"绑定端口[%1]失败!"
).
arg
(
m_port
));
QLOG_ERROR
()
<<
QString
(
"SInfoControl listen failed on port[%1]"
).
arg
(
m_port
);
return
;
}
m_bContinue
=
true
;
QByteArray
recvData
;
QString
replyData
;
QJsonParseError
jsonError
;
QJsonDocument
jsonDoc
;
while
(
m_bContin
ue
)
while
(
tr
ue
)
{
if
(
!
m_tcpServer
->
waitForNewConnection
(
60000
))
{
continue
;
}
QLOG_INFO
()
<<
"onNewConnecion....."
;
QLOG_INFO
()
<<
"onNewConnecion
come
....."
;
QString
error
;
QString
fm_cmd
,
fm_ver
,
operator_id
,
pos_id
,
store_id
,
business_date
;
QJsonObject
store_info
;
...
...
fmTakeaway/Control/sinfoControl.h
View file @
1bdf9368
...
...
@@ -21,7 +21,6 @@ private:
QTcpServer
*
m_tcpServer
;
QTcpSocket
*
m_tcpSocket
;
int
m_port
;
bool
m_bContinue
;
public
slots
:
/* 功能:开启控制器
...
...
@@ -31,6 +30,12 @@ public slots:
void
run
();
signals
:
/* 功能:通知主界面监听失败
* 参数:[1]失败信息
* 返回:NULL
* */
void
listenFailed
(
const
QString
&
error
);
/* 功能:通知获取到门店信息
* 参数:[1]操作员ID[2]POS机ID
* [3]门店ID[4]营业日
...
...
fmTakeaway/dbsetForm.cpp
View file @
1bdf9368
...
...
@@ -12,9 +12,6 @@ DbsetForm::DbsetForm(QWidget *parent) :
_Init
();
connect
(
this
,
&
DbsetForm
::
connectDb
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onConnectDb
);
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
connectDbFinsh
,
this
,
&
DbsetForm
::
onConnectDbFinsh
);
on_dbsetBtnOk_clicked
();
}
...
...
fmTakeaway/fmTakeaway.pro
View file @
1bdf9368
...
...
@@ -37,7 +37,6 @@ SOURCES += main.cpp\
settingForm
.
cpp
\
floatForm
.
cpp
\
detailForm
.
cpp
\
Control
/
refundControl
.
cpp
\
Control
/
sinfoControl
.
cpp
HEADERS
+=
\
...
...
@@ -59,7 +58,6 @@ HEADERS += \
settingForm
.
h
\
floatForm
.
h
\
detailForm
.
h
\
Control
/
refundControl
.
h
\
Control
/
sinfoControl
.
h
FORMS
+=
mainForm
.
ui
\
...
...
fmTakeaway/main.cpp
View file @
1bdf9368
...
...
@@ -7,7 +7,6 @@
#include "preDefine.h"
#include "dbsetForm.h"
#include "Control/flowControl.h"
#include "Control/refundControl.h"
#include "Control/sinfoControl.h"
#include "floatForm.h"
#include "DTools/configManger.h"
...
...
@@ -66,15 +65,6 @@ int main(int argc, char *argv[])
FlowControl
::
GetInstance
().
moveToThread
(
&
workThread
);
workThread
.
start
();
// 将门店信息获取控制器移到工作线程
QThread
sInfoThread
;
SInfoControl
::
GetInstance
().
SetListenPort
(
ConfigManger
::
GetInstance
().
GetTcpServerPort
());
SInfoControl
::
GetInstance
().
moveToThread
(
&
sInfoThread
);
QObject
::
connect
(
&
sInfoThread
,
&
QThread
::
started
,
&
SInfoControl
::
GetInstance
(),
&
SInfoControl
::
run
);
sInfoThread
.
start
();
QObject
::
connect
(
&
SInfoControl
::
GetInstance
(),
&
SInfoControl
::
getNewStoreInfo
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onGetNewStoreInfo
);
FloatForm
f
;
MainForm
w
;
QObject
::
connect
(
&
w
,
&
MainForm
::
showFloatForm
,
&
f
,
&
FloatForm
::
onShow
);
...
...
@@ -83,5 +73,13 @@ int main(int argc, char *argv[])
QObject
::
connect
(
&
f
,
&
FloatForm
::
showMainForm
,
&
w
,
&
MainForm
::
show
);
w
.
MyShow
();
// 将门店信息获取控制器移到工作线程
QThread
sInfoThread
;
SInfoControl
::
GetInstance
().
SetListenPort
(
ConfigManger
::
GetInstance
().
GetTcpServerPort
());
SInfoControl
::
GetInstance
().
moveToThread
(
&
sInfoThread
);
QObject
::
connect
(
&
sInfoThread
,
&
QThread
::
started
,
&
SInfoControl
::
GetInstance
(),
&
SInfoControl
::
run
);
QObject
::
connect
(
&
SInfoControl
::
GetInstance
(),
&
SInfoControl
::
getNewStoreInfo
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onGetNewStoreInfo
);
sInfoThread
.
start
();
return
a
.
exec
();
}
fmTakeaway/mainForm.cpp
View file @
1bdf9368
...
...
@@ -32,9 +32,7 @@ MainForm::MainForm(QWidget *parent) :
// 连接信号槽
connect
(
&
m_timeTimer
,
&
QTimer
::
timeout
,
this
,
&
MainForm
::
onSetCurrentTime
);
connect
(
this
,
&
MainForm
::
flowStart
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onFlowStart
);
connect
(
this
,
&
MainForm
::
processOrder
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onProcessOrder
);
connect
(
this
,
&
MainForm
::
getOnDutyCashiers
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onGetOnDutyCashiers
);
connect
(
this
,
&
MainForm
::
getOrderDetails
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onGetOrderDetails
);
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
hideAlert
,
this
,
&
MainForm
::
onHideAlert
);
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
showAlert
,
this
,
&
MainForm
::
onShowAlert
);
...
...
@@ -44,7 +42,6 @@ MainForm::MainForm(QWidget *parent) :
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
setCashierInfo
,
this
,
&
MainForm
::
onSetCashierInfo
);
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
changeOrderStatus
,
this
,
&
MainForm
::
onChangeOrderStatus
);
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
showDeliverPickForm
,
this
,
&
MainForm
::
onShowDeliverPickForm
);
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
showCashierPickForm
,
this
,
&
MainForm
::
onShowCashierPickForm
);
connect
(
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
showOrderDetails
,
this
,
&
MainForm
::
onShowOrderDetails
);
// 初始化界面
...
...
@@ -67,13 +64,11 @@ void MainForm::MyShow()
m_alertForm
=
new
AlertForm
(
this
);
m_pickForm
=
new
PickForm
(
this
);
connect
(
m_pickForm
,
&
PickForm
::
updateCashier
,
this
,
&
MainForm
::
onUpdateCashier
);
m_settingForm
=
new
SettingForm
(
this
);
m_detailForm
=
new
DetailForm
(
this
);
emit
flowStart
();
return
;
}
...
...
@@ -144,11 +139,6 @@ void MainForm::onMainProcBtnClicked()
emit
processOrder
(
pBtn
->
property
(
"operation"
).
toString
(),
pBtn
->
property
(
"orderId"
).
toString
(),
DeliverObject
());
}
void
MainForm
::
on_mainBtnCashier_clicked
()
{
emit
getOnDutyCashiers
();
}
void
MainForm
::
on_mainBtnSet_clicked
()
{
m_settingForm
->
show
();
...
...
@@ -160,11 +150,6 @@ void MainForm::on_mainBtnHide_clicked()
showFloatForm
();
}
void
MainForm
::
onUpdateCashier
(
const
CashierObject
&
cashier
)
{
//ui->mainBtnCashier->setText(cashier.name);
}
void
MainForm
::
onShowOrderDetails
(
OrderObject
*
orderObject
)
{
m_detailForm
->
InitData
(
orderObject
);
...
...
@@ -333,12 +318,6 @@ void MainForm::onShowDeliverPickForm(const QString &orderId, const QList<Deliver
m_pickForm
->
show
();
}
void
MainForm
::
onShowCashierPickForm
(
const
QList
<
CashierObject
>
&
cashiers
)
{
m_pickForm
->
SetCashiersInfo
(
cashiers
);
m_pickForm
->
show
();
}
void
MainForm
::
on_mainBtnUp_clicked
()
{
m_currentTable
->
scrollToTop
();
...
...
fmTakeaway/mainForm.h
View file @
1bdf9368
...
...
@@ -70,21 +70,11 @@ private:
QPushButton
*
_GetTabBtnByOrderStatus
(
int
orderStatus
);
signals
:
/* 功能:开启流程控制器
* 参数:NULL
* 返回:NULL
* */
void
flowStart
();
/* 功能:处理订单
* 参数:[1]操作动作名[2]订单编号[3]配送员信息
* 返回:NULL
* */
void
processOrder
(
const
QString
&
operation
,
const
QString
&
orderId
,
const
DeliverObject
&
deliverObj
);
/* 功能:获取在班收银员
* 参数:NULL
* 返回:NULL
* */
void
getOnDutyCashiers
();
/* 功能:通知悬浮窗显示
* 参数:NULL
* 返回:NULL
...
...
@@ -128,11 +118,6 @@ private slots:
* 返回:NULL
* */
void
onMainProcBtnClicked
();
/* 功能:选择收银员按钮对应动作
* 参数:NULL
* 返回:NULL
* */
void
on_mainBtnCashier_clicked
();
/* 功能:设置按钮对应动作
* 参数:NULL
* 返回:NULL
...
...
@@ -200,16 +185,6 @@ public slots:
* 返回:NULL
* */
void
onShowDeliverPickForm
(
const
QString
&
orderId
,
const
QList
<
DeliverObject
>&
delivers
);
/* 功能:显示收银员选择窗口
* 参数:[1]收银员信息
* 返回:NULL
* */
void
onShowCashierPickForm
(
const
QList
<
CashierObject
>&
cashiers
);
/* 功能:更新收银员信息
* 参数:NULL
* 返回:NULL
* */
void
onUpdateCashier
(
const
CashierObject
&
cashier
);
/* 功能:显示订单详情
* 参数:NULL
* 返回:NULL
...
...
fmTakeaway/mainForm.ui
View file @
1bdf9368
...
...
@@ -1381,7 +1381,7 @@
<item>
<widget
class=
"QLabel"
name=
"mainLabOpeStatus"
>
<property
name=
"text"
>
<string
>
正常
</string
>
<string
/
>
</property>
</widget>
</item>
...
...
fmTakeaway/pickForm.cpp
View file @
1bdf9368
...
...
@@ -18,7 +18,6 @@ PickForm::PickForm(QWidget *parent) :
connect
(
btn
,
&
QPushButton
::
toggled
,
this
,
&
PickForm
::
onNumBtnToggled
);
}
connect
(
this
,
&
PickForm
::
processOrder
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onProcessOrder
);
connect
(
this
,
&
PickForm
::
updateCashier
,
&
FlowControl
::
GetInstance
(),
&
FlowControl
::
onUpdateCashier
);
_Init
();
}
...
...
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