Commit df32babd by 李定达

1.修复已知bug;2多终端操作退款卡单问题需要服务端解决3.添加版本号4.更复杂的订单状态和退款状态,5.部分参数配置化

parent d2aca389
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2018-06-05T09:58:11. --> <!-- Written by QtCreator 3.5.1, 2018-06-07T14:18:04. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
......
INCLUDEPATH += $$PWD INCLUDEPATH += $$PWD
#DEFINES += QS_LOG_LINE_NUMBERS # automatically writes the file and line for each log message DEFINES += QS_LOG_LINE_NUMBERS # automatically writes the file and line for each log message
#DEFINES += QS_LOG_DISABLE # logging code is replaced with a no-op #DEFINES += QS_LOG_DISABLE # logging code is replaced with a no-op
#DEFINES += QS_LOG_SEPARATE_THREAD # messages are queued and written from a separate thread DEFINES += QS_LOG_SEPARATE_THREAD # messages are queued and written from a separate thread
#DEFINES += QS_LOG_WIN_PRINTF_CONSOLE # Use fprintf instead of OutputDebugString on Windows #DEFINES += QS_LOG_WIN_PRINTF_CONSOLE # Use fprintf instead of OutputDebugString on Windows
SOURCES += $$PWD/QsLogDest.cpp \ SOURCES += $$PWD/QsLogDest.cpp \
$$PWD/QsLog.cpp \ $$PWD/QsLog.cpp \
......
...@@ -30,69 +30,77 @@ void OrderGetWork::workStart() ...@@ -30,69 +30,77 @@ void OrderGetWork::workStart()
{ {
QLOG_INFO() << "OrderGetWork::workStart : " << QThread::currentThreadId(); QLOG_INFO() << "OrderGetWork::workStart : " << QThread::currentThreadId();
unsigned int tmptime = _timeout; while(!_stopflag)
QString error;
do
{ {
unsigned int tmptime = _timeout;
unsigned int nexttime = _timeout;
QString error;
if(!OrderGetDataProcess::isBind()) do
{ {
if(!bingToServer(error)) if(!OrderGetDataProcess::isBind())
{ {
QLOG_ERROR() << QThread::currentThreadId() << "loginToServer failed"; if(!bingToServer(error))
tmptime = TIMEOUT_TRY_LOGING; {
QVariantMap map; QLOG_ERROR() << QThread::currentThreadId() << "loginToServer failed";
map.insert(EVENT_KEY_STATUS, false); tmptime = TIMEOUT_TRY_LOGING;
map.insert(EVENT_KEY_MSG, error); QVariantMap map;
POSTEVENTTYPE(PosEvent::s_opt_status,map,QVariantMap); map.insert(EVENT_KEY_STATUS, false);
break; map.insert(EVENT_KEY_MSG, error);
POSTEVENTTYPE(PosEvent::s_opt_status,map,QVariantMap);
break;
}
QVariantMap bmap;
bmap.insert(EVENT_KEY_STATUS, true);
bmap.insert(EVENT_KEY_MSG, QString::fromLocal8Bit("绑定成功"));
POSTEVENTTYPE(PosEvent::s_opt_status,bmap,QVariantMap);
} }
QVariantMap bmap; if(!_islogin)
bmap.insert(EVENT_KEY_STATUS, true); {
bmap.insert(EVENT_KEY_MSG, QString::fromLocal8Bit("绑定成功")); if(!loginToServer(error))
POSTEVENTTYPE(PosEvent::s_opt_status,bmap,QVariantMap); {
} QLOG_ERROR() << QThread::currentThreadId() << "loginToServer failed";
tmptime = TIMEOUT_TRY_LOGING;
QVariantMap map;
map.insert(EVENT_KEY_STATUS, false);
map.insert(EVENT_KEY_MSG, error);
POSTEVENTTYPE(PosEvent::s_login_status,map,QVariantMap);
break;
}
unsigned int nexttime = _timeout; QVariantMap map;
map.insert(EVENT_KEY_STATUS, true);
POSTEVENTTYPE(PosEvent::s_login_status,map,QVariantMap);
}
if(!_islogin) if(!PullOrder(nexttime, error))
{
if(!loginToServer(error))
{ {
QLOG_ERROR() << QThread::currentThreadId() << "loginToServer failed"; QLOG_ERROR() << QThread::currentThreadId() << "PullOrder failed";
tmptime = TIMEOUT_TRY_LOGING; tmptime = _timeout;
QVariantMap map; QVariantMap map;
map.insert(EVENT_KEY_STATUS, false); map.insert(EVENT_KEY_STATUS, false);
map.insert(EVENT_KEY_MSG, error); map.insert(EVENT_KEY_MSG, error);
POSTEVENTTYPE(PosEvent::s_login_status,map,QVariantMap);
POSTEVENTTYPE(PosEvent::s_get_order_status,map,QVariantMap);
break; break;
} }
QVariantMap map; tmptime = nexttime;
map.insert(EVENT_KEY_STATUS, true); QLOG_INFO() << QThread::currentThreadId() << "next workStart timeout : " << tmptime;
POSTEVENTTYPE(PosEvent::s_login_status,map,QVariantMap);
}
if(!PullOrder(nexttime, error)) }while(0);
{
QLOG_ERROR() << QThread::currentThreadId() << "PullOrder failed"; QEventLoop loop;
tmptime = _timeout;
QVariantMap map;
map.insert(EVENT_KEY_STATUS, false);
map.insert(EVENT_KEY_MSG, error);
POSTEVENTTYPE(PosEvent::s_get_order_status,map,QVariantMap); QTimer::singleShot(tmptime, this, &OrderGetWork::quit);
break;
}
tmptime = nexttime; connect(this, &OrderGetWork::quit, &loop, &QEventLoop::quit);
QLOG_INFO() << QThread::currentThreadId() << "next workStart timeout : " << tmptime;
}while(0); loop.exec();
QTimer::singleShot(tmptime, this, &OrderGetWork::workStart); }
} }
#ifdef FM_TEST #ifdef FM_TEST
...@@ -518,7 +526,7 @@ bool OrderGetWork::PullOrder(unsigned int timeout, QString &error) ...@@ -518,7 +526,7 @@ bool OrderGetWork::PullOrder(unsigned int timeout, QString &error)
QJsonObject json, recvjson; QJsonObject json, recvjson;
QString realurl; QString realurl;
if(!OrderGetDataProcess::getOrderRequest(_storeinfo, json, _timestamp, _token)) if(!OrderGetDataProcess::getOrderRequest(_storeinfo, json, _timestamp, _token, _autoconfirm))
{ {
error = QString::fromLocal8Bit("拉单失败,获取门店信息失败"); error = QString::fromLocal8Bit("拉单失败,获取门店信息失败");
QLOG_ERROR() << "getLogingRequest failed"; QLOG_ERROR() << "getLogingRequest failed";
...@@ -539,7 +547,7 @@ bool OrderGetWork::PullOrder(unsigned int timeout, QString &error) ...@@ -539,7 +547,7 @@ bool OrderGetWork::PullOrder(unsigned int timeout, QString &error)
if(!BillSocket::S_Request(json, recvjson, realurl, error)) if(!BillSocket::S_Request(json, recvjson, realurl, error))
{ {
error = QString::fromLocal8Bit("拉单失败,网络错误:").append(error); error = QString::fromLocal8Bit("拉单失败,网络错误:").append(error);
QLOG_ERROR() << "pullorder failed"; QLOG_ERROR() << "pullorder failed : " << error;
return false; return false;
} }
...@@ -642,9 +650,9 @@ void OrderGetWork::optOrderWithType(const QVariantMap &map) ...@@ -642,9 +650,9 @@ void OrderGetWork::optOrderWithType(const QVariantMap &map)
POSTEVENTTYPE(PosEvent::s_opt_status,tmpmap,QVariantMap); POSTEVENTTYPE(PosEvent::s_opt_status,tmpmap,QVariantMap);
QString tmpid, tmpstatus; QString tmpid, tmpstatus, refundstatus;
if(!OrderGetDataProcess::getOrderStatus(recvjson, tmpid, tmpstatus)) if(!OrderGetDataProcess::getOrderStatus(recvjson, tmpid, tmpstatus, refundstatus))
return ; return ;
//PosOrderPool::TryChangeOrderStatus(tmpid, tmpstatus.toInt()); //PosOrderPool::TryChangeOrderStatus(tmpid, tmpstatus.toInt());
...@@ -654,9 +662,17 @@ void OrderGetWork::optOrderWithType(const QVariantMap &map) ...@@ -654,9 +662,17 @@ void OrderGetWork::optOrderWithType(const QVariantMap &map)
maps.insert(EVENT_KEY_ORDERID, tmpid); maps.insert(EVENT_KEY_ORDERID, tmpid);
maps.insert(EVENT_KEY_MSG, tmpstatus.toInt()); maps.insert(EVENT_KEY_MSG, tmpstatus.toInt());
if(!refundstatus.isEmpty())
maps.insert(EVENT_KEY_STATUS, refundstatus.toInt());
POSTEVENTTYPE(PosEvent::s_change_orderpool,maps,QVariantMap); POSTEVENTTYPE(PosEvent::s_change_orderpool,maps,QVariantMap);
} }
void OrderGetWork::setAutoconfirm(const QString &autoconfirm)
{
_autoconfirm = autoconfirm;
}
#endif #endif
void OrderGetWork::optOrder(const QJsonArray &orders) void OrderGetWork::optOrder(const QJsonArray &orders)
......
...@@ -62,6 +62,8 @@ public: ...@@ -62,6 +62,8 @@ public:
void setUrl(const QString &url); void setUrl(const QString &url);
void setAutoconfirm(const QString &autoconfirm);
signals: signals:
void quit(); void quit();
...@@ -89,6 +91,8 @@ private: ...@@ -89,6 +91,8 @@ private:
QString _timestamp; QString _timestamp;
//拉单用token //拉单用token
QString _token; QString _token;
//是否自动接单
QString _autoconfirm;
}; };
class OrderGetDataProcess class OrderGetDataProcess
...@@ -129,7 +133,7 @@ private: ...@@ -129,7 +133,7 @@ private:
return true; return true;
} }
static bool getOrderRequest(const QVariantMap &json, QJsonObject &data, QString timestamp, QString token) static bool getOrderRequest(const QVariantMap &json, QJsonObject &data, QString timestamp, QString token, QString autoconfirm)
{ {
if(!json.contains(JSON_STOREID) || !json.contains(JSON_STATIONID) || if(!json.contains(JSON_STOREID) || !json.contains(JSON_STATIONID) ||
!json.contains(JSON_KEY_USERID) || !json.contains(JSON_KEY_PWD) || !json.contains(JSON_KEY_USERID) || !json.contains(JSON_KEY_PWD) ||
...@@ -142,7 +146,7 @@ private: ...@@ -142,7 +146,7 @@ private:
//data.insert(JSON_KEY_PWD, json[JSON_KEY_PWD].toString()); //data.insert(JSON_KEY_PWD, json[JSON_KEY_PWD].toString());
data.insert(JSON_KEY_PARTNERID, token); data.insert(JSON_KEY_PARTNERID, token);
data.insert(JSON_KEY_TIMESTAMP, timestamp); data.insert(JSON_KEY_TIMESTAMP, timestamp);
data.insert(JSON_KEY_AUTOCONFIRM, "1"); data.insert(JSON_KEY_AUTOCONFIRM, autoconfirm);
return true; return true;
} }
...@@ -193,6 +197,8 @@ private: ...@@ -193,6 +197,8 @@ private:
reqtype = FMH_REFUSEREFUND; reqtype = FMH_REFUSEREFUND;
if(status.compare(OPERATION_REFUNDORDER, Qt::CaseInsensitive) == 0) if(status.compare(OPERATION_REFUNDORDER, Qt::CaseInsensitive) == 0)
reqtype = FMH_REFUNDORDER; reqtype = FMH_REFUNDORDER;
if(status.compare(OPERATION_GETDELIVERS, Qt::CaseInsensitive) == 0)
reqtype = FMH_CONFIRM;
} }
static bool getAction(int REQ, QString &action) static bool getAction(int REQ, QString &action)
...@@ -342,7 +348,7 @@ private: ...@@ -342,7 +348,7 @@ private:
return false; return false;
} }
static bool getOrderStatus(const QJsonObject &json, QString &orderid, QString &status) static bool getOrderStatus(const QJsonObject &json, QString &orderid, QString &status, QString &refundstatus)
{ {
if(json.contains(JSON_KEY_RESULT) && json[JSON_KEY_RESULT].isObject() && if(json.contains(JSON_KEY_RESULT) && json[JSON_KEY_RESULT].isObject() &&
json[JSON_KEY_RESULT].toObject().contains(JSON_KEY_ORDERID)&& json[JSON_KEY_RESULT].toObject().contains(JSON_KEY_ORDERID)&&
...@@ -350,6 +356,12 @@ private: ...@@ -350,6 +356,12 @@ private:
{ {
orderid = json[JSON_KEY_RESULT].toObject()[JSON_KEY_ORDERID].toString(); orderid = json[JSON_KEY_RESULT].toObject()[JSON_KEY_ORDERID].toString();
status = json[JSON_KEY_RESULT].toObject()[JSON_KEY_ORDERSTATUS].toString(); status = json[JSON_KEY_RESULT].toObject()[JSON_KEY_ORDERSTATUS].toString();
if(json[JSON_KEY_RESULT].toObject().contains(JSON_KEY_REFUNDSTATUS))
refundstatus = json[JSON_KEY_RESULT].toObject()[JSON_KEY_REFUNDSTATUS].toString();
else
refundstatus.clear();
return true; return true;
} }
return false; return false;
......
...@@ -7,11 +7,15 @@ ...@@ -7,11 +7,15 @@
#include "view/floatForm.h" #include "view/floatForm.h"
#include "control/orderlocalizework.h" #include "control/orderlocalizework.h"
#include "control/orderpushwork.h" #include "control/orderpushwork.h"
#include "base/Dump/dump.h"
#include <QVariantMap> #include <QVariantMap>
#include <QThread> #include <QThread>
#include <QDir> #include <QDir>
#include <QsLog.h> #include <QsLog.h>
#include <QResource> #include <QResource>
#include <QSettings>
#include <Windows.h>
using namespace QsLogging; using namespace QsLogging;
...@@ -37,6 +41,22 @@ void LoadTheme(const QString& theme) ...@@ -37,6 +41,22 @@ void LoadTheme(const QString& theme)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
SetUnhandledExceptionFilter(FMExcpHandler);
HANDLE m_hMutex = CreateMutex(NULL, FALSE, L"Global\\fmTakeaway" );
if(m_hMutex != NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS||GetLastError() == ERROR_ACCESS_DENIED) {
CloseHandle(m_hMutex);
m_hMutex = NULL;
return -1;
}
}
else{
return -1;
}
QApplication a(argc, argv); QApplication a(argc, argv);
LoadTheme(QString("deaufult")); LoadTheme(QString("deaufult"));
...@@ -52,10 +72,11 @@ int main(int argc, char *argv[]) ...@@ -52,10 +72,11 @@ int main(int argc, char *argv[])
logger.addDestination(fileDst); logger.addDestination(fileDst);
QsLogging::DestinationPtr consleDest(QsLogging::DestinationFactory::MakeDebugOutputDestination()); QsLogging::DestinationPtr consleDest(QsLogging::DestinationFactory::MakeDebugOutputDestination());
logger.addDestination(consleDest); logger.addDestination(consleDest);
QLOG_INFO() << QThread::currentThreadId();
QLOG_INFO() << "--------------------------------takeout start------------------------------------";
QThread thread; QThread thread;
QThread threadt; QThread threadt;
QLOG_INFO() << "Thread List :" << &thread << &threadt << QThread::currentThread();
OrderGetWork work; OrderGetWork work;
...@@ -76,22 +97,49 @@ int main(int argc, char *argv[]) ...@@ -76,22 +97,49 @@ int main(int argc, char *argv[])
QObject::connect(&mainform, &MainForm::stopRemind, &floatform, &FloatForm::onStopRemind); QObject::connect(&mainform, &MainForm::stopRemind, &floatform, &FloatForm::onStopRemind);
QObject::connect(&floatform, &FloatForm::showMainForm, &mainform, &MainForm::show); QObject::connect(&floatform, &FloatForm::showMainForm, &mainform, &MainForm::show);
map.insert(JSON_STOREID, "1036"); QString configfile = qApp->applicationDirPath() + "/" + CONFIG_NAME;
map.insert(JSON_STATIONID, "saas_bf_pos");
map.insert(JSON_KEY_USERID, "beiguo_saas"); QLOG_INFO() << "config file name : " << configfile;
map.insert(JSON_KEY_PWD, "beiguo_saas");
map.insert(JSON_KEY_PARTNERID, "1585"); QString storeid = QSettings(configfile, QSettings::IniFormat).value(INI_BASE_STOREID).toString();
QString partnerid = QSettings(configfile, QSettings::IniFormat).value(INI_BASE_PARNETID).toString();
QString userid = QSettings(configfile, QSettings::IniFormat).value(INI_BASE_USERID).toString();
QString pwd = QSettings(configfile, QSettings::IniFormat).value(INI_BASE_PWD).toString();
QString stationid = QSettings(configfile, QSettings::IniFormat).value(INI_BASE_STATIONIID).toString();
QString autoconf = QSettings(configfile, QSettings::IniFormat).value(INI_AUTOCONFIRM).toString();
QString pushurl = QSettings(configfile, QSettings::IniFormat).value(INI_PUSHSERVER).toString();
QString geturl = QSettings(configfile, QSettings::IniFormat).value(INI_GETSERVER).toString();
QLOG_INFO() << "storeid" << storeid << "partnerid" << partnerid << "userid" << userid;
QLOG_INFO() << "pwd" << pwd << "stationid" << stationid << "autoconf" << autoconf;
QLOG_INFO() << "pushurl" << pushurl << "geturl" << geturl;
// map.insert(JSON_STOREID, "1036");
// map.insert(JSON_STATIONID, "saas_bf_pos");
// map.insert(JSON_KEY_USERID, "beiguo_saas");
// map.insert(JSON_KEY_PWD, "beiguo_saas");
// map.insert(JSON_KEY_PARTNERID, "1585");
map.insert(JSON_STOREID, storeid);
map.insert(JSON_STATIONID, stationid);
map.insert(JSON_KEY_USERID, userid);
map.insert(JSON_KEY_PWD, pwd);
map.insert(JSON_KEY_PARTNERID, partnerid);
mainform.setStoreinfo(map); mainform.setStoreinfo(map);
work.setUrl(QString("http://118.89.167.51:9100//gateway?action=%1&access_token=%2&ver=%3&sign=%4")); //work.setUrl(QString("http://118.89.167.51:9100//gateway?action=%1&access_token=%2&ver=%3&sign=%4"));
work.setUrl(geturl);
work.setAutoconfirm(autoconf);
work.setStoreinfo(map); work.setStoreinfo(map);
work.setTimeout(300000); work.setTimeout(300000);
QStringList list; QStringList list;
list.append("118.89.167.51:9083"); //list.append("118.89.167.51:9083");
//list.append("127.0.0.1:10001"); list.append(pushurl);
pwork.setStoreinfo(map); pwork.setStoreinfo(map);
pwork.setServicelist(list); pwork.setServicelist(list);
...@@ -107,14 +155,6 @@ int main(int argc, char *argv[]) ...@@ -107,14 +155,6 @@ int main(int argc, char *argv[])
thread.start(); thread.start();
threadt.start(); threadt.start();
qDebug() << "----------:" << &thread << &threadt << QThread::currentThread();
//QString token = "40154d0b-a1eb-4c00-81d1-5b4614ed6a39";
//POSTEVENTTYPE(PosEvent::s_token_change, token, QString);
mainform.MyShow(); mainform.MyShow();
return a.exec(); return a.exec();
......
...@@ -56,6 +56,16 @@ void OrderObject::FromJson(const QJsonObject &json) ...@@ -56,6 +56,16 @@ void OrderObject::FromJson(const QJsonObject &json)
return; return;
} }
int OrderObject::getrefund_status() const
{
return refund_status;
}
void OrderObject::setrefund_status(const int& v)
{
refund_status = v;
}
int OrderObject::getservice_fee() const int OrderObject::getservice_fee() const
{ {
return service_fee; return service_fee;
......
...@@ -8,7 +8,7 @@ class OrderObject : public BaseObject ...@@ -8,7 +8,7 @@ class OrderObject : public BaseObject
Q_OBJECT Q_OBJECT
public: public:
OrderObject(QObject *parent=0) OrderObject(QObject *parent=0)
:BaseObject(parent){} :BaseObject(parent){refund_status = -100;}
OrderObject(const OrderObject&p, QObject *parent=0); OrderObject(const OrderObject&p, QObject *parent=0);
OrderObject &operator =(OrderObject const&); OrderObject &operator =(OrderObject const&);
...@@ -40,6 +40,7 @@ public: ...@@ -40,6 +40,7 @@ public:
Q_PROPERTY (int user_fee READ getuser_fee WRITE setuser_fee) Q_PROPERTY (int user_fee READ getuser_fee WRITE setuser_fee)
Q_PROPERTY (int shop_fee READ getshop_fee WRITE setshop_fee) Q_PROPERTY (int shop_fee READ getshop_fee WRITE setshop_fee)
Q_PROPERTY (int status READ getstatus WRITE setstatus) Q_PROPERTY (int status READ getstatus WRITE setstatus)
Q_PROPERTY (int refund_status READ getrefund_status WRITE setrefund_status)
Q_PROPERTY (int create_time READ getCreate_time WRITE setCreate_time) Q_PROPERTY (int create_time READ getCreate_time WRITE setCreate_time)
Q_PROPERTY (int update_time READ getUpdate_time WRITE setUpdate_time) Q_PROPERTY (int update_time READ getUpdate_time WRITE setUpdate_time)
Q_PROPERTY (int expire_time READ getExpire_time WRITE setExpire_time) Q_PROPERTY (int expire_time READ getExpire_time WRITE setExpire_time)
...@@ -105,6 +106,7 @@ public: ...@@ -105,6 +106,7 @@ public:
int rest_fee; //未付 int rest_fee; //未付
QString status_desc; //订单状态描述 QString status_desc; //订单状态描述
int status; //订单状态 int status; //订单状态
int refund_status; //退单状态
int shop_fee; //应收金额(商家和骑士看到的) int shop_fee; //应收金额(商家和骑士看到的)
int send_fee; //运费金额 int send_fee; //运费金额
QString timestamp; //时间戳 QString timestamp; //时间戳
...@@ -113,8 +115,6 @@ public: ...@@ -113,8 +115,6 @@ public:
int user_fee; //应付金额 int user_fee; //应付金额
QStringList records; //订单操作记 QStringList records; //订单操作记
protected: protected:
QString getcustomer_code() const{ QString getcustomer_code() const{
return customer_code; return customer_code;
...@@ -122,6 +122,8 @@ protected: ...@@ -122,6 +122,8 @@ protected:
void setcustomer_code(const QString & v){ void setcustomer_code(const QString & v){
customer_code = v; customer_code = v;
} }
int getrefund_status() const;
void setrefund_status(const int& v);
int getservice_fee() const ; int getservice_fee() const ;
void setservice_fee(const int& v); void setservice_fee(const int& v);
int getorder_type() const ; int getorder_type() const ;
......
...@@ -39,11 +39,11 @@ PosOrderPool::PosOrderPool(QObject *parent) : QObject(parent) ...@@ -39,11 +39,11 @@ PosOrderPool::PosOrderPool(QObject *parent) : QObject(parent)
unsigned int nowtimer = QDateTime::currentDateTime().toTime_t(); unsigned int nowtimer = QDateTime::currentDateTime().toTime_t();
for (auto it = s_order_pool.begin(); it != s_order_pool.end(); ) for (auto it = s_order_pool.begin(); it != s_order_pool.end(); )
{ {
QLOG_INFO() << QThread::currentThreadId() << it.key(); // QLOG_INFO() << QThread::currentThreadId() << it.key();
Order_Info info = it.value(); // Order_Info info = it.value();
QLOG_INFO() << QThread::currentThreadId() << info.order_id << info.order_change_time // QLOG_INFO() << QThread::currentThreadId() << info.order_id << info.order_change_time
<< info.order_last_status << info.order_refund_status << // << info.order_last_status << info.order_refund_status <<
info.order_status << info.order_write_status; // info.order_status << info.order_write_status;
if(it.value().order_change_time > nowtimer && (it.value().order_status == CompleteRefundOrder || it.value().order_status == CompleteOrder)) if(it.value().order_change_time > nowtimer && (it.value().order_status == CompleteRefundOrder || it.value().order_status == CompleteOrder))
{ {
...@@ -109,6 +109,8 @@ void PosOrderPool::loadOrders() ...@@ -109,6 +109,8 @@ void PosOrderPool::loadOrders()
info.order_print_status = query.value(4).toInt(); info.order_print_status = query.value(4).toInt();
info.order_last_status = DefaultOrder; info.order_last_status = DefaultOrder;
info.order_status = DefaultOrder; info.order_status = DefaultOrder;
info.order_refund = DefaultOrder;
info.order_last_refund = DefaultOrder;
// info.reserved1 = query.value(5).toInt(); // info.reserved1 = query.value(5).toInt();
// info.reserved2 = query.value(6).toInt(); // info.reserved2 = query.value(6).toInt();
// info.reserved3 = query.value(7).toInt(); // info.reserved3 = query.value(7).toInt();
...@@ -120,16 +122,47 @@ void PosOrderPool::loadOrders() ...@@ -120,16 +122,47 @@ void PosOrderPool::loadOrders()
} }
} }
void PosOrderPool::GetOrderStatusAndLastStatus(Order_Info orderinfo, int &status, int &laststatus)
{
if(orderinfo.order_last_refund != orderinfo.order_refund)
{
if(orderinfo.order_refund == ApplicationRefundOrder || orderinfo.order_refund == ApplicationPartialRefundOrder)
{
status = orderinfo.order_refund;
laststatus = orderinfo.order_status;
return ;
}
if(orderinfo.order_last_refund == ApplicationPartialRefundOrder && orderinfo.order_refund == CompleteRefundOrder)
{
status = orderinfo.order_status;
laststatus = orderinfo.order_last_refund;
return ;
}
if(orderinfo.order_last_refund == ApplicationRefundOrder && orderinfo.order_refund == CompleteRefundOrder)
{
status = orderinfo.order_refund ;
laststatus = orderinfo.order_last_refund;
return ;
}
}
status = orderinfo.order_status;
laststatus = orderinfo.order_last_status;
return ;
}
void PosOrderPool::removeOrderInfo(QString key) void PosOrderPool::removeOrderInfo(QString key)
{ {
s_order_pool.remove(key); s_order_pool.remove(key);
} }
PosOrderPool& PosOrderPool::InitOrderPool() void PosOrderPool::InitOrderPool()
{ {
static PosOrderPool orderpool; static PosOrderPool orderpool;
return orderpool;
} }
bool PosOrderPool::TryInsertOrder(OrderObject order) bool PosOrderPool::TryInsertOrder(OrderObject order)
...@@ -147,6 +180,9 @@ bool PosOrderPool::TryInsertOrder(OrderObject order) ...@@ -147,6 +180,9 @@ bool PosOrderPool::TryInsertOrder(OrderObject order)
INITORDERINFO(order, info); INITORDERINFO(order, info);
QLOG_INFO() << "%%%%%%%%%%%%%%%%%%%%%%%%%%%" << info.order_refund << info.order_last_refund;
QLOG_INFO() << "%%%%%%%%%%%%%%%%%%%%%%%%%%%" << info.order_status << info.order_last_status;
s_order_pool.insert(order.order_id,info); s_order_pool.insert(order.order_id,info);
DEFAULTPOSTEVENT(PosEvent::s_change_order, order.order_id); DEFAULTPOSTEVENT(PosEvent::s_change_order, order.order_id);
...@@ -154,8 +190,6 @@ bool PosOrderPool::TryInsertOrder(OrderObject order) ...@@ -154,8 +190,6 @@ bool PosOrderPool::TryInsertOrder(OrderObject order)
return true; return true;
} }
qDebug() << "++++++" << InitOrderPool().thread();
//订单存在 //订单存在
Order_Info oldinfo = s_order_pool[order.order_id]; Order_Info oldinfo = s_order_pool[order.order_id];
...@@ -163,7 +197,7 @@ bool PosOrderPool::TryInsertOrder(OrderObject order) ...@@ -163,7 +197,7 @@ bool PosOrderPool::TryInsertOrder(OrderObject order)
UPDATEORDERINFO(oldinfo, order, info); UPDATEORDERINFO(oldinfo, order, info);
if(info.order_last_status != info.order_status) if(info.order_last_status != info.order_status || info.order_last_refund != info.order_refund)
{ {
s_order_pool.insert(order.order_id, info); s_order_pool.insert(order.order_id, info);
...@@ -175,7 +209,7 @@ bool PosOrderPool::TryInsertOrder(OrderObject order) ...@@ -175,7 +209,7 @@ bool PosOrderPool::TryInsertOrder(OrderObject order)
return false; return false;
} }
bool PosOrderPool::TryChangeOrderStatus(QString key, int order_status) bool PosOrderPool::TryChangeOrderStatus(QString key, int order_status, int refundstatus)
{ {
if(order_status >= DefaultOrder && order_status <= CompleteOrder) if(order_status >= DefaultOrder && order_status <= CompleteOrder)
{ {
...@@ -186,11 +220,28 @@ bool PosOrderPool::TryChangeOrderStatus(QString key, int order_status) ...@@ -186,11 +220,28 @@ bool PosOrderPool::TryChangeOrderStatus(QString key, int order_status)
Order_Info info = s_order_pool[key]; Order_Info info = s_order_pool[key];
if(info.order_last_status != info.order_status && info.order_status != order_status) if((info.order_last_status != info.order_status && info.order_status != order_status)||
(refundstatus != DefaultOrder && info.order_last_refund != info.order_refund && info.order_refund != refundstatus))
{ {
info.order_last_status = info.order_status; if(info.order_status != order_status)
info.order_status = (Order_Status)order_status; {
info.order_data.status = order_status; info.order_last_status = info.order_status;
info.order_status = (Order_Status)order_status;
info.order_data.status = order_status;
}
if(info.order_refund != refundstatus)
{
info.order_last_refund = info.order_refund;
info.order_refund = (Order_Status)refundstatus;
info.order_data.refund_status = refundstatus;
}
// QLOG_INFO() << "+++++++++++++++++++++++++++" << info.order_refund << info.order_last_refund;
// QLOG_INFO() << "+++++++++++++++++++++++++++" << info.order_status << info.order_last_status;
// QLOG_INFO() << "+++++++++++++++++++++++++++" << order_status << refundstatus;
info.order_change_time = QDateTime::currentDateTime().toTime_t(); info.order_change_time = QDateTime::currentDateTime().toTime_t();
s_order_pool.insert(key, info); s_order_pool.insert(key, info);
...@@ -253,8 +304,14 @@ bool PosOrderPool::GetOrderObject(QString key, OrderObject &order, int &last_sta ...@@ -253,8 +304,14 @@ bool PosOrderPool::GetOrderObject(QString key, OrderObject &order, int &last_sta
Order_Info info = s_order_pool[key]; Order_Info info = s_order_pool[key];
int status = DefaultOrder;
GetOrderStatusAndLastStatus(info, status, last_status);
QLOG_WARN() << "###############order status : " << status << "; last status : " << last_status;
order = info.order_data; order = info.order_data;
last_status = info.order_last_status; order.status = status;
return true; return true;
} }
...@@ -268,8 +325,9 @@ bool PosOrderPool::GetOrderStatus(QString key, int &status, int &last_status) ...@@ -268,8 +325,9 @@ bool PosOrderPool::GetOrderStatus(QString key, int &status, int &last_status)
Order_Info info = s_order_pool[key]; Order_Info info = s_order_pool[key];
status = info.order_status; GetOrderStatusAndLastStatus(info, status, last_status);
last_status = info.order_last_status;
QLOG_WARN() << "###############order status : " << status << "; last status : " << last_status;
return true; return true;
} }
...@@ -338,7 +396,10 @@ bool PosOrderPool::event(QEvent *e) ...@@ -338,7 +396,10 @@ bool PosOrderPool::event(QEvent *e)
if(!info.contains(EVENT_KEY_ORDERID) || !info.contains(EVENT_KEY_MSG)) if(!info.contains(EVENT_KEY_ORDERID) || !info.contains(EVENT_KEY_MSG))
return true; return true;
PosOrderPool::TryChangeOrderStatus(info[EVENT_KEY_ORDERID].toString(), info[EVENT_KEY_MSG].toInt()); if(info.contains(EVENT_KEY_STATUS))
PosOrderPool::TryChangeOrderStatus(info[EVENT_KEY_ORDERID].toString(), info[EVENT_KEY_MSG].toInt(), info[EVENT_KEY_STATUS].toInt());
else
PosOrderPool::TryChangeOrderStatus(info[EVENT_KEY_ORDERID].toString(), info[EVENT_KEY_MSG].toInt());
return true; return true;
} }
......
#ifndef POSORDERPOOL_H #ifndef POSORDERPOOL_H
#define POSORDERPOOL_H #define POSORDERPOOL_H
#include <QObject> #include <QObject>
...@@ -14,8 +14,26 @@ ...@@ -14,8 +14,26 @@
#define UPDATEORDERINFO(oldorder, neworder, info) do { \ #define UPDATEORDERINFO(oldorder, neworder, info) do { \
info.order_id = neworder.order_id; \ info.order_id = neworder.order_id; \
info.order_data = neworder; \ info.order_data = neworder; \
info.order_last_status = oldorder.order_status; \ if(oldorder.order_refund != neworder.refund_status) \
info.order_status = (Order_Status)neworder.status; \ { \
info.order_refund = (Order_Status)neworder.refund_status; \
info.order_last_refund = oldorder.order_refund; \
} \
else \
{ \
info.order_refund = (Order_Status)oldorder.order_refund; \
info.order_last_refund = oldorder.order_last_refund; \
} \
if(oldorder.order_status != neworder.status) \
{ \
info.order_last_status = oldorder.order_status; \
info.order_status = (Order_Status)neworder.status; \
} \
else \
{ \
info.order_last_status = oldorder.order_last_status; \
info.order_status = oldorder.order_status; \
} \
info.order_write_status = oldorder.order_write_status; \ info.order_write_status = oldorder.order_write_status; \
info.order_refund_status = oldorder.order_refund_status; \ info.order_refund_status = oldorder.order_refund_status; \
info.order_print_status = oldorder.order_print_status; \ info.order_print_status = oldorder.order_print_status; \
...@@ -25,6 +43,8 @@ ...@@ -25,6 +43,8 @@
#define INITORDERINFO(neworder, info) do { \ #define INITORDERINFO(neworder, info) do { \
info.order_id = neworder.order_id; \ info.order_id = neworder.order_id; \
info.order_data = neworder; \ info.order_data = neworder; \
info.order_refund = (Order_Status)neworder.refund_status; \
info.order_last_refund = DefaultOrder; \
info.order_last_status = DefaultOrder; \ info.order_last_status = DefaultOrder; \
info.order_status = (Order_Status)neworder.status; \ info.order_status = (Order_Status)neworder.status; \
info.order_write_status = 0; \ info.order_write_status = 0; \
...@@ -37,6 +57,8 @@ typedef enum ...@@ -37,6 +57,8 @@ typedef enum
{ {
//订单原始状态(推了一个订单号时使用) //订单原始状态(推了一个订单号时使用)
DefaultOrder = -100, DefaultOrder = -100,
//锁定订单
LockOrder = -1,
//新订单 //新订单
NewOrder = 1, NewOrder = 1,
//确认订单 //确认订单
...@@ -47,8 +69,6 @@ typedef enum ...@@ -47,8 +69,6 @@ typedef enum
DispatchingOrder = 4, DispatchingOrder = 4,
//已送达 //已送达
ServiceOrder = 6, ServiceOrder = 6,
//锁定订单
LockOrder = -1,
//申请退款 //申请退款
ApplicationRefundOrder = 20, ApplicationRefundOrder = 20,
//申请部分退款 //申请部分退款
...@@ -74,9 +94,13 @@ typedef struct ...@@ -74,9 +94,13 @@ typedef struct
Order_Status order_status; Order_Status order_status;
//订单上一次状态 //订单上一次状态
Order_Status order_last_status; Order_Status order_last_status;
//写单状态
int order_write_status;
//退单状态 //退单状态
Order_Status order_last_refund;
//退单状态
Order_Status order_refund;
//本地写单状态
int order_write_status;
//本地退单状态
int order_refund_status; int order_refund_status;
//订单打印状态 //订单打印状态
int order_print_status; int order_print_status;
...@@ -99,7 +123,7 @@ class PosOrderPool : public QObject ...@@ -99,7 +123,7 @@ class PosOrderPool : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
static PosOrderPool &InitOrderPool(); static void InitOrderPool();
static QMap<QString, Order_Info> getS_order_pool(); static QMap<QString, Order_Info> getS_order_pool();
...@@ -114,7 +138,7 @@ public: ...@@ -114,7 +138,7 @@ public:
private: private:
static bool TryInsertOrder(OrderObject order); static bool TryInsertOrder(OrderObject order);
static bool TryChangeOrderStatus(QString key, int order_status); static bool TryChangeOrderStatus(QString key, int order_status, int refundstatus = DefaultOrder);
static bool TryChangeOrderWriteStatus(QString key, int order_write_status); static bool TryChangeOrderWriteStatus(QString key, int order_write_status);
...@@ -126,6 +150,8 @@ private: ...@@ -126,6 +150,8 @@ private:
explicit PosOrderPool(QObject *parent = 0); explicit PosOrderPool(QObject *parent = 0);
static void GetOrderStatusAndLastStatus(Order_Info orderinfo, int &status, int &laststatus);
void loadOrders(); void loadOrders();
private: private:
//互斥读写 //互斥读写
...@@ -134,8 +160,6 @@ private: ...@@ -134,8 +160,6 @@ private:
static QMutex s_mutex; static QMutex s_mutex;
//定时清理订单池 //定时清理订单池
QTimer _timer; QTimer _timer;
}; };
#endif // POSORDERPOOL_H #endif // POSORDERPOOL_H
...@@ -53,6 +53,15 @@ ...@@ -53,6 +53,15 @@
#define INI_AUTOCONFIRM "info/autoconfirm" #define INI_AUTOCONFIRM "info/autoconfirm"
#define INI_UIVISIBLE "Ui/visible" #define INI_UIVISIBLE "Ui/visible"
#define INI_PUSHSERVER "info/pushserver"
#define INI_GETSERVER "info/getserver"
#define INI_BASE_STOREID "base/storeid"
#define INI_BASE_PARNETID "base/parnetid"
#define INI_BASE_USERID "base/userid"
#define INI_BASE_PWD "base/pwd"
#define INI_BASE_STATIONIID "base/stationid"
#define JSON_REQTYPE "reqtype" #define JSON_REQTYPE "reqtype"
#define JSON_CURRENTUSER "current_user" #define JSON_CURRENTUSER "current_user"
#define JSON_USERNAME "username" #define JSON_USERNAME "username"
...@@ -136,6 +145,7 @@ ...@@ -136,6 +145,7 @@
#define JSON_KEY_REASONCODE "reason_code" #define JSON_KEY_REASONCODE "reason_code"
#define JSON_KEY_REASON "reason" #define JSON_KEY_REASON "reason"
#define JSON_KEY_ORDERSTATUS "status" #define JSON_KEY_ORDERSTATUS "status"
#define JSON_KEY_REFUNDSTATUS "refund_status"
#define EVENT_KEY_STATUS "status" #define EVENT_KEY_STATUS "status"
#define EVENT_KEY_MSG "msg" #define EVENT_KEY_MSG "msg"
...@@ -190,7 +200,7 @@ ...@@ -190,7 +200,7 @@
#define DEFAULT_APP_VER "1.0" #define DEFAULT_APP_VER "1.0"
#define DEFAULT_SYSTEM_VER "1.0" #define DEFAULT_SYSTEM_VER "1.0"
//登陆超时 //登陆超时
#define JSON_LOGIN_TIMEOUT 30000 #define JSON_LOGIN_TIMEOUT 60000
// 服务器返回正确值 // 服务器返回正确值
#define JSON_STATUSCODE_OK 100 #define JSON_STATUSCODE_OK 100
// 默认拉取订单的间隔时间 // 默认拉取订单的间隔时间
......
...@@ -18,6 +18,7 @@ INCLUDEPATH += $$PWD/include ...@@ -18,6 +18,7 @@ INCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/lib -llibeay32 -lssleay32 LIBS += -L$$PWD/lib -llibeay32 -lssleay32
LIBS += -lWs2_32 LIBS += -lWs2_32
LIBS += -lDbghelp
CONFIG(release, debug|release) { CONFIG(release, debug|release) {
LIBS += -L../takeout/Release -lfmPrinter LIBS += -L../takeout/Release -lfmPrinter
...@@ -26,6 +27,7 @@ CONFIG(release, debug|release) { ...@@ -26,6 +27,7 @@ CONFIG(release, debug|release) {
} }
#DEFINES += FM_TEST #DEFINES += FM_TEST
RC_FILE += takeout.rc
CONFIG += c++11 CONFIG += c++11
......
#if defined(UNDER_CE)
#include <winbase.h>
#else
#include <winver.h>
#endif
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", "ShangHai Freemud Co., Ltd."
VALUE "FileDescription", "FREEMUD Manager System"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "FREEMUD"
VALUE "LegalCopyright", "Copyright (C)2017-2020"
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "fmTakeout"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END
...@@ -67,7 +67,7 @@ bool FloatForm::event(QEvent *e) ...@@ -67,7 +67,7 @@ bool FloatForm::event(QEvent *e)
return true; return true;
} }
if(orderstatus == ApplicationRefundOrder) if(orderstatus == ApplicationRefundOrder || orderstatus == ApplicationPartialRefundOrder)
{ {
onStartRemind(1); onStartRemind(1);
return true; return true;
......
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