123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- #pragma once
- //robotics
- #include <robotics/mvc.hpp>
- #include <robotics/logger.hpp>
- #include <robotics/message_bus.hpp>
- //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<web_general_config_info> result;
- result.data = xml_context::from<web_general_config_info>().
- 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<web_general_config_info> result =
- xml_context::from<web_general_config_info>().
- 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<web_general_config_info>().
- 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<web_general_config_info>().
- 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<web_general_config_info>().
- 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);
- }
- };
|