Commit 7d64e3ff by ss.dai

基本完成(未加托盘 未加订单搜索)

parent b633db9d
......@@ -44,7 +44,7 @@ bool FmPlugin::GetStoreInfo(QString &storeId, QString &posId, QString &cashierId
QSqlQuery query = QSqlQuery(m_db);
// 获取门店号
QString queryStoreId("select sys_var_value from sys_t_system where sys_var_id='g_branch_no'");
QString queryStoreId("select sys_var_value from sys_t_system where sys_var_id='g_branch_no';");
query.prepare(queryStoreId);
if (!query.exec())
{
......@@ -56,7 +56,7 @@ bool FmPlugin::GetStoreInfo(QString &storeId, QString &posId, QString &cashierId
storeId = query.value(0).toString();
m_storeId = storeId;
// 获取营业日
QString queryDateTime("select sys_var_value from sys_t_system where sys_var_id='dBusiness'");
QString queryDateTime("select sys_var_value from sys_t_system where sys_var_id='dBusiness';");
query.prepare(queryDateTime);
if (!query.exec())
{
......@@ -84,24 +84,22 @@ bool FmPlugin::GetOnDutyCashiers(QList<CashierObject> &cashiersList, QString &er
}
// 获取在班收银员信息
QSqlQuery query = QSqlQuery(m_db);
QString queryCashiers("select * from v_km_cashshift");
QString queryCashiers("select * from v_km_cashshift;");
query.prepare(queryCashiers);
if (!query.exec())
{
error = query.lastError().text();
m_db.close();
return false;
}else
}
while(query.next())
{
while(query.next())
{
CashierObject cashierObj;
cashierObj.id = query.value(0).toString();
cashierObj.name = query.value(1).toString();
cashierObj.shiftId = query.value(2).toString();
cashierObj.shiftName = query.value(3).toString();
cashiersList.append(cashierObj);
}
CashierObject cashierObj;
cashierObj.id = query.value(0).toString();
cashierObj.name = query.value(1).toString();
cashierObj.shiftId = query.value(2).toString();
cashierObj.shiftName = query.value(3).toString();
cashiersList.append(cashierObj);
}
error = QString("success");
......@@ -117,6 +115,9 @@ bool FmPlugin::DoOrderEntry(const OrderObject *orderObject, const QString &cashi
error = m_db.lastError().text();
return false;
}
// 先插入顾客信息不管成功与否不影响后续操作
int custid = -1;
_InsertInto_p_t_fmwm_custinfo(custid);
// 开启事务
if(!m_db.transaction())
{
......@@ -125,51 +126,88 @@ bool FmPlugin::DoOrderEntry(const OrderObject *orderObject, const QString &cashi
return false;
}
// 插入三张临时表后执行存储过程有一个失败则回滚
if(!_InsertInto_d_t_food_fmbill0(cashierId, cashierName, shiftId, shiftName))
if(_InsertInto_d_t_food_fmbill0(cashierId, cashierName, shiftId, shiftName, custid))
{
error = m_db.lastError().text();
m_db.rollback();
m_db.close();
return false;
if(_InsertInto_d_t_food_fmbills0())
{
if(_InsertInto_d_t_bill_fmpay0())
{
if(_Exec_pr_fmwm())
{
// 都成功则提交
m_db.commit();
error = QString("success");
m_db.close();
return true;
}
}
}
}
if(!_InsertInto_d_t_food_fmbills0())
// 回滚
error = m_lastError;
m_db.rollback();
m_db.close();
return false;
}
bool FmPlugin::GetStockInfo(QList<StockObject> &stockList, QString &error)
{
if(!m_db.open())
{
error = m_db.lastError().text();
m_db.rollback();
m_db.close();
return false;
}
if(!_InsertInto_d_t_bill_fmpay0())
StockObject stock;
QSqlQuery query = QSqlQuery(m_db);
QString queryStock("select * from v_km_clearfood;");
query.prepare(queryStock);
if (!query.exec())
{
error = m_db.lastError().text();
m_db.rollback();
error = query.lastError().text();
m_db.close();
return false;
}
if(!_Exec_pr_fmwm())
while(query.next())
{
error = m_db.lastError().text();
m_db.rollback();
m_db.close();
return false;
stock.id = query.value(0).toString();
stock.num = query.value(2).toInt();
stockList.append(stock);
}
// 都成功则提交
m_db.commit();
error = QString("success");
m_db.close();
return true;
}
bool FmPlugin::_InsertInto_d_t_food_fmbill0(const QString& cashierId, const QString& cashierName, const QString& shiftId, const QString& shiftName)
bool FmPlugin::_InsertInto_p_t_fmwm_custinfo(int &custid)
{
QSqlQuery query = QSqlQuery(m_db);
// 插入顾客信息表
QString queryInsert("insert into p_t_fmwm_custinfo(cphone, ccust_n, ssex, saddr) \
values(?,?,?,?) select @@identity;");
query.prepare(queryInsert);
query.bindValue(0, m_orderObject->phone);
query.bindValue(1, m_orderObject->customer);
query.bindValue(2, "");
query.bindValue(3, m_orderObject->address);
if(!query.exec())
{
return false;
}
query.next();
custid = query.value(0).toInt();
return true;
}
bool FmPlugin::_InsertInto_d_t_food_fmbill0(const QString& cashierId, const QString& cashierName, const QString& shiftId, const QString& shiftName, int custid)
{
QSqlQuery query = QSqlQuery(m_db);
// 查询营业日
QDateTime dbussiness;
QString queryDateTime("select sys_var_value from sys_t_system where sys_var_id='dBusiness'");
QString queryDateTime("select sys_var_value from sys_t_system where sys_var_id='dBusiness';");
query.prepare(queryDateTime);
if (!query.exec())
{
m_lastError = query.lastError().text();
return false;
}
query.next();
......@@ -179,8 +217,8 @@ bool FmPlugin::_InsertInto_d_t_food_fmbill0(const QString& cashierId, const QStr
QString queryInsert("insert into d_t_food_fmbill0(cbill_c,cbranch_c,dBusiness,"
"ccashier_c, ccashier_n, cshift_c, cshift_n,"
"iguestnum,dtbilltime,dtsettletime,noughtamt,npayamt,"
"ndisamt,sbilltype,fmwmbillid,sprovider,nfreight)"
"values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
"ndisamt,sbilltype,fmwmbillid,sprovider,nfreight,icustid)"
"values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);");
query.prepare(queryInsert);
query.bindValue(0, m_orderObject->order_id);
query.bindValue(1, m_storeId);
......@@ -199,8 +237,10 @@ bool FmPlugin::_InsertInto_d_t_food_fmbill0(const QString& cashierId, const QStr
query.bindValue(14, m_orderObject->order_id);
query.bindValue(15, m_orderObject->channelName);
query.bindValue(16, m_orderObject->pay_type.compare("在线支付") ? "0" : _Penny2Dollar(m_orderObject->send_fee));
query.bindValue(17, custid);
if(!query.exec())
{
m_lastError = query.lastError().text();
return false;
}
return true;
......@@ -225,6 +265,7 @@ bool FmPlugin::_InsertInto_d_t_food_fmbills0()
query.bindValue(6, _Penny2Dollar(m_orderObject->proList.at(i)->price*m_orderObject->proList.at(i)->productAmount));
if(!query.exec())
{
m_lastError = query.lastError().text();
return false;
}
}
......@@ -263,6 +304,7 @@ bool FmPlugin::_InsertInto_d_t_bill_fmpay0()
query.bindValue(4, _Penny2Dollar(m_orderObject->shop_fee));
if(!query.exec())
{
m_lastError = query.lastError().text();
return false;
}
return true;
......@@ -276,10 +318,12 @@ bool FmPlugin::_Exec_pr_fmwm()
query.bindValue(1, 0, QSql::Out);
if(!query.exec())
{
m_lastError = query.lastError().text();
return false;
}
if(query.boundValue(1).toInt() != 1)
{
m_lastError = QString("pr_fmwm result[%1]").arg(query.boundValue(1).toInt());
return false;
}
return true;
......
......@@ -4,6 +4,7 @@
#include "fmplugin_global.h"
#include "Model/orderObject.h"
#include "Model/cashierObject.h"
#include "Model/stockObject.h"
#include <QtSql/QSqlDatabase>
#include <QDateTime>
......@@ -37,31 +38,43 @@ public:
* */
bool DoOrderEntry(OrderObject const *orderObject, const QString& cashierId, const QString& cashierName,
const QString& shiftId, const QString& shiftName, QString& error);
/* 功能:获取库存信息
* 参数:[1]_out库存信息
* 返回:是否成功
* */
bool GetStockInfo(QList<StockObject>& stockList, QString& error);
private:
FmPlugin(){}
FmPlugin(FmPlugin const&);
FmPlugin& operator=(FmPlugin const&);
// 数据库句柄
// 数据库对象
QSqlDatabase m_db;
// 门店号
QString m_storeId;
// 订单对象
const OrderObject *m_orderObject;
// 错误信息
QString m_lastError;
/* 功能:写入表d_t_food_fmbill0
* 参数:[1]收银员ID[2]收银员姓名[3]班次ID[4]班次名称
/* 功能:写入表p_t_fmwm_custinfo(顾客信息表)
* 参数:[1]_out信息ID
* 返回:true成功false失败
* */
bool _InsertInto_p_t_fmwm_custinfo(int &custid);
/* 功能:写入表d_t_food_fmbill0(销售主表)
* 参数:[1]收银员ID[2]收银员姓名[3]班次ID[4]班次名称[5]顾客信息ID
* 返回:true成功false失败
* */
bool _InsertInto_d_t_food_fmbill0(const QString& cashierId, const QString& cashierName,
const QString& shiftId, const QString& shiftName);
/* 功能:写入表d_t_food_fmbills0
const QString& shiftId, const QString& shiftName, int custid);
/* 功能:写入表d_t_food_fmbills0(销售明细表)
* 参数:NULL
* 返回:true成功false失败
* */
bool _InsertInto_d_t_food_fmbills0();
/* 功能:写入表d_t_food_fmpay0
/* 功能:写入表d_t_food_fmpay0(支付表)
* 参数:NULL
* 返回:true成功false失败
* */
......
......@@ -52,7 +52,7 @@ bool FlowControl::_Login()
QJsonObject recvJson;
// TODO
sendJson = DataManger::GetInstance().GetLoginData(/*m_storeId*/"fm9999", SERVER_PASSWORD, m_posId, m_cashierId);
sendJson = DataManger::GetInstance().GetLoginData(/*m_storeId*//*"posoperator"*/"fm9999", SERVER_PASSWORD, m_posId, m_cashierId);
emit showAlert(AlertForm::LOADING, "正在登录......");
QLOG_INFO() << QString("[---login---][requestData:%1]").arg(_GetJsonStr(sendJson));
......@@ -76,6 +76,7 @@ bool FlowControl::_Login()
emit setStoreInfo(m_storeId);
_PullOrder();
_SynStock();
}
}
......@@ -115,6 +116,20 @@ bool FlowControl::_PullOrder()
emit showAlert(AlertForm::ERROR, QString("获取订单失败![%1]").arg(error));
}else
{
// 获取门店营业状态
QString strOpeStatus("正常");
QJsonArray opeStatus = recvJson[JSON_SHOPSTATUS].toArray();
foreach(QJsonValue status, opeStatus)
{
QJsonObject jsonObject = status.toObject();
if(jsonObject[JSON_SHOPSTATUSDESC].toString().compare("营业中"))
{
strOpeStatus = QString("<font color='#ff0000'>异常</font>");
break;
}
}
emit setOpeStatus(strOpeStatus);
// 获取订单信息
QJsonArray orders = recvJson[JSON_ORDERS].toArray();
foreach(QJsonValue order, orders)
{
......@@ -229,8 +244,9 @@ bool FlowControl::_ConfirmOrder(const QString &orderId, const DeliverObject &del
OrderObject *orderObject = m_ordersMap.value(orderId);
emit showAlert(AlertForm::LOADING, "正在写入销售单......");
QString orderEntryError("");
QLOG_INFO() << QString("[---order entry begin---]");
// 写入销售单
QString orderEntryError("\r\n写入销售单成功");
if(!FmPlugin::GetInstance().DoOrderEntry(orderObject, m_cashierObject.id, m_cashierObject.name,
m_cashierObject.shiftId, m_cashierObject.shiftName, error))
{
......@@ -243,7 +259,11 @@ bool FlowControl::_ConfirmOrder(const QString &orderId, const DeliverObject &del
file.open(QFile::WriteOnly);
file.close();
}
orderEntryError = QString("\r\n[<font color='#ff0000'>写入销售单失败,可在订单详情页补录.</font>]");
orderEntryError = QString("\r\n[写入销售单失败,可在订单详情页补录.]");
QLOG_ERROR() << QString("order entry failed,[%1]").arg(error);
}else
{
QLOG_INFO() << QString("order entry success.");
}
QString remark(orderObject->remark), deliveryTime;
......@@ -448,6 +468,45 @@ bool FlowControl::_GetCashiers(QList<CashierObject> &cashiersList)
return result;
}
bool FlowControl::_SynStock()
{
QList<StockObject> stockList;
QString strStock, error;
int synInterval = VALUE_SYNSTOCKINTERVAL;
bool result;
QLOG_INFO() << QString("[---get stockInfo---].");
result = FmPlugin::GetInstance().GetStockInfo(stockList, error);
foreach (StockObject stock, stockList)
{
strStock.append(QString("|%1,%2,%3|").arg(stock.id, stock.upc).arg(QString::number(stock.num)));
}
QLOG_INFO() << QString("get stockInfo finsh. [result:%1][msg:%2][data:%3]").arg(result).arg(error, strStock);
if(result)
{
// 获取库存信息成功则推送到服务器
QJsonObject sendJson;
QJsonObject recvJson;
sendJson = DataManger::GetInstance().GetSynStockData(stockList);
QLOG_INFO() << QString("[---push stockInfo---]. [requestData:%1]").arg(_GetJsonStr(sendJson));
result = m_syncStockSocket->Request(sendJson, recvJson, error);
QLOG_INFO() << QString("push stockInfo finsh. [result:%1][msg:%2][recvData:%3]")
.arg(result).arg(error, _GetJsonStr(recvJson));
if(result)
{
if(JSON_STATUSCODE_OK == recvJson[JSON_STATUSCODE].toInt())
{
synInterval = recvJson[JSON_SYNCTIME].toInt()*1000;
}
}
}
QLOG_INFO() << QString("%1 msec after synStock...").arg(synInterval);
QTimer::singleShot(synInterval, this, &FlowControl::_SynStock);
return result;
}
bool FlowControl::_CheckCashiers()
{
bool result = false;
......@@ -484,6 +543,7 @@ void FlowControl::onFlowStart()
m_loginSocket = new BillSocket(this);
m_pullOrderSocket = new BillSocket(this);
m_procOrderSocket = new BillSocket(this);
m_syncStockSocket = new BillSocket(this);
if(_GetStoreInfo())
{
......@@ -553,3 +613,25 @@ void FlowControl::onGetOrderDetails(const QString &orderId)
emit showOrderDetails(m_ordersMap.value(orderId));
}
}
void FlowControl::onReEntryOrder(const QString &orderId)
{
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))
{
QLOG_ERROR() << QString("order reEntry failed,[%1]").arg(error);
emit showAlert(AlertForm::ERROR, "补录销售单失败");
}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, "补录销售单成功");
}
}
......@@ -34,6 +34,7 @@ private:
BillSocket *m_loginSocket;
BillSocket *m_pullOrderSocket;
BillSocket *m_procOrderSocket;
BillSocket *m_syncStockSocket;
// 拉取订单的时间戳
QString m_timestamp;
// 订单容器
......@@ -144,6 +145,11 @@ private slots:
* 返回:成功true失败false
* */
bool _GetCashiers(QList<CashierObject>& cashiersList);
/* 功能:同步库存
* 参数:NULL
* 返回:成功true失败false
* */
bool _SynStock();
/* 功能:检测收银员合法性
* 参数:NULL
* 返回:合法true不合法false
......@@ -187,7 +193,11 @@ public slots:
* 返回:NULL
* */
void onGetOrderDetails(const QString& orderId);
/* 功能:重新录单
* 参数:NULL
* 返回:NULL
* */
void onReEntryOrder(const QString& orderId);
};
#endif // FLOWCONTROL_H
......@@ -71,9 +71,9 @@ int ConfigManger::GetSoundInterval()
return m_userConfig->value(INI_SOUNDINTERVAL).toFloat()*1000;
}
bool ConfigManger::GetIsExistReEntryOrder()
int ConfigManger::GetListenPort()
{
return m_config->value(INI_REENTRY, 0).toBool();
return m_config->value(INI_LISTENPORT, 34953).toInt();
}
......
......@@ -65,11 +65,11 @@ public:
* 返回:间隔时长
* */
int GetSoundInterval();
/* 功能:获取是否存在[重新补单]
/* 功能:获取退款监听端口
* 参数:NULL
* 返回:true存在false不存在
* 返回:监听端口
* */
bool GetIsExistReEntryOrder();
int GetListenPort();
private:
ConfigManger();
......
......@@ -127,3 +127,22 @@ QJsonObject DataManger::GetRefuseRefundData(const QString &reason, const QString
rObj.insert(JSON_POSVERSION, APP_VERSION);
return rObj;
}
QJsonObject DataManger::GetSynStockData(const QList<StockObject> &stockList)
{
QJsonObject rObj;
QJsonArray cObj;
rObj.insert(JSON_REQTYPE, UPDATE_STOCK);
for(int i=0; i<stockList.count(); i++)
{
QJsonObject ccObj;
ccObj.insert(JSON_STOCKID, stockList.at(i).id);
ccObj.insert(JSON_STOCKUPC, stockList.at(i).upc);
ccObj.insert(JSON_STOCK, stockList.at(i).num);
cObj.insert(i, ccObj);
}
rObj.insert(JSON_STOCKARRAY, cObj);
rObj.insert(JSON_TOKEN, m_token);
rObj.insert(JSON_POSVERSION, APP_VERSION);
return rObj;
}
......@@ -2,6 +2,8 @@
#define DATAMANGER_H
#include <QJsonObject>
#include <QJsonArray>
#include "Model/stockObject.h"
class DataManger
{
......@@ -60,6 +62,11 @@ public:
* 返回:登录数据
* */
QJsonObject GetRefuseRefundData(const QString& reason, const QString& orderId);
/* 功能:获取同步库存数据
* 参数:[1]库存信息
* 返回:同步库存数据
* */
QJsonObject GetSynStockData(const QList<StockObject>& stockList);
private:
DataManger(){}
......
#include "stockObject.h"
#ifndef STOCKOBJECT_H
#define STOCKOBJECT_H
#include <QString>
class StockObject
{
public:
StockObject(){}
QString id; // 菜品ID
QString upc; // 菜品UPC
int num; // 菜品数量
};
#endif // STOCKOBJECT_H
......@@ -48,6 +48,7 @@ bool BillSocket::Request(const QJsonObject &requestJson, QJsonObject &recvJson,
return false;
}
recvJson = QJsonDocument::fromJson(recvArray).object();
qDebug() << recvJson;
reply->deleteLater();
return true;
......
......@@ -5,6 +5,8 @@
#include "DTools/configManger.h"
#include "Control/flowControl.h"
#include "fmPrinter.h"
#include <QApplication>
#include <QFile>
DetailForm::DetailForm(QWidget *parent) :
QDialog(parent),
......@@ -12,6 +14,7 @@ DetailForm::DetailForm(QWidget *parent) :
{
ui->setupUi(this);
connect(this, &DetailForm::reEntryOrder, &FlowControl::GetInstance(), &FlowControl::onReEntryOrder);
connect(this, &DetailForm::processOrder, &FlowControl::GetInstance(), &FlowControl::onProcessOrder);
_Init();
......@@ -28,6 +31,7 @@ void DetailForm::InitData(OrderObject *orderObject)
// 恢复界面
ui->detailTable0->clearContents();
ui->detailTable0->setRowCount(0);
ui->detailBtn0->show();
ui->detailBtn2->show();
ui->detailBtn3->show();
......@@ -66,7 +70,8 @@ void DetailForm::InitData(OrderObject *orderObject)
}
ui->detailLabRecord->setText(records);
if(!ConfigManger::GetInstance().GetIsExistReEntryOrder())
QFile orderFlag(QString("%1/orders/%2").arg(QApplication::applicationDirPath(), orderObject->order_id));
if(!orderFlag.exists())
{
ui->detailBtn0->hide();
}
......@@ -108,6 +113,12 @@ void DetailForm::onOperaBtnClicked()
emit processOrder(pBtn->property("operation").toString(), pBtn->property("orderId").toString(), DeliverObject());
}
void DetailForm::on_detailBtn0_clicked()
{
hide();
emit reEntryOrder(m_orderObject->order_id);
}
void DetailForm::on_detailBtn1_clicked()
{
FmPrinter::GetInstance().DoPrint(ConfigManger::GetInstance().GetPrinterName(), m_orderObject);
......
......@@ -41,6 +41,11 @@ signals:
* 返回:NULL
* */
void processOrder(const QString& operation, const QString& orderId, const DeliverObject& deliverObj);
/* 功能:补录订单
* 参数:[1]订单编号
* 返回:NULL
* */
void reEntryOrder(const QString& orderId);
private slots:
/* 功能:处理订单按钮点击
......@@ -48,6 +53,11 @@ private slots:
* 返回:NULL
* */
void onOperaBtnClicked();
/* 功能:处理重新录单按钮点击
* 参数:NULL
* 返回:NULL
* */
void on_detailBtn0_clicked();
/* 功能:处理重新打印按钮点击
* 参数:NULL
* 返回:NULL
......
......@@ -37,7 +37,8 @@ SOURCES += main.cpp\
settingForm.cpp \
floatForm.cpp \
detailForm.cpp \
Control/refundControl.cpp
Control/refundControl.cpp \
Model/stockObject.cpp
HEADERS += \
mainForm.h \
......@@ -58,7 +59,8 @@ HEADERS += \
settingForm.h \
floatForm.h \
detailForm.h \
Control/refundControl.h
Control/refundControl.h \
Model/stockObject.h
FORMS += mainForm.ui \
alertForm.ui \
......
......@@ -9,6 +9,7 @@
#include "Control/flowControl.h"
#include "Control/refundControl.h"
#include "floatForm.h"
#include "DTools/configManger.h"
using namespace QsLogging;
......@@ -66,7 +67,7 @@ int main(int argc, char *argv[])
// 将退款控制器移到工作线程
QThread refundThread;
RefundControl::GetInstance().SetListenPort(5566);
RefundControl::GetInstance().SetListenPort(ConfigManger::GetInstance().GetListenPort());
RefundControl::GetInstance().moveToThread(&refundThread);
QObject::connect(&refundThread, &QThread::started, &RefundControl::GetInstance(), &RefundControl::run);
refundThread.start();
......
......@@ -24,7 +24,7 @@
#define INI_FLOATOPACITY "Float/opacity"
#define INI_BLINKINTERVAL "Float/blinkInterval"
#define INI_SOUNDINTERVAL "Float/soundInterval"
#define INI_REENTRY "Features/reEntry"
#define INI_LISTENPORT "RefundListener/port"
#define JSON_REQTYPE "reqtype"
#define JSON_CURRENTUSER "current_user"
......@@ -35,6 +35,10 @@
#define JSON_STATUSCODE "statusCode"
#define JSON_STATUS "status"
#define JSON_STATUSDESC "status_desc"
#define JSON_STOCK "stock"
#define JSON_STOCKID "sku_id"
#define JSON_STOCKARRAY "skus"
#define JSON_STOCKUPC "sku_upc"
#define JSON_MESSAGE "msg"
#define JSON_TIMESTAMPS "timestamp"
#define JSON_AUTOCONFIRM "autoconfirm"
......@@ -90,6 +94,8 @@
#define VALUE_NEWORDERTIME 3000 //TODO
// 需退款提示音音频时长
#define VALUE_REFUNDORDERTIME 5000 //TODO
// 同步库存默认时长
#define VALUE_SYNSTOCKINTERVAL 5*60*1000 //TODO
// 拒绝退款理由
#define VALUE_REFUSEREFUND_REASON "拒绝退款"
......
[FmServer]
url=http://waimaitest.freemudorder.com/api
\ No newline at end of file
url=http://waimaitest.freemudorder.com/api
[RefundListener]
port=34953
\ No newline at end of file
rcc -binary deaufult.qrc -o ../../../build/takeaway-Debug/fmTakeaway/debug/skin/deaufult.rcc
pause
\ No newline at end of file
rcc -binary deaufult.qrc -o ../../../build/takeaway-Debug/fmTakeaway/debug/skin/deaufult.rcc
\ No newline at end of file
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