Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
takeout_sbk
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
yunpeng.song
takeout_sbk
Commits
6198a7d1
Commit
6198a7d1
authored
Apr 03, 2020
by
wuyang.zou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix bug: sku是短key 向OMS汇报;过滤培训模式;顾客立刻下单后被立即取消,没有录入退货单;
parent
13aaf03a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
118 additions
and
16 deletions
+118
-16
fmTakeout/Control/flowControl.cpp
+104
-11
fmTakeout/Control/flowControl.h
+8
-0
fmTakeout/fmTakeout.rc
+4
-4
fmTakeout/preDefine.h
+2
-1
No files found.
fmTakeout/Control/flowControl.cpp
View file @
6198a7d1
...
...
@@ -1418,7 +1418,8 @@ void FlowControl::_ReportOMSRecordOrderInfo()
if
(
!
RepOMSRecOrderIn
){
QLOG_INFO
()
<<
"[<<<<----FlowControl::_ReportOMSRecordOrderInfo m_orderRecordRepOMSList size: ---->>>>>]"
<<
m_orderRecordRepOMSList
.
size
();
//上面的汇报OMS订单入机状态的汇报列表 遍历循环后:如果出现 RepOMSRecOrderIn == NULL;不能从List容器的头部移除已汇报成功结果【注意,必须是订单已经成功入机的订单,而非是入机失败,汇报OMS成功的订单】;
//上面的汇报OMS订单入机状态的汇报列表 遍历循环后:如果出现 RepOMSRecOrderIn == NULL;不能从List容器的头部移除已汇报成功结果
//【注意,必须是订单已经成功入机的订单,而非是入机失败,汇报OMS成功的订单】;
m_RepOMSRecordOrderMutex
.
unlock
();
return
;
}
...
...
@@ -1481,6 +1482,57 @@ void FlowControl::_ReportOMSRecordOrderInfo()
void
FlowControl
::
_AddOrUpdateReportOmsList
(
const
QString
&
orderId
,
const
QString
&
channel
,
const
QString
&
repType
,
const
QString
&
status
,
const
QString
&
error
)
{
bool
repReportLockRet
=
m_RepOMSRecordOrderMutex
.
tryLock
(
2
*
1000
);
if
(
repReportLockRet
)
{
RepOMSRecordOrderInfo
*
repOMSRecordOrder
=
NULL
;
if
(
!
m_orderRecordRepOMSList
.
isEmpty
())
{
QList
<
RepOMSRecordOrderInfo
*>::
iterator
i
;
for
(
i
=
m_orderRecordRepOMSList
.
begin
();
i
!=
m_orderRecordRepOMSList
.
end
();
++
i
)
{
repOMSRecordOrder
=
(
*
i
);
//*i 使用*运算符获取遍历容器中所指的元素;
if
(
orderId
==
repOMSRecordOrder
->
orderNo
)
{
break
;
}
else
{
repOMSRecordOrder
=
NULL
;
}
}
}
if
(
!
repOMSRecordOrder
){
repOMSRecordOrder
=
new
RepOMSRecordOrderInfo
();
repOMSRecordOrder
->
reqResult
=
0
;
}
else
{
if
(
error
==
repOMSRecordOrder
->
remark
&&
1
==
repOMSRecordOrder
->
reqResult
){
m_orderRecordRepOMSList
.
removeOne
(
repOMSRecordOrder
);
//repOMSRecordOrder->reqResult=1; //此时reqResult已经是1了;
}
else
{
m_orderRecordRepOMSList
.
removeOne
(
repOMSRecordOrder
);
repOMSRecordOrder
->
reqResult
=
0
;
}
}
repOMSRecordOrder
->
orderNo
=
orderId
;
repOMSRecordOrder
->
channel
=
channel
;
repOMSRecordOrder
->
type
=
repType
;
repOMSRecordOrder
->
status
=
status
;
repOMSRecordOrder
->
opUser
=
m_cashierName
;
repOMSRecordOrder
->
recordDate
=
QDateTime
::
currentDateTime
().
toString
(
"yyyy-MM-dd hh:mm:ss"
);;
repOMSRecordOrder
->
storeId
=
m_storeId
;
repOMSRecordOrder
->
remark
=
error
;
QLOG_INFO
()
<<
QString
::
fromLocal8Bit
(
"[<<<<---FlowControl::_AddOrUpdateReportOmsList:m_orderRecordRepOMSList.append() orderId:%1 error:%2--->>>>]"
).
arg
(
orderId
).
arg
(
error
);
m_orderRecordRepOMSList
.
append
(
repOMSRecordOrder
);
m_RepOMSRecordOrderMutex
.
unlock
();
}
else
{
QLOG_INFO
()
<<
QString
::
fromLocal8Bit
(
"[<<<<---FlowControl::_AddOrUpdateReportOmsList: tryLock failed orderId:%1 error:%2 --->>>>]"
).
arg
(
orderId
).
arg
(
error
);
}
}
QString
FlowControl
::
_GetJsonStr
(
const
QJsonObject
&
json
)
{
...
...
@@ -2180,7 +2232,6 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb
repOMSRecordOrder
->
recordDate
=
QDateTime
::
currentDateTime
().
toString
(
"yyyy-MM-dd hh:mm:ss"
);;
repOMSRecordOrder
->
storeId
=
m_storeId
;
repOMSRecordOrder
->
remark
=
simExceptMsg
;
//repOMSRecordOrder->checkNo = QString::fromLocal8Bit("0");
QLOG_INFO
()
<<
QString
::
fromLocal8Bit
(
"[<<<<---FlowControl::_ResponseSimphony06Request:m_orderRecordRepOMSList.append() orderId:%1 simExceptMsg:%2--->>>>]"
).
arg
(
orderId
).
arg
(
simExceptMsg
);
m_orderRecordRepOMSList
.
append
(
repOMSRecordOrder
);
m_RepOMSRecordOrderMutex
.
unlock
();
...
...
@@ -2283,7 +2334,6 @@ bool FlowControl::_ResponseSimphony06Request(const QJsonObject &content, QJsonOb
repOMSRecordOrder
->
recordDate
=
QDateTime
::
currentDateTime
().
toString
(
"yyyy-MM-dd hh:mm:ss"
);;
repOMSRecordOrder
->
storeId
=
m_storeId
;
repOMSRecordOrder
->
remark
=
simExceptMsg
;
//repOMSRecordOrder->checkNo = QString::fromLocal8Bit("0");
QLOG_INFO
()
<<
QString
::
fromLocal8Bit
(
"[<<<<---FlowControl::_ResponseSimphony06Request:m_orderRecordRepOMSList.append() orderId:%1 simExceptMsg:%2--->>>>]"
).
arg
(
orderId
).
arg
(
simExceptMsg
);
m_orderRecordRepOMSList
.
append
(
repOMSRecordOrder
);
m_RepOMSRecordOrderMutex
.
unlock
();
...
...
@@ -2322,13 +2372,31 @@ bool FlowControl::_ResponseOMS11Request(const QJsonObject &content, QJsonObject
error
=
QString
::
fromLocal8Bit
(
"订单号不能为空"
);
return
false
;
}
else
{
if
(
!
m_simValidOrdersList
.
isEmpty
()){
if
(
!
m_simValidOrdersList
.
isEmpty
()
)
{
QString
simValidOrderListFirstOne
=
m_simValidOrdersList
.
first
();
QString
omsPushOrderId
=
content
[
JSON_ORDER_ID
].
toString
();
//缩小锁住订单的条件范围: 服务端推单给插件程序且插件程序拒绝本次订单状态发生变化的请求
if
(
content
[
JSON_ORDER_ID
].
toString
()
==
simValidOrderListFirstOne
&&
m_bFloatFromLockSt
){
if
(
omsPushOrderId
==
simValidOrderListFirstOne
&&
m_bFloatFromLockSt
){
error
=
QString
::
fromLocal8Bit
(
"当前订单正在录POS系统,请耐心等待"
);
return
false
;
}
//新增条件筛选:当正在准备录入销售单的订单(m_bFloatFromLockSt=false);
//插件 同时接受到OMS 的取消操作; 此时需要将在排队录入的销售单 请求移除; 同时加强 录单请求 是否存在筛查;
int
omsPushStatus
=
content
[
JSON_STATUS
].
toInt
();
if
(
omsPushOrderId
==
simValidOrderListFirstOne
&&
omsPushStatus
==
OrderObject
::
Refunded
)
{
OrderObject
*
orderObject
=
m_FmOrdersMap
.
value
(
simValidOrderListFirstOne
);
if
(
omsPushStatus
!=
orderObject
->
orderStatus
)
{
error
=
QString
::
fromLocal8Bit
(
"已经取消了 订单(%1)向 POS 录入销售单的请求"
).
arg
(
omsPushOrderId
);
m_OrderEntryMutex
.
lock
();
m_simValidOrdersList
.
removeOne
(
omsPushOrderId
);
m_OrderEntryMutex
.
unlock
();
return
true
;
}
}
}
}
...
...
@@ -2529,6 +2597,12 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
return
true
;
}
//检查Order Data Valid; 防止录入销售单时 接受到OMS推送取消订单请求且插件未锁屏时,列表录单请求被移除;
if
(
m_simValidOrdersList
.
isEmpty
()
)
{
error
=
QString
::
fromLocal8Bit
(
"This Delivery Order:%1 Is Invalid, No Need Record POS System"
).
arg
(
orderObject
->
id
);
return
true
;
}
//录单时才触发隐藏 主窗口 + 锁定悬浮框;
if
(
!
m_bFloatFromLockSt
){
m_bFloatFromLockSt
=
true
;
//更新悬浮框的锁定状态=true;
...
...
@@ -2551,7 +2625,7 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//星巴克的订单类型:1:新订单; 2:预订单; 3:客诉单; 4:MOP自测订单; 5:预约订单
if
(
3
==
orderObject
->
getOrderType
())
{
tempOrderType
=
12
;
tempOrderPayType
=
2
1
;
tempOrderPayType
=
-
1
;
}
//MOP自测订单 在下方处理;星巴克-预约订单:在下方处理;
// OMS提供的数据://订单渠道: 星巴克-MOD,百度外卖,饿了么APP,美团外卖,星巴克-MOP;
// MOD渠道对应的业务逻辑 ;
...
...
@@ -2835,16 +2909,27 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
int
starPromotionTempNo
=
0
;
//【①默认属性:code中含有Default字符串(不区分大小写)+ ②code中以非数字开头 + ③商品数量是0】 直接跳过;
QString
tempCodeLeftHead
=
dish
->
code
.
left
(
1
);
if
(
dish
->
code
.
contains
(
"Default"
,
Qt
::
CaseInsensitive
)
||
(
tempCodeLeftHead
<
QString
(
'0'
)
||
tempCodeLeftHead
>
QString
(
'9'
))
||
!
dish
->
qty
)
{
if
(
tempCodeLeftHead
<
QString
(
'0'
)
||
tempCodeLeftHead
>
QString
(
'9'
)
)
{
error
=
QString
::
fromLocal8Bit
(
"This Order Has PosKey Is Combo Error"
);
if
(
dish
->
code
.
contains
(
"Default"
,
Qt
::
CaseInsensitive
)
||
(
tempCodeLeftHead
<
QString
(
'0'
)
||
tempCodeLeftHead
>
QString
(
'9'
))
||
!
dish
->
qty
||
dish
->
code
.
length
()
<
3
)
{
//①code中以非数字开头直接退出本次录单
//②code中长度小于3位 直接退出本次录单; [ '34' , '16' ]
//③code 异常, 向oms 汇报异常;
if
(
tempCodeLeftHead
<
QString
(
'0'
)
||
tempCodeLeftHead
>
QString
(
'9'
)
||
!
dish
->
qty
||
dish
->
code
.
length
()
<
3
)
{
error
=
QString
::
fromLocal8Bit
(
"This Order Has PosKey Is Combo Error Or Default* Or qty Is Zore Or Sku Length < 3"
);
m_OrderEntryMutex
.
lock
();
m_simValidOrdersList
.
removeOne
(
orderObject
->
id
);
m_OrderEntryMutex
.
unlock
();
m_bFloatFromLockSt
=
false
;
//解锁悬浮框的锁定标志;
emit
doUnLockFloatFrom
();
//解锁悬浮框锁定
// 存储订单入机前异常信息并汇报OMS;
QString
requestType
=
orderObject
->
orderStatus
==
6
?
QString
::
fromLocal8Bit
(
"6"
)
:
QString
::
fromLocal8Bit
(
"3"
);
_AddOrUpdateReportOmsList
(
orderObject
->
id
,
orderObject
->
channel
,
requestType
,
QString
(
"2"
),
error
);
return
true
;
}
continue
;
}
/**********************************************************************************/
...
...
@@ -2867,14 +2952,22 @@ bool FlowControl::_ResponseSimReqFristOrderData(const QJsonObject &content, QJso
//默认属性直接跳过;
if
(
!
subDish
->
code
.
isEmpty
()
&&
!
subDish
->
code
.
contains
(
"Default"
,
Qt
::
CaseInsensitive
)
&&
subDish
->
qty
)
{
//①code中以非数字开头直接退出本次录单;
//②code中长度小于3位 直接退出本次录单; [ '34' , '16' ]
//③code 异常, 向oms 汇报异常;
QString
tempSubCodeLeftHead
=
subDish
->
code
.
left
(
1
);
if
(
tempSubCodeLeftHead
<
QString
(
'0'
)
||
tempSubCodeLeftHead
>
QString
(
'9'
)
)
{
error
=
QString
::
fromLocal8Bit
(
"This Order SubProduct PosKey Is String And No Contains Default"
);
if
(
tempSubCodeLeftHead
<
QString
(
'0'
)
||
tempSubCodeLeftHead
>
QString
(
'9'
)
||
subDish
->
code
.
length
()
<
3
)
{
error
=
QString
::
fromLocal8Bit
(
"This Order SubProduct PosKey Is String And No Contains Default
Or Sku Length < 3
"
);
m_OrderEntryMutex
.
lock
();
m_simValidOrdersList
.
removeOne
(
orderObject
->
id
);
m_OrderEntryMutex
.
unlock
();
m_bFloatFromLockSt
=
false
;
//解锁悬浮框的锁定标志;
emit
doUnLockFloatFrom
();
//解锁悬浮框锁定
// 存储订单入机前异常信息并汇报OMS;
QString
requestType
=
orderObject
->
orderStatus
==
6
?
QString
::
fromLocal8Bit
(
"6"
)
:
QString
::
fromLocal8Bit
(
"3"
);
_AddOrUpdateReportOmsList
(
orderObject
->
id
,
orderObject
->
channel
,
requestType
,
QString
(
"2"
),
error
);
return
true
;
}
sObj
.
insert
(
"consume_num"
,
subDish
->
qty
);
...
...
fmTakeout/Control/flowControl.h
View file @
6198a7d1
...
...
@@ -334,6 +334,14 @@ private slots:
* */
void
_ReportOMSRecordOrderInfo
();
/* 功能:往 向OMS汇报POS订单入机状态的队列 添加新项 或 更新队列中数据;
* 参数:NULL
* 返回:NULL
* */
void
_AddOrUpdateReportOmsList
(
const
QString
&
orderId
,
const
QString
&
channel
,
const
QString
&
repType
,
const
QString
&
status
,
const
QString
&
error
);
/* 功能:获取Json对象的字符
* 参数:NULL
* 返回:Json字符串
...
...
fmTakeout/fmTakeout.rc
View file @
6198a7d1
...
...
@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2020,
312,1
PRODUCTVERSION 2,2020,
312,1
FILEVERSION 2,2020,
4,13
PRODUCTVERSION 2,2020,
4,13
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
...
...
@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2020.
312.1
"
VALUE "FileVersion", "2.2020.
312.1
"
VALUE "ProductVersion", "2.2020.
4.13
"
VALUE "FileVersion", "2.2020.
4.13
"
//*************************************************************************//
END
END
...
...
fmTakeout/preDefine.h
View file @
6198a7d1
...
...
@@ -25,7 +25,8 @@
//#define APP_VERSION "2.2019.815.1"
//#define APP_VERSION "2.2019.916.2"
//#define APP_VERSION "2.2020.26.1"
#define APP_VERSION "2.2020.312.1"
//#define APP_VERSION "2.2020.312.1"
#define APP_VERSION "2.2020.4.13"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
...
...
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