mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
调试修改HTTP接口
This commit is contained in:
@@ -15,6 +15,40 @@ static void FieldsToJson(Fields& fields, NJsonNode& json)
|
||||
json[item.first] = item.second;
|
||||
}
|
||||
}
|
||||
static void JsonToFields(NJsonNode& json, std::vector<std::string> vecKeys, Fields& fields)
|
||||
{
|
||||
if (vecKeys.empty())
|
||||
{
|
||||
for (auto& item: json.items())
|
||||
{
|
||||
auto key = item.key();
|
||||
auto& val = json[key];
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& key : vecKeys)
|
||||
{
|
||||
if (json.contains(key)) {
|
||||
|
||||
switch (json[key].type())
|
||||
{
|
||||
case NJsonNode::value_t::string: { fields.set(key, json[key].get<std::string>()); } break;
|
||||
case NJsonNode::value_t::boolean: { fields.set(key, json[key].get<bool>()); } break;
|
||||
case NJsonNode::value_t::number_integer: { fields.set(key, json[key].get<int>()); } break;
|
||||
case NJsonNode::value_t::number_unsigned: { fields.set(key, json[key].get<int>()); } break;
|
||||
case NJsonNode::value_t::number_float: { fields.set(key, json[key].get<float>()); } break;
|
||||
case NJsonNode::value_t::null: {} break;
|
||||
case NJsonNode::value_t::object: {} break;
|
||||
case NJsonNode::value_t::array: {} break;
|
||||
case NJsonNode::value_t::binary: {} break;
|
||||
case NJsonNode::value_t::discarded: {} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static NJsonNode FieldsToJsonArray(std::vector<Fields>& vecFields)
|
||||
{
|
||||
@@ -33,7 +67,6 @@ static NJsonNode FieldsToJsonArray(std::vector<Fields>& vecFields)
|
||||
|
||||
static void GetRequestParam(const httplib::Request& req, const std::vector<std::string>& vecKeys, Fields& fields)
|
||||
{
|
||||
|
||||
if (req.method == "GET")
|
||||
{
|
||||
for (auto& key : vecKeys)
|
||||
@@ -48,30 +81,8 @@ static void GetRequestParam(const httplib::Request& req, const std::vector<std::
|
||||
{
|
||||
NJsonNode json;
|
||||
NJson::parse(req.body, json);
|
||||
for (auto& key : vecKeys)
|
||||
{
|
||||
if (json.contains(key)) {
|
||||
|
||||
switch (json[key].type())
|
||||
{
|
||||
case NJsonNode::value_t::string: { fields.set(key, json[key].get<std::string>()); } break;
|
||||
case NJsonNode::value_t::boolean: { fields.set(key, json[key].get<bool>()); } break;
|
||||
case NJsonNode::value_t::number_integer: { fields.set(key, json[key].get<int>()); } break;
|
||||
case NJsonNode::value_t::number_unsigned: { fields.set(key, json[key].get<int>()); } break;
|
||||
case NJsonNode::value_t::number_float: { fields.set(key, json[key].get<float>()); } break;
|
||||
case NJsonNode::value_t::null: {} break;
|
||||
case NJsonNode::value_t::object: {} break;
|
||||
case NJsonNode::value_t::array: {} break;
|
||||
case NJsonNode::value_t::binary: {} break;
|
||||
case NJsonNode::value_t::discarded: {} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class HttpHelper
|
||||
@@ -82,7 +93,16 @@ public:
|
||||
errmsg = "";
|
||||
for (auto& key : vecKeys)
|
||||
{
|
||||
if (!req.has_param(key))
|
||||
bool hasParam = false;
|
||||
if (req.method == "GET")
|
||||
{
|
||||
hasParam = req.has_param(key);
|
||||
}
|
||||
else
|
||||
{
|
||||
hasParam = (req.body.find("\"" + key + "\"") != std::string::npos);
|
||||
}
|
||||
if (!hasParam)
|
||||
{
|
||||
if (!errmsg.empty()) { errmsg += ","; }
|
||||
errmsg += "缺少参数[" + key + "]";
|
||||
@@ -103,20 +123,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
using HandlerFunc = Errcode(HttpEntity::*)(const httplib::Request& req, httplib::Response& resp, NJsonNode& jnode);
|
||||
|
||||
struct HandlerOptions
|
||||
{
|
||||
HandlerFunc func;
|
||||
std::vector<std::string> requiredKeys;
|
||||
std::vector<std::string> keys;
|
||||
|
||||
|
||||
HandlerOptions(HandlerFunc func, const std::vector<std::string>& requiredKeys)
|
||||
: func(func), requiredKeys(requiredKeys)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
static std::map<std::string, HandlerOptions> g_mapHttpHandlerGet =
|
||||
{
|
||||
@@ -134,7 +141,7 @@ static std::map<std::string, HandlerOptions> g_mapHttpHandlerGet =
|
||||
{"/deleteStation", HandlerOptions(&HttpEntity::deleteStation, { DMStation::STATION_ID})},
|
||||
|
||||
{"/queryStationInfo", HandlerOptions(&HttpEntity::queryStationInfo, { DMStation::STATION_ID})},
|
||||
{"/queryStationRuntime", HandlerOptions(&HttpEntity::queryStationRuntime, { DMStation::STATION_ID})},
|
||||
{"/queryStationData", HandlerOptions(&HttpEntity::queryStationData, { DMStation::STATION_ID})},
|
||||
|
||||
{"/queryDeviceList", HandlerOptions(&HttpEntity::queryDeviceList, {})},
|
||||
{"/deleteDevice", HandlerOptions(&HttpEntity::deleteDevice, { DMDevice::DEVICE_ID})},
|
||||
@@ -142,7 +149,6 @@ static std::map<std::string, HandlerOptions> g_mapHttpHandlerGet =
|
||||
|
||||
{"/queryPolicyList", HandlerOptions(&HttpEntity::queryPolicyList, {})},
|
||||
|
||||
|
||||
{"/deletePolicy", HandlerOptions(&HttpEntity::deletePolicy, { DMPolicy::POLICY_ID})},
|
||||
|
||||
{"/querySystemLogList", HandlerOptions(&HttpEntity::querySystemLogList, {})},
|
||||
@@ -202,70 +208,22 @@ bool CheckHttpToken(const httplib::Request& req)
|
||||
|
||||
HttpEntity::HttpEntity()
|
||||
{
|
||||
bool useToken = Config::option.http.useToken;
|
||||
for (auto& item : g_mapHttpHandlerGet)
|
||||
{
|
||||
std::string name = item.first;
|
||||
HandlerOptions& handler = item.second;
|
||||
this->httpsvr.Get(name, [=, &handler](const httplib::Request& req, httplib::Response& resp)
|
||||
{
|
||||
spdlog::info("[http] request: {}", name);
|
||||
Errcode errcode = Errcode::OK;
|
||||
if (name != "/login" && useToken)
|
||||
{
|
||||
bool ret = CheckHttpToken(req);
|
||||
errcode = ret ? Errcode::OK : Errcode::ERR_TOKEN;
|
||||
}
|
||||
|
||||
NJsonNode json;
|
||||
std::string errmsg;
|
||||
if (errcode == Errcode::OK)
|
||||
{
|
||||
if (!HttpHelper::CheckRequestParam(req, resp, handler.requiredKeys, errmsg))
|
||||
{
|
||||
errcode = Errcode::ERR_PARAM;
|
||||
}
|
||||
else
|
||||
{
|
||||
errcode = (this->*(handler.func))(req, resp, json);
|
||||
}
|
||||
}
|
||||
json["errcode"] = errcode;
|
||||
json["errmsg"] = ErrcodeStr(errcode) + (errmsg.empty() ? "" : (":"+errmsg));
|
||||
resp.set_content(json.dump(), "text/plain; charset=utf-8");
|
||||
resp.status = 200;
|
||||
this->runHandler(name, handler, req, resp);
|
||||
});
|
||||
}
|
||||
|
||||
for (auto& item : g_mapHttpHandlerPost)
|
||||
{
|
||||
std::string name = item.first;
|
||||
HandlerOptions& handler = item.second;
|
||||
this->httpsvr.Post(name, [=](const httplib::Request& req, httplib::Response& resp)
|
||||
{
|
||||
Errcode errcode = Errcode::OK;
|
||||
std::string errmsg;
|
||||
if (name != "/login" && useToken)
|
||||
{
|
||||
bool ret = CheckHttpToken(req);
|
||||
errcode = ret ? Errcode::OK : Errcode::ERR_TOKEN;
|
||||
}
|
||||
|
||||
if (errcode == Errcode::OK)
|
||||
{
|
||||
NJsonNode jsonparam;
|
||||
bool ret = NJson::parse(req.body, jsonparam);
|
||||
if (ret)
|
||||
{
|
||||
errcode = (this->*(handler.func))(req, resp, jsonparam);
|
||||
}
|
||||
}
|
||||
|
||||
NJsonNode json;
|
||||
json["errcode"] = errcode;
|
||||
json["errmsg"] = ErrcodeStr(errcode) + (errmsg.empty() ? "" : (":"+errmsg));
|
||||
resp.set_content(json.dump(), "text/plain; charset=utf-8");
|
||||
resp.status = 200;
|
||||
this->runHandler(name, handler, req, resp);
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -277,6 +235,37 @@ void HttpEntity::listen(std::string addr, int port)
|
||||
httpsvr.listen(addr, port); // 阻塞
|
||||
}
|
||||
|
||||
void HttpEntity::runHandler(std::string name, const HandlerOptions& handler, const httplib::Request& req, httplib::Response& resp)
|
||||
{
|
||||
spdlog::info("[http] request: {}", name);
|
||||
bool useToken = Config::option.http.useToken;
|
||||
Errcode errcode = Errcode::OK;
|
||||
std::string errmsg;
|
||||
|
||||
if (name != "/login" && useToken)
|
||||
{
|
||||
bool ret = CheckHttpToken(req);
|
||||
errcode = ret ? Errcode::OK : Errcode::ERR_TOKEN;
|
||||
}
|
||||
|
||||
NJsonNode jsonresp;
|
||||
if (errcode == Errcode::OK)
|
||||
{
|
||||
if (!HttpHelper::CheckRequestParam(req, resp, handler.requiredKeys, errmsg))
|
||||
{
|
||||
errcode = Errcode::ERR_PARAM;
|
||||
}
|
||||
else
|
||||
{
|
||||
errcode = (this->*(handler.func))(req, resp, jsonresp);
|
||||
}
|
||||
}
|
||||
jsonresp["errcode"] = errcode;
|
||||
jsonresp["errmsg"] = ErrcodeStr(errcode) + (errmsg.empty() ? "" : (":"+errmsg));
|
||||
resp.set_content(jsonresp.dump(), "text/plain; charset=utf-8");
|
||||
resp.status = 200;
|
||||
}
|
||||
|
||||
void HttpEntity::registGet(std::string name, void (HttpEntity::* func)(const httplib::Request& req, httplib::Response& resp))
|
||||
{
|
||||
this->httpsvr.Get(name, std::bind(func, this, std::placeholders::_1, std::placeholders::_2));
|
||||
@@ -302,9 +291,14 @@ Errcode HttpEntity::login(const httplib::Request& req, httplib::Response& resp,
|
||||
int roleId = fields.get<int>(DMRole::ROLE_ID);
|
||||
DAO::queryRolePermission(dao, roleId, vecPermission);
|
||||
|
||||
NJsonNode jnode = NJsonNode::array();
|
||||
for (auto& item : vecPermission) { jnode.push_back(item.value("name")); }
|
||||
json["permission"] = jnode;
|
||||
NJsonNode nodePermission = NJsonNode::array();
|
||||
for (auto& item : vecPermission)
|
||||
{
|
||||
NJsonNode node;
|
||||
FieldsToJson(item, node);
|
||||
nodePermission.push_back(node);
|
||||
}
|
||||
json["permission"] = nodePermission;
|
||||
}
|
||||
|
||||
DAO::insertSystemLogUser(token, "用户登录:" + ErrcodeStr(err), (err==Errcode::OK) ? 0: 1);
|
||||
@@ -338,7 +332,7 @@ Errcode HttpEntity::insertUser(const httplib::Request& req, httplib::Response& r
|
||||
Errcode HttpEntity::updateUser(const httplib::Request& req, httplib::Response& resp, NJsonNode& json)
|
||||
{
|
||||
Fields params;
|
||||
GetRequestParam(req, {"user_id", "name", "gender", "age", "phone", "email", "role_id"}, params);
|
||||
GetRequestParam(req, {"user_id", "account", "name", "gender", "age", "phone", "email", "role_id"}, params);
|
||||
return DAO::updateUserById(params);
|
||||
}
|
||||
|
||||
@@ -401,14 +395,13 @@ Errcode HttpEntity::queryRoleList(const httplib::Request& req, httplib::Response
|
||||
}
|
||||
|
||||
std::map<std::string, std::vector<NJsonNode>> mapPermission;
|
||||
for (auto& item: vecPermission)
|
||||
for (auto& fields: vecPermission)
|
||||
{
|
||||
std::string roleId = item.value("role_id");
|
||||
std::string roleId = fields.value("role_id");
|
||||
auto& v = mapPermission[roleId];
|
||||
NJsonNode jnode;
|
||||
jnode["id"] = item.value("permission_id");
|
||||
jnode["name"] = item.value("permission_name");
|
||||
v.push_back(jnode);
|
||||
NJsonNode node;
|
||||
FieldsToJson(fields, node);
|
||||
v.push_back(node);
|
||||
}
|
||||
|
||||
HttpHelper::setPagination(pageinfo, result, json);
|
||||
@@ -433,8 +426,38 @@ Errcode HttpEntity::insertRole(const httplib::Request& req, httplib::Response& r
|
||||
Errcode HttpEntity::updateRole(const httplib::Request& req, httplib::Response& resp, NJsonNode& json)
|
||||
{
|
||||
Fields params;
|
||||
GetRequestParam(req, {"role_id", "name", "describe", "is_open", "permission"}, params);
|
||||
return DAO::updateRoleById(params);
|
||||
//GetRequestParam(req, {"role_id", "name", "describe", "is_open", "permission"}, params);
|
||||
|
||||
NJsonNode jsonparam;
|
||||
if (!NJson::parse(req.body, jsonparam))
|
||||
{
|
||||
return Errcode::ERR_PARAM;
|
||||
}
|
||||
JsonToFields(jsonparam, {"role_id", "name", "describe", "is_open"}, params);
|
||||
|
||||
auto roleId = params.value("role_id");
|
||||
|
||||
auto dao = DaoEntity::create("");
|
||||
auto err = DAO::updateRoleById(dao, params);
|
||||
if (err == Errcode::OK && jsonparam.contains("permission"))
|
||||
{
|
||||
if (jsonparam["permission"].is_array())
|
||||
{
|
||||
|
||||
auto& jsonPermission = jsonparam["permission"];
|
||||
std::vector<Fields> vecFields(jsonPermission.size());
|
||||
int i = 0;
|
||||
for (auto& item: jsonPermission)
|
||||
{
|
||||
auto& fields = vecFields[i];
|
||||
i++;
|
||||
JsonToFields(item, {"permission_id", "is_add", "is_del", "is_edit", "is_view"}, fields);
|
||||
fields.set("role_id", roleId);
|
||||
}
|
||||
err = DAO::updateRolePermission(dao, roleId, vecFields);
|
||||
}
|
||||
}
|
||||
return err;
|
||||
};
|
||||
Errcode HttpEntity::deleteRole(const httplib::Request& req, httplib::Response& resp, NJsonNode& json)
|
||||
{
|
||||
@@ -594,7 +617,9 @@ Errcode HttpEntity::updatePolicy(const httplib::Request& req, httplib::Response&
|
||||
};
|
||||
Errcode HttpEntity::deletePolicy(const httplib::Request& req, httplib::Response& resp, NJsonNode& json)
|
||||
{
|
||||
return DAO::deletePolicyById(req.get_param_value("prolicy_id"));
|
||||
Fields params;
|
||||
GetRequestParam(req, {"policy_id"}, params);
|
||||
return DAO::deletePolicyById(params.value("policy_id"));
|
||||
};
|
||||
|
||||
Errcode HttpEntity::querySystemLogList(const httplib::Request& req, httplib::Response& resp, NJsonNode& json)
|
||||
@@ -695,8 +720,8 @@ Errcode HttpEntity::queryStatTotal(const httplib::Request& req, httplib::Respons
|
||||
jsondata["charge_elect"] = "123.123"; //充电设备充电电量(kWh),精度:0.001
|
||||
jsondata["charge_num"] = "1"; //充电设备充电次数
|
||||
jsondata["charge_num_err"] = "1"; //充电设备故障次数
|
||||
jsondata["income_elect"] = "123.123"; //发电收益(元),精度:0.01
|
||||
jsondata["income_charge"] = "123.123"; //充电收益(元),精度:0.01
|
||||
jsondata["income_elect"] = "123.123"; //发电收益(元),精度:0.01
|
||||
jsondata["income_charge"] = "123.123"; //充电收益(元),精度:0.01
|
||||
|
||||
json["data"] = jsondata;
|
||||
return Errcode::OK;
|
||||
|
||||
Reference in New Issue
Block a user