Commit 206f3da6 by 刘帅

1. 不连续重复推送订单

2. 记录当天失败订单至文件(只要收到回复,即认为成功),定时重传
3. 优化库存日志,取消不必要的记录
4. 客户端token失效重新登录
5. 优化客户端状态展示(登录状态、网络状态)
parent 3ef5b009
If we compile an executable program use vc2013 with default settings, this executable program cannot run on XP.
Stud_PE can change the executable program PE struct(IMAGE_NT_HEADERS), so the executable program can run on XP.
This is a sample for how to use Stud_PE:
First start CMD,
Then input the command: Stud_PE.exe *.exe.
For QT Creator
Add build step like this:
command: Stud_PE.exe
paramters: %{buildDir}\%{CurrentBuild:Name}\%{CurrentProject:Name}.exe
work dir: %{sourceDir}\Stud_PE
2018/09/07
\ No newline at end of file
......@@ -233,35 +233,37 @@ void FlowControl::_onLogin()
m_http.Post(appendData
,[this](const QByteArray &data)
{
QLOG_INFO() << QString("登陆返回数据: %1").arg(QString(data).simplified());
QJsonObject recvObj = QJsonDocument::fromJson(data).object();
if(recvObj["statusCode"].toInt() == 100)
{
hideAlertForm();
m_token = recvObj["token"].toString();
QJsonObject storeObj = recvObj["store"].toObject();
m_storeInfo.name = recvObj["store_name"].toString();
m_storeInfo.phone = storeObj["phone"].toString();
m_storeInfo.address = storeObj["address"].toString();
emit loginSucessful(m_storeInfo.name);
// 记录下门店号到配置文件
ConfigManage::Instance().setStoreId(m_storeInfo.sotoreId);
// 开始拉取订单
_onPullOrder();
}else
{
m_bLogged = false;
showAlertForm(AlertForm::ERROR, QString("登陆失败[%1]").arg(recvObj["msg"].toString()), true);
}
}
,[this](const QNetworkReply::NetworkError &error)
{
showAlertForm(AlertForm::ERROR, "登陆失败[网络错误,请检查网络连接]", true);
QLOG_ERROR() << QString("登陆失败: %1").arg(error);
QTimer::singleShot(20000, this, &FlowControl::_onLogin);
}
{
QLOG_INFO() << QString("登陆返回数据: %1").arg(QString(data).simplified());
QJsonObject recvObj = QJsonDocument::fromJson(data).object();
if(recvObj["statusCode"].toInt() == 100)
{
hideAlertForm();
m_token = recvObj["token"].toString();
QJsonObject storeObj = recvObj["store"].toObject();
m_storeInfo.name = recvObj["store_name"].toString();
m_storeInfo.phone = storeObj["phone"].toString();
m_storeInfo.address = storeObj["address"].toString();
emit loginState(LOGON, m_storeInfo.name);
// 记录下门店号到配置文件
ConfigManage::Instance().setStoreId(m_storeInfo.sotoreId);
// 开始拉取订单
_onPullOrder();
}else
{
m_bLogged = false;
showAlertForm(AlertForm::ERROR, QString("登陆失败[%1]").arg(recvObj["msg"].toString()), true);
}
}
,[this](const QNetworkReply::NetworkError &error)
{
m_bLogged = false;
updateNetworkState(QString("<font color='#ff0000'>Error %1</font>").arg(QString::number(error)));
showAlertForm(AlertForm::ERROR, "登陆失败[网络错误,请检查网络连接]", true);
QLOG_ERROR() << QString("登陆失败: %1").arg(error);
QTimer::singleShot(20000, this, &FlowControl::_onLogin);
}
);
}
......@@ -280,6 +282,7 @@ void FlowControl::_onPullOrder()
if(recvObj["statusCode"].toInt() == 100)
{
//hideAlertForm();
if(!m_bLogged) emit loginState(LOGON, m_storeInfo.name);
m_timestamp = recvObj["timestamp"].toString();
QJsonArray values = recvObj["orders"].toArray();
foreach(QJsonValue value, values)
......@@ -307,6 +310,12 @@ void FlowControl::_onPullOrder()
emit recordSale(recvObj);
QTimer::singleShot(recvObj["sync_time"].toInt()*1000, this, &FlowControl::_onPullOrder);
}
else if(recvObj["statusCode"].toInt() == 105) //"statusCode":105, "msg":"登录信息已过期,请重启非码客户端!"
{
m_bLogged = false;
emit loginState(LOGOUT);
_onLogin();
}
else
{
showAlertForm(AlertForm::ERROR, QString("拉取订单失败[%1]").arg(recvObj["msg"].toString()), true);
......@@ -315,6 +324,9 @@ void FlowControl::_onPullOrder()
,[this](const QNetworkReply::NetworkError &error)
{
showAlertForm(AlertForm::ERROR, "拉取订单失败[网络错误,请检查网络连接]", true);
updateNetworkState(QString("<font color='#ff0000'>Error %1</font>").arg(QString::number(error)));
loginState(LOGOUT);
m_bLogged = false;
QLOG_ERROR() << QString("轮询失败: %1").arg(error);
QTimer::singleShot(60000, this, &FlowControl::_onPullOrder);
}
......@@ -358,6 +370,7 @@ void FlowControl::_onProcessOrderHandle(const QString& orderId, const QString &o
,[operationName, this](const QNetworkReply::NetworkError &error)
{
showAlertForm(AlertForm::ERROR, QString("%1失败[网络错误,请检查网络连接]").arg(operationName), true);
updateNetworkState(QString("<font color='#ff0000'>Error %1</font>").arg(QString::number(error)));
QLOG_ERROR() << QString("%1失败: %1").arg(operationName, error);
}
);
......
......@@ -128,10 +128,10 @@ public slots:
signals:
/* 功能:登陆成功
* 参数:[1]门店名称
* 参数:[1]登录状态 [2]门店名称
* 返回:NULL
* */
void loginSucessful(const QString& storeName);
void loginState(int state, QString storeName = "");
/* 功能:更新订单显示
* 参数:[1]订单对象
......@@ -139,6 +139,8 @@ signals:
* */
void updateOrderDisplay(OrderObject* orderObj);
void updateNetworkState(QString networkState);
/* 功能:显示提示窗口
* 参数:[1]窗口类型 [2]提示信息 [3]是否强制提示 (默认主窗口隐藏时不做提示)
* 返回:NULL
......
......@@ -40,12 +40,23 @@ MainWindow::MainWindow(QWidget *parent) :
// 店名显示
ui->main_labStoreName->setText("<font color='#ff0000'>未登录</font>");
connect(&FlowControl::Instance(), &FlowControl::loginSucessful, [this](const QString& storeName)
connect(&FlowControl::Instance(), &FlowControl::loginState, [this](int state, QString storeName)
{
ui->main_btnMDGL->setEnabled(true);
ui->main_btnSPGL->setEnabled(true);
ui->main_btnRJ->setEnabled(true);
ui->main_labStoreName->setText(storeName);
if(state == LOGON)
{
ui->main_btnMDGL->setEnabled(true);
ui->main_btnSPGL->setEnabled(true);
ui->main_btnRJ->setEnabled(true);
ui->main_labStoreName->setText(storeName);
ui->main_labNetStatus->setText("正常");
}
else if(state == LOGOUT)
{
ui->main_btnMDGL->setEnabled(false);
ui->main_btnSPGL->setEnabled(false);
ui->main_btnRJ->setEnabled(false);
ui->main_labStoreName->setText("<font color='#ff0000'>未登录</font>");
}
});
// 网络状态显示
......@@ -54,6 +65,12 @@ MainWindow::MainWindow(QWidget *parent) :
// 更新订单显示
connect(&FlowControl::Instance(), &FlowControl::updateOrderDisplay, this, &MainWindow::onUpdateOrderDisplay);
// 更新网络状态显示
connect(&FlowControl::Instance(), &FlowControl::updateNetworkState, [this](const QString networkState)
{
ui->main_labNetStatus->setText(networkState);
});
// 提示窗口显示
m_alertForm = new AlertForm(this);
connect(&FlowControl::Instance(), &FlowControl::showAlertForm, [this](AlertForm::AlertType type, const QString& msg, bool bFocus)
......
......@@ -108,5 +108,10 @@ typedef struct {
int len;
}FMSOCKEHEADER;
enum{
LOGON,
LOGOUT
};
#endif // UTIL_H
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