Commit ec1ef79f by NitefullWind

1. 整合onedatabase分支 [5f164e4d] 代码。 修复一个冲正时数据库的Bug。

parent 08b78a0f
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
#include <QtConcurrent> #include <QtConcurrent>
#include <QLibrary> #include <QLibrary>
typedef int (__stdcall *SKBAPISend)(const char *indata, const char *guid, char *outdata, char *errMsg, const char *mode, const char *operation);
FMNetWork::FMNetWork(QObject *parent) : QObject(parent) FMNetWork::FMNetWork(QObject *parent) : QObject(parent)
{ {
......
...@@ -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()
...@@ -56,11 +60,11 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query) ...@@ -56,11 +60,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 array; QByteArray array;
...@@ -93,7 +97,7 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query) ...@@ -93,7 +97,7 @@ void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
} }
QLOG_WARN() << "rollback resulte " << QThread::currentThreadId() << ":" << array; QLOG_WARN() << "rollback : " << "rollback resulte " << QThread::currentThreadId() << ":" << array;
} }
} }
...@@ -115,13 +119,15 @@ void RollBack::run() ...@@ -115,13 +119,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);
...@@ -138,3 +144,54 @@ void RollBack::run() ...@@ -138,3 +144,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>
...@@ -20,9 +23,16 @@ public: ...@@ -20,9 +23,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;
FMPSettings _setting; FMPSettings _setting;
}; };
......
...@@ -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,43 +22,54 @@ ...@@ -20,43 +22,54 @@
#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"
#include <QUuid> #include <QUuid>
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
typedef int (__stdcall *SKBAPISend)(const char *indata, const char *guid, char *outdata, char *errMsg, const char *mode, const char *operation);
Control::Control(QObject *parent) : QObject(parent), _widget(NULL) 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 + " (" QString sql = QString("create table ") + DB_TABLE_NAME + " ("
"orderid varchar(60) primary key, " "orderid varchar(60) primary key, "
"content text" "content text"
")"; ")";
QLOG_INFO() << "creat table : " << sql; bool flag = query.exec(sql);
if(!flag)
QLOG_WARN() << query.lastError();
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)
...@@ -73,8 +86,7 @@ void Control::Start(const char *indata, char *outdata) ...@@ -73,8 +86,7 @@ void Control::Start(const char *indata, char *outdata)
QFont ft("Microsoft YaHei UI Light"); QFont ft("Microsoft YaHei UI Light");
qApp->setFont(ft); qApp->setFont(ft);
QLOG_INFO() << "Openssl support:" << QSslSocket::supportsSsl(); QLOG_INFO() << "Openssl support:" << QSslSocket::supportsSsl() << QApplication::libraryPaths();
qDebug() << "Openssl support:" << QSslSocket::supportsSsl() << QApplication::libraryPaths();
QEventLoop loop; QEventLoop loop;
...@@ -183,8 +195,7 @@ bool Control::SendMessageToServer(const QJsonObject &json, QByteArray &outdata, ...@@ -183,8 +195,7 @@ bool Control::SendMessageToServer(const QJsonObject &json, QByteArray &outdata,
CretOperate::GetMAC(tmpjson); CretOperate::GetMAC(tmpjson);
CretOperate::GetSign(tmpjson); CretOperate::GetSign(tmpjson);
QLOG_INFO() << "send json to payment: " << tmpjson; QLOG_INFO() << "send json to server: " << tmpjson;
qDebug() << "send json to payment: " << tmpjson;
bool isOk = false; bool isOk = false;
if(_posType==SPCC) { if(_posType==SPCC) {
...@@ -198,14 +209,15 @@ bool Control::SendMessageToServer(const QJsonObject &json, QByteArray &outdata, ...@@ -198,14 +209,15 @@ bool Control::SendMessageToServer(const QJsonObject &json, QByteArray &outdata,
//如果没有点击取消支付按钮直接写数据库异步冲正 //如果没有点击取消支付按钮直接写数据库异步冲正
if(tmpjson.contains(JSON_KEY_REQTYPE) && tmpjson[JSON_KEY_REQTYPE].toInt() == 72) if(tmpjson.contains(JSON_KEY_REQTYPE) && tmpjson[JSON_KEY_REQTYPE].toInt() == 72)
{ {
QByteArray data = QJsonDocument(tmpjson).toJson(QJsonDocument::Compact); // QVariantHash hash;
QVariantHash hash;
hash.insert(SQL_KEY_ORDERID, tmpjson[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); QByteArray data = QJsonDocument(tmpjson).toJson(QJsonDocument::Compact);
RollBack::SetRollOrder(json[JSON_KEY_PARTORDERID].toString(), QString(data));
} }
return false; return false;
} }
...@@ -245,17 +257,6 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata, ...@@ -245,17 +257,6 @@ bool Control::SendMessageToPayMent(const QJsonObject &json, QByteArray &outdata,
#else #else
if(!Control::HttpPost(url, array, data, "application/json;charset=utf-8", "application/json", error, 60)) if(!Control::HttpPost(url, array, data, "application/json;charset=utf-8", "application/json", error, 60))
{ {
// if(json.contains(JSON_KEY_PARTORDERID) && !json[JSON_KEY_PARTORDERID].toString().isEmpty())
// {
// QVariantHash hash;
// hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString());
// hash.insert(SQL_KET_CONTENT, QString(data));
// _db->insert(DB_TABLE_NAME, hash);
// }
return false; return false;
} }
#endif #endif
...@@ -617,15 +618,17 @@ void Control::Request(ReqType type, QStringList list) ...@@ -617,15 +618,17 @@ void Control::Request(ReqType type, QStringList list)
SetResPonseWithMessage("23", error); SetResPonseWithMessage("23", error);
else else
{ {
// QVariantHash hash;
// hash.insert(SQL_KEY_ORDERID, json[JSON_KEY_PARTORDERID].toString());
// hash.insert(SQL_KET_CONTENT, QString(tmpdata));
QVariantHash hash; // 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", error); SetResPonseWithMessage("23", error);
} }
......
...@@ -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 "fmp_settings.h" #include "fmp_settings.h"
#include <QObject> #include <QObject>
#include <QApplication> #include <QApplication>
...@@ -83,7 +83,7 @@ private: ...@@ -83,7 +83,7 @@ private:
bool _isinterrupt; bool _isinterrupt;
FMPDataBase *_db; //FMPDataBase *_db;
FMPSettings _setting; FMPSettings _setting;
POSType _posType; POSType _posType;
......
...@@ -45,3 +45,6 @@ RESOURCES += \ ...@@ -45,3 +45,6 @@ RESOURCES += \
res.qrc res.qrc
RC_FILE = res/sbkpay.rc RC_FILE = res/sbkpay.rc
HEADERS += \
version.h
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#define VER_MINOR 1 #define VER_MINOR 1
#define VER_REVISION 1 #define VER_REVISION 1
#define VER_BUILD 1 #define VER_BUILD 2
//! Convert version numbers to string //! Convert version numbers to string
#define _STR(S) #S #define _STR(S) #S
......
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