Commit 5f164e4d by 李定达

1.修改数据库操作统一到rollback线程

parent d0285615
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <QJsonObject> #include <QJsonObject>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QSqlQuery> #include <QSqlQuery>
#include <QMap>
#include <QSqlError> #include <QSqlError>
#include "tools.h" #include "tools.h"
#include "QsLog.h" #include "QsLog.h"
...@@ -15,9 +16,12 @@ ...@@ -15,9 +16,12 @@
#include "fmnetwork.h" #include "fmnetwork.h"
#include <QtConcurrent> #include <QtConcurrent>
QMap<QString, QString> RollBack::s_rollorder;
QMutex RollBack::s_rollorder_lock;
RollBack::RollBack(QObject *parent) : QThread(parent) RollBack::RollBack(QObject *parent) : QThread(parent)
{ {
//_db = new FMPDataBase(path + DB_ORDER, QString("rollback"));
} }
RollBack::~RollBack() RollBack::~RollBack()
...@@ -55,11 +59,11 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query) ...@@ -55,11 +59,11 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
if(!CretOperate::GetSign(json)) if(!CretOperate::GetSign(json))
{ {
QLOG_ERROR() << "get sign error"; QLOG_ERROR() << "rollback : " << "get sign error";
continue; continue;
} }
QLOG_INFO() << json; QLOG_INFO() << "rollback : " << json;
QByteArray data = QJsonDocument(json).toJson(QJsonDocument::Compact); QByteArray data = QJsonDocument(json).toJson(QJsonDocument::Compact);
...@@ -73,7 +77,7 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query) ...@@ -73,7 +77,7 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString(); QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString();
QLOG_INFO() << "roll back server url : " << url; QLOG_INFO() << "rollback : " << "roll back server url : " << url;
if(FMNetWork::HttpPost(url, array, data, "application/json;charset=utf-8","application/json", error, 12)) if(FMNetWork::HttpPost(url, array, data, "application/json;charset=utf-8","application/json", error, 12))
{ {
...@@ -84,7 +88,7 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query) ...@@ -84,7 +88,7 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
} }
QLOG_WARN() << "rollback resulte " << QThread::currentThreadId() << ":" << array; QLOG_WARN() << "rollback : " << "rollback resulte " << QThread::currentThreadId() << ":" << array;
} }
} }
...@@ -108,13 +112,15 @@ void RollBack::run() ...@@ -108,13 +112,15 @@ void RollBack::run()
_db.open(); _db.open();
QSqlQuery query(_db); QSqlQuery query(_db);
InsertRollOrder(query);
query.clear();
QLOG_WARN() << "find sql : " << "select * from orderlist"; QLOG_WARN() << "rollback : " << "find sql : " << "select * from orderlist";
bool flag = query.exec("select * from orderlist"); bool flag = query.exec("select * from orderlist");
if(!flag) if(!flag)
QLOG_WARN() << query.lastError(); QLOG_WARN() << "rollback : " << query.lastError();
RollWiteQuery(_db, query); RollWiteQuery(_db, query);
...@@ -131,3 +137,54 @@ void RollBack::run() ...@@ -131,3 +137,54 @@ void RollBack::run()
loop.exec(); loop.exec();
} }
} }
void RollBack::InsertRollOrder(QSqlQuery &query)
{
QMap<QString , QString> tmporder = s_rollorder;
QMap<QString,QString>::Iterator it;
QLOG_INFO() << "rollback : " << "roll order map " << tmporder;
for(it = tmporder.begin(); it != tmporder.end(); ++it)
{
if(!it.key().isEmpty())
{
QString sql = QString("insert into %1 ( 'orderid', 'content') values ('%2', '%3')").arg(DB_TABLE_NAME).arg(it.key()).arg(it.value());
QLOG_INFO() << "rollback : " << "insert sql " << sql;
if(!query.exec(sql))
{
QLOG_ERROR() << "rollback : " << query.lastError() << query.lastError().text();
}
else
{
s_rollorder_lock.lock();
s_rollorder.remove(it.key());
s_rollorder_lock.unlock();
}
}
else
{
QLOG_ERROR() << "rollback : " << "rollorder error " << it.key() << it.value();
}
}
s_rollorder_lock.lock();
if(s_rollorder.size() > 300)
{
QLOG_WARN() << "rollback : " << "map size big clean : " << s_rollorder.size();
s_rollorder.clear();
}
s_rollorder_lock.unlock();
}
void RollBack::SetRollOrder(QString orderid, QString request)
{
QLOG_INFO() << "rollback : "<< "new roll order " << orderid << request;
s_rollorder_lock.lock();
s_rollorder.insert(orderid, request);
s_rollorder_lock.unlock();
}
#ifndef ROLLBACK_H #ifndef ROLLBACK_H
#define ROLLBACK_H #define ROLLBACK_H
#include <QString>
#include <QMAp>
#include <QMutex>
#include <QThread> #include <QThread>
#include <QPointer> #include <QPointer>
#include <QSemaphore> #include <QSemaphore>
...@@ -19,9 +22,16 @@ public: ...@@ -19,9 +22,16 @@ public:
void run(); void run();
static void SetRollOrder(QString orderid, QString request);
private:
void InsertRollOrder(QSqlQuery &query);
private: private:
//FMPDataBase *_db; //FMPDataBase *_db;
QSemaphore _spr; //QSemaphore _spr;
static QMap<QString, QString> s_rollorder;
static QMutex s_rollorder_lock;
}; };
#endif // ROLLBACK_H #endif // ROLLBACK_H
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include <QFont> #include <QFont>
#include <QFontDatabase> #include <QFontDatabase>
#include <QApplication> #include <QApplication>
#include <QSqlError>
#include <QSqlQuery>
#include <QSslSocket> #include <QSslSocket>
#include <QSslConfiguration> #include <QSslConfiguration>
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
...@@ -20,6 +22,7 @@ ...@@ -20,6 +22,7 @@
#include <QNetworkRequest> #include <QNetworkRequest>
#include <QJsonDocument> #include <QJsonDocument>
#include <Windows.h> #include <Windows.h>
#include "DataProcess/rollback.h"
#include "DataProcess/tools.h" #include "DataProcess/tools.h"
#include "DataProcess/cretopt.h" #include "DataProcess/cretopt.h"
#include "DataProcess/fmnetwork.h" #include "DataProcess/fmnetwork.h"
...@@ -28,30 +31,44 @@ Control::Control(QObject *parent) : QObject(parent), _widget(NULL) ...@@ -28,30 +31,44 @@ Control::Control(QObject *parent) : QObject(parent), _widget(NULL)
{ {
QString path; QString path;
ToolS::GetPath(path); ToolS::GetPath(path);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", QString("creat"));
db.setDatabaseName(path + DB_ORDER);
db.open();
_isinterrupt = false; if(db.isOpen())
_db = new FMPDataBase(path + DB_ORDER, QString("writeorder")); {
QSqlQuery query(db);
QString sql = QString("create table ") + DB_TABLE_NAME + " ("
"orderid varchar(60) primary key, "
"content text"
")";
bool flag = query.exec(sql);
QString sql = QString("create table ") + DB_TABLE_NAME + " (" if(!flag)
"orderid varchar(60) primary key, " QLOG_WARN() << query.lastError();
"content text"
")";
QLOG_INFO() << "creat table : " << sql; db.close();
}else
{
QLOG_ERROR()<< "----" <<db.open();
QLOG_ERROR() << db.lastError().type() << db.lastError().text();
}
_db->Init(); _isinterrupt = false;
_db->creat(sql);
InitModel(); InitModel();
} }
Control::~Control() Control::~Control()
{ {
if(_db != NULL) // if(_db != NULL)
{ // {
delete _db; // delete _db;
_db = NULL; // _db = NULL;
} // }
} }
void Control::Start(const char *indata, char *outdata) void Control::Start(const char *indata, char *outdata)
...@@ -159,12 +176,14 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata, ...@@ -159,12 +176,14 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata,
//如果没有点击取消支付按钮直接写数据库异步冲正 //如果没有点击取消支付按钮直接写数据库异步冲正
if(json.contains(JSON_KEY_REQTYPE) && json[JSON_KEY_REQTYPE].toInt() == 72) if(json.contains(JSON_KEY_REQTYPE) && json[JSON_KEY_REQTYPE].toInt() == 72)
{ {
QVariantHash hash; // QVariantHash hash;
hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString()); // hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString());
hash.insert(SQL_KET_CONTENT, QString(data)); // hash.insert(SQL_KET_CONTENT, QString(data));
_db->insert(DB_TABLE_NAME, hash); // _db->insert(DB_TABLE_NAME, hash);
RollBack::SetRollOrder(json[JSON_KEY_PARTORDERID].toString(), QString(data));
} }
} }
...@@ -447,14 +466,17 @@ void Control::Request(ReqType type, QStringList list) ...@@ -447,14 +466,17 @@ void Control::Request(ReqType type, QStringList list)
SetResPonseWithMessage("23", QString::fromLocal8Bit("支付取消成功.如已扣款将会自动返还")); SetResPonseWithMessage("23", QString::fromLocal8Bit("支付取消成功.如已扣款将会自动返还"));
else else
{ {
QVariantHash hash; // QVariantHash hash;
// hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString());
// hash.insert(SQL_KET_CONTENT, QString(tmpdata));
// QLOG_ERROR() << "roll back faile , move request to database : " << json;
hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString()); // _db->insert(DB_TABLE_NAME, hash);
hash.insert(SQL_KET_CONTENT, QString(tmpdata));
QLOG_ERROR() << "roll back faile , move request to database : " << json; RollBack::SetRollOrder(json[JSON_KEY_PARTORDERID].toString(), QString(tmpdata));
_db->insert(DB_TABLE_NAME, hash);
SetResPonseWithMessage("23", QString::fromLocal8Bit("支付取消成功.如已扣款将会自动返还")); SetResPonseWithMessage("23", QString::fromLocal8Bit("支付取消成功.如已扣款将会自动返还"));
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "requestmodel.h" #include "requestmodel.h"
#include "hostwidget.h" #include "hostwidget.h"
#include "DataProcess/fmp_database.h" //#include "DataProcess/fmp_database.h"
#include <QObject> #include <QObject>
#include <QApplication> #include <QApplication>
#include <QLibrary> #include <QLibrary>
...@@ -68,7 +68,7 @@ private: ...@@ -68,7 +68,7 @@ private:
bool _isinterrupt; bool _isinterrupt;
FMPDataBase *_db; //FMPDataBase *_db;
}; };
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2017-09-14T11:59:12. --> <!-- Written by QtCreator 3.5.1, 2017-09-15T17:36:09. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
......
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