#pragma once //robotics #include #include #include //local #include "../xml/xml_context.hpp" #include "../response/response.hpp" #include "../models/web_message_info.h" #include "../models/web_response_info.h" using namespace robotics; extern v3::message_bus g_message_bus; using WebResponse = robotics::v3::mvc::web_result_response; using HttpContext = robotics::v3::mvc::http_context::curr; using JumpResponse = robotics::v3::mvc::jump_response; using TextResponse = robotics::v3::mvc::text_response; using JsonResponse = robotics::v3::mvc::json_response; using StreamResponse = robotics::v3::mvc::stream_response; using DownloadResponse = robotics::v3::mvc::download_response; using HtmlResponse = robotics::v3::mvc::html_response; using View = robotics::v3::mvc::view; /* ************************************************ * 作者:Lenovo * 时间:2024/5/24 11:04:02 * 机器名:DESKTOP-4I13MDL * 控制器名:general * *************************************************/ class general { public: general() {} /** * @brief 处理对 general/index 路由的请求并返回对应的视图响应。 * @return 返回与 general/index.html 文件映射的 WebResponse 视图。 */ [[Route("general/index")]] [[FileMapping("general/index.html")]] WebResponse index() { return View(); } /** * @brief 加载通用配置信息,支持分页和条件筛选。 * @param page 要加载的页码,从1开始。 * @param limit 每页返回的数据条数。 * @param key 用于筛选的关键字,若为空则不筛选。 * @param enable 用于筛选启用状态("true"或"false"),若为空则不筛选。 * @return 包含筛选和分页后通用配置信息的Web响应。 */ [[Route("general/load")]] WebResponse load(int page, int limit, std::string key, std::string enable) { web_response_info result; result.data = xml_context::from(). size(result.count). where([key,enable](auto it) { return (enable.empty() || (enable == "true") == it->enable) && (key.empty() || std::atoi(key.c_str()) == it->key); }). limit(page, limit); return JsonResponse(result); } /** * @brief 根据指定的ID获取通用配置信息,并返回编辑视图或错误信息。 * @param id 要查找的通用配置信息的唯一标识符。 * @return 如果找到对应ID的配置信息,则返回其编辑视图;否则返回包含错误信息的JSON响应。 */ [[Route("general/edit_view")]] [[FileMapping("general/edit.html")]] WebResponse edit_view(int id) { std::shared_ptr result = xml_context::from(). where([id](auto it) { return id == it->id; }). first(); if (result) { return View(*result); } return JsonResponse(web_message_info{ .success = false,.message = "不存在" }); } /** * @brief 编辑通用配置信息。 * @param value 包含要更新的配置信息的 web_general_config_info 对象。 * @return 返回一个 WebResponse,表示编辑操作的结果。 */ [[Method("POST")]] [[Route("general/edit")]] [[ContentType("application/json")]] WebResponse edit([[FromBody("")]] web_general_config_info value) { web_message_info result; xml_context::from(). where([value](auto it) { return it->id == value.id; }). update([value](auto it) { it->modify_time = v3::datetime::current_time_stamp(); it->key = value.key; it->value = value.value; it->enable = value.enable; it->remarks = value.remarks; return true; }). submit(); return JsonResponse(result); } /** * @brief 返回用于添加操作的视图页面响应。 * @return 表示添加页面视图的 WebResponse 对象。 */ [[Route("general/add_view")]] [[FileMapping("general/add.html")]] WebResponse add_view() { return View(); } /** * @brief 处理添加通用配置信息的 POST 请求。 * @param value 包含要添加的通用配置信息的 JSON 对象。 * @return 返回一个 WebResponse,包含操作结果的 JSON 响应。 */ [[Method("POST")]] [[Route("general/add")]] [[ContentType("application/json")]] WebResponse add([[FromBody("")]] web_general_config_info value) { web_message_info result; value.id = 0; value.modify_time = v3::datetime::current_time_stamp(); xml_context::from(). max(value.id, [](auto it) { return it->id; }). inc(value.id). append(value). submit(); return JsonResponse(result); } /** * @brief 根据提供的ID删除指定的通用配置信息。 * @param id 要删除的通用配置信息的唯一标识符。 * @return 包含操作结果的WebResponse对象。 */ [[Method("POST")]] [[Route("general/remove")]] WebResponse remove([[FromBody("id")]] int id) { web_message_info result; xml_context::from(). where([id](auto it) { return it->id == id; }). remove(). submit(); return JsonResponse(result); } /** * @brief 同步指定键的通用信息,并返回操作结果的响应。支持 POST 请求。 * @param key 要同步的键,通过请求体传递。 * @return 包含操作是否成功及相关消息的 WebResponse 对象。 */ [[Method("POST")]] [[Route("general/sync")]] WebResponse sync([[FromBody("key")]] int key) { web_message_info result; try { g_message_bus.call("cloud_general_request", key); } catch (std::exception const& ec) { result.success = false; result.message = ec.what(); } return JsonResponse(result); } };