TestController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. package com.zksy.screen.controller;
  2. import cn.hutool.core.util.BooleanUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import cn.hutool.json.JSONConfig;
  5. import cn.hutool.json.JSONUtil;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.fasterxml.jackson.core.JsonProcessingException;
  8. import com.fasterxml.jackson.databind.JsonNode;
  9. import com.fasterxml.jackson.databind.ObjectMapper;
  10. import com.fasterxml.jackson.databind.node.ObjectNode;
  11. import com.zksy.common.core.domain.Result;
  12. import com.zksy.screen.domain.po.ScreenControl;
  13. import com.zksy.screen.domain.request.InvokeBuild;
  14. import com.zksy.screen.domain.request.TopWebPage;
  15. import com.zksy.screen.service.ScreenControlService;
  16. import io.swagger.annotations.Api;
  17. import io.swagger.annotations.ApiOperation;
  18. import io.swagger.annotations.ApiParam;
  19. import lombok.extern.slf4j.Slf4j;
  20. import okhttp3.*;
  21. import okhttp3.RequestBody;
  22. import okhttp3.ResponseBody;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.web.bind.annotation.*;
  25. import java.io.IOException;
  26. import java.util.Date;
  27. import java.util.List;
  28. import java.util.Optional;
  29. @RestController
  30. @Api(tags = "灯杆大屏", description = "灯杆大屏")
  31. @RequestMapping("/test")
  32. @Slf4j
  33. public class TestController {
  34. @Autowired
  35. private OkHttpClient httpClient;
  36. private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
  37. private final String BASE_URL = "http://172.16.102.52:8016/command/";
  38. @Autowired
  39. private ScreenControlService screenControlService;
  40. @GetMapping("/a")
  41. private Result<String> test() {
  42. return Result.ok("爱与和平");
  43. }
  44. @PostMapping("/a")
  45. private String test2() {
  46. return "爱与和平";
  47. }
  48. @ApiOperation(value = "清屏,清除顶层网页内容")
  49. @PostMapping("/clearTopWebPage")
  50. public Result clearTopWebPage(
  51. @ApiParam(value = "设备编码", required = true) @RequestParam(value = "deviceCode", defaultValue = "") String deviceCode) {
  52. ObjectMapper objectMapper = new ObjectMapper();
  53. ObjectNode jsonNodes = objectMapper.createObjectNode();
  54. jsonNodes.put("type", "clear");
  55. String jsonParams = null;
  56. try {
  57. jsonParams = objectMapper.writeValueAsString(jsonNodes);
  58. } catch (JsonProcessingException e) {
  59. log.error("JSON序列化失败: {}", e.getMessage());
  60. return Result.error("请求失败");
  61. }
  62. // 创建请求体
  63. RequestBody body = RequestBody.create(jsonParams, JSON);
  64. // 构建请求
  65. Request requestHttp = new Request.Builder()
  66. .url(BASE_URL + deviceCode)
  67. .post(body)
  68. .build();
  69. // 发送请求
  70. try (Response response = httpClient.newCall(requestHttp).execute()) {
  71. if (!response.isSuccessful()) {
  72. return Result.error("请求失败");
  73. }
  74. ResponseBody responseBody = response.body();
  75. if (responseBody != null) {
  76. String responseString = responseBody.string();
  77. JsonNode rootNode = objectMapper.readTree(responseString);
  78. JsonNode success = rootNode.path("_type");
  79. if ("success".equals(success.asText())) {
  80. return Result.ok("清屏成功");
  81. } else {
  82. return Result.error("清屏,清除顶层网页内容失败");
  83. }
  84. }
  85. } catch (IOException e) {
  86. log.error("请求失败: {}", e.getMessage());
  87. }
  88. return Result.error("请求失败");
  89. }
  90. @ApiOperation(value = "加载顶层网页")
  91. @PostMapping("/getTopWebPage")
  92. public Result getTopWebPage(
  93. TopWebPage request,
  94. @ApiParam(value = "设备编码", required = true) @RequestParam(value = "deviceCode", defaultValue = "") String deviceCode) {
  95. if(StrUtil.isBlank(request.getUrl())){
  96. return Result.error("url不能为空");
  97. }
  98. ObjectMapper objectMapper = new ObjectMapper();
  99. ObjectNode jsonNodes = objectMapper.createObjectNode();
  100. jsonNodes.put("type",Optional.ofNullable(request.getType()).orElse("loadUrl"));
  101. jsonNodes.put("persistent",Optional.ofNullable(request.getPersistent()).orElse(true));
  102. jsonNodes.put("url",request.getUrl());
  103. String jsonParams = null;
  104. try {
  105. jsonParams = objectMapper.writeValueAsString(jsonNodes);
  106. } catch (JsonProcessingException e) {
  107. log.error("JSON序列化失败: {}", e.getMessage());
  108. return Result.error("请求失败");
  109. }
  110. // 创建请求体
  111. RequestBody body = RequestBody.create(jsonParams, JSON);
  112. // 构建请求
  113. Request requestHttp = new Request.Builder()
  114. .url(BASE_URL + deviceCode)
  115. .post(body)
  116. .build();
  117. // 发送请求
  118. try (Response response = httpClient.newCall(requestHttp).execute()) {
  119. if (!response.isSuccessful()) {
  120. return Result.error("请求失败");
  121. }
  122. ResponseBody responseBody = response.body();
  123. if (responseBody != null) {
  124. String responseString = responseBody.string();
  125. JsonNode rootNode = objectMapper.readTree(responseString);
  126. JsonNode success = rootNode.path("_type");
  127. if ("success".equals(success.asText())) {
  128. return Result.ok("加载顶层网页成功");
  129. } else {
  130. return Result.error("加载顶层网页失败");
  131. }
  132. }
  133. } catch (IOException e) {
  134. log.error("请求失败: {}", e.getMessage());
  135. }
  136. return Result.error("请求失败");
  137. }
  138. @ApiOperation(value = "开关屏")
  139. @PostMapping("/turnOffOrLight")
  140. public Result turnOffOrLight(
  141. @ApiParam(value = "设备编码", required = true) @RequestParam(value = "deviceCode", defaultValue = "") String deviceCode,
  142. @ApiParam(value = "指令", required = true) @RequestParam(value = "cmd") Boolean cmd){
  143. if(cmd == null){
  144. return Result.error("cmd不能为空");
  145. }
  146. ObjectMapper objectMapper = new ObjectMapper();
  147. ObjectNode jsonNodes = objectMapper.createObjectNode();
  148. jsonNodes.put("type","callCardService");
  149. jsonNodes.put("fn","setScreenOpen");
  150. jsonNodes.put("arg1",cmd);
  151. String jsonParams = null;
  152. try {
  153. jsonParams = objectMapper.writeValueAsString(jsonNodes);
  154. } catch (JsonProcessingException e) {
  155. log.error("JSON序列化失败: {}", e.getMessage());
  156. return Result.error("请求失败");
  157. }
  158. // 创建请求体
  159. RequestBody body = RequestBody.create(jsonParams, JSON);
  160. // 构建请求
  161. Request requestHttp = new Request.Builder()
  162. .url(BASE_URL + deviceCode)
  163. .post(body)
  164. .build();
  165. // 发送请求
  166. try (Response response = httpClient.newCall(requestHttp).execute()) {
  167. if (!response.isSuccessful()) {
  168. return Result.error("请求失败");
  169. }
  170. ResponseBody responseBody = response.body();
  171. if (responseBody != null) {
  172. String responseString = responseBody.string();
  173. JsonNode rootNode = objectMapper.readTree(responseString);
  174. JsonNode success = rootNode.path("_type");
  175. if ("success".equals(success.asText())) {
  176. return Result.ok("发送指令成功");
  177. } else {
  178. return Result.error("发送指令失败");
  179. }
  180. }
  181. } catch (IOException e) {
  182. log.error("请求失败: {}", e.getMessage());
  183. }
  184. return Result.error("请求失败");
  185. }
  186. @ApiOperation(value = "查询屏幕状态")
  187. @PostMapping("/checkScreenState")
  188. public Result checkScreenState(
  189. @ApiParam(value = "设备编码", required = true) @RequestParam(value = "deviceCode", defaultValue = "") String deviceCode
  190. ){
  191. ObjectMapper objectMapper = new ObjectMapper();
  192. ObjectNode jsonNodes = objectMapper.createObjectNode();
  193. jsonNodes.put("type","callCardService");
  194. jsonNodes.put("fn","isScreenOpen");
  195. String jsonParams = null;
  196. try {
  197. jsonParams = objectMapper.writeValueAsString(jsonNodes);
  198. } catch (JsonProcessingException e) {
  199. log.error("JSON序列化失败: {}", e.getMessage());
  200. return Result.error("请求失败");
  201. }
  202. // 创建请求体
  203. RequestBody body = RequestBody.create(jsonParams, JSON);
  204. // 构建请求
  205. Request requestHttp = new Request.Builder()
  206. .url(BASE_URL + deviceCode)
  207. .post(body)
  208. .build();
  209. // 发送请求
  210. try (Response response = httpClient.newCall(requestHttp).execute()) {
  211. if (!response.isSuccessful()) {
  212. return Result.error("请求失败");
  213. }
  214. ResponseBody responseBody = response.body();
  215. if (responseBody != null) {
  216. String responseString = responseBody.string();
  217. JsonNode rootNode = objectMapper.readTree(responseString);
  218. JsonNode success = rootNode.path("_type");
  219. if ("success".equals(success.asText())) {
  220. boolean result = rootNode.path("result").asBoolean();
  221. return Result.ok(result);
  222. } else {
  223. return Result.error("发送指令失败");
  224. }
  225. }
  226. } catch (IOException e) {
  227. log.error("请求失败: {}", e.getMessage());
  228. }
  229. return Result.error("请求失败");
  230. }
  231. @ApiOperation(value = "添加屏幕控制")
  232. @PostMapping("/addScreenControl")
  233. public Result addScreenControl(@org.springframework.web.bind.annotation.RequestBody ScreenControl screenControl) {
  234. screenControl.setCreateTime(new Date());
  235. boolean saved = screenControlService.save(screenControl);
  236. if (saved) {
  237. return Result.ok("添加成功");
  238. } else {
  239. return Result.error("添加失败");
  240. }
  241. }
  242. @ApiOperation(value = "删除屏幕控制")
  243. @DeleteMapping("/deleteScreenControl/{id}")
  244. public Result deleteScreenControl(@PathVariable Long id) {
  245. boolean deleted = screenControlService.removeById(id);
  246. if (deleted) {
  247. return Result.ok("删除成功");
  248. } else {
  249. return Result.error("删除失败");
  250. }
  251. }
  252. @ApiOperation(value = "更新屏幕控制")
  253. @PutMapping("/updateScreenControl")
  254. public Result updateScreenControl(@org.springframework.web.bind.annotation.RequestBody ScreenControl screenControl) {
  255. screenControl.setUpdateTime(new Date());
  256. boolean updated = screenControlService.updateById(screenControl);
  257. if (updated) {
  258. return Result.ok("更新成功");
  259. } else {
  260. return Result.error("更新失败");
  261. }
  262. }
  263. @ApiOperation(value = "根据设备id获取屏幕控制")
  264. @GetMapping("/getScreenControl/{deviceId}")
  265. public Result getScreenControl(@PathVariable String deviceId) {
  266. ScreenControl screenControl = screenControlService.getOne(new QueryWrapper<ScreenControl>().eq("device_id", deviceId));
  267. if (screenControl != null) {
  268. return Result.ok(screenControl);
  269. } else {
  270. return Result.error("记录不存在");
  271. }
  272. }
  273. @ApiOperation(value = "获取全部屏幕控制")
  274. @GetMapping("/getAllScreenControl")
  275. public Result getAllScreenControl() {
  276. List<ScreenControl> screenControls = screenControlService.list();
  277. if (screenControls != null) {
  278. return Result.ok(screenControls);
  279. } else {
  280. return Result.error("记录不存在");
  281. }
  282. }
  283. }