general.hpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #pragma once
  2. //robotics
  3. #include <robotics/mvc.hpp>
  4. #include <robotics/logger.hpp>
  5. #include <robotics/message_bus.hpp>
  6. //local
  7. #include "../xml/xml_context.hpp"
  8. #include "../response/response.hpp"
  9. #include "../models/web_message_info.h"
  10. #include "../models/web_response_info.h"
  11. using namespace robotics;
  12. extern v3::message_bus g_message_bus;
  13. using WebResponse = robotics::v3::mvc::web_result_response;
  14. using HttpContext = robotics::v3::mvc::http_context::curr;
  15. using JumpResponse = robotics::v3::mvc::jump_response;
  16. using TextResponse = robotics::v3::mvc::text_response;
  17. using JsonResponse = robotics::v3::mvc::json_response;
  18. using StreamResponse = robotics::v3::mvc::stream_response;
  19. using DownloadResponse = robotics::v3::mvc::download_response;
  20. using HtmlResponse = robotics::v3::mvc::html_response;
  21. using View = robotics::v3::mvc::view;
  22. /* ************************************************
  23. * 作者:Lenovo
  24. * 时间:2024/5/24 11:04:02
  25. * 机器名:DESKTOP-4I13MDL
  26. * 控制器名:general
  27. * *************************************************/
  28. class general {
  29. public:
  30. general() {}
  31. /**
  32. * @brief 处理对 general/index 路由的请求并返回对应的视图响应。
  33. * @return 返回与 general/index.html 文件映射的 WebResponse 视图。
  34. */
  35. [[Route("general/index")]]
  36. [[FileMapping("general/index.html")]]
  37. WebResponse index() {
  38. return View();
  39. }
  40. /**
  41. * @brief 加载通用配置信息,支持分页和条件筛选。
  42. * @param page 要加载的页码,从1开始。
  43. * @param limit 每页返回的数据条数。
  44. * @param key 用于筛选的关键字,若为空则不筛选。
  45. * @param enable 用于筛选启用状态("true"或"false"),若为空则不筛选。
  46. * @return 包含筛选和分页后通用配置信息的Web响应。
  47. */
  48. [[Route("general/load")]]
  49. WebResponse load(int page, int limit,
  50. std::string key,
  51. std::string enable) {
  52. web_response_info<web_general_config_info> result;
  53. result.data = xml_context::from<web_general_config_info>().
  54. size(result.count).
  55. where([key,enable](auto it)
  56. {
  57. return (enable.empty() || (enable == "true") == it->enable) && (key.empty() || std::atoi(key.c_str()) == it->key);
  58. }).
  59. limit(page, limit);
  60. return JsonResponse(result);
  61. }
  62. /**
  63. * @brief 根据指定的ID获取通用配置信息,并返回编辑视图或错误信息。
  64. * @param id 要查找的通用配置信息的唯一标识符。
  65. * @return 如果找到对应ID的配置信息,则返回其编辑视图;否则返回包含错误信息的JSON响应。
  66. */
  67. [[Route("general/edit_view")]]
  68. [[FileMapping("general/edit.html")]]
  69. WebResponse edit_view(int id) {
  70. std::shared_ptr<web_general_config_info> result =
  71. xml_context::from<web_general_config_info>().
  72. where([id](auto it)
  73. {
  74. return id == it->id;
  75. }).
  76. first();
  77. if (result) {
  78. return View(*result);
  79. }
  80. return JsonResponse(web_message_info{ .success = false,.message = "不存在" });
  81. }
  82. /**
  83. * @brief 编辑通用配置信息。
  84. * @param value 包含要更新的配置信息的 web_general_config_info 对象。
  85. * @return 返回一个 WebResponse,表示编辑操作的结果。
  86. */
  87. [[Method("POST")]]
  88. [[Route("general/edit")]]
  89. [[ContentType("application/json")]]
  90. WebResponse edit([[FromBody("")]] web_general_config_info value) {
  91. web_message_info result;
  92. xml_context::from<web_general_config_info>().
  93. where([value](auto it)
  94. {
  95. return it->id == value.id;
  96. }).
  97. update([value](auto it)
  98. {
  99. it->modify_time = v3::datetime::current_time_stamp();
  100. it->key = value.key;
  101. it->value = value.value;
  102. it->enable = value.enable;
  103. it->remarks = value.remarks;
  104. return true;
  105. }).
  106. submit();
  107. return JsonResponse(result);
  108. }
  109. /**
  110. * @brief 返回用于添加操作的视图页面响应。
  111. * @return 表示添加页面视图的 WebResponse 对象。
  112. */
  113. [[Route("general/add_view")]]
  114. [[FileMapping("general/add.html")]]
  115. WebResponse add_view() {
  116. return View();
  117. }
  118. /**
  119. * @brief 处理添加通用配置信息的 POST 请求。
  120. * @param value 包含要添加的通用配置信息的 JSON 对象。
  121. * @return 返回一个 WebResponse,包含操作结果的 JSON 响应。
  122. */
  123. [[Method("POST")]]
  124. [[Route("general/add")]]
  125. [[ContentType("application/json")]]
  126. WebResponse add([[FromBody("")]] web_general_config_info value) {
  127. web_message_info result;
  128. value.id = 0;
  129. value.modify_time = v3::datetime::current_time_stamp();
  130. xml_context::from<web_general_config_info>().
  131. max(value.id, [](auto it)
  132. {
  133. return it->id;
  134. }).
  135. inc(value.id).
  136. append(value).
  137. submit();
  138. return JsonResponse(result);
  139. }
  140. /**
  141. * @brief 根据提供的ID删除指定的通用配置信息。
  142. * @param id 要删除的通用配置信息的唯一标识符。
  143. * @return 包含操作结果的WebResponse对象。
  144. */
  145. [[Method("POST")]]
  146. [[Route("general/remove")]]
  147. WebResponse remove([[FromBody("id")]] int id) {
  148. web_message_info result;
  149. xml_context::from<web_general_config_info>().
  150. where([id](auto it)
  151. {
  152. return it->id == id;
  153. }).
  154. remove().
  155. submit();
  156. return JsonResponse(result);
  157. }
  158. /**
  159. * @brief 同步指定键的通用信息,并返回操作结果的响应。支持 POST 请求。
  160. * @param key 要同步的键,通过请求体传递。
  161. * @return 包含操作是否成功及相关消息的 WebResponse 对象。
  162. */
  163. [[Method("POST")]]
  164. [[Route("general/sync")]]
  165. WebResponse sync([[FromBody("key")]] int key) {
  166. web_message_info result;
  167. try {
  168. g_message_bus.call("cloud_general_request", key);
  169. }
  170. catch (std::exception const& ec) {
  171. result.success = false;
  172. result.message = ec.what();
  173. }
  174. return JsonResponse(result);
  175. }
  176. };