Commit acf01b49 by wuyang.zou

1、POS取消订单,订单进入异常单,双击进入订单详情页面。送达时间显示合理信息;

    2、退单的时候,频繁输入错误授权号[00不在范围内的账号]。退款到账了,但是这个
订单入机失败。进入了异常单队列,显示【POS录单失败】。再次退单提示【取消订单失败
,蜂鸟拒绝退单】
    3、外卖订单中有收费附加品,OMS插件端进入订单详情页面。收费附加品名称跟在了商品规格后面,但是收费附加品价格未显示/被计入
    4、伙伴角色登录系统后退单,在经理授权框页面点击取消按钮,立即操作POS页面的菜单,这时会把该笔订单正向录入列表,不打印小票
    5、App退单时,svc支付方式,绑定的第三方交易流水号为 退款fmid;
    6、完善录外卖订单,锁屏功能,避免店员在进入录外卖单前点击的商品进入外卖订单内,导致与实际外卖订单价格不一致问题;
    7、更新FmTakeout.exe 版本号信息
    8、修复运力不足导致 oms 取消订单后,没有录入POS BUG;
    9、完善退货授权的获取;
    10、增加日志记录大小(10 M* 40个)
parent 1d1cbf00
...@@ -53,9 +53,6 @@ int GetCaboxAReAuth::getUserHasCashBox(const QString& operatorId){ ...@@ -53,9 +53,6 @@ int GetCaboxAReAuth::getUserHasCashBox(const QString& operatorId){
if(query.first()) { if(query.first()) {
result= query.value(0).toInt()?1:0; result= query.value(0).toInt()?1:0;
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,getUserHasCashBox:%2--->>>>]"<<operatorId<<result; QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,getUserHasCashBox:%2--->>>>]"<<operatorId<<result;
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,:getUserHasCashBox query.value(0):%2--->>>>]"<<operatorId<<query.value(0).toInt();
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,:getUserHasCashBox query.value(1):%2--->>>>]"<<operatorId<<query.value(1).toInt();
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,:getUserHasCashBox query.value(2):%2--->>>>]"<<operatorId<<query.value(2).toInt();
} else { } else {
result = 0; result = 0;
} }
...@@ -72,14 +69,15 @@ int GetCaboxAReAuth::getUserRefundAuth(const QString& operatorId){ ...@@ -72,14 +69,15 @@ int GetCaboxAReAuth::getUserRefundAuth(const QString& operatorId){
} }
int result = 0; int result = 0;
QSqlQuery query(m_sqlDb); QSqlQuery query(m_sqlDb);
//query.prepare(QString("select distinct 0 from employee ").arg(operatorId)); QLOG_INFO()<<QString("SELECT count(*) FROM [DataStore].[dbo].[EMPLOYEE] AS A , [DataStore].[dbo].[ROLE_EMPLOYEE] AS B WHERE A.EmployeeID = B.EmployeeID and B.RoleID in (2,10) AND ObjectNumber ='%1'").arg(operatorId);
query.prepare(QString("select distinct 0 from employee ")); query.prepare(QString("SELECT count(*) FROM [DataStore].[dbo].[EMPLOYEE] AS A , [DataStore].[dbo].[ROLE_EMPLOYEE] AS B WHERE A.EmployeeID = B.EmployeeID and B.RoleID in (2,10) AND ObjectNumber ='%1'").arg(operatorId));
if(!query.exec()) { if(!query.exec()) {
QLOG_ERROR()<<"[<<<<---SqlServer Database:getUserRefundAuth--->>>>]"<<query.lastError().text(); QLOG_ERROR()<<"[<<<<---SqlServer Database:getUserRefundAuth--->>>>]"<<query.lastError().text();
result= 0; result= 0;
} }
if(query.first()) { if(query.first()) {
result= 0; //等待后期更新; result= query.value(0).toInt()?1:0;
QLOG_INFO()<<"[<<<<---SqlServer Database operatorId:%1,getUserRefundAuth:%2--->>>>]"<<operatorId<<result;
} else { } else {
result = 0; result = 0;
} }
......
...@@ -67,7 +67,7 @@ void OrderObject::FetchDataFromJson(const QJsonObject &json) ...@@ -67,7 +67,7 @@ void OrderObject::FetchDataFromJson(const QJsonObject &json)
QString OrderObject::getChannelName() QString OrderObject::getChannelName()
{ {
QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName [%3]--->>>>]").arg(channel); QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName [%1]--->>>>]").arg(channel);
if ("MOD" == channel && 3 != orderType){ if ("MOD" == channel && 3 != orderType){
return QString::fromLocal8Bit("星巴克"); return QString::fromLocal8Bit("星巴克");
}else if("ELE" == channel){ }else if("ELE" == channel){
...@@ -76,10 +76,11 @@ QString OrderObject::getChannelName() ...@@ -76,10 +76,11 @@ QString OrderObject::getChannelName()
return QString::fromLocal8Bit("百度外卖"); return QString::fromLocal8Bit("百度外卖");
}else if("MOD" == channel && 3 == orderType){ }else if("MOD" == channel && 3 == orderType){
return QString::fromLocal8Bit("客诉单"); return QString::fromLocal8Bit("客诉单");
}else if("HM" == channel){ }else{
QLOG_INFO() << QString("[<<<<---OrderObject:getChannelName HM :[%1]--->>>>]").arg(channel);
if("HM" == channel){
return QString::fromLocal8Bit("盒马"); return QString::fromLocal8Bit("盒马");
} }
else{
return QString::fromLocal8Bit("未知"); return QString::fromLocal8Bit("未知");
} }
} }
......
...@@ -13,6 +13,7 @@ class OrderObject : public QObject ...@@ -13,6 +13,7 @@ class OrderObject : public QObject
Q_PROPERTY (QString id READ getId WRITE setId) Q_PROPERTY (QString id READ getId WRITE setId)
Q_PROPERTY (QString payfmId READ getPayfmId WRITE setPayfmId) Q_PROPERTY (QString payfmId READ getPayfmId WRITE setPayfmId)
Q_PROPERTY (QString thirdPartyBatch READ getThirdPartyBatch WRITE setThirdPartyBatch) Q_PROPERTY (QString thirdPartyBatch READ getThirdPartyBatch WRITE setThirdPartyBatch)
Q_PROPERTY (QString refundFmId READ getRefundFmId WRITE setRefundFmId)
Q_PROPERTY (QString thirdPartyOrderId READ getThirdPartyOrderId WRITE setThirdPartyOrderId) Q_PROPERTY (QString thirdPartyOrderId READ getThirdPartyOrderId WRITE setThirdPartyOrderId)
Q_PROPERTY (int orderType READ getOrderType WRITE setOrderType) Q_PROPERTY (int orderType READ getOrderType WRITE setOrderType)
...@@ -73,7 +74,7 @@ public: ...@@ -73,7 +74,7 @@ public:
typedef enum { typedef enum {
NewOrder=2,Confirmed,Sendout,Finished,Refunded,RequestRefund NewOrder=2,Confirmed,Sendout,Finished,Refunded,RequestRefund
,Locked=-1,AgreeRefund=30,RefuseRefund=40 ,SimExcept=50 ,Locked=-1,AgreeRefund=30,RefuseRefund=40 ,SimExceptSale=50,SimExceptRefund=51
/*,Refunded=6 Cancled=6(订单状态是6时,是退单); 退单目前本佳那边不区分*/ /*,Refunded=6 Cancled=6(订单状态是6时,是退单); 退单目前本佳那边不区分*/
}OrderStatus; }OrderStatus;
...@@ -92,6 +93,7 @@ public: ...@@ -92,6 +93,7 @@ public:
QString id; //编号 QString id; //编号
QString payfmId; //FM唯一码 QString payfmId; //FM唯一码
QString thirdPartyBatch ; //第三方交易流水号 QString thirdPartyBatch ; //第三方交易流水号
QString refundFmId; //退货时,不应该传递第三方交易流水号[应该使用退货的非码ID]
QString thirdPartyOrderId; //第三方订单ID QString thirdPartyOrderId; //第三方订单ID
int orderType; //订单类型: 用来区分是 正常订单(1) 预订单(2) 还是 客诉单:3 (星巴克定义客诉单的类型:12); int orderType; //订单类型: 用来区分是 正常订单(1) 预订单(2) 还是 客诉单:3 (星巴克定义客诉单的类型:12);
QString orgOrderId; //原始订单编号 QString orgOrderId; //原始订单编号
...@@ -159,6 +161,9 @@ public: ...@@ -159,6 +161,9 @@ public:
inline QString getThirdPartyBatch()const{return thirdPartyBatch;} inline QString getThirdPartyBatch()const{return thirdPartyBatch;}
inline void setThirdPartyBatch(const QString& v){thirdPartyBatch = v;} inline void setThirdPartyBatch(const QString& v){thirdPartyBatch = v;}
inline QString getRefundFmId()const{return refundFmId;}
inline void setRefundFmId(const QString& v){refundFmId = v;}
inline QString getThirdPartyOrderId()const{return thirdPartyOrderId;} inline QString getThirdPartyOrderId()const{return thirdPartyOrderId;}
inline void setThirdPartyOrderId(const QString& v){thirdPartyOrderId = v;} inline void setThirdPartyOrderId(const QString& v){thirdPartyOrderId = v;}
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include <QtGlobal> #include <QtGlobal>
#include <iostream> #include <iostream>
const int QsLogging::SizeRotationStrategy::MaxBackupCount = 10; const int QsLogging::SizeRotationStrategy::MaxBackupCount = 40;
QsLogging::RotationStrategy::~RotationStrategy() QsLogging::RotationStrategy::~RotationStrategy()
{ {
......
...@@ -44,10 +44,11 @@ void DetailForm::InitData(OrderObject *orderObject) ...@@ -44,10 +44,11 @@ void DetailForm::InitData(OrderObject *orderObject)
//订单完成后,送达时间需要更新为 finishTime //订单完成后,送达时间需要更新为 finishTime
if(OrderObject::Finished == orderObject->orderStatus){ if(OrderObject::Finished == orderObject->orderStatus){
ui->detailLab2->setText( (orderObject->finishTime.isEmpty() || 0==orderObject->finishTime.length() )? QString::fromLocal8Bit("已经送达") : orderObject->finishTime); ui->detailLab2->setText( (orderObject->finishTime.isEmpty() || 0==orderObject->finishTime.length() )? QString::fromLocal8Bit("已经送达") : orderObject->finishTime);
}else if(OrderObject::Refunded == orderObject->orderStatus){
ui->detailLab2->setText(QString(""));
}else{ }else{
ui->detailLab2->setText(orderObject->deliveryTime.isEmpty()? QString::fromLocal8Bit("立即送出") : orderObject->deliveryTime); ui->detailLab2->setText(orderObject->deliveryTime);
} }
//ui->detailLab2->setText(orderObject->deliveryTime.isEmpty()? QString::fromLocal8Bit("立即送出") : orderObject->deliveryTime);
QLOG_INFO() << QString("[<<<<---DetailForm::InitData ui->detailLab2->setText --->>>>]"); QLOG_INFO() << QString("[<<<<---DetailForm::InitData ui->detailLab2->setText --->>>>]");
ui->detailLab3->setText(orderObject->riderName.isEmpty() ? QString::fromLocal8Bit("暂未指定") : QString::fromLocal8Bit("[姓名]%1 [电话]%2") ui->detailLab3->setText(orderObject->riderName.isEmpty() ? QString::fromLocal8Bit("暂未指定") : QString::fromLocal8Bit("[姓名]%1 [电话]%2")
...@@ -83,22 +84,23 @@ void DetailForm::InitData(OrderObject *orderObject) ...@@ -83,22 +84,23 @@ void DetailForm::InitData(OrderObject *orderObject)
ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(orderObject->proList.at(i)->qty))); // 数量 ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(orderObject->proList.at(i)->qty))); // 数量
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter);
/*
// 选项太多,不便于显示; // 选项太多,不便于显示;
int j = 0; int j = 0;
dishesObject* tempDishObj = orderObject->proList[i]; dishesObject* tempDishObj = orderObject->proList[i];
for(; j<tempDishObj->sub_products.count(); j++) for(; j<tempDishObj->sub_products.count(); j++)
{ {
if(tempDishObj->sub_products.at(j)->price > 0){
pNum++; pNum++;
ui->detailTable0->insertRow(pNum); ui->detailTable0->insertRow(pNum);
ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem(GetProductName(tempDishObj->sub_products.at(j)))); // 商品名 ui->detailTable0->setItem(pNum, 0, new QTableWidgetItem(QString("( ") + GetProductName(tempDishObj->sub_products.at(j)) )); // 商品名
ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 0)->setTextAlignment(Qt::AlignRight);
ui->detailTable0->setItem(pNum, 1, new QTableWidgetItem(Penny2Dollar(tempDishObj->sub_products.at(j)->price))); // 价格 ui->detailTable0->setItem(pNum, 1, new QTableWidgetItem(Penny2Dollar(tempDishObj->sub_products.at(j)->price))); // 价格
ui->detailTable0->item(pNum, 1)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 1)->setTextAlignment(Qt::AlignCenter);
ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(tempDishObj->sub_products.at(j)->qty))); // 数量 ui->detailTable0->setItem(pNum, 2, new QTableWidgetItem(QString::number(tempDishObj->sub_products.at(j)->qty) +QString(" )") )); // 数量
ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignCenter); ui->detailTable0->item(pNum, 2)->setTextAlignment(Qt::AlignLeft);
}
} }
*/
} }
// 新增配送费 + 打包费 // 新增配送费 + 打包费
ui->detailTable0->insertRow(pNum); ui->detailTable0->insertRow(pNum);
...@@ -133,7 +135,7 @@ void DetailForm::InitData(OrderObject *orderObject) ...@@ -133,7 +135,7 @@ void DetailForm::InitData(OrderObject *orderObject)
ui->detailBtn2->setText(GetOperNameByStatus(orderObject->orderStatus, true)); ui->detailBtn2->setText(GetOperNameByStatus(orderObject->orderStatus, true));
ui->detailBtn2->setProperty("operation", GetOperByStatus(orderObject->orderStatus, true)); ui->detailBtn2->setProperty("operation", GetOperByStatus(orderObject->orderStatus, true));
ui->detailBtn2->setProperty("orderId", orderObject->id); ui->detailBtn2->setProperty("orderId", orderObject->id);
if(orderObject->orderStatus != 1 && orderObject->orderStatus != 20 && orderObject->orderStatus != 2 && orderObject->orderStatus != 3 && orderObject->orderStatus != OrderObject::SimExcept) if(orderObject->orderStatus != 1 && orderObject->orderStatus != 20 && orderObject->orderStatus != 2 && orderObject->orderStatus != 3 && orderObject->orderStatus != OrderObject::SimExceptSale)
{ {
ui->detailBtn2->hide(); ui->detailBtn2->hide();
} }
......
IDI_ICON ICON DISCARDABLE "logo.ico" IDI_ICON ICON DISCARDABLE "logo.ico"
#if defined(UNDER_CE)
#include <winbase.h>
#else
#include <winver.h>
#endif
VS_VERSION_INFO VERSIONINFO
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
FILEVERSION 2,2018,913,1
PRODUCTVERSION 2,2018,913,1
//*************************************************************************//
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080404b0"
BEGIN
VALUE "CompanyName", "ShangHai.Freemud Co., Ltd."
VALUE "FileDescription", "Delivery Order Plug-in Application"
VALUE "InternalName", "fmTakeout.exe"
VALUE "LegalCopyright", "Copyright (C)2013-2018"
VALUE "OriginalFilename", "fmTakeout.exe"
VALUE "ProductName", "Delivery Order Plug-in"
//***每次修改后编译发版必须变更版本号(preDefine.h中APP_VERSION 需要一致)***//
VALUE "ProductVersion", "2.2018.913.1"
VALUE "FileVersion", "2.2018.913.1"
//*************************************************************************//
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x804, 1200
END
END
\ No newline at end of file
...@@ -28,7 +28,7 @@ void InitLogger() ...@@ -28,7 +28,7 @@ void InitLogger()
QDir().mkdir(logDir); QDir().mkdir(logDir);
QString logPath = QString("%1/%2").arg(logDir).arg("log"); QString logPath = QString("%1/%2").arg(logDir).arg("log");
DestinationPtr fileDst(DestinationFactory::MakeFileDestination( DestinationPtr fileDst(DestinationFactory::MakeFileDestination(
logPath, EnableLogRotation, MaxSizeBytes(2*1024*1024), MaxOldLogCount(50))); logPath, EnableLogRotation, MaxSizeBytes(10*1024*1024), MaxOldLogCount(40)));
logger.addDestination(fileDst); logger.addDestination(fileDst);
DestinationPtr consoleDst(DestinationFactory::MakeDebugOutputDestination()); DestinationPtr consoleDst(DestinationFactory::MakeDebugOutputDestination());
logger.addDestination(consoleDst); logger.addDestination(consoleDst);
......
...@@ -539,19 +539,40 @@ void MainForm::onChangeOrderStatus(OrderObject *orderObject, int oldStatus) ...@@ -539,19 +539,40 @@ void MainForm::onChangeOrderStatus(OrderObject *orderObject, int oldStatus)
//connect(pBtn, &QPushButton::clicked, this, &MainForm::onMainProcBtnClicked); //connect(pBtn, &QPushButton::clicked, this, &MainForm::onMainProcBtnClicked);
} }
// SIM录外卖订单出现异常的订单; // SIM录外卖订单出现异常的订单(正向销售单);
if(OrderObject::SimExcept == orderObject->orderStatus) if(OrderObject::SimExceptSale == orderObject->orderStatus)
{ {
qDebug()<<table->objectName()<<"------"; qDebug()<<table->objectName()<<"------";
QWidget *pWdg = new QWidget(table); QWidget *pWdg = new QWidget(table);
QHBoxLayout *hLayout = new QHBoxLayout(pWdg); QHBoxLayout *hLayout = new QHBoxLayout(pWdg);
QPushButton * pBtn = new QPushButton(pWdg); QPushButton * pBtn = new QPushButton(pWdg);
pBtn->setFixedSize(90, 30); pBtn->setFixedSize(120, 30);
pBtn->setFocusPolicy(Qt::NoFocus);
pBtn->setObjectName("mainProcBtn");
pBtn->setProperty("orderId", orderObject->id);
//pBtn->setProperty("operation", table->property("operation").toString());
pBtn->setText(QString::fromLocal8Bit("录单失败,未退款"));
pBtn->setDisabled(true);
hLayout->addWidget(pBtn);
hLayout->setMargin(0);
pWdg->setLayout(hLayout);
table->setCellWidget(0, 6, pWdg); // 操作按钮
//connect(pBtn, &QPushButton::clicked, this, &MainForm::onMainProcBtnClicked);
}
// SIM录退货:外卖订单出现异常的订单(已退单);
if(OrderObject::SimExceptRefund == orderObject->orderStatus)
{
qDebug()<<table->objectName()<<"------";
QWidget *pWdg = new QWidget(table);
QHBoxLayout *hLayout = new QHBoxLayout(pWdg);
QPushButton * pBtn = new QPushButton(pWdg);
pBtn->setFixedSize(120, 30);
pBtn->setFocusPolicy(Qt::NoFocus); pBtn->setFocusPolicy(Qt::NoFocus);
pBtn->setObjectName("mainProcBtn"); pBtn->setObjectName("mainProcBtn");
pBtn->setProperty("orderId", orderObject->id); pBtn->setProperty("orderId", orderObject->id);
//pBtn->setProperty("operation", table->property("operation").toString()); //pBtn->setProperty("operation", table->property("operation").toString());
pBtn->setText(QString::fromLocal8Bit("POS录单失败")); pBtn->setText(QString::fromLocal8Bit("录单失败,已退款"));
pBtn->setDisabled(true); pBtn->setDisabled(true);
hLayout->addWidget(pBtn); hLayout->addWidget(pBtn);
hLayout->setMargin(0); hLayout->setMargin(0);
......
...@@ -7,7 +7,12 @@ ...@@ -7,7 +7,12 @@
//#define APP_VERSION "1.20171013.01" //#define APP_VERSION "1.20171013.01"
//#define APP_VERSION "2.20180822.01" //#define APP_VERSION "2.20180822.01"
#define APP_VERSION "2.20180824.01" //#define APP_VERSION "2.20180824.01"
//#define APP_VERSION "2.20180905.01"
#define APP_VERSION "2.2018913.1"
//修正版本号时,切记修正 FmTakeout.rc 中的版本号
#define SERVER_PASSWORD "posoperator@freemud.cn" #define SERVER_PASSWORD "posoperator@freemud.cn"
#define CONFIG_NAME "config.ini" #define CONFIG_NAME "config.ini"
...@@ -64,6 +69,7 @@ ...@@ -64,6 +69,7 @@
#define JSON_ERRCODE "code" #define JSON_ERRCODE "code"
#define JSON_STATUS "status" #define JSON_STATUS "status"
#define JSON_ORDERSTATUS "orderStatus" #define JSON_ORDERSTATUS "orderStatus"
#define JSON_REFUNDFMID "refundFmId"
#define JSON_STATUSDESC "status_desc" #define JSON_STATUSDESC "status_desc"
#define JSON_MESSAGE "message" #define JSON_MESSAGE "message"
#define JSON_ERRMSG "message" #define JSON_ERRMSG "message"
......
[FmServer] [FmServer]
;<<<非码POS插件:登陆注册+5分钟心跳 服务器地址>>> ;<<<非码POS插件:登陆注册+5分钟心跳 服务器地址>>>
loginUrl=https://delposservice.starbucks.net/backstage/pos/ loginUrl=https://delposserviceapi.starbucks.net/backstage/pos/
;星巴克开发环境:loginUrl=http://10.92.194.44:8083/backstage/pos/ ;星巴克开发环境:loginUrl=http://10.92.194.44:8083/backstage/pos/
;星巴克测试环境:loginUrl=http://delposservice.stg.starbucks.net/pos/ ;星巴克测试环境:loginUrl=http://delposserviceapi.stg.starbucks.net/pos/
;星巴克生产环境:loginUrl=https://delposservice.starbucks.net/pos/ ;星巴克生产环境:loginUrl=https://delposserviceapi.starbucks.net/backstage/pos/
;<<<非码外卖拉取订单服务器地址>>> ;<<<非码外卖拉取订单服务器地址>>>
orderUrl=https://delposservice.starbucks.net/backstage/order/ orderUrl=https://delposserviceapi.starbucks.net/backstage/order/
;星巴克测试环境: orderUrl=https://delposservice.stg.starbucks.net/backstage/order/ ;星巴克测试环境: orderUrl=https://delposserviceapi.stg.starbucks.net/backstage/order/
;星巴克开发环境: orderUrl=https://delposservice.dev.starbucks.net/backstage/order/ ;星巴克开发环境: orderUrl=https://delposserviceapi.dev.starbucks.net/backstage/order/
;星巴克生产环境: orderUrl=https://delposservice.starbucks.net/backstage/order/ ;星巴克生产环境: orderUrl=https://delposserviceapi.starbucks.net/backstage/order/
[Interface] [Interface]
;接口名称 ;接口名称
......
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