实现excel报表文件生成功能

This commit is contained in:
lixiaoyuan
2025-09-20 16:41:08 +08:00
parent 0a71d7e61a
commit ee98556eec
114 changed files with 15206 additions and 55 deletions

View File

@@ -69,6 +69,8 @@ include_directories(
${THIRDPARTY_PATH}/cpp-httplib-0.25.0
${THIRDPARTY_PATH}/paho_mqtt/include
${THIRDPARTY_PATH}/spdlog-1.13.0/include
${THIRDPARTY_PATH}/OpenXLSX/include
${THIRDPARTY_PATH}/GmSSL-3.1.1/include
#${PVLIBS_PATH}/include/pvserver
#${PVLIBS_PATH}/include/rllib
)
@@ -104,6 +106,8 @@ target_link_libraries(${PROJECT_NAME}
${THIRDPARTY_PATH}/mysql/lib/x64/libmysql.lib
${THIRDPARTY_PATH}/paho_mqtt/lib/paho-mqtt3a.lib
${THIRDPARTY_PATH}/paho_mqtt/lib/paho-mqtt3c.lib
${THIRDPARTY_PATH}/OpenXLSX/lib/OpenXLSX.lib
${THIRDPARTY_PATH}/GmSSL-3.1.1/lib/gmssl.lib
#${PVLIBS_PATH}/x64/serverlib.lib
#${PVLIBS_PATH}/x64/rllib.lib

View File

@@ -23,7 +23,7 @@ bool Config::init(std::string filename)
JSON::read(jsonroot, "debug", option.debug);
JSON::read(jsonroot, "weburl", option.webSrvUrl);
JSON::read(jsonroot, "launchdate", option.lunchDate);
JSON::read(jsonroot, "exportpath", option.exportpath);
if (jsonroot.contains("database"))
{

View File

@@ -8,6 +8,7 @@ struct AppOption
int debug {0};
std::string webSrvUrl;
std::string lunchDate;
std::string exportpath;
struct {
std::string host;

View File

@@ -148,4 +148,28 @@ string Crypto::md5(string src)
md5_encode(num, 16, tempA, tempB, tempC, tempD);
}
return md5_format(tempA) + md5_format(tempB) + md5_format(tempC) + md5_format(tempD);
}
std::vector<uint8_t> Crypto::sm4EcbEncrypt(const std::vector<uint8_t>& key, const std::vector<uint8_t>& plaintext)
{
SM4_KEY sm4_key;
std::vector<uint8_t> ciphertext(plaintext.size()); // ECB模式密文长度与明文相同需填充时另说
sm4_set_encrypt_key(&sm4_key, key.data());
// 假设明文已是分组整数倍或已处理填充
for (size_t i = 0; i < plaintext.size(); i += 16) {
sm4_encrypt(&sm4_key, &plaintext[i], &ciphertext[i]);
}
return ciphertext;
}
std::vector<uint8_t> Crypto::sm4EcbDecrypt(const std::vector<uint8_t>& key, const std::vector<uint8_t>& ciphertext) {
SM4_KEY sm4_key;
std::vector<uint8_t> plaintext(ciphertext.size());
sm4_set_decrypt_key(&sm4_key, key.data());
for (size_t i = 0; i < ciphertext.size(); i += 16) {
sm4_encrypt(&sm4_key, &ciphertext[i], &plaintext[i]); // 注意解密时也是用sm4_encrypt函数但密钥是解密密钥
}
return plaintext;
}

View File

@@ -1,4 +1,4 @@
#ifndef _Crypto_H_
#ifndef _Crypto_H_
#define _Crypto_H_
@@ -6,6 +6,9 @@
#include <vector>
#include <cstdlib>
#include <string>
#include <gmssl/sm4.h>
#include <gmssl/hex.h>
#include <gmssl/sm2.h>
using namespace std;
@@ -15,6 +18,21 @@ class Crypto
public:
static string md5(string src);
/**
* @brief SM4-ECB 加密示例
* @param key 16字节密钥
* @param plaintext 明文数据
* @return 密文字节向量
*/
static std::vector<uint8_t> sm4EcbEncrypt(const std::vector<uint8_t>& key, const std::vector<uint8_t>& plaintext);
/**
* @brief SM4-ECB 解密示例
* @param key 16字节密钥
* @param ciphertext 密文数据
* @return 明文字节向量
*/
static std::vector<uint8_t> sm4EcbDecrypt(const std::vector<uint8_t>& key, const std::vector<uint8_t>& ciphertext);
};
#endif // ! _Crypto_H_

31
src/common/XlsxEntity.cpp Normal file
View File

@@ -0,0 +1,31 @@
#include "XlsxEntity.h"
XlsxEntity::XlsxEntity(std::string filename)
{
xldom_.create(filename);
sheet_ = xldom_.workbook().worksheet("Sheet1");
}
XlsxEntity::~XlsxEntity()
{
this->close();
}
void XlsxEntity::setCell(std::string index, std::string v)
{
sheet_.cell(XLCellReference(index)).value() = v;
}
void XlsxEntity::setCell(int row, int col, std::string v)
{
sheet_.cell(row, col).value() = v;
}
void XlsxEntity::close()
{
if (xldom_.isOpen())
{
xldom_.save();
xldom_.close();
}
}

26
src/common/XlsxEntity.h Normal file
View File

@@ -0,0 +1,26 @@
#pragma once
#include "OpenXLSX.hpp"
#include <string>
using namespace OpenXLSX;
class XlsxEntity
{
public:
XlsxEntity(std::string filename);
~XlsxEntity();
/**
* @param [string index] 单元格索引,例如 A1, D6
*/
void setCell(std::string index, std::string v);
void setCell(int row, int col, std::string v);
void close();
private:
XLWorksheet sheet_;
XLDocument xldom_;
};

View File

@@ -29,25 +29,8 @@
#include "qt/MainWeb.h"
//#define wsa rlwsa
//void rlSocketTest()
//{
// rlwsa();
// rlSocket socket("127.0.0.1", 19801, 1);
// int ret = socket.connect();
// std::string s1 = "helloworld";
// socket.write(s1.c_str(), s1.size());
//
// std::vector<char> buf(1024, 0);
// while (true)
// {
// int len = socket.read(&buf[0], 1, 0);
// if (len > 0)
// {
// std::cout << "===>>> " << std::string(buf.begin(), buf.end());
// }
// }
//}
#include "database/Dao.h"
#include "common/XlsxEntity.h"
void memberJsonTest()
{
@@ -117,8 +100,27 @@ void memberJsonTest()
//std::cout << to << std::endl;
}
#include "common/Crypto.h"
int main(int argc, char** argv)
{
// 示例密钥 (16字节)
std::string key = "1234567890123456";
// 示例明文 (必须是16字节的整数倍本例为16字节)
std::string plaintext = "HelloWorld";
// 加密
auto encryptText = Crypto::sm4EcbEncrypt(vector<uint8_t>(key.begin(), key.end()), vector<uint8_t>(plaintext.begin(), plaintext.end()));
// 解密
auto decryptText = Crypto::sm4EcbDecrypt(vector<uint8_t>(key.begin(), key.end()), encryptText);
// 输出十六进制结果
std::cout << "Original: " << plaintext << std::endl;
std::cout << "Encrypted: " << std::string(encryptText.begin(), encryptText.end()) << std::endl;
std::cout << "Decrypted: " << std::string(decryptText.begin(), decryptText.end()) << std::endl;
// 设置控制台输出为 UTF-8 编码
SetConsoleOutputCP(CP_UTF8);
// 设置控制台输入为 UTF-8 编码(如果需要输入中文)
@@ -131,8 +133,6 @@ int main(int argc, char** argv)
// 运行后台服务
Application::instance().init();
while (1) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); };
// 启动 PV 服务主线程

View File

@@ -8,6 +8,7 @@
#include "app/Config.h"
#include "app/Station.h"
#include "app/Device.h"
#include "common/XlsxEntity.h"
static void FieldsToJson(Fields& fields, njson& json)
{
@@ -46,7 +47,6 @@ static void JsonToFields(njson& json, std::vector<std::string> vecKeys, Fields&
default:
break;
}
}
}
}
@@ -66,7 +66,7 @@ static njson FieldsToJsonArray(std::vector<Fields>& vecFields)
return jsonnode;
}
static void GetRequestParam(const httplib::Request& req, const std::vector<std::string>& vecKeys, Fields& fields)
static void GetRequestParams(const httplib::Request& req, const std::vector<std::string>& vecKeys, Fields& fields)
{
if (req.method == "GET")
{
@@ -86,6 +86,18 @@ static void GetRequestParam(const httplib::Request& req, const std::vector<std::
}
}
static void CheckRequiredParams(Fields& params, std::vector<std::string> keys, std::string& errmsg)
{
for (auto& key : keys)
{
if (!params.contains(key))
{
errmsg = "参数[" + key + "]错误";;
return;
}
}
}
class HttpHelper
{
public:
@@ -172,9 +184,9 @@ static std::map<std::string, HandlerOptions> g_mapHttpHandlerGet =
{"/queryStatDayList", HandlerOptions(&HttpEntity::queryStatDayList, {})},
{"/queryStatDetailList", HandlerOptions(&HttpEntity::queryStatDetailList, {})},
{"/queryStatCharts", HandlerOptions(&HttpEntity::queryStatCharts, {})},
{"/queryEnvironment", HandlerOptions(&HttpEntity::queryEnvironment, { "station_id"})},
{"/exportStatReport", HandlerOptions(&HttpEntity::exportStatReport, {})},
{"/queryEnvironment", HandlerOptions(&HttpEntity::queryEnvironment, { "station_id"})},
{"/queryServiceApiList", HandlerOptions(&HttpEntity::queryServiceApiList, {})},
{"/deleteServiceApi", HandlerOptions(&HttpEntity::deleteServiceApi, {"api_id"})},
@@ -381,14 +393,14 @@ Errcode HttpEntity::queryUserList(const httplib::Request& req, njson& json, std:
Errcode HttpEntity::insertUser(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"account", "name", "gender", "age", "phone", "email", "role_id"}, params);
GetRequestParams(req, {"account", "name", "gender", "age", "phone", "email", "role_id"}, params);
return DAO::insertUser(params);
}
Errcode HttpEntity::updateUser(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"user_id", "account", "name", "gender", "age", "phone", "email", "role_id"}, params);
GetRequestParams(req, {"user_id", "account", "name", "gender", "age", "phone", "email", "role_id"}, params);
return DAO::updateUserById(params);
}
@@ -445,14 +457,14 @@ Errcode HttpEntity::queryPermissionList(const httplib::Request& req, njson& json
Errcode HttpEntity::insertPermission(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"name", "describe", "is_open"}, params);
GetRequestParams(req, {"name", "describe", "is_open"}, params);
return DAO::insertPermission(params);
}
Errcode HttpEntity::updatePermission(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"permission_id", "name", "describe", "is_open"}, params);
GetRequestParams(req, {"permission_id", "name", "describe", "is_open"}, params);
return DAO::updatePermissionById(params);
}
@@ -540,7 +552,7 @@ Errcode HttpEntity::queryRoleList(const httplib::Request& req, njson& json, std:
Errcode HttpEntity::queryRolePermission(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"role_id"}, params);
GetRequestParams(req, {"role_id"}, params);
if (!params.contains("role_id")) { errmsg = "缺少参数[role_id]"; return Errcode::ERR_PARAM; }
return Errcode::OK;
}
@@ -548,13 +560,13 @@ Errcode HttpEntity::queryRolePermission(const httplib::Request& req, njson& json
Errcode HttpEntity::insertRole(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"name", "describe", "is_open", "permission"}, params);
GetRequestParams(req, {"name", "describe", "is_open", "permission"}, params);
return DAO::insertRole(params);
};
Errcode HttpEntity::updateRole(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"role_id", "name", "describe", "is_open", "permission"}, params);
GetRequestParams(req, {"role_id", "name", "describe", "is_open", "permission"}, params);
auto roleId = params.value("role_id");
std::string permission = params.remove("permission");
@@ -610,14 +622,14 @@ Errcode HttpEntity::insertStation(const httplib::Request& req, njson& json, std:
{
Fields params;
GetRequestParam(req, {"name", "address", "lon", "lat", "tel", "capacity", "status"}, params);
GetRequestParams(req, {"name", "address", "lon", "lat", "tel", "capacity", "status"}, params);
return DAO::insertStation(params);
};
Errcode HttpEntity::updateStation(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"station_id", "name", "address", "lon", "lat", "tel", "capacity", "status", "work_mode", "policy_id", "operation_date"}, params);
GetRequestParams(req, {"station_id", "name", "address", "lon", "lat", "tel", "capacity", "status", "work_mode", "policy_id", "operation_date"}, params);
std::string stationId = params.value("station_id");
params.check("capacity", "", "0.0");
params.check("lon", "", "0.0");
@@ -656,7 +668,7 @@ Errcode HttpEntity::deleteStation(const httplib::Request& req, njson& json, std:
Errcode HttpEntity::queryStationOverview(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"station_id"}, params);
GetRequestParams(req, {"station_id"}, params);
std::string stationId = params.value("station_id");
if (stationId.empty())
{
@@ -797,7 +809,7 @@ Errcode HttpEntity::queryDeviceList(const httplib::Request& req, njson& json, st
Errcode HttpEntity::insertDevice(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"station_id", "type", "name", "code", "model", "factory", "factory_tel", "is_open", "attrs"}, params);
GetRequestParams(req, {"station_id", "type", "name", "code", "model", "factory", "factory_tel", "is_open", "attrs"}, params);
if (!params.contains("station_id")) { errmsg = "缺少参数[station_id]"; return Errcode::ERR_PARAM; }
Errcode err = DAO::insertDevice(params);
@@ -813,7 +825,7 @@ Errcode HttpEntity::insertDevice(const httplib::Request& req, njson& json, std::
Errcode HttpEntity::updateDevice(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"device_id", "station_id", "type", "name", "code", "model", "factory", "factory_tel", "is_open", "attrs"}, params);
GetRequestParams(req, {"device_id", "station_id", "type", "name", "code", "model", "factory", "factory_tel", "is_open", "attrs"}, params);
Errcode err = DAO::updateDeviceById(params);
if (err == Errcode::OK)
@@ -840,7 +852,7 @@ Errcode HttpEntity::queryDevicTypeDef(const httplib::Request& req, njson& json,
Errcode HttpEntity::queryDevicByCategory(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"station_id", "category"}, params);
GetRequestParams(req, {"station_id", "category"}, params);
if (!params.contains("station_id")) { errmsg = "缺少参数[station_id]"; return Errcode::ERR_PARAM; }
if (!params.contains("category")) { errmsg = "缺少参数[category]"; return Errcode::ERR_PARAM; }
@@ -902,7 +914,7 @@ Errcode HttpEntity::queryDevicByCategory(const httplib::Request& req, njson& jso
Errcode HttpEntity::queryDevicCharts(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"station_id", "device_id"}, params);
GetRequestParams(req, {"station_id", "device_id"}, params);
if (!params.contains("station_id")) { errmsg = "缺少参数[station_id]"; return Errcode::ERR_PARAM; }
if (!params.contains("device_id")) { errmsg = "缺少参数[device_id]"; return Errcode::ERR_PARAM; }
@@ -924,7 +936,7 @@ Errcode HttpEntity::queryDevicCharts(const httplib::Request& req, njson& json, s
Errcode HttpEntity::queryDeviceBCUDetail(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"station_id", "device_id"}, params);
GetRequestParams(req, {"station_id", "device_id"}, params);
if (!params.contains("station_id")) { errmsg = "缺少参数[station_id]"; return Errcode::ERR_PARAM; }
if (!params.contains("device_id")) { errmsg = "缺少参数[device_id]"; return Errcode::ERR_PARAM; }
@@ -964,19 +976,19 @@ Errcode HttpEntity::queryPolicyList(const httplib::Request& req, njson& json, st
Errcode HttpEntity::insertPolicy(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"type", "name", "describe", "value", "is_open"}, params);
GetRequestParams(req, {"type", "name", "describe", "value", "is_open"}, params);
return DAO::insertPolicy(params);
};
Errcode HttpEntity::updatePolicy(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"policy_id", "type", "describe", "value", "is_open"}, params);
GetRequestParams(req, {"policy_id", "type", "describe", "value", "is_open"}, params);
return DAO::updatePolicyById(params);
};
Errcode HttpEntity::deletePolicy(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"policy_id"}, params);
GetRequestParams(req, {"policy_id"}, params);
return DAO::deletePolicyById(params.value("policy_id"));
};
Errcode HttpEntity::queryPolicyByType(const httplib::Request& req, njson& json, std::string& errmsg)
@@ -1004,7 +1016,7 @@ Errcode HttpEntity::querySystemLogList(const httplib::Request& req, njson& json,
Errcode HttpEntity::updateSystemLog(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"log_id", "status"}, params);
GetRequestParams(req, {"log_id", "status"}, params);
return DAO::updateSystemLogById(params);
}
@@ -1024,7 +1036,7 @@ Errcode HttpEntity::queryAlertLogList(const httplib::Request& req, njson& json,
Errcode HttpEntity::updateAlertLog(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"log_id", "status"}, params);
GetRequestParams(req, {"log_id", "status"}, params);
return DAO::updateAlertLogById(params);
}
@@ -1159,7 +1171,7 @@ static std::string VerifyStatSqlCondition(Fields& params)
static std::string GetRequestStatParams(const httplib::Request& req, Fields& params)
{
GetRequestParam(req, {"station_id", "category", "start_date", "end_date"}, params);
GetRequestParams(req, {"station_id", "category", "start_date", "end_date"}, params);
VerifyRequstParamsStatDate(params);
return VerifyStatSqlCondition(params);
}
@@ -1226,7 +1238,7 @@ Errcode HttpEntity::queryStatTotal(const httplib::Request& req, njson& json, std
Errcode HttpEntity::queryStatDayList(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"station_id", "category", "start_date", "end_date"}, params);
GetRequestParams(req, {"station_id", "category", "start_date", "end_date"}, params);
std::string stationId = params.value("station_id");
std::string category = params.value("category");
std::string startDate = params.value("start_date");
@@ -1304,7 +1316,7 @@ Errcode HttpEntity::queryStatDetailList(const httplib::Request& req, njson& json
pageinfo.size = Utils::toInt(req.get_param_value("page_size"));
Fields params;
GetRequestParam(req, {"station_id", "category", "start_date", "end_date"}, params);
GetRequestParams(req, {"station_id", "category", "start_date", "end_date"}, params);
std::vector<Fields> result;
auto err = DAO::queryStatStationList(pageinfo, params, result);
@@ -1373,6 +1385,79 @@ Errcode HttpEntity::queryStatCharts(const httplib::Request& req, njson& json, st
return Errcode::OK;
}
Errcode HttpEntity::exportStatReport(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParams(req, {"station_id", "category", "start_date", "end_date"}, params);
CheckRequiredParams(params, {"station_id", "category", "start_date", "end_date"}, errmsg);
if (!errmsg.empty())
{
return Errcode::ERR_PARAM;
}
std::string stationId = params.value("station_id");
std::string category = params.value("category");
std::string startDate = params.value("start_date");
std::string endDate = params.value("end_date");
std::string sql = "SELECT s.name station_name, sd.* FROM stat_day sd LEFT JOIN station s ON sd.station_id=s.station_id";
" WHERE station_id = '" + stationId + "' AND category = '" + category + "'"
" AND dt BETWEEN '" + startDate + "' AND '" + endDate + "2025-09-19' AND sd.category = '1'";
std::string filename;
std::vector<Fields> result;
Errcode err = DAO::exec(NULL, sql, result);
if (result.size() > 0)
{
filename = "export_" + Utils::timeStr(0, "%Y%m%d%H%M%S") + ".xlsx";
XlsxEntity xlsx(Config::option.exportpath + "/" + filename);
std::vector<std::pair<std::string, std::string>> headers;
if (category == "1")
{
headers = {
{"日期", "dt"}, {"场站", "station_name"}, {"类别", "category"},
{"充电电量", "storage_elect_in"}, {"放电电量", "storage_elect_out"},
{"充电次数", "storage_num_in"}, {"放电次数", "storage_num_out"},
{"充电时长", "storage_t_in"}, {"放电时长", "storage_t_out"}
};
}
else if (category == "2")
{
headers = {
{"日期", "dt"}, {"场站", "station_name"}, {"类别", "category"},
{"充电电量", "charge_elect"}, {"充电次数", "charge_num"}, {"充电时长", "charge_t"}
};
}
else if (category == "3")
{
headers = {
{"日期", "dt"}, {"场站", "station_name"}, {"类别", "category"},
{"发电电量", "solar_elect_gen"}, {"入网电量", "solar_elect_grid"}, {"发电时长", "solar_t"},
};
}
for (int row = 0; row<result.size(); ++row)
{
auto& fields = result[row];
if (category == "1") { fields.value("category") = "储能设备"; }
else if (category == "2") { fields.value("category") = "充电设备"; }
else if (category == "3") { fields.value("category") = "发电设备"; }
for (int col = 0; col<headers.size(); ++col)
{
if (row == 0)
{
xlsx.setCell(row+1, col+1, headers[col].first);
}
xlsx.setCell(row+2, col+1, fields.value(headers[col].second));
}
}
xlsx.close();
}
json["data"] = filename;
return err;
}
Errcode HttpEntity::queryEnvironment(const httplib::Request& req, njson& json, std::string& errmsg)
{
std::string stationId = req.get_param_value("station_id");
@@ -1480,7 +1565,7 @@ Errcode HttpEntity::queryServiceApiList(const httplib::Request& req, njson& json
Errcode HttpEntity::insertServiceApi(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"name", "describe", "params", "is_open"}, params);
GetRequestParams(req, {"name", "describe", "params", "is_open"}, params);
if (params.size() == 0) { return Errcode::ERR_PARAM; }
return DAO::insert(NULL, "serviceapi", params);
@@ -1489,7 +1574,7 @@ Errcode HttpEntity::insertServiceApi(const httplib::Request& req, njson& json, s
Errcode HttpEntity::updateServiceApi(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"api_id", "name", "describe", "params", "is_open"}, params);
GetRequestParams(req, {"api_id", "name", "describe", "params", "is_open"}, params);
if (params.size() == 0) { return Errcode::ERR_PARAM; }
return DAO::update(NULL, "serviceapi", params, "api_id");
@@ -1498,6 +1583,6 @@ Errcode HttpEntity::updateServiceApi(const httplib::Request& req, njson& json, s
Errcode HttpEntity::deleteServiceApi(const httplib::Request& req, njson& json, std::string& errmsg)
{
Fields params;
GetRequestParam(req, {"api_id"}, params);
GetRequestParams(req, {"api_id"}, params);
return DAO::remove(NULL, "serviceapi", "api_id", params.value("api_id"));
}

View File

@@ -99,6 +99,8 @@ public:
// 场站按类某一天的历史曲线数据
Errcode queryStatCharts(const httplib::Request& req, njson& json, std::string& errmsg);
Errcode exportStatReport(const httplib::Request& req, njson& json, std::string& errmsg);
Errcode queryEnvironment(const httplib::Request& req, njson& json, std::string& errmsg);
Errcode queryServiceApiList(const httplib::Request& req, njson& json, std::string& errmsg);