Commit 7a926885 by NitefullWind

1. 抽象订单、支付和商品。 2. 实现数据库保存订单、支付。

parent 2ef9375d
#------------------------------------------------- #-------------------------------------------------
# #
# Project created by QtCreator 2017-01-11T15:59:15 # Project created by QtCreator 2017-09-13T10:53:15
# #
#------------------------------------------------- #-------------------------------------------------
TEMPLATE = lib TEMPLATE = subdirs
QT += core gui network sql concurrent SUBDIRS += \
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets fmp_vip \
tests
CONFIG += c++11 CONFIG += ordered
SOURCES += \
fmp_vip.cpp \
fmp_vip_p.cpp \
fmp_vip_plugin.cpp \
backup/fmbackup.cpp \
backup/resend.cpp \
task/fmtask.cpp \
task/fmtasknownd.cpp \
task/session.cpp \
task/taskfactory.cpp \
task/taskfinal.cpp \
task/taskfund.cpp \
task/tasklogin.cpp \
task/taskothers.cpp \
task/taskpay.cpp \
windows/fmcouponwidget.cpp \
windows/fmloading.cpp \
windows/fmmsgwnd.cpp \
windows/fmvipfund.cpp \
windows/fmviplogin.cpp \
windows/fmviporder.cpp \
windows/fmvippanel.cpp \
windows/fmvipwnd.cpp \
fmnetwork.cpp \
fmvipdispatcher.cpp \
fmp_ve_handlers.cpp \
fmp_vip_server.cpp \
fmp_vip_settings.cpp \
task/coupon.cpp \
windows/couponmodel.cpp \
windows/itemdelegate.cpp
HEADERS +=\
fmp_vip.h \
fmp_vip_i.h \
fmp_vip_p.h \
fmp_vip_plugin_p.h \
backup/fmbackup.h \
backup/resend.h \
task/fmtask.h \
task/fmtasknownd.h \
task/session.h \
task/taskfactory.h \
task/taskfinal.h \
task/taskfund.h \
task/tasklogin.h \
task/taskothers.h \
task/taskpay.h \
windows/fmcouponwidget.h \
windows/fmloading.h \
windows/fmmsgwnd.h \
windows/fmvipfund.h \
windows/fmviplogin.h \
windows/fmviporder.h \
windows/fmvippanel.h \
windows/fmvipwnd.h \
fmnetwork.h \
fmvipdispatcher.h \
global.h \
fmp_ve_handlers.h \
fmp_vip_server.h \
fmp_vip_settings.h \
task/coupon.h \
windows/couponmodel.h \
windows/itemdelegate.h
unix {
target.path = /usr/lib
INSTALLS += target
}
#Target name
VER = $$system($$PWD/../fmprc.bat $$TARGET)
ORIGIN_TARGET = $$TARGET
TARGET = $${TARGET}_$${VER}
#Header path
INCLUDEPATH += $$PWD/../include/ctk \
+= $$PWD/../include/interface \
INCLUDEPATH += ./task ./windows ./backup
#Library path
LIBS += -L$$PWD/../lib
win32 {
LIBS += -lws2_32 -luser32
}
CONFIG(debug, debug|release) {
#Linking library
LIBS += -lCTKCored -lCTKPluginFrameworkd
#Destination path
DESTDIR = $$PWD/../debug/plugins
} else {
LIBS += -lCTKCore -lCTKPluginFramework
DESTDIR = $$PWD/../release/plugins
}
#
RESOURCES += \
res/$${ORIGIN_TARGET}.qrc \
res/img.qrc
win32 {
RC_FILE += res/$${ORIGIN_TARGET}.rc
system($$PWD/../fmprc.bat $$PWD/version.h $$ORIGIN_TARGET)
}
else {
system($$PWD/../fmprc.sh $$PWD/version.h $$ORIGIN_TARGET)
}
FORMS += \
windows/forms/fmcouponwidget.ui \
windows/forms/fmloading.ui \
windows/forms/fmmsgwnd.ui \
windows/forms/fmvipfund.ui \
windows/forms/fmviplogin.ui \
windows/forms/fmviporder.ui \
windows/forms/fmvippanel.ui
#include "dbop.h"
#include "../../fmp_epay/fmp_database.h"
#include "items/item.h"
#include <QSqlQuery>
#include <QSqlRecord>
using namespace FMItem;
DBOP::DBOP()
{
_db = new FMPDataBase("FreemudPOS.db", "fmp_order_manage");
}
DBOP *DBOP::Instance()
{
static DBOP dbOp;
return &dbOp;
}
void DBOP::InsertTablePay(const QString &transId, const QString &fmId, const QByteArray &reqData, const QByteArray &rspData)
{
InserTable(TABLE_PAY, transId, fmId, reqData, rspData);
}
void DBOP::InsertTableOrder(const QString &transId, const QString &fmId, const QByteArray &reqData, const QByteArray &rspData)
{
InserTable(TABLE_ORDER, transId, fmId, reqData, rspData);
}
void DBOP::InserTable(const QString &tableName, const QString &transId, const QString &fmId, const QByteArray &reqData, const QByteArray &rspData)
{
QVariantHash hash;
hash[PosProps.TransId] = transId;
hash[PosProps.Fm_id] = fmId;
hash["reqData"] = reqData;
hash["rspData"] = rspData;
Instance()->_db->insert(tableName, hash);
}
void DBOP::GetPaysByTransId(const QString &transId, QVector<QByteArray> &payDataVec)
{
}
bool DBOP::CreateTable(const QString &tableName)
{
QString tableOrderSql = "CREATE TABLE [Order]("
"[id] INTEGER PRIMARY KEY autoincrement, "
"[trans_id] VARCHAR(50), "
"[fm_id] VARCHAR(50), "
"[order_amount] INT DEFAULT 0, "
"[paid_amount] INT DEFAULT 0, "
"[undis_amount] INT DEFAULT 0, "
"[store_id] VARCHAR(50), "
"[pos_id] VARCHAR(50), "
"[operator_id] VARCHAR(50), "
"[business_date] VARCHAR(50), "
"[fm_open_id] VARCHAR(50), "
"[products] TEXT"
");";
QString tablePaySql = "CREATE TABLE [Pay]("
"[id] INTEGER PRIMARY KEY autoincrement, "
"[pay_id] VARCHAR(50), "
"[pay_str] VARCHAR(50), "
"[pay_amount] INT DEFAULT 0, "
"[dis_amount] INT DEFAULT 0, "
"[account] VARCHAR(50), "
"[trans_id] VARCHAR(50), "
"[payTransId] VARCHAR(50),"
"[orderId] INTEGER"
");";
QString sql;
if(tableName.compare("Order") == 0) {
sql = tableOrderSql;
} else if(tableName.compare("Pay") == 0) {
sql = tablePaySql;
}
bool isOk = _db->creat(sql);
qDebug() << "Create table: " << tableName << (isOk ? " Success." : " Failed.");
return isOk;
}
bool DBOP::ExistTable(const QString &tableName)
{
QStringList tables = _db->getDb().tables();
return tables.contains(tableName);
}
int DBOP::GetLastInsertId()
{
QSqlQuery query(Instance()->_db->getDb());
bool isOk = query.exec("select last_insert_rowid();");
int id = -1;
if(isOk && query.next()) {
id = query.record().value(0).toInt();
}
return id;
}
bool DBOP::Save(FMItem::Item *item)
{
QString tableName = item->ShortClassName();
bool isOk = false;
if(!Instance()->ExistTable(tableName)) {
if(!Instance()->CreateTable(tableName)) {
return false;
}
}
QVariantHash hash;
foreach (const QString &key, item->PropertyNames()) {
hash.insert(key, item->property(key.toUtf8().data()));
}
if(item->DBID() > 0) {
//! Update
QString condition = QString("'id'=='%1'").arg(item->DBID());
QSqlQuery query;
isOk = Instance()->_db->find(tableName, query, QStringList(), condition);
if(isOk && query.next()) {
isOk = Instance()->_db->update(tableName, hash, condition);
}
} else {
//! Insert
isOk = Instance()->_db->insert(tableName, hash);
if(isOk) {
item->setDBID(Instance()->GetLastInsertId());
}
}
return isOk;
}
#ifndef DBOP_H
#define DBOP_H
#include <QObject>
#include <QVector>
#include "global.h"
#define TABLE_PAY "tbl_pay"
#define TABLE_ORDER "tbl_order"
namespace FMItem {
class Item;
}
class FMPDataBase;
class DBOP
{
public:
static DBOP *Instance();
static bool Save(FMItem::Item *item);
static void InsertTablePay(const QString &transId, const QString &fmId, const QByteArray &reqData, const QByteArray &rspData);
static void InsertTableOrder(const QString &transId, const QString &fmId, const QByteArray &reqData, const QByteArray &rspData);
static void GetPaysByTransId(const QString &transId, QVector<QByteArray> &payDataVec);
private:
DBOP();
FMPDataBase *_db;
static void InserTable(const QString &tableName, const QString &transId, const QString &fmId, const QByteArray &reqData, const QByteArray &rspData);
bool CreateTable(const QString &tableName);
bool ExistTable(const QString &tableName);
int GetLastInsertId();
};
#endif // DBOP_H
#-------------------------------------------------
#
# Project created by QtCreator 2017-01-11T15:59:15
#
#-------------------------------------------------
include(fmvip.pri)
TEMPLATE = lib
QT += core gui network sql concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
DEFINES += TEST
SOURCES += \
fmp_vip.cpp \
fmp_vip_p.cpp \
fmp_vip_plugin.cpp \
fmp_ve_handlers.cpp
HEADERS +=\
fmp_vip.h \
fmp_vip_i.h \
fmp_vip_p.h \
fmp_vip_plugin_p.h \
fmp_ve_handlers.h
unix {
target.path = /usr/lib
INSTALLS += target
}
#Target name
VER = $$system($$PWD/../../fmprc.bat $$TARGET)
ORIGIN_TARGET = $$TARGET
TARGET = $${TARGET}_$${VER}
#Header path
INCLUDEPATH += $$PWD/../../include/ctk \
+= $$PWD/../../include/interface \
CONFIG(debug, debug|release) {
#Linking library
LIBS += -lCTKCored -lCTKPluginFrameworkd
#Destination path
DESTDIR = $$PWD/../../debug/plugins
} else {
LIBS += -lCTKCore -lCTKPluginFramework
DESTDIR = $$PWD/../../release/plugins
}
#
RESOURCES += \
$$PWD/../res/$${ORIGIN_TARGET}.qrc \
win32 {
RC_FILE += $$PWD/../res/$${ORIGIN_TARGET}.rc
system($$PWD/../../fmprc.bat $$PWD/version.h $$ORIGIN_TARGET)
}
else {
system($$PWD/../../fmprc.sh $$PWD/version.h $$ORIGIN_TARGET)
}
#ifndef FMTOOL_H
#define FMTOOL_H
#include <QJsonObject>
static QJsonValue SearchJsonValue(const QJsonObject &searchJson, const QString &searchKey)
{
if(searchJson.contains(searchKey)) {
return searchJson[searchKey];
} else {
foreach(QString key , searchJson.keys()) {
if(searchJson[key].isObject()) {
QJsonObject ob = searchJson[key].toObject();
QJsonValue value = SearchJsonValue(ob, searchKey);
if(!value.isNull()){
return value;
}
}
}
}
return QJsonValue();
}
#endif // FMTOOL_H
#-------------------------------------------------
#
# Project created by QtCreator 2017-01-11T15:59:15
#
#-------------------------------------------------
TEMPLATE = lib
QT += core gui network sql concurrent
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
DEFINES += TEST
SOURCES += \
$$PWD/backup/fmbackup.cpp \
$$PWD/backup/resend.cpp \
$$PWD/task/fmtask.cpp \
$$PWD/task/fmtasknownd.cpp \
$$PWD/task/session.cpp \
$$PWD/task/taskfactory.cpp \
$$PWD/task/taskfinal.cpp \
$$PWD/task/taskfund.cpp \
$$PWD/task/tasklogin.cpp \
$$PWD/task/taskothers.cpp \
$$PWD/task/taskpay.cpp \
$$PWD/windows/couponmodel.cpp \
$$PWD/windows/fmcouponwidget.cpp \
$$PWD/windows/fmloading.cpp \
$$PWD/windows/fmmsgwnd.cpp \
$$PWD/windows/fmvipfund.cpp \
$$PWD/windows/fmviplogin.cpp \
$$PWD/windows/fmviporder.cpp \
$$PWD/windows/fmvippanel.cpp \
$$PWD/windows/fmvipwnd.cpp \
$$PWD/fmnetwork.cpp \
$$PWD/fmvipdispatcher.cpp \
$$PWD/fmp_vip_server.cpp \
$$PWD/fmp_vip_settings.cpp \
$$PWD/task/coupon.cpp \
$$PWD/windows/itemdelegate.cpp \
$$PWD/database/dbop.cpp \
$$PWD/../../fmp_epay/fmp_database.cpp \
$$PWD/items/order.cpp \
$$PWD/items/pay.cpp \
$$PWD/items/product.cpp \
$$PWD/items/item.cpp
HEADERS +=\
$$PWD/backup/fmbackup.h \
$$PWD/backup/resend.h \
$$PWD/task/fmtask.h \
$$PWD/task/fmtasknownd.h \
$$PWD/task/session.h \
$$PWD/task/taskfactory.h \
$$PWD/task/taskfinal.h \
$$PWD/task/taskfund.h \
$$PWD/task/tasklogin.h \
$$PWD/task/taskothers.h \
$$PWD/task/taskpay.h \
$$PWD/windows/fmcouponwidget.h \
$$PWD/windows/fmloading.h \
$$PWD/windows/fmmsgwnd.h \
$$PWD/windows/fmvipfund.h \
$$PWD/windows/fmviplogin.h \
$$PWD/windows/fmviporder.h \
$$PWD/windows/fmvippanel.h \
$$PWD/windows/fmvipwnd.h \
$$PWD/fmnetwork.h \
$$PWD/fmvipdispatcher.h \
$$PWD/global.h \
$$PWD/fmp_vip_server.h \
$$PWD/fmp_vip_settings.h \
$$PWD/task/coupon.h \
$$PWD/windows/couponmodel.h \
$$PWD/windows/itemdelegate.h \
$$PWD/database/dbop.h \
$$PWD/../../fmp_epay/fmp_database.h \
$$PWD/items/order.h \
$$PWD/items/pay.h \
$$PWD/items/product.h \
$$PWD/fmtool.h \
$$PWD/items/item.h
unix {
target.path = /usr/lib
INSTALLS += target
}
#Header path
INCLUDEPATH += $$PWD/database \
$$PWD/task \
$$PWD/windows \
$$PWD/backup \
$$PWD/../../include/ctk \
$$PWD/../../include/interface \
$$PWD
#Library path
LIBS += -L$$PWD/../../lib
win32 {
LIBS += -lws2_32 -luser32
}
#
RESOURCES += \
$$PWD/res/img.qrc
FORMS += \
$$PWD/windows/forms/fmcouponwidget.ui \
$$PWD/windows/forms/fmloading.ui \
$$PWD/windows/forms/fmmsgwnd.ui \
$$PWD/windows/forms/fmvipfund.ui \
$$PWD/windows/forms/fmviplogin.ui \
$$PWD/windows/forms/fmviporder.ui \
$$PWD/windows/forms/fmvippanel.ui
...@@ -16,6 +16,12 @@ ...@@ -16,6 +16,12 @@
#undef StartService #undef StartService
#include <fmp_epay_i.h> #include <fmp_epay_i.h>
#include "items/order.h"
#include "items/pay.h"
#include "dbop.h"
using namespace FMItem;
FMVipDispatcher::FMVipDispatcher(QObject *parent) : FMVipDispatcher::FMVipDispatcher(QObject *parent) :
QObject(parent), QObject(parent),
...@@ -63,7 +69,6 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData) ...@@ -63,7 +69,6 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
FMPePayInterface *epay = _ctx->getService<FMPePayInterface>(ref); FMPePayInterface *epay = _ctx->getService<FMPePayInterface>(ref);
epay->DockPayRequest(reqData); epay->DockPayRequest(reqData);
epay->StartService(); epay->StartService();
rspData = epay->DockPayRespond();
} }
else { else {
rspData = QString::fromLocal8Bit("{\"msg:\":\"支付服务不可用\"}").toUtf8(); rspData = QString::fromLocal8Bit("{\"msg:\":\"支付服务不可用\"}").toUtf8();
......
#include "item.h"
#include "global.h"
#include <QMetaProperty>
#include <QJsonArray>
#include <QJsonDocument>
#include <QDebug>
using namespace FMItem;
Item::Item(QObject *parent)
: QObject(parent)
, _DBID(0)
{
}
Item::Item(const QJsonObject &json, QObject *parent)
: QObject(parent)
{
this->SetPropertiesByJson(json);
}
void Item::SetPropertiesByJson(const QJsonObject &json)
{
foreach(const QString &key, json.keys()) {
QJsonValue jsonValue = json[key];
QVariant value;
if(jsonValue.isArray()) {
// ItemList itemList;
// foreach (QJsonValue arrayJson, jsonValue.toArray()) {
// itemList.append(new Item(arrayJson.toObject(), this));
// }
//! TODO 实现转换array
// 将商品信息转成字符串存储
if(key.compare(PosProps.Products) == 0) {
value = QJsonDocument(jsonValue.toArray()).toJson(QJsonDocument::Compact);
}
} else if(jsonValue.isObject()) {
SetPropertiesByJson(jsonValue.toObject());
}else {
value = jsonValue.toVariant();
}
this->setProperty(key.toUtf8().data(), value);
}
}
void Item::SetPropertiesByJson(const QByteArray &json)
{
QJsonObject jsonObj = QJsonDocument::fromJson(json).object();
SetPropertiesByJson(jsonObj);
}
int Item::PropertyCount() const
{
return this->metaObject()->propertyCount();
}
QStringList Item::PropertyNames() const
{
QStringList propertyNames;
for(int i=0; i<this->PropertyCount(); i++) {
QMetaProperty metaProperty = this->metaObject()->property(i);
propertyNames << metaProperty.name();
}
return propertyNames;
}
int Item::DBID() const
{
return _DBID;
}
void Item::setDBID(int DBID)
{
_DBID = DBID;
}
QString Item::ShortClassName() const
{
QString className(this->metaObject()->className());
className = className.remove(0, className.lastIndexOf(":")+1);
return className;
}
#ifndef ITEM_H
#define ITEM_H
#include <QObject>
#include <QJsonObject>
namespace FMItem {
class Item;
typedef QList<Item *> ItemList;
class Item : public QObject
{
Q_OBJECT
Q_PROPERTY(int DBID READ DBID WRITE setDBID)
public:
explicit Item(QObject *parent = 0);
explicit Item(const QJsonObject &json, QObject *parent = 0);
void SetPropertiesByJson(const QJsonObject &json);
void SetPropertiesByJson(const QByteArray &json);
QString ShortClassName() const;
int PropertyCount() const;
QStringList PropertyNames() const;
int DBID() const;
void setDBID(int DBID);
private:
int _DBID;
};
}
#endif // ITEM_H
#include "order.h"
#include "global.h"
#include "fmtool.h"
#include <QDebug>
using namespace FMItem;
Order::Order(QObject *parent)
:Item(parent)
,_transId("")
, _fmId("")
,_orderAmount(0)
,_paidAmount(0)
,_undisAmount(0)
,_storeId("")
,_posId("")
,_operatorId("")
,_businessDate("")
,_fmOpenId("")
,_payList(ItemList())
,_productList(ProductList())
{
}
QString Order::transId() const
{
return _transId;
}
void Order::setTransId(const QString &transId)
{
_transId = transId;
}
QString Order::fmId() const
{
return _fmId;
}
void Order::setFmId(const QString &fmId)
{
_fmId = fmId;
}
int Order::orderAmount() const
{
return _orderAmount;
}
void Order::setOrderAmount(int orderAmount)
{
_orderAmount = orderAmount;
}
int Order::paidAmount() const
{
return _paidAmount;
}
void Order::setPaidAmount(int paidAmount)
{
_paidAmount = paidAmount;
}
int Order::undisAmount() const
{
return _undisAmount;
}
void Order::setUndisAmount(int undisAmount)
{
_undisAmount = undisAmount;
}
QString Order::storeId() const
{
return _storeId;
}
void Order::setStoreId(const QString &storeId)
{
_storeId = storeId;
}
QString Order::posId() const
{
return _posId;
}
void Order::setPosId(const QString &posId)
{
_posId = posId;
}
QString Order::operatorId() const
{
return _operatorId;
}
void Order::setOperatorId(const QString &operatorId)
{
_operatorId = operatorId;
}
QString Order::businessDate() const
{
return _businessDate;
}
void Order::setBusinessDate(const QString &businessDate)
{
_businessDate = businessDate;
}
QString Order::fmOpenId() const
{
return _fmOpenId;
}
void Order::setFmOpenId(const QString &fmOpenId)
{
_fmOpenId = fmOpenId;
}
ItemList Order::payList() const
{
return _payList;
}
void Order::setPayList(const ItemList &payList)
{
_payList = payList;
}
ProductList Order::productList() const
{
return _productList;
}
void Order::setProductList(const ProductList &productList)
{
_productList = productList;
}
QString Order::productText() const
{
return _productText;
}
void Order::setProductText(const QString &productText)
{
_productText = productText;
}
#ifndef ORDER_H
#define ORDER_H
#include "item.h"
#include <QList>
#include <QJsonObject>
namespace FMItem {
class Pay;
class Product;
typedef QList<Pay *> PayList;
typedef QList<Product *> ProductList;
class Order : public Item
{
Q_OBJECT
Q_PROPERTY(QString trans_id READ transId WRITE setTransId)
Q_PROPERTY(QString fm_id READ fmId WRITE setFmId)
Q_PROPERTY(int order_amount READ orderAmount WRITE setOrderAmount)
Q_PROPERTY(int paid_amount READ paidAmount WRITE setPaidAmount)
Q_PROPERTY(int undis_amount READ undisAmount WRITE setUndisAmount)
Q_PROPERTY(QString store_id READ storeId WRITE setStoreId)
Q_PROPERTY(QString pos_id READ posId WRITE setPosId)
Q_PROPERTY(QString operator_id READ operatorId WRITE setOperatorId)
Q_PROPERTY(QString business_date READ businessDate WRITE setBusinessDate)
Q_PROPERTY(QString fm_open_id READ fmOpenId WRITE setFmOpenId)
Q_PROPERTY(QString products READ productText WRITE setProductText)
// Q_PROPERTY(ItemList payList READ payList WRITE setPayList)
// Q_PROPERTY(ProductList productList READ productList WRITE setProductList)
public:
explicit Order(QObject *parent = 0);
QString transId() const;
void setTransId(const QString &transId);
QString fmId() const;
void setFmId(const QString &fmId);
int orderAmount() const;
void setOrderAmount(int orderAmount);
int paidAmount() const;
void setPaidAmount(int paidAmount);
int undisAmount() const;
void setUndisAmount(int undisAmount);
QString storeId() const;
void setStoreId(const QString &storeId);
QString posId() const;
void setPosId(const QString &posId);
QString operatorId() const;
void setOperatorId(const QString &operatorId);
QString businessDate() const;
void setBusinessDate(const QString &businessDate);
QString fmOpenId() const;
void setFmOpenId(const QString &fmOpenId);
ItemList payList() const;
void setPayList(const ItemList &payList);
ProductList productList() const;
void setProductList(const ProductList &productList);
QString productText() const;
void setProductText(const QString &productText);
private:
QString _transId;
QString _fmId;
int _orderAmount;
int _paidAmount;
int _undisAmount;
QString _storeId;
QString _posId;
QString _operatorId;
QString _businessDate;
QString _fmOpenId;
QString _productText;
ItemList _payList;
ProductList _productList;
};
}
#endif // ORDER_H
#include "pay.h"
using namespace FMItem;
Pay::Pay(QObject *parent)
: Item(parent)
,_payId("")
,_payStr("")
,_payAmount(0)
,_disAmount(0)
,_account("")
,_transId("")
,_payTransId("")
{
}
QString Pay::payId() const
{
return _payId;
}
void Pay::setPayId(const QString &payId)
{
_payId = payId;
}
QString Pay::payStr() const
{
return _payStr;
}
void Pay::setPayStr(const QString &payStr)
{
_payStr = payStr;
}
int Pay::payAmount() const
{
return _payAmount;
}
void Pay::setPayAmount(int payAmount)
{
_payAmount = payAmount;
}
int Pay::disAmount() const
{
return _disAmount;
}
void Pay::setDisAmount(int disAmount)
{
_disAmount = disAmount;
}
QString Pay::account() const
{
return _account;
}
void Pay::setAccount(const QString &account)
{
_account = account;
}
void Pay::setTransId(const QString &transId)
{
_transId = transId;
}
QString Pay::payTransId() const
{
return _payTransId;
}
void Pay::setPayTransId(const QString &payTransId)
{
_payTransId = payTransId;
}
int Pay::orderId() const
{
return _orderId;
}
void Pay::setOrderId(int orderId)
{
_orderId = orderId;
}
QString Pay::transId() const
{
return _transId;
}
#ifndef PAY_H
#define PAY_H
#include "item.h"
#include "global.h"
namespace FMItem {
class Pay : public Item
{
Q_OBJECT
Q_PROPERTY(QString pay_id READ payId WRITE setPayId)
Q_PROPERTY(QString pay_str READ payStr WRITE setPayStr)
Q_PROPERTY(int pay_amount READ payAmount WRITE setPayAmount)
Q_PROPERTY(int discount_amount READ disAmount WRITE setDisAmount)
Q_PROPERTY(QString account READ account WRITE setAccount)
Q_PROPERTY(QString trans_id READ transId WRITE setTransId)
Q_PROPERTY(QString payTransId READ payTransId WRITE setPayTransId)
Q_PROPERTY(int orderId READ orderId WRITE setOrderId)
public:
explicit Pay(QObject *parent = 0);
QString payId() const;
void setPayId(const QString &payId);
QString payStr() const;
void setPayStr(const QString &payStr);
int payAmount() const;
void setPayAmount(int payAmount);
int disAmount() const;
void setDisAmount(int disAmount);
QString account() const;
void setAccount(const QString &account);
QString transId() const;
void setTransId(const QString &transId);
QString payTransId() const;
void setPayTransId(const QString &payTransId);
int orderId() const;
void setOrderId(int orderId);
private:
QString _payId;
QString _payStr;
int _payAmount;
int _disAmount;
QString _account;
QString _transId;
QString _payTransId;
int _orderId;
};
}
#endif // PAY_H
#include "product.h"
using namespace FMItem;
Product::Product(QObject *parent)
:Item(parent)
, _quantity()
, _price(0)
, _name("")
{
}
int Product::quantity() const
{
return _quantity;
}
void Product::setQuantity(int quantity)
{
_quantity = quantity;
}
int Product::price() const
{
return _price;
}
void Product::setPrice(int price)
{
_price = price;
}
QString Product::name() const
{
return _name;
}
void Product::setName(const QString &name)
{
_name = name;
}
QString Product::id() const
{
return _id;
}
void Product::setId(const QString &id)
{
_id = id;
}
#ifndef PRODUCT_H
#define PRODUCT_H
#include "item.h"
namespace FMItem {
class Product : public Item
{
Q_OBJECT
Q_PROPERTY(QString id READ id WRITE setId)
Q_PROPERTY(int quantity READ quantity WRITE setQuantity)
Q_PROPERTY(int price READ price WRITE setPrice)
Q_PROPERTY(QString name READ name WRITE setName)
public:
explicit Product(QObject *parent = 0);
int quantity() const;
void setQuantity(int quantity);
int price() const;
void setPrice(int price);
QString name() const;
void setName(const QString &name);
QString id() const;
void setId(const QString &id);
private:
QString _id;
int _quantity;
int _price;
QString _name;
};
}
#endif // PRODUCT_H
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by fmproxy_service.rc
// ¶һĬֵ
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "fmp_logger_i.h" #include "fmp_logger_i.h"
#include "fmmsgwnd.h" #include "fmmsgwnd.h"
#include "fmp_vip_settings.h" #include "fmp_vip_settings.h"
#include "dbop.h"
#include <QDateTime> #include <QDateTime>
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonArray> #include <QJsonArray>
...@@ -119,6 +120,11 @@ void TaskFinal::packagePOSRsp() ...@@ -119,6 +120,11 @@ void TaskFinal::packagePOSRsp()
QString fm_id = getServerJsonValue(PosProps.Fm_id).toString(); QString fm_id = getServerJsonValue(PosProps.Fm_id).toString();
QString fm_transId = ""; QString fm_transId = "";
FMBackup::instance()->insertNewOrder(trans_id, fm_open_id, fm_id, fm_transId); FMBackup::instance()->insertNewOrder(trans_id, fm_open_id, fm_id, fm_transId);
QByteArray reqData = QJsonDocument(serverReqJsonObj).toJson(QJsonDocument::Compact);
QByteArray rspData = QJsonDocument(serverRspJsonObj).toJson(QJsonDocument::Compact);
DBOP::InsertTableOrder(trans_id, fm_id, reqData, rspData);
} }
} }
......
...@@ -97,6 +97,10 @@ void TaskLogin::onLogin() ...@@ -97,6 +97,10 @@ void TaskLogin::onLogin()
QString scoreStr = QString::number(score); QString scoreStr = QString::number(score);
bool canPay = (getServerJsonValue(PosProps.CanPay).toInt() == 1); bool canPay = (getServerJsonValue(PosProps.CanPay).toInt() == 1);
#ifdef TEST
canPay = true;
#endif
if(!canPay) { if(!canPay) {
if(getPosJsonValue(PosProps.Fm_cmd).toInt() != FM_Pay) { if(getPosJsonValue(PosProps.Fm_cmd).toInt() != FM_Pay) {
QString info = QString::fromLocal8Bit("账号: %1\n姓名: %2\n余额: %3\n积分: %4").arg(account, name, amountStr, scoreStr); QString info = QString::fromLocal8Bit("账号: %1\n姓名: %2\n余额: %3\n积分: %4").arg(account, name, amountStr, scoreStr);
......
...@@ -4,10 +4,15 @@ ...@@ -4,10 +4,15 @@
#include "fmp_logger_i.h" #include "fmp_logger_i.h"
#include "fmp_vip_settings.h" #include "fmp_vip_settings.h"
#include "fmnetwork.h" #include "fmnetwork.h"
#include "dbop.h"
#include "items/order.h"
#include "items/pay.h"
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonObject> #include <QJsonObject>
#include <QCryptographicHash> #include <QCryptographicHash>
using namespace FMItem;
TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent) TaskPay::TaskPay(QJsonObject &jsonObj, Session *session, QObject *parent)
:FMTask(jsonObj, FM_Pay, session, parent) :FMTask(jsonObj, FM_Pay, session, parent)
{ {
...@@ -142,12 +147,19 @@ void TaskPay::packageServerReq() ...@@ -142,12 +147,19 @@ void TaskPay::packageServerReq()
void TaskPay::packagePOSRsp() void TaskPay::packagePOSRsp()
{ {
posRspJsonObj[PosProps.StatusCode] = getServerJsonValue(PosProps.StatusCode); int status = getServerJsonValue(PosProps.StatusCode).toInt();
QString transId = getPosJsonValue(PosProps.TransId).toString();
QString fmId = getServerJsonValue(PosProps.Fm_id).toString();
QString fm_open_id = session()->data(PosProps.Fm_open_id).toString();
bool isOk = (status == FM_API_SUCCESS);
posRspJsonObj[PosProps.StatusCode] = status;
posRspJsonObj[PosProps.Msg] = getServerJsonValue(PosProps.Msg); posRspJsonObj[PosProps.Msg] = getServerJsonValue(PosProps.Msg);
posRspJsonObj[PosProps.Prompt] = 0; posRspJsonObj[PosProps.Prompt] = 0;
posRspJsonObj[PosProps.Settlement] = 1; posRspJsonObj[PosProps.Settlement] = 1;
posRspJsonObj[PosProps.Fm_open_id] = session()->data(PosProps.Fm_open_id).toString(); posRspJsonObj[PosProps.Fm_open_id] = fm_open_id;
posRspJsonObj[PosProps.Fm_id] = getServerJsonValue(PosProps.Fm_id).toString(); posRspJsonObj[PosProps.Fm_id] = fmId;
QJsonArray servPayArray = getServerJsonValue("payList").toArray(); QJsonArray servPayArray = getServerJsonValue("payList").toArray();
//支付方式描述 //支付方式描述
...@@ -158,22 +170,43 @@ void TaskPay::packagePOSRsp() ...@@ -158,22 +170,43 @@ void TaskPay::packagePOSRsp()
description["20004"] = QString::fromLocal8Bit("商品券支付"); description["20004"] = QString::fromLocal8Bit("商品券支付");
description["20005"] = QString::fromLocal8Bit("现金支付"); description["20005"] = QString::fromLocal8Bit("现金支付");
Order *order = new Order(this);
if(isOk) {
order->SetPropertiesByJson(posReqJsonObj);
order->SetPropertiesByJson(posRspJsonObj);
isOk = DBOP::Save(order);
}
//计算总支付额 //计算总支付额
QJsonArray pay_ids; QJsonArray pay_ids;
int totalPaid = 0; int totalPaid = 0;
for(int i = 0; i < servPayArray.size(); i++) for(int i = 0; i < servPayArray.size(); i++)
{ {
QJsonObject pay_id; QJsonObject pay_id;
int amount = servPayArray[i].toObject()[ServerProps(PosProps.Pay_amount)].toInt();
pay_id[PosProps.Pay_id] = servPayArray[i].toObject()[ServerProps(PosProps.Pay_id)].toString(); pay_id[PosProps.Pay_id] = servPayArray[i].toObject()[ServerProps(PosProps.Pay_id)].toString();
pay_id[PosProps.Pay_str] = description[servPayArray[i].toObject()["typeModeFlag"].toString()]; pay_id[PosProps.Pay_str] = description[servPayArray[i].toObject()["typeModeFlag"].toString()];
pay_id[PosProps.Pay_amount] = servPayArray[i].toObject()[ServerProps(PosProps.Pay_amount)].toInt(); pay_id[PosProps.Pay_amount] = amount;
pay_id[PosProps.Coupon_code] = servPayArray[i].toObject()[ServerProps(PosProps.Coupon_code)].toString(); pay_id[PosProps.Coupon_code] = servPayArray[i].toObject()[ServerProps(PosProps.Coupon_code)].toString();
pay_ids.push_back(pay_id); pay_ids.push_back(pay_id);
totalPaid += pay_id[PosProps.Pay_amount].toInt(); totalPaid += pay_id[PosProps.Pay_amount].toInt();
if(isOk && amount!=0) {
Pay *pay = new Pay(this);
pay->SetPropertiesByJson(pay_id);
pay->setTransId(transId);
pay->setOrderId(order->DBID());
pay->setAccount(fm_open_id);
pay->setPayTransId(fmId);
DBOP::Save(pay);
delete pay;
}
} }
posRspJsonObj[PosProps.Paid_total_amount] = totalPaid; posRspJsonObj[PosProps.Paid_total_amount] = totalPaid;
posRspJsonObj[PosProps.Pay_ids] = pay_ids; posRspJsonObj[PosProps.Pay_ids] = pay_ids;
delete order;
} }
void TaskPay::onPay() void TaskPay::onPay()
......
This diff is collapsed. Click to expand it.
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