Commit b72a014e by ss.dai

提交海信测试

parent a088791e
......@@ -4,6 +4,14 @@
#include <QVariant>
#include <QDebug>
#include <QSettings>
#include <windows.h>
#include <QDir>
#include <QFile>
#include <QCoreApplication>
#include <QLibrary>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
FmPlugin &FmPlugin::GetInstance()
{
......@@ -40,50 +48,20 @@ bool FmPlugin::ConnectDb(const QString &host, const QString &username, const QSt
bool FmPlugin::GetStoreInfo(QString &storeId, QString &posId, QString &cashierId, QDateTime &dateTime, QString &error)
{
// TODO(用于鲜丰演示)
QSettings set("tmp.ini", QSettings::IniFormat);
storeId = set.value("storeId").toString();
posId = QString("001");
cashierId = QString("001");
return true;
QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\Hisensoft Co.Ltd\\FoodPos", QSettings::NativeFormat);
if(!m_db.open())
{
error = m_db.lastError().text();
return false;
}
storeId = reg.value("OrgCode").toString();
QSqlQuery query = QSqlQuery(m_db);
// 获取门店号
QString queryStoreId("select sys_var_value from sys_t_system where sys_var_id='g_branch_no';");
query.prepare(queryStoreId);
if (!query.exec())
{
error = query.lastError().text();
m_db.close();
return false;
}
query.next();
storeId = query.value(0).toString();
m_storeId = storeId;
// 获取营业日
QString queryDateTime("select sys_var_value from sys_t_system where sys_var_id='dBusiness';");
query.prepare(queryDateTime);
if (!query.exec())
posId = "1";
cashierId = "1";
if(storeId.isEmpty())
{
error = query.lastError().text();
m_db.close();
return false;
}
query.next();
dateTime = query.value(0).toDateTime();
posId="1";
cashierId="1";
error = QString("success");
m_db.close();
return true;
}
......@@ -127,50 +105,52 @@ bool FmPlugin::GetOnDutyCashiers(QList<CashierObject> &cashiersList, QString &er
return true;
}
bool FmPlugin::DoOrderEntry(const OrderObject *orderObject, const QString &cashierId, const QString &cashierName, const QString &shiftId, const QString &shiftName, QString &error)
bool FmPlugin::DoOrderEntry(const OrderObject *orderObject, QString &error)
{
// TODO(用于鲜丰演示)
QString dirPath = QString("%1/orders").arg(QCoreApplication::applicationDirPath());
QDir dir;
dir.mkdir(dirPath);
QFile file(QString("%1/%2").arg(dirPath, orderObject->order_id));
if(file.exists())
{
return true;
}
if(f_UFMSaveSales==NULL)
{
QString appDir;
QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\Hisensoft Co.Ltd\\FoodPos", QSettings::NativeFormat);
appDir = reg.value("AppDir").toString();
m_orderObject = orderObject;
if(!m_db.open())
m_lib.setFileName(QString("%1/MHiFMSaveSales.dll").arg(appDir));
if(m_lib.load())
{
error = m_db.lastError().text();
return false;
}
// 先插入顾客信息不管成功与否不影响后续操作
int custid = -1;
_InsertInto_p_t_fmwm_custinfo(custid);
// 开启事务
if(!m_db.transaction())
f_UFMSaveSales = (UFMSaveSales)m_lib.resolve("UFMSaveSales");
if(f_UFMSaveSales!=NULL)
{
error = m_db.lastError().text();
m_db.close();
return false;
error = QString("load UFMSaveSales failed");
}
// 插入三张临时表后执行存储过程有一个失败则回滚
if(_InsertInto_d_t_food_fmbill0(cashierId, cashierName, shiftId, shiftName, custid))
{
if(_InsertInto_d_t_food_fmbills0())
}else
{
if(_InsertInto_d_t_bill_fmpay0())
qDebug() << m_lib.errorString();
error = QString("load dll failed[%1]").arg(appDir + "/MHiFMSaveSales.dll");
}
}
if(f_UFMSaveSales!=NULL)
{
if(_Exec_pr_fmwm())
char tmp[100] = {0};
if(1==f_UFMSaveSales(_GetOrderStr(orderObject).toLocal8Bit().data(), tmp))
{
// 都成功则提交
m_db.commit();
error = QString("success");
m_db.close();
file.open(QIODevice::WriteOnly);
file.close();
return true;
}else
{
QJsonObject obj = QJsonDocument::fromJson(QString::fromLocal8Bit(tmp).toUtf8()).object();
error = obj["Msg"].toString();
}
}
}
}
// 回滚
error = m_lastError;
m_db.rollback();
m_db.close();
qDebug() << error;
return false;
}
......@@ -358,3 +338,55 @@ QString FmPlugin::_Penny2Dollar(int penny)
double dollar = (double)penny/100;
return QString::number(dollar,'f',2);
}
QString FmPlugin::_GetOrderStr( const OrderObject *orderObject)
{
QJsonObject rObj;
float YsTotal = _Penny2Dollar(orderObject->total_fee-orderObject->send_fee-orderObject->service_fee-orderObject->dis_shop_fee).toFloat();
rObj.insert("BillNo", orderObject->order_id);
rObj.insert("XsDate", QDateTime::fromTime_t(orderObject->create_time).toString("yyyy-MM-dd hh:mm:ss"));
rObj.insert("OprtID", 1);
rObj.insert("OprtCode", "001");
rObj.insert("YsTotal", YsTotal);
float sca = (orderObject->total_fee-orderObject->send_fee-orderObject->service_fee-orderObject->dis_shop_fee)/orderObject->total_fee;
float SsTotal =0;
QJsonArray products;
for(int i=0; i < orderObject->proList.count(); i++)
{
QJsonObject tObj;
tObj.insert("LnNo", i+1);
tObj.insert("PluCode", orderObject->proList.at(i)->pid);
tObj.insert("PluName", orderObject->proList.at(i)->name);
tObj.insert("Price", _Penny2Dollar(orderObject->proList.at(i)->price).toFloat());
tObj.insert("XsCount", orderObject->proList.at(i)->productAmount);
if((i+1) == orderObject->proList.count())
{
tObj.insert("YsTotal", YsTotal-SsTotal);
}else
{
float Ys = _Penny2Dollar(orderObject->proList.at(i)->price*orderObject->proList.at(i)->productAmount).toFloat()*sca;
tObj.insert("YsTotal", Ys);
SsTotal += Ys;
}
products.insert(i, tObj);
}
rObj.insert("PluDetails", products);
QJsonArray payDetails;
QJsonObject tObj;
tObj.insert("SerialNo", 1);
tObj.insert("ZfCode", "001");
tObj.insert("ZfName", "非码外卖");
tObj.insert("ZfTotal", YsTotal);
tObj.insert("TradeNo", "");
payDetails.insert(0, tObj);
rObj.insert("PayDetails", payDetails);
qDebug() << rObj;
QJsonDocument doc(rObj);
return QString(doc.toJson(QJsonDocument::Compact));
}
......@@ -7,6 +7,7 @@
#include "Model/stockObject.h"
#include <QtSql/QSqlDatabase>
#include <QDateTime>
#include <QLibrary>
class PluginWorker;
......@@ -36,8 +37,7 @@ public:
* 参数:[1]订单对象[2]错误信息
* 返回:是否成功
* */
bool DoOrderEntry(OrderObject const *orderObject, const QString& cashierId, const QString& cashierName,
const QString& shiftId, const QString& shiftName, QString& error);
bool DoOrderEntry(OrderObject const *orderObject, QString& error);
/* 功能:获取库存信息
* 参数:[1]_out库存信息
* 返回:是否成功
......@@ -45,7 +45,7 @@ public:
bool GetStockInfo(QList<StockObject>& stockList, QString& error);
private:
FmPlugin(){}
FmPlugin():f_UFMSaveSales(NULL){}
FmPlugin(FmPlugin const&);
FmPlugin& operator=(FmPlugin const&);
......@@ -89,6 +89,13 @@ private:
* 返回:元
* */
QString _Penny2Dollar(int penny);
QString _GetOrderStr(const OrderObject *);
QLibrary m_lib;
typedef int (*UFMSaveSales)(char* , char*);
UFMSaveSales f_UFMSaveSales;
};
#endif // FMPLUGIN_H
......@@ -13,6 +13,8 @@ TEMPLATE = lib
DEFINES += FMPLUGIN_LIBRARY
DESTDIR = ../HaiDing
INCLUDEPATH += ../fmTakeaway
SOURCES += \
......
......@@ -26,3 +26,6 @@ unix {
}
LIBS += -lWinspool
DESTDIR = ../HaiDing
......@@ -51,6 +51,12 @@ bool FlowControl::_Login()
QJsonObject sendJson;
QJsonObject recvJson;
if(!_GetStoreInfo())
{
QLOG_INFO() << QString("%1 msec after login...").arg(VALUE_RELOGINTIME);
QTimer::singleShot(VALUE_RELOGINTIME, this, &FlowControl::_Login);
return false;
}
sendJson = DataManger::GetInstance().GetLoginData(m_storeId, SERVER_PASSWORD, m_posId, m_cashierId);
emit showAlert(AlertForm::LOADING, "正在登录......");
......@@ -160,6 +166,25 @@ bool FlowControl::_PullOrder()
}
}
if( orderObject->status != 1 &&
orderObject->status != 3 &&
orderObject->status != -1 &&
orderObject->status != 20 &&
orderObject->status != 30 &&
orderObject->status != 40 &&
orderObject->status != 100)
{
QLOG_INFO() << QString("[---order entry begin---]");
// 写入销售单
if(!FmPlugin::GetInstance().DoOrderEntry(orderObject, error))
{
QLOG_ERROR() << QString("order entry failed,[%1]").arg(error);
}else
{
QLOG_INFO() << QString("order entry success.");
}
}
m_timestamp = orderObject->timestamp;
}
syncTime = recvJson[JSON_SYNCTIME].toInt()*1000;
......@@ -243,35 +268,11 @@ bool FlowControl::_ConfirmOrder(const QString &orderId, const DeliverObject &del
{
OrderObject *orderObject = m_ordersMap.value(orderId);
emit showAlert(AlertForm::LOADING, "正在录入天天饮食......");
QLOG_INFO() << QString("[---order entry begin---]");
// 写入销售单
// TODO(用于鲜丰演示)
//QString orderEntryError("[此单录入天天饮食成功]");
QString orderEntryError("");
if(!FmPlugin::GetInstance().DoOrderEntry(orderObject, m_cashierObject.id, m_cashierObject.name,
m_cashierObject.shiftId, m_cashierObject.shiftName, error))
{
QString dirPath = QString("%1/orders").arg(QApplication::applicationDirPath());
QDir dir;
dir.mkdir(dirPath);
QFile file(QString("%1/%2").arg(dirPath, orderObject->order_id));
if(!file.exists())
{
file.open(QFile::WriteOnly);
file.close();
}
orderEntryError = QString("<font color=\"#FF0000\">[此单录入天天饮食失败,请务必及时在订单详情页补录]</font>");
QLOG_ERROR() << QString("order entry failed,[%1]").arg(error);
}else
{
QLOG_INFO() << QString("order entry success.");
}
QString remark(orderObject->remark), deliveryTime;
remark = remark.isEmpty()? "" : QString("[备注: %1]").arg(remark);
deliveryTime = QString("[期望送达时间: %1]").arg(orderObject->delivery_time==0? "立即送出" : QDateTime::fromTime_t(orderObject->delivery_time).toString("yyyy-MM-dd hh:mm:ss"));
emit showAlert(AlertForm::SUCCESS, QString("接单成功!%1<br/>%2<br/>%3").arg(remark).arg(deliveryTime).arg(orderEntryError));
emit showAlert(AlertForm::SUCCESS, QString("接单成功!%1<br/>%2").arg(remark).arg(deliveryTime));
// 通知主界面移动订单
int oldStatus = orderObject->status;
......@@ -550,10 +551,9 @@ void FlowControl::onFlowStart()
m_procOrderSocket = new BillSocket(this);
m_syncStockSocket = new BillSocket(this);
if(_GetStoreInfo())
{
_Login();
}
return;
}
......@@ -633,32 +633,31 @@ void FlowControl::onUpdateCashier(const CashierObject &cashier)
void FlowControl::onGetOrderDetails(const QString &orderId)
{
if(_CheckCashiers())
{
// if(_CheckCashiers())
// {
emit hideAlert();
emit showOrderDetails(m_ordersMap.value(orderId));
}
// }
}
void FlowControl::onReEntryOrder(const QString &orderId)
{
emit showAlert(AlertForm::LOADING, "正在补录到天天饮食......");
emit showAlert(AlertForm::LOADING, "正在补录......");
QLOG_INFO() << QString("[---order reEntry begin---]");
// 写入销售单
OrderObject *orderObject = m_ordersMap.value(orderId);
QString error;
if(!FmPlugin::GetInstance().DoOrderEntry(orderObject, m_cashierObject.id, m_cashierObject.name,
m_cashierObject.shiftId, m_cashierObject.shiftName, error))
if(!FmPlugin::GetInstance().DoOrderEntry(orderObject, error))
{
QLOG_ERROR() << QString("order reEntry failed,[%1]").arg(error);
emit showAlert(AlertForm::ERROR, "<font color=\"#FF0000\">补录天天饮食失败,请联系管理员或者进群咨询(205821431)</font>");
emit showAlert(AlertForm::ERROR, "<font color=\"#FF0000\">补录失败</font>");
}else
{
QFile file(QString("%1/orders/%2").arg(QApplication::applicationDirPath(), orderObject->order_id));
file.remove();
QLOG_INFO() << QString("order reEentry success.");
emit showAlert(AlertForm::SUCCESS, "补录天天饮食成功");
emit showAlert(AlertForm::SUCCESS, "补录成功");
}
}
......
......@@ -19,6 +19,26 @@ void OrderObject::FromJson(const QJsonObject &json)
return;
}
int OrderObject::getdis_shop_fee() const
{
return dis_shop_fee;
}
void OrderObject::setdis_shop_fee(const int &v)
{
dis_shop_fee = v;
}
int OrderObject::getservice_fee() const
{
return service_fee;
}
void OrderObject::setservice_fee(const int &v)
{
service_fee = v;
}
int OrderObject::getstatus() const
{
return status;
......
......@@ -52,6 +52,8 @@ public:
Q_PROPERTY (int delivery_status READ getdelivery_status WRITE setdelivery_status)
Q_PROPERTY (QString fm_id READ getfm_id WRITE setfm_id)
Q_PROPERTY (QStringList records READ getrecords WRITE setrecords)
Q_PROPERTY (int dis_shop_fee READ getdis_shop_fee WRITE setdis_shop_fee)
Q_PROPERTY (int service_fee READ getservice_fee WRITE setservice_fee)
QString address; //地址
QString channel; //渠道
......@@ -90,7 +92,15 @@ public:
int user_fee; //应付金额
QStringList records; //订单操作记录
int dis_shop_fee; //商户承担的优惠金额
int service_fee; //外卖平台服务费
protected:
int getdis_shop_fee() const;
void setdis_shop_fee(const int& v);
int getservice_fee() const;
void setservice_fee(const int& v);
int getstatus() const ;
void setstatus(const int& v);
QString getChannel() const ;
......
......@@ -73,14 +73,14 @@ void DbsetForm::on_dbsetBtnOk_clicked()
{
ui->dbsetLabError->hide();
if(ui->dbsetEdt0->text().isEmpty() ||
ui->dbsetEdt1->text().isEmpty() ||
ui->dbsetEdt3->text().isEmpty())
{
ui->dbsetLabError->setText(tr("请输入正确信息!"));
ui->dbsetLabError->show();
return;
}
// if(ui->dbsetEdt0->text().isEmpty() ||
// ui->dbsetEdt1->text().isEmpty() ||
// ui->dbsetEdt3->text().isEmpty())
// {
// ui->dbsetLabError->setText(tr("请输入正确信息!"));
// ui->dbsetLabError->show();
// return;
// }
ui->dbsetPgb0->show();
_SetSubElementEnable(false);
......
......@@ -80,9 +80,12 @@ FORMS += mainForm.ui \
RC_FILE += fmTakeaway.rc
CONFIG(release, debug|release) {
LIBS += -L../fmPlugin/release -lfmPlugin
LIBS += -L../fmPrinter/release -lfmPrinter
LIBS += -L../HaiDing -lfmPlugin
LIBS += -L../HaiDing -lfmPrinter
} else {
LIBS += -L../fmPlugin/debug -lfmPlugin
LIBS += -L../fmPrinter/debug -lfmPrinter
}
DESTDIR = ../HaiDing
......@@ -77,19 +77,6 @@ int main(int argc, char *argv[])
FlowControl::GetInstance().moveToThread(&workThread);
workThread.start();
// 将退款控制器移到工作线程
// TODO(用于鲜丰演示)
// RefundControl::GetInstance().SetListenPort(ConfigManger::GetInstance().GetListenPort());
// RefundControl::GetInstance().moveToThread(&refundThread);
// QObject::connect(&refundThread, &QThread::started, &RefundControl::GetInstance(), &RefundControl::run);
// refundThread.start();
DbsetForm d;
if(QDialog::Rejected == d.exec())
{
QLOG_INFO() << QString("-------- fmTakeaway exit --------");
return -1;
}
FloatForm f;
MainForm w;
QObject::connect(&w, &MainForm::showFloatForm, &f, &FloatForm::onShow);
......
......@@ -102,7 +102,7 @@ void MainForm::_Init()
// 初始化文字
ui->mainLabStoreid->setText(UI_STOREID);
ui->mainLabVersion->setText(APP_VERSION);
ui->mainLabVersion->setText("1.170301.01");
ui->mainLabCashier->setText(UI_CASHIER);
// 初始化表
......@@ -145,6 +145,9 @@ void MainForm::_Init()
// TODO(用于鲜丰演示)
ui->mainSlabLogo0->hide();
ui->mainSlabLogo1->hide();
ui->mainBtnCashier->hide();
ui->mainLabCashier->setText("001");
}
void MainForm::onSetCurrentTime()
......
run/skin/float_normal.png

10.6 KB | W: | H:

run/skin/float_normal.png

8.17 KB | W: | H:

run/skin/float_normal.png
run/skin/float_normal.png
run/skin/float_normal.png
run/skin/float_normal.png
  • 2-up
  • Swipe
  • Onion skin
run/skin/float_remind.png

11.6 KB | W: | H:

run/skin/float_remind.png

9.32 KB | W: | H:

run/skin/float_remind.png
run/skin/float_remind.png
run/skin/float_remind.png
run/skin/float_remind.png
  • 2-up
  • Swipe
  • Onion skin
File added
rcc -binary deaufult.qrc -o ..\..\..\build\takeaway-Debug\fmTakeaway\debug\skin\deaufult.rcc
rcc -binary deaufult.qrc -o deaufult.rcc
pause
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