Commit 62cf85b7 by wuyang.zou

Version 4.2020.526.1

1、完善 WSG功能;
2、准备 预约订单功能;
parent d91d29c1
......@@ -326,7 +326,7 @@ void FlowControl::_NotifyPmsPullOrder()
//如果订单存在库中则更新订单状态;
bExistOrder = PmsOrdersData::getInstance().isOrderExist(orderObject->id);
if( bExistOrder ){
updateRet = PmsOrdersData::getInstance().updateOrderStatus(orderObject,orderObject->orderStatus,orderObject->makeStatus);
updateRet = PmsOrdersData::getInstance().updateOrderStatus( orderObject, orderObject->orderStatus, orderObject->makeStatus );
//不存在则插入;
} else {
QString pmsOrderRef;
......@@ -422,6 +422,10 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->packDiscount = 0;
orderObject->deliveryPrice = 0;
orderObject->deliveryDiscount = 0;
orderObject->forwardPosStatus =0;
orderObject->negativePosStatus =0;
orderObject->businessType = "0";
orderObject->inAdvanceTakemeal = 0;
orderObject->FromJson(jsonObject);
orderObject->pushOrderType=0;
......@@ -439,17 +443,22 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
orderObject->dataBasePosOrderCheckNo = "";
//插件程序内存中没有此订单时需要从数据库中获取该订单标志数据;同时在接受到退单情况时,也需要从数据库中重新获取(防止内存中标志数据未更新[入机后未更新]);
//查询此 订单+订单状态+制作状态 是否已经存在数据库中;
//查询此 订单+订单状态+制作状态+预约单提前到店 是否已经存在数据库中;
bool pmsMakeStatusIsExistRet = true;
bool pmsOrderStatusIsExistRet = PmsOrdersData::getInstance().isOrderAndStatusExist(orderObject->id, orderObject->orderStatus, orderObject->makeStatus, pmsMakeStatusIsExistRet );
int pmsArriveAheadFlag = 0;
bool pmsOrderStatusIsExistRet = PmsOrdersData::getInstance().isOrderAndStatusExist(orderObject->id, orderObject->orderStatus, orderObject->makeStatus, pmsMakeStatusIsExistRet, pmsArriveAheadFlag );
m_FmOrdersMap.insert(orderObject->id, orderObject);
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Orders Map:Insert New Order[ OrderId: %1 OrderDesc: %2 OrderStatus: %3 OrderMakeStatus: %4]--->>>>]")
.arg(orderObject->id).arg( orderObject->getOrderStatusDec() ).arg(orderObject->orderStatus).arg(orderObject->makeStatus);
if(!pmsOrderStatusIsExistRet || !pmsMakeStatusIsExistRet) {
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Orders Map:Insert New Order[ OrderId: %1 OrderDesc: %2 OrderStatus: %3 "
" MakeStatus: %4 oldArriverAhead: %5 NewArriverAhead: %6 ]--->>>>]")
.arg(orderObject->id).arg( orderObject->getOrderStatusDec() ).arg(orderObject->orderStatus)
.arg(orderObject->makeStatus).arg(pmsArriveAheadFlag).arg(orderObject->inAdvanceTakemeal);
if(!pmsOrderStatusIsExistRet || !pmsMakeStatusIsExistRet || (pmsArriveAheadFlag != orderObject->inAdvanceTakemeal) ) {
//程序刚启动+量大+ 异步也无碍 顾无需加锁;
m_simValidOrdersList.append(orderObject->id);
}
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis-> changeOrderStatus--->>>>]");
emit changeOrderStatus(orderObject);
}
......@@ -457,22 +466,26 @@ void FlowControl::_OrderAnalysis(const QJsonObject& jsonObject)
else {
int oldStatus = orderObject->orderStatus;
QString oldMakeStatus = orderObject->makeStatus;
int oldArriverAhead = orderObject->inAdvanceTakemeal;
orderObject->FromJson(jsonObject);
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Order Map:Update orderId:%1 OldStatus:%2: curStatus:%3]--->>>>]")
.arg(orderObject->id).arg(oldStatus).arg(orderObject->orderStatus);
// 如果订单状态 和 制作状态 出现变化都需添加到队列;
if(oldStatus != orderObject->orderStatus || oldMakeStatus != orderObject->makeStatus) {
QLOG_INFO() << QString("[<<<<---FmTakeout Valid Order Map:Update orderId:%1 OldStatus:%2: curStatus:%3 "
"OldMakeStatus:%4: makeStatus:%5 OldArriverAhead:%6: ArriverAhead:%7 ]--->>>>]")
.arg(orderObject->id).arg(oldStatus).arg(orderObject->orderStatus)
.arg(oldMakeStatus).arg(orderObject->makeStatus).arg(oldArriverAhead).arg(orderObject->inAdvanceTakemeal);
// 如果订单状态 或 制作状态 或 预约单提前到店 出现变化都需添加到队列;
if(oldStatus != orderObject->orderStatus || oldMakeStatus != orderObject->makeStatus || oldArriverAhead != orderObject->inAdvanceTakemeal) {
bRetOrderEntryMutex =m_OrderEntryMutex.tryLock(VALUE_TRYLOCKMEMTIMEOUT);
if(!bRetOrderEntryMutex) {
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:orderId:%1 OrderStatus:%2 Change m_OrderEntryMutex.tryLock Failed --->>>>]")
.arg(orderObject->id).arg(orderObject->orderStatus);
QLOG_INFO() << QString("[<<<<---FmTakeout _OrderAnalysis:orderId:%1 OrderStatus:%2 MakeStatus:%3 ArriverAhead:%4 Change m_OrderEntryMutex.tryLock Failed --->>>>]")
.arg(orderObject->id).arg(orderObject->orderStatus).arg(orderObject->makeStatus).arg(orderObject->inAdvanceTakemeal);
} else {
m_simValidOrdersList.append(orderObject->id);
m_OrderEntryMutex.unlock();
}
emit changeOrderStatus(orderObject, oldStatus);
}
}
orderObject->updateTime=QDateTime::currentDateTime().toTime_t();
......@@ -658,6 +671,9 @@ void FlowControl::_PullOrderData()
PullOrderInfo* info = m_orderPullList.takeFirst();
if(info->orderId.isEmpty()) {
// 调换拉取订单列表频率 4S 一页 30笔;
m_pullTimer->start(1000*4);
if ( _PullOrderList(info->pageSize,info->pageNumber) ) {
QLOG_INFO()<<"[<<<<----FlowControl::_PullOrderData _PullOrderList successful---->>>>>]";
m_orderPullList.removeOne(info);
......@@ -732,10 +748,10 @@ bool FlowControl::_PullOrderDetail(const QString& orderId, const QString& channe
}
/*解析json数据失败则20秒后重新拉单*/
if(!result) {
m_pullTimer->start(1000*10);
m_pullTimer->start(1000*20);
// 如果某次拉订单列表出现失败;此函数的外层函数 _PullOrderData:会将本次拉单对象存起来,等待下次拉取;
} else {
m_pullTimer->start(1000*5);
m_pullTimer->start(1000*2);
}
qDebug()<<"[<<<<---Pull Order Detail Result--->>>>]"<<result;
return result;
......@@ -809,7 +825,7 @@ bool FlowControl::_PullOrderList(const int &pageSize, const int &pageNo)
}
}
}
// 如果出现拉取订单列表失败,触发下一次拉门店有效订单的时间间隔变更为20(如果一开始就获取订单列表成功:时间间隔为5s)
// 如果出现拉取订单列表失败,触发下一次拉门店有效订单的时间间隔变更为10(如果一开始就获取订单列表成功:时间间隔为2s)
if(!result) {
m_pullTimer->start(1000*10);
// 如果某次拉订单列表出现失败;此函数的外层函数 _PullOrderData: 还会将本次拉单列表存起来等待下次拉取;
......@@ -1400,13 +1416,14 @@ QString FlowControl::_GetJsonStr(const QJsonObject &json)
return QString(QJsonDocument(json).toJson(QJsonDocument::Compact)).replace("\"","");
}
QJsonObject FlowControl::_PackHttpReplyJson(const int status, const QString &msg, const QJsonObject &data,const int& iscontinue)
QJsonObject FlowControl::_PackHttpReplyJson(const int status, const QString &msg, const QJsonObject &data, const int& iscontinue, const QString &orderId)
{
QJsonObject rObj;
rObj.insert("statusCode", status);
rObj.insert("msg", msg);
rObj.insert("iscontinue",iscontinue);
rObj.insert("data", data);
rObj.insert("orderId", orderId);
return rObj;
}
......
......@@ -492,7 +492,7 @@ public slots:
* 参数:NULL
* 返回:Json对象
* */
QJsonObject _PackHttpReplyJson(const int status, const QString& msg, const QJsonObject& data, const int &iscontinue);
QJsonObject _PackHttpReplyJson(const int status, const QString& msg, const QJsonObject& data, const int &iscontinue, const QString &orderId);
/**
*功能:FM外卖插件为响应Simphony请求准备返回数据
......
......@@ -92,7 +92,7 @@ public:
*参数:[1]订单号 [2]订单状态
*返回:true是,false否
**/
bool isOrderAndStatusExist(const QString& orderId, const int &OrderStatus, const QString& makeStatus, bool& pmsMakeStatusIsExistRet);
bool isOrderAndStatusExist(const QString& orderId, const int &OrderStatus, const QString& makeStatus, bool& pmsMakeStatusIsExistRet, int& arriveAheadFlag);
/**
*功能:查询订单是否存在PMS数据库;
......
......@@ -84,6 +84,9 @@ bool QtRedisClient::pushOrder2Redis(const OrderObject* orderObj ){
orderStatusObj.insert("MAKESOURCE",orderObj->makeSource);
orderStatusObj.insert("MAKEDEVICEID",orderObj->makeDeviceId);
orderStatusObj.insert("MAKEDEVICENAME","");
if ( 7== orderObj->orderType ) {
orderStatusObj.insert( "ARRIVEAHEAD", orderObj->inAdvanceTakemeal );
}
QJsonDocument orderStatusDoc = QJsonDocument(orderStatusObj);
cmdString.append(orderStatusDoc.toJson());
......
......@@ -28,6 +28,7 @@ void LocalHttpServer::run()
QJsonObject replyObject;
int status; //解析json结果
QString msg;
QString pushOrderId;
QJsonObject data; //回复的内容json
int iscontinue =0;
recvObject = QJsonDocument::fromJson(recvData.toUtf8(), &jsonError).object();
......@@ -48,9 +49,10 @@ void LocalHttpServer::run()
if(!FlowControl::GetInstance()._SimValidOrdersListIsEmpty()) {
iscontinue=1;
}
pushOrderId = recvObject["orderId"].toString();
}
/***将FM外卖插件中的合法有效数据返回给上面Http发过来的请求***/
replyObject = FlowControl::GetInstance()._PackHttpReplyJson(status, msg, data,iscontinue);
replyObject = FlowControl::GetInstance()._PackHttpReplyJson( status, msg, data,iscontinue, pushOrderId );
QLOG_INFO() << QString::fromLocal8Bit("[<<<<---FM外卖插件回应Http拉单请求后的返回结果:--->>>>]") << replyObject;
session->replyJsonObject(replyObject);
}
......
......@@ -130,36 +130,48 @@ void OrderObject::FetchDataFromJson(const QJsonObject &json)
QString OrderObject::getChannelName()
{
QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName [%1]--->>>>]").arg(channel);
if ("MOD" == channel && 3 != orderType){
if ( "4" == platformSource ) {
if ( "20" == businessType ) {
return QString::fromLocal8Bit("微信用星说");
} else if ( "30" == businessType ) {
return QString::fromLocal8Bit("拼单-MOD");
}
return QString::fromLocal8Bit("微信-MOD");
if ( "MOD" == channel ) {
if (3 == orderType ) {
return QString::fromLocal8Bit("星-客诉");
} else if ( 7 == orderType ) {
return QString::fromLocal8Bit("预约-MOD");
} else if ( 8 == orderType ) {
return QString::fromLocal8Bit("拼单-MOD");
} else {
return QString::fromLocal8Bit("星-MOD");
if ( "4" == platformSource ) {
return QString::fromLocal8Bit("微信-MOD");
} else {
return QString::fromLocal8Bit("星-MOD");
}
}
}else if("MOD" == channel && 3 == orderType){
return QString::fromLocal8Bit("星-客诉");
}else if("WSG-MOD" == channel ){ // 兼容渠道名称不统一问题;
return QString::fromLocal8Bit("微信用星说");
}else if("WSG-MOD" == channel ){
if (7 == orderType ) {
return QString::fromLocal8Bit("预约-WSG");
} else if ( 8 == orderType ) {
return QString::fromLocal8Bit("拼单-WSG");
} else {
return QString::fromLocal8Bit("微信用星说");
}
}else if("ELE" == channel){
return QString::fromLocal8Bit("饿了么");
}else if("MOP" == channel && 4 != orderType){
if ( "5" == platformSource ) {
return QString::fromLocal8Bit("口碑-MOP");
}else if( "MOP" == channel ){
if (4 == orderType ) {
return QString::fromLocal8Bit("星-自测");
} else if ( 7 == orderType ) {
return QString::fromLocal8Bit("预约-MOP");
} else if ( 8 == orderType ) {
return QString::fromLocal8Bit("拼单-MOP");
} else {
return QString::fromLocal8Bit("星-MOP");
if ( "5" == platformSource ) {
return QString::fromLocal8Bit("口碑-MOP");
} else {
return QString::fromLocal8Bit("星-MOP");
}
}
}else if("MOP" == channel && 4 == orderType){
return QString::fromLocal8Bit("星-自测");
}else{
return QString::fromLocal8Bit("未知");
}
......
......@@ -91,8 +91,9 @@ class OrderObject : public QObject
Q_PROPERTY (QString platformSource READ getPlatformSource WRITE setPlatformSource)
Q_PROPERTY (int orderIndex READ getOrderIndex WRITE setOrderIndex)
Q_PROPERTY (QString appointedTime READ getAppointedTime WRITE setAppointedTime)
Q_PROPERTY (QString appointedRemindTemplate READ getAppointedRemindTemplate WRITE setAppointedRemindTemplate)
Q_PROPERTY (QString expectDate READ getExpectDate WRITE setExpectDate)
Q_PROPERTY (QString reserveMakeTime READ getReserveMakeTime WRITE setReserveMakeTime)
Q_PROPERTY (int inAdvanceTakemeal READ getInAdvanceTakemeal WRITE setInAdvanceTakemeal)
Q_PROPERTY (QString subStoreId READ getSubStoreId WRITE setSubStoreId)
public:
OrderObject(QObject *parent=0)
......@@ -191,9 +192,10 @@ public:
QString makeDeviceId = ""; //PMS 更新制作状态的设备Id
QString businessType = "0"; //订单业务类型: 10:预约单 20:杯贴祝福 30:拼团
QString appointedTime = "0000-00-00 00:00:00"; // 预约日期 [预约单-预约日期] 必须设置默认值否则插库失败;
QString appointedRemindTemplate = ""; // 预约提醒模板【新增字段:string】
QString subStoreId = ""; // 子门店号 【新增字段:string】
QString expectDate = "0000-00-00 00:00:00"; // 预约时间 [预约单-顾客预计取餐时间] 必须设置默认值否则插库失败;
QString reserveMakeTime = "0000-00-00 00:00:00"; // 预约制作时间【新增字段:string】
int inAdvanceTakemeal = 0; // 预约单提前到店标志【新增字段:int】
QString subStoreId = ""; // 子门店号 【新增字段:string】
int forwardPosStatus = 0; // 正向单入机状态: 0:未知 1: 成功 2:失败;
int negativePosStatus = 0; // 负向单同上;
......@@ -447,11 +449,14 @@ public:
inline QString getSecretSignal()const{return secretSignal;}
inline void setSecretSignal(const QString& v){secretSignal = v;}
inline QString getAppointedTime()const{return appointedTime;}
inline void setAppointedTime(const QString& v){appointedTime = v;}
inline QString getExpectDate()const{return expectDate;}
inline void setExpectDate(const QString& v){expectDate = v;}
inline QString getAppointedRemindTemplate()const{return appointedRemindTemplate;}
inline void setAppointedRemindTemplate(const QString& v){appointedRemindTemplate = v;}
inline QString getReserveMakeTime()const{return reserveMakeTime;}
inline void setReserveMakeTime(const QString& v){reserveMakeTime = v;}
inline int getInAdvanceTakemeal()const{return inAdvanceTakemeal;}
inline void setInAdvanceTakemeal(const int& v){inAdvanceTakemeal = v;}
inline QString getSubStoreId()const{return subStoreId;}
inline void setSubStoreId(const QString& v){subStoreId = v;}
......
......@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 4,2020,521,1
PRODUCTVERSION 4,2020,521,1
FILEVERSION 4,2020,526,1
PRODUCTVERSION 4,2020,526,1
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
......@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "PmsPlugin.exe"
VALUE "ProductName", "PMS Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "4.2020.521.1"
VALUE "FileVersion", "4.2020.521.1"
VALUE "ProductVersion", "4.2020.526.1"
VALUE "FileVersion", "4.2020.526.1"
//*************************************************************************//
END
END
......
......@@ -9,7 +9,7 @@
//#define APP_VERSION "4.2020.318.1"
//#define APP_VERSION "4.2020.423.1"
//#define APP_VERSION "4.2020.520.1"
#define APP_VERSION "4.2020.521.1"
#define APP_VERSION "4.2020.526.1"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment