Commit a76fe5b1 by wuyang.zou

PosPlugin新特性:fulfillment重推订单跳过打印小票功能功能;

PosPlugin新特性:fulfillment查询订单入机真实情况;

插件优化:
POS插件输入框获取EC-MOP订单去除前后空格的安全校验;安全校验拉单返回的订单数据;
POS插件 退单会导致插件崩溃问题,优化修复;
POS插件 微信-MOP 需显示正确;
POS插件 解耦2.0订单,重装POS跳过补录;
POS插件 支持美团无人机配送;

Version: 2.2022.7.28
parent a79bb366
Pipeline #41338 failed with stage
in 0 seconds
...@@ -159,6 +159,7 @@ private: ...@@ -159,6 +159,7 @@ private:
QTimer *m_heartTimer; QTimer *m_heartTimer;
QTimer *m_pullTimer; QTimer *m_pullTimer;
QTimer *m_reportOMSReocrdOrderTimer; QTimer *m_reportOMSReocrdOrderTimer;
QTimer *m_presistInputPosSuccessReocrdTimer;
QTimer *m_loginTimer; QTimer *m_loginTimer;
QTimer *m_queryAllNoticeTimer; QTimer *m_queryAllNoticeTimer;
QTimer *m_notifySimPullTimer; QTimer *m_notifySimPullTimer;
...@@ -175,6 +176,7 @@ private: ...@@ -175,6 +176,7 @@ private:
BillSocket *m_pullDishesSocket; BillSocket *m_pullDishesSocket;
// FM外卖插件维护的有效订单容器 // FM外卖插件维护的有效订单容器
QMap<QString, OrderObject*> m_FmOrdersMap; QMap<QString, OrderObject*> m_FmOrdersMap;
// 是否第一次获取到门店信息 // 是否第一次获取到门店信息
bool m_bFirstRecvInfo; bool m_bFirstRecvInfo;
bool m_bLoginResult; bool m_bLoginResult;
...@@ -196,6 +198,8 @@ private: ...@@ -196,6 +198,8 @@ private:
//等待Simphony拉取的有效订单队列list[orderId] //等待Simphony拉取的有效订单队列list[orderId]
QStringList m_simValidOrdersList; QStringList m_simValidOrdersList;
//订单排队入机操作互斥锁;
QMutex m_OrderEntryMutex;
// 延迟拉取订单详情的 延迟队列list [DelayPullOrderInfo] // 延迟拉取订单详情的 延迟队列list [DelayPullOrderInfo]
// 场景描述: 在入机销售单时,Action1 Action5 已完成, Action4 未完成; 此时拉取退单的订单详情后, // 场景描述: 在入机销售单时,Action1 Action5 已完成, Action4 未完成; 此时拉取退单的订单详情后,
...@@ -208,8 +212,7 @@ private: ...@@ -208,8 +212,7 @@ private:
//订单号与pos短号映射:[可能同时存在两种状态:1:新单记录;2:退单记录;但是小票号就存一个;] //订单号与pos短号映射:[可能同时存在两种状态:1:新单记录;2:退单记录;但是小票号就存一个;]
QMap<QString,QString> m_orderIdToPosCheckNoMap; QMap<QString,QString> m_orderIdToPosCheckNoMap;
//记录当前订单操作
QMap<QString, int> m_orderOperatePair;
//订单拉取记录 //订单拉取记录
QList<PullOrderInfo*> m_orderPullList; QList<PullOrderInfo*> m_orderPullList;
QMutex m_PullOrderDataMutex; QMutex m_PullOrderDataMutex;
...@@ -217,8 +220,9 @@ private: ...@@ -217,8 +220,9 @@ private:
//向OMS汇报订单的POS入机情况 队列; //向OMS汇报订单的POS入机情况 队列;
QList<RepOMSRecordOrderInfo*> m_orderRecordRepOMSList; QList<RepOMSRecordOrderInfo*> m_orderRecordRepOMSList;
QMutex m_RepOMSRecordOrderMutex; QMutex m_RepOMSRecordOrderMutex;
//订单操作互斥信号 QSemaphore semaphore;
QMutex m_OrderEntryMutex; //订单入机持久化队列: 异步落库; 不涉及多线程互斥操作, 无需使用锁;
QList<OrderObject::PresistInputPosSuccessRecord*> m_presistInputPosSuccessRecdList;
// 和 class SaveNoticeMsgDB 共同管理 New NoticeObject Point List // 和 class SaveNoticeMsgDB 共同管理 New NoticeObject Point List
QList<NoticeObject*> m_noticeObjList; QList<NoticeObject*> m_noticeObjList;
...@@ -418,6 +422,12 @@ private slots: ...@@ -418,6 +422,12 @@ private slots:
* */ * */
void _ReportOMSRecordOrderInfo(); void _ReportOMSRecordOrderInfo();
/* 功能:定时触发 持久化订单入机成功本地数据库;
* 参数:NULL
* 返回:NULL
* */
void _PresistOrderInputPosSuccessRecord();
/* 功能:获取Json对象的字符 /* 功能:获取Json对象的字符
* 参数:NULL * 参数:NULL
...@@ -489,8 +499,13 @@ public slots: ...@@ -489,8 +499,13 @@ public slots:
* 参数:NULL * 参数:NULL
* 返回:NULL * 返回:NULL
* */ * */
void _AddOrUpdateReportOmsList(const QString &orderId, const QString &channel, const QString &repType, const QString &status, const QString &chkNum, void _AddOrUpdateReportOmsList( const QString& orderId, const QString& channel, const QString& repType, const QString& status, const QString& chkNum, const QString& error, const QString& errorCode );
const QString &error, const QString &errorCode);
/* 功能: 订单入机成功本地持久化队列, 添加新项;
* 参数: 同上
* 返回: 同上
* */
void _AddInputPosSuccessPresistList( const QString& orderId, const QString& channel, const QString& reqType, const QString& status, const QString& chkNum, const QString& error );
/* 功能: 接受长连接推送消息数据 /* 功能: 接受长连接推送消息数据
* 参数:[1]字节数组格式 报文 [2] 消息类型ID * 参数:[1]字节数组格式 报文 [2] 消息类型ID
......
...@@ -968,7 +968,7 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString& ...@@ -968,7 +968,7 @@ bool PrintSumBillPosDB::insertOrderSumBill(OrderObject* orderObj, const QString&
query.addBindValue(orderObj->remindTicketTime); // Curbside-打印街送提醒小票时间 query.addBindValue(orderObj->remindTicketTime); // Curbside-打印街送提醒小票时间
query.addBindValue(orderObj->extendType); // 扩展类型: 20: MOD PLUS 渠道; query.addBindValue(orderObj->extendType); // 扩展类型: 20: MOD PLUS 渠道;
query.addBindValue(orderObj->deliveryProvider); // 配送商家类型: 1:蜂鸟 2:美团; query.addBindValue(orderObj->deliveryProvider); // 配送商家类型: 1:蜂鸟 2:美团;
query.addBindValue(orderObj->deliveryType); // 配送方式: 1: 二轮车 2:四轮车; query.addBindValue(orderObj->deliveryType); // 配送方式: 1: 二轮车 2: 四轮车 3: 美团无人机;
QLOG_INFO()<<QString("[<<<--PrintSumBillPosDB::insertOrderSumBill waybillId:%1-->>>>]").arg((orderObj->waybillId).length()?orderObj->waybillId:QString("0")); QLOG_INFO()<<QString("[<<<--PrintSumBillPosDB::insertOrderSumBill waybillId:%1-->>>>]").arg((orderObj->waybillId).length()?orderObj->waybillId:QString("0"));
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <QtSql/QSqlQuery> #include <QtSql/QSqlQuery>
#include <QtSql/QSqlError> #include <QtSql/QSqlError>
#include <QObject> #include <QObject>
#include "Model/orderObject.h"
#include <QMutex> #include <QMutex>
class SimProcOrderDB : public QObject class SimProcOrderDB : public QObject
...@@ -46,12 +47,6 @@ public: ...@@ -46,12 +47,6 @@ public:
**/ **/
bool insertSimProcOrder(const QString& orderId, const QString &creatTime); bool insertSimProcOrder(const QString& orderId, const QString &creatTime);
/**
*功能:更新推单的入账状态[POS录单状态:订单录销售单的意思;同时也用来标记POS是否打印过录单小票]
*参数:[1]订单号[2]入账状态(目前情况都是"1")
*返回:true操作成功,false失败
**/
bool updatePushOrderStatus(const QString& orderId, const int &pushOrderStatus);
/** /**
*功能:更新推单的入账状态[POS录单状态:订单录销售单的意思;同时也用来标记POS是否打印过录单小票] *功能:更新推单的入账状态[POS录单状态:订单录销售单的意思;同时也用来标记POS是否打印过录单小票]
...@@ -69,19 +64,6 @@ public: ...@@ -69,19 +64,6 @@ public:
bool getDbOrderAllFlag(const QString& id, int& dataBaseIsOrderExistInt, int& dataBaseIsPushInt, bool getDbOrderAllFlag(const QString& id, int& dataBaseIsOrderExistInt, int& dataBaseIsPushInt,
int& dataBaseIsCancleInt, int& dataBaseIsORSPushInt, int& dataBaseIsORSCancleInt, QString& dataBasePosOrderCheckNo); int& dataBaseIsCancleInt, int& dataBaseIsORSPushInt, int& dataBaseIsORSCancleInt, QString& dataBasePosOrderCheckNo);
/**
*功能:查询是否入账[POS新单录单:即模拟Simphony点单是否成功:成功:TRUE;未成功:FALSE]
*参数:[1]订单号
*返回:true是,false否
**/
bool isPushedOrder(const QString& orderId);
/**
*功能:更新退款入账状态[POS退款录单状态:订单录退款单的意思;同时也用来标记POS是否打印过退款单小票]
*参数:[1]订单号[2]退款入账状态
*返回:true操作成功,false失败
**/
bool updateRefundOrderStatus(const QString& orderId, const int &refundOrderStatus);
/** /**
*功能:更新退款入账状态[POS退款录单状态:订单录退款单的意思;同时也用来标记POS是否打印过退款单小票] *功能:更新退款入账状态[POS退款录单状态:订单录退款单的意思;同时也用来标记POS是否打印过退款单小票]
...@@ -91,84 +73,20 @@ public: ...@@ -91,84 +73,20 @@ public:
**/ **/
bool updateRefundOrderStatusAndChkNum(const QString& orderId, const int &refundOrderStatus, const QString &chkNum); bool updateRefundOrderStatusAndChkNum(const QString& orderId, const int &refundOrderStatus, const QString &chkNum);
/**
*功能:查询是否退款入账[POS退款录单:即模拟Simphony退单是否成功:成功:TRUE;未成功:FALSE]
*参数:[1]订单号
*返回:true是,false否
**/
bool isRefundOrder(const QString& orderId);
/** /**
*功能:更新 预约实物销售单入机状态[标记POS是否打印过预约实物销售单小票] *功能: 更新 & 持久化 订单入机成功记录;
*参数:[1]订单号[2]预约实物销售单入机状态 *参数: PresistInputPosSuccessRecord 对象指针;
*返回:true操作成功,false失败 *返回:true 成功,false 失败;
**/ **/
bool updateORSPushOrderStatus(const QString& orderId, const int &ORSPushOrderStatus); bool presistOrderInputPosSuccessRecord(const QString &orderId, const OrderObject::PresistInputPosSuccessRecord* presistInputPosSuccRecd);
/**
*功能:查询 预约实物销售单 是否入机成功 [即模拟Simphony录入预约实物是否成功:成功:TRUE;未成功:FALSE]
*参数:[1]订单号
*返回:true是,false否
**/
bool isORSPushOrder(const QString& orderId);
/** /**
*功能:更新 预约实物退货入机状态[标记POS是否打印过预约实物退货单小票] *功能: 查询 已更新 & 持久化 订单入机成功记录;
*参数:[1]订单号[2]预约实物退货单入机状态 *参数: PresistInputPosSuccessRecord 对象指针;
*返回:true操作成功,false失败 *返回:true 成功,false 失败;
**/
bool updateORSCancleOrderStatus(const QString& orderId, const int &ORSCancleOrderStatus);
/**
*功能:查询 预约实物退货 是否入机成功 [即模拟Simphony录入预约实物退货是否成功:成功:TRUE;未成功:FALSE]
*参数:[1]订单号
*返回:true是,false否
**/
bool isORSCancleOrder(const QString& orderId);
/**
*功能:更新汇报入账状态 [POS汇报入账状态:录订单汇报的意思;同时也用来标记POS是否?????????]
*参数:[1]订单号[2]汇报入账状态
*返回:true操作成功,false失败
**/
bool updateReportOrderStatus(const QString& orderId, const int &reportOrderStatus);
/**
*功能:查询是否汇报入账 [POS订单是否汇报入账:判断Simphony 汇报入单是否成功:成功:TRUE;未成功:FALSE]
*参数:[1]订单号
*返回:true是,false否
**/
bool isReportOrder(const QString& orderId);
/**
*功能:更新back汇报入账状态[POS汇报入账状态:录订单汇报的意思;同时也用来标记POS是否?????????]
*参数:[1]订单号[2]汇报入账状态
*返回:true操作成功,false失败
**/
bool updateBackReportOrderStatus(const QString& orderId, const int &backReportOrderStatus);
/**
*功能:查询是否back汇报入账 [POS订单是否汇报入账:判断Simphony 汇报入单是否成功:成功:TRUE;未成功:FALSE]
*参数:[1]订单号
*返回:true是,false否
**/
bool isBackReportOrder(const QString& orderId);
/**
*功能:查询订单是否存在
*参数:[1]订单号
*返回:true是,false否
**/
bool isOrderExist(const QString& orderId);
/**
*功能:更新订单的pos小票号;
*参数:[1]订单号
*返回:true是,false否
**/ **/
bool updatePosOrderCheckNo(const QString& orderId, const QString &posOrderCheckNo); bool queryPresistInputPosSuccessRecord(const QString &orderId, QJsonObject& pInPosSuRdJS);
/** /**
*功能:获取订单的pos小票号; *功能:获取订单的pos小票号;
......
...@@ -311,6 +311,8 @@ QString OrderObject::getChannelName() ...@@ -311,6 +311,8 @@ QString OrderObject::getChannelName()
} else { } else {
if ( "5" == platformSource ) { if ( "5" == platformSource ) {
return QString::fromLocal8Bit("口碑-MOP"); return QString::fromLocal8Bit("口碑-MOP");
} else if ( "4" == platformSource ) {
return QString::fromLocal8Bit("微信-MOP");
} else { } else {
return QString::fromLocal8Bit("星-MOP"); return QString::fromLocal8Bit("星-MOP");
} }
...@@ -333,6 +335,7 @@ QString OrderObject::getChannelName() ...@@ -333,6 +335,7 @@ QString OrderObject::getChannelName()
} }
QString OrderObject::getOrderStatusDec() QString OrderObject::getOrderStatusDec()
{ {
switch(orderStatus) { switch(orderStatus) {
......
...@@ -124,6 +124,27 @@ public: ...@@ -124,6 +124,27 @@ public:
/*,Refunded=6 Cancled=6(订单状态是6时,是退单); 退单目前本佳那边不区分*/ /*,Refunded=6 Cancled=6(订单状态是6时,是退单); 退单目前本佳那边不区分*/
}OrderStatus; }OrderStatus;
typedef struct PRESIST_INPUTPOS_SUCCESS_RECORD
{
QString orderNo; //订单号
QString channel; //订单渠道
QString type; //订单状态:[3:正向单;6:退货单; 9:POS机系统级别错误; 0:未知订单状态]
QString status; //订单入机状态:[1:成功; 2:失败]
QString opUser; //当前收银员;
QString recordDate; //入机成功、入机失败的时间[时间格式: 2018-10-09 10:41:22]
QString storeId; //门店编号
QString remark; //备注:入机出错信息
QString checkNo; //小票号:入机成功时的小票号;
QString failCode; // 入机/存储 错误码 (成功时都给 "");
QString posPluginVersion; //该订单入机后, 汇报给OMS对应程序的版本号;
int reqResult; //向OMS请求汇报结果;
QString ipAddress; // Pos IP Address;
QString decouplePosNo; // Pos 机工作站;
QString posHostName; // Pos 机主机名;
QString posMacAddress; // Pos 机 Mac 地址;
QString deviceType; // 设备类型;
} PresistInputPosSuccessRecord;
/* 功能:从Json对象初获取数据 /* 功能:从Json对象初获取数据
* 参数:[1]JSon对象 * 参数:[1]JSon对象
* 返回:NULL * 返回:NULL
......
...@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico" ...@@ -7,8 +7,8 @@ IDI_ICON ICON DISCARDABLE "logo.ico"
#endif #endif
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***// //***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2022,4,25 FILEVERSION 2,2022,7,28
PRODUCTVERSION 2,2022,4,25 PRODUCTVERSION 2,2022,7,28
//*************************************************************************// //*************************************************************************//
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
...@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO ...@@ -31,8 +31,8 @@ VS_VERSION_INFO VERSIONINFO
VALUE "OriginalFilename", "fmTakeout.exe" VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plugin" VALUE "ProductName", "Delivery Order Plugin"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***// //***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2022.4.25" VALUE "ProductVersion", "2.2022.7.28"
VALUE "FileVersion", "2.2022.4.25" VALUE "FileVersion", "2.2022.7.28"
//*************************************************************************// //*************************************************************************//
END END
END END
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
//#define APP_VERSION "2.2021.9.24" //#define APP_VERSION "2.2021.9.24"
//#define APP_VERSION "2.2021.12.20" //#define APP_VERSION "2.2021.12.20"
//#define APP_VERSION "2.2022.1.18" //#define APP_VERSION "2.2022.1.18"
#define APP_VERSION "2.2022.4.25" #define APP_VERSION "2.2022.7.28"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号 //修正版本号时,切记修正 FmTakeout.rc 中的版本号
......
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