Commit 5f164e4d by 李定达

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

parent d0285615
......@@ -8,6 +8,7 @@
#include <QJsonObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QMap>
#include <QSqlError>
#include "tools.h"
#include "QsLog.h"
......@@ -15,9 +16,12 @@
#include "fmnetwork.h"
#include <QtConcurrent>
QMap<QString, QString> RollBack::s_rollorder;
QMutex RollBack::s_rollorder_lock;
RollBack::RollBack(QObject *parent) : QThread(parent)
{
//_db = new FMPDataBase(path + DB_ORDER, QString("rollback"));
}
RollBack::~RollBack()
......@@ -55,11 +59,11 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
if(!CretOperate::GetSign(json))
{
QLOG_ERROR() << "get sign error";
QLOG_ERROR() << "rollback : " << "get sign error";
continue;
}
QLOG_INFO() << json;
QLOG_INFO() << "rollback : " << json;
QByteArray data = QJsonDocument(json).toJson(QJsonDocument::Compact);
......@@ -73,7 +77,7 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
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))
{
......@@ -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()
_db.open();
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");
if(!flag)
QLOG_WARN() << query.lastError();
QLOG_WARN() << "rollback : " << query.lastError();
RollWiteQuery(_db, query);
......@@ -131,3 +137,54 @@ void RollBack::run()
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
#define ROLLBACK_H
#include <QString>
#include <QMAp>
#include <QMutex>
#include <QThread>
#include <QPointer>
#include <QSemaphore>
......@@ -19,9 +22,16 @@ public:
void run();
static void SetRollOrder(QString orderid, QString request);
private:
void InsertRollOrder(QSqlQuery &query);
private:
//FMPDataBase *_db;
QSemaphore _spr;
//QSemaphore _spr;
static QMap<QString, QString> s_rollorder;
static QMutex s_rollorder_lock;
};
#endif // ROLLBACK_H
......@@ -13,6 +13,8 @@
#include <QFont>
#include <QFontDatabase>
#include <QApplication>
#include <QSqlError>
#include <QSqlQuery>
#include <QSslSocket>
#include <QSslConfiguration>
#include <QNetworkAccessManager>
......@@ -20,6 +22,7 @@
#include <QNetworkRequest>
#include <QJsonDocument>
#include <Windows.h>
#include "DataProcess/rollback.h"
#include "DataProcess/tools.h"
#include "DataProcess/cretopt.h"
#include "DataProcess/fmnetwork.h"
......@@ -28,30 +31,44 @@ Control::Control(QObject *parent) : QObject(parent), _widget(NULL)
{
QString path;
ToolS::GetPath(path);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", QString("creat"));
db.setDatabaseName(path + DB_ORDER);
db.open();
_isinterrupt = false;
_db = new FMPDataBase(path + DB_ORDER, QString("writeorder"));
if(db.isOpen())
{
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 + " ("
"orderid varchar(60) primary key, "
"content text"
")";
if(!flag)
QLOG_WARN() << query.lastError();
QLOG_INFO() << "creat table : " << sql;
db.close();
}else
{
QLOG_ERROR()<< "----" <<db.open();
QLOG_ERROR() << db.lastError().type() << db.lastError().text();
}
_db->Init();
_db->creat(sql);
_isinterrupt = false;
InitModel();
}
Control::~Control()
{
if(_db != NULL)
{
delete _db;
_db = NULL;
}
// if(_db != NULL)
// {
// delete _db;
// _db = NULL;
// }
}
void Control::Start(const char *indata, char *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)
{
QVariantHash hash;
// QVariantHash hash;
hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString());
hash.insert(SQL_KET_CONTENT, QString(data));
// hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString());
// 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)
SetResPonseWithMessage("23", QString::fromLocal8Bit("支付取消成功.如已扣款将会自动返还"));
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());
hash.insert(SQL_KET_CONTENT, QString(tmpdata));
// _db->insert(DB_TABLE_NAME, hash);
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("支付取消成功.如已扣款将会自动返还"));
}
......
......@@ -3,7 +3,7 @@
#include "requestmodel.h"
#include "hostwidget.h"
#include "DataProcess/fmp_database.h"
//#include "DataProcess/fmp_database.h"
#include <QObject>
#include <QApplication>
#include <QLibrary>
......@@ -68,7 +68,7 @@ private:
bool _isinterrupt;
FMPDataBase *_db;
//FMPDataBase *_db;
};
......
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<data>
<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