Commit 4c894e10 by NitefullWind

1. 数据库新增订单信息表,支持POS通过trans_id退整单。 2. 连接数据库时,指定连接名,避免与其他连接冲突。

parent 41608949
......@@ -36,7 +36,7 @@ bool FMBackup::connect()
if(!QFile::exists(dbname)) {
isOk = createTable(dbname);
} else {
_db = QSqlDatabase::addDatabase("QSQLITE");
_db = QSqlDatabase::addDatabase("QSQLITE", "fmvipbackupdb");
_db.setDatabaseName(dbname);
isOk =_db.open();
}
......@@ -51,12 +51,13 @@ bool FMBackup::connect()
bool FMBackup::createTable(const QString &dbname)
{
_db = QSqlDatabase::addDatabase("QSQLITE");
_db = QSqlDatabase::addDatabase("QSQLITE", "fmvipbackupdb");
_db.setDatabaseName(dbname);
_db.open();
QSqlQuery query(_db);
// 创建表
bool isOk = query.exec("create table tbl_req(id integer PRIMARY KEY autoincrement, url varchar(200), req text)");
isOk &= query.exec("create table tbl_order(id integer PRIMARY KEY autoincrement, trans_id varchar(10), fm_open_id varchar(10), fm_id varchar(20), fm_transId varchar(30))");
FMP_INFO() << QString::fromLocal8Bit("创建数据库:") << dbname;
if (!isOk) {
......@@ -127,3 +128,43 @@ bool FMBackup::reset()
FMP_INFO() << QString::fromLocal8Bit("数据库重置: ") << isOk;
return isOk;
}
bool FMBackup::insertNewOrder(const QString &trans_id, const QString &fm_open_id, const QString &fm_id, const QString &fm_transId)
{
if(!_db.isOpen()) {
connect();
}
QSqlQuery query(_db);
bool isOk = query.exec(QString("insert into tbl_order('trans_id','fm_open_id','fm_id','fm_transId') values('%1','%2','%3','%4');")
.arg(trans_id).arg(fm_open_id).arg(fm_id).arg(fm_transId));
if(!isOk) {
FMP_ERROR() << QString::fromLocal8Bit("插入订单数据失败:trans_id: %1, fm_open_id: %2, fm_id: %3, fm_transId: %4。失败原因:%5")
.arg(trans_id).arg(fm_open_id).arg(fm_id).arg(fm_transId).arg(query.lastError().text());
}
return isOk;
}
FMBackup::FMOrder FMBackup::getOrderByTransId(const QString &trans_id)
{
if(!_db.isOpen()) {
connect();
}
QSqlQuery query(_db);
bool isOk = query.exec(QString("select * from tbl_order where (tbl_order.trans_id='%1')").arg(trans_id));
if(!isOk) {
FMP_ERROR() << QString::fromLocal8Bit("查询订单失败:trans_id: %1。失败原因:%2").arg(trans_id).arg(query.lastError().text());
}
FMOrder order;
while(query.next())
{
QSqlRecord record = query.record();
order.trans_id = record.value("trans_id").toString();
order.fm_open_id = record.value("fm_open_id").toString();
order.fm_id = record.value("fm_id").toString();
order.fm_transId = record.value("fm_transId").toString();
}
FMP_INFO() << QString::fromLocal8Bit("查询到订单信息:trans_id: %1, fm_open_id: %2, fm_id: %3, fm_transId: %4。")
.arg(order.trans_id).arg(order.fm_open_id).arg(order.fm_id).arg(order.fm_transId);
return order;
}
......@@ -6,10 +6,21 @@
class FMBackup
{
public:
typedef struct {
QString trans_id;
QString fm_open_id;
QString fm_id;
QString fm_transId;
} FMOrder;
static FMBackup* instance();
bool updateReqData(const int id, const QString url, const QString &reqData);
bool removeReqData(const int &id);
int insertNewRow();
bool insertNewOrder(const QString &trans_id, const QString &fm_open_id, const QString &fm_id, const QString &fm_transId);
FMOrder getOrderByTransId(const QString &trans_id);
QSqlQuery reqDataQuery() const;
bool reset();
private:
......
......@@ -72,8 +72,10 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
}
case FM_Refund: {
QString fm_id = jsonObj[PosProps.Transaction].toObject()[PosProps.Fm_id].toString();
QString transId = jsonObj[PosProps.Transaction].toObject()[PosProps.TransId].toString();
QString fm_transId = jsonObj[PosProps.Transaction].toObject()[PosProps.Fm_transId].toString();
if(fm_id != "" || fm_transId != "") {
QString fm_open_id = jsonObj[PosProps.Fm_open_id].toString();
if(fm_id != "" || fm_transId != "" || (fm_open_id != "" && transId != "")) {
TaskRefundOrder taskRefundOrder(jsonObj);
rspData = taskRefundOrder.doTask();
} else {
......
......@@ -108,9 +108,18 @@ bool TaskFinal::sendToServer(bool isShowMsg)
void TaskFinal::packagePOSRsp()
{
posRspJsonObj[PosProps.StatusCode] = getServerJsonValue(PosProps.StatusCode);
int status = getServerJsonValue(PosProps.StatusCode).toInt();
posRspJsonObj[PosProps.StatusCode] = status;
posRspJsonObj[PosProps.Msg] = getServerJsonValue(PosProps.Msg);
posRspJsonObj[PosProps.Prompt] = 1;
if(status == FM_API_SUCCESS) {
QString trans_id = getPosJsonValue(PosProps.TransId).toString();
QString fm_open_id = getServerJsonValue(PosProps.Fm_open_id).toString();
QString fm_id = getServerJsonValue(PosProps.Fm_id).toString();
QString fm_transId = "";
FMBackup::instance()->insertNewOrder(trans_id, fm_open_id, fm_id, fm_transId);
}
}
QString TaskFinal::backup()
......
#include "taskothers.h"
#include "fmbackup.h"
TaskCoupon::TaskCoupon(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTaskNoWnd(jsonObj, FM_Coupon, session, parent)
......@@ -65,8 +66,17 @@ void TaskRefundOrder::packageServerReq()
{
QJsonObject transData;
QString fm_id = getPosJsonValue(PosProps.Fm_id).toString();
QString fm_open_id = getPosJsonValue(PosProps.Fm_open_id).toString();
QString trans_id = getPosJsonValue(PosProps.TransId).toString();
QString fm_transId = getPosJsonValue(PosProps.Fm_transId).toString();
if(fm_id == "") {
fm_id = getPosJsonValue(PosProps.Fm_transId).toString();
if(fm_transId!="") {
fm_id = fm_transId;
}
if(fm_open_id!="" && trans_id!="") {
fm_id = FMBackup::instance()->getOrderByTransId(trans_id).fm_id;
}
}
transData[ServerProps(PosProps.Fm_id)] = fm_id;
serverReqJsonObj["data"] = transData;
......
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