PerceptionController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. package com.usky.controller;
  2. import cn.hutool.core.util.IdUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import cn.hutool.extra.qrcode.QrCodeUtil;
  5. import com.baomidou.mybatisplus.extension.api.R;
  6. import com.fasterxml.jackson.databind.JsonNode;
  7. import com.fasterxml.jackson.databind.ObjectMapper;
  8. import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
  9. import com.usky.common.annotation.ModuleRequired;
  10. import com.usky.common.bo.CommonBo;
  11. import com.usky.common.listener.ConfigCacheListener;
  12. import com.usky.common.utils.QrCodeUtils;
  13. import com.usky.global.Common;
  14. import com.usky.modules.entity.global.bo.ChannelAddBo;
  15. import com.usky.modules.entity.global.vo.FeatureVo;
  16. import com.usky.modules.entity.perception.bo.PerceptionChannelListBo;
  17. import com.usky.modules.entity.perception.bo.PerceptionDeviceAddBo;
  18. import com.usky.modules.entity.perception.bo.PerceptionEventAddBo;
  19. import com.usky.modules.entity.perception.bo.PerceptionUpdateHeartBo;
  20. import com.usky.modules.entity.usbalarm.bo.ChannelUpdateBo;
  21. import com.usky.modules.service.PerceptionEventCodeService;
  22. import io.swagger.annotations.Api;
  23. import io.swagger.annotations.ApiOperation;
  24. import java.io.IOException;
  25. import javax.servlet.http.HttpServletRequest;
  26. import org.apache.commons.lang.StringUtils;
  27. import org.slf4j.Logger;
  28. import org.slf4j.LoggerFactory;
  29. import org.springframework.web.bind.annotation.ModelAttribute;
  30. import org.springframework.web.bind.annotation.PostMapping;
  31. import org.springframework.web.bind.annotation.RequestBody;
  32. import org.springframework.web.bind.annotation.RequestParam;
  33. import org.springframework.web.bind.annotation.RestController;
  34. import org.springframework.web.multipart.MultipartHttpServletRequest;
  35. @RestController
  36. @Api(
  37. tags = {"状态感知探测控制器"}
  38. )
  39. @ModuleRequired("1009")
  40. public class PerceptionController {
  41. private static final Logger log = LoggerFactory.getLogger(PerceptionController.class);
  42. private final PerceptionEventCodeService service;
  43. private final ConfigCacheListener config;
  44. @ApiOperation("状态感知探测控制器对外接口")
  45. @PostMapping({"/agbox/device/perception", "/agbox/device/perception/**"})
  46. public Object patrol(@ModelAttribute CommonBo bo, HttpServletRequest servletRequest) throws IOException {
  47. log.info("状态感知控制器请求报文:{}", bo.toString());
  48. String key = bo.getKey();
  49. String json = bo.getJson();
  50. if (StrUtil.isNotBlank(this.config.getConfig("key")) && !Common.key.equals(this.config.getConfig("key")) && !key.equals(this.config.getConfig("key"))) {
  51. return R.failed("key错误或缺失!");
  52. } else if (StringUtils.isBlank(json)) {
  53. return R.failed("json不能为空!");
  54. } else {
  55. JsonNode jsonNode = (new ObjectMapper()).readTree(json);
  56. String jsonrpc = null;
  57. String standjsonrpc = jsonNode.path("jsonrpc").asText();
  58. if (StrUtil.isNotBlank(standjsonrpc)) {
  59. if (!standjsonrpc.equals("2.0")) {
  60. return R.failed("JSON-RPC 协议版本的字符串,必须准确写为'2.0'!");
  61. }
  62. jsonrpc = standjsonrpc;
  63. }
  64. String json_rpc = jsonNode.path("json-rpc").asText();
  65. if (StrUtil.isNotBlank(json_rpc)) {
  66. if (!json_rpc.equals("2.0")) {
  67. return R.failed("JSON-RPC 协议版本的字符串,必须准确写为'2.0'!");
  68. }
  69. jsonrpc = json_rpc;
  70. }
  71. if (StrUtil.isBlank(json_rpc) && StrUtil.isBlank(jsonrpc)) {
  72. return R.failed("JSON-RPC 协议版本的字符串,必须准确写为'2.0'!");
  73. } else {
  74. String method = jsonNode.path("method").asText();
  75. JsonNode params = jsonNode.path("params");
  76. MultipartHttpServletRequest request = null;
  77. if (servletRequest instanceof MultipartHttpServletRequest) {
  78. request = (MultipartHttpServletRequest)servletRequest;
  79. }
  80. if (method.equals("getEventCode")) {
  81. String id = jsonNode.path("id").asText();
  82. return this.getEventCode(jsonrpc, id);
  83. } else if (method.equals("addEvent")) {
  84. String id = jsonNode.path("id").asText();
  85. PerceptionEventAddBo eventAddBo = (PerceptionEventAddBo)(new ObjectMapper()).registerModule(new JavaTimeModule()).treeToValue(params, PerceptionEventAddBo.class);
  86. return this.addEvent(jsonrpc, eventAddBo, request, id, servletRequest);
  87. } else if (method.equals("updateHeart")) {
  88. String id = jsonNode.path("id").asText();
  89. PerceptionUpdateHeartBo updateHeartBo = (PerceptionUpdateHeartBo)(new ObjectMapper()).registerModule(new JavaTimeModule()).treeToValue(params, PerceptionUpdateHeartBo.class);
  90. return this.updateHeart(jsonrpc, updateHeartBo, servletRequest, id);
  91. } else if (method.equals("getDeviceList")) {
  92. String id = jsonNode.path("id").asText();
  93. return this.getDeviceList(jsonrpc, id);
  94. } else if (method.equals("getChannelList")) {
  95. String id = jsonNode.path("id").asText();
  96. PerceptionChannelListBo channelListBo = (PerceptionChannelListBo)(new ObjectMapper()).treeToValue(params, PerceptionChannelListBo.class);
  97. return this.getChannelList(jsonrpc, channelListBo, id);
  98. } else {
  99. return R.failed("方法名不存在!");
  100. }
  101. }
  102. }
  103. }
  104. private Object getChannelList(String jsonrpc, PerceptionChannelListBo params, String id) {
  105. log.info("perception通道列表");
  106. return this.service.getChannelList(jsonrpc, params, id);
  107. }
  108. private Object getDeviceList(String jsonrpc, String id) {
  109. log.info("perception设备列表");
  110. return this.service.getDeviceList(jsonrpc, id);
  111. }
  112. private Object updateHeart(String jsonrpc, PerceptionUpdateHeartBo bo, HttpServletRequest servletRequest, String id) {
  113. log.info("perception心跳");
  114. return this.service.updateHeart(jsonrpc, bo, servletRequest, id);
  115. }
  116. private Object addEvent(String jsonrpc, PerceptionEventAddBo bo, MultipartHttpServletRequest request, String id, HttpServletRequest servletRequest) {
  117. log.info("perception添加事件");
  118. return this.service.addEvent(jsonrpc, bo, request, id, servletRequest);
  119. }
  120. private Object getEventCode(String jsonrpc, String id) {
  121. return this.service.getEventCode(jsonrpc, id);
  122. }
  123. @ApiOperation("获取设备列表")
  124. @PostMapping({"/device/perception/getDeviceIdList"})
  125. public Object getDeviceIdListAdmin() {
  126. return this.service.getDeviceIdListAdmin();
  127. }
  128. @ApiOperation("获取事件类型列表")
  129. @PostMapping({"/device/perception/getEventCode"})
  130. public Object getEventCodeListAdmin() {
  131. return this.service.getEventCodeListAdmin();
  132. }
  133. @ApiOperation("获取即时事件列表")
  134. @PostMapping({"/device/perception/getEventListAdmin"})
  135. public Object getEventList(@RequestParam(value = "deviceId",required = false) String deviceId, @RequestParam(value = "eventCode",required = false) Integer eventCode, @RequestParam(value = "date",required = false) String date, @RequestParam("page") Integer page, @RequestParam("pageSize") Integer pageSize, HttpServletRequest request) {
  136. return this.service.getEventList(deviceId, eventCode, date, page, pageSize, request);
  137. }
  138. @ApiOperation("获取设备配置列表")
  139. @PostMapping({"/device/perception/getDeviceListAdmin"})
  140. public Object getDeviceListAdmin(@RequestParam(value = "deviceId",required = false) String deviceId, @RequestParam(value = "page",defaultValue = "1") Integer page, @RequestParam(value = "pageSize",defaultValue = "10000") Integer pageSize) {
  141. return this.service.getDeviceListAdmin(deviceId, page, pageSize);
  142. }
  143. @ApiOperation("新增设备配置")
  144. @PostMapping({"/device/perception/addDeviceAdmin"})
  145. public Object addDeviceAdmin(@RequestBody PerceptionDeviceAddBo bo) {
  146. return this.service.addDeviceAdmin(bo);
  147. }
  148. @ApiOperation("获取设备配置")
  149. @PostMapping({"/device/perception/getDeviceInfoAdmin"})
  150. public Object getDeviceInfoAdmin(@RequestParam("deviceId") String deviceId) {
  151. return this.service.getDeviceInfoAdmin(deviceId);
  152. }
  153. @ApiOperation("修改设备配置")
  154. @PostMapping({"/device/perception/updateDeviceInfoAdmin"})
  155. public Object updateDeviceInfoAdmin(@RequestBody PerceptionDeviceAddBo bo) {
  156. return this.service.updateDeviceInfoAdmin(bo);
  157. }
  158. @ApiOperation("删除设备配置")
  159. @PostMapping({"/device/perception/delDeviceAdmin"})
  160. public Object delDeviceAdmin(@RequestParam("deviceId") String deviceId) {
  161. return this.service.delDeviceAdmin(deviceId);
  162. }
  163. @ApiOperation("获取通道配置列表")
  164. @PostMapping({"/device/perception/getChannelList"})
  165. public Object getChannelListAdmin(@RequestParam("deviceId") String deviceId, @RequestParam(value = "page",defaultValue = "1") Integer page, @RequestParam(value = "pageSize",defaultValue = "10000") Integer pageSize) {
  166. return this.service.getChannelListAdmin(deviceId, page, pageSize);
  167. }
  168. @ApiOperation("新增通道配置")
  169. @PostMapping({"/device/perception/addChannelAdmin"})
  170. public Object addChannelAdmin(@RequestBody ChannelAddBo bo) {
  171. return this.service.addChannelAdmin(bo);
  172. }
  173. @ApiOperation("获取通道配置信息")
  174. @PostMapping({"/device/perception/getChannelInfoAdmin"})
  175. public Object getChannelInfoAdmin(@RequestParam("id") String id) {
  176. return this.service.getChannelInfoAdmin(id);
  177. }
  178. @ApiOperation("修改通道配置信息")
  179. @PostMapping({"/device/perception/updateChannelInfoAdmin"})
  180. public Object updateChannelInfoAdmin(@RequestBody ChannelUpdateBo bo) {
  181. return this.service.updateChannelInfoAdmin(bo);
  182. }
  183. @ApiOperation("删除通道配置信息")
  184. @PostMapping({"/device/perception/delChannelInfoAdmin"})
  185. public Object delChannelInfoAdmin(@RequestParam("id") String id) {
  186. return this.service.delChannelInfoAdmin(id);
  187. }
  188. @ApiOperation("获取设备特征编码及二维码")
  189. @PostMapping({"/device/perception/getFeatures"})
  190. public Object getFeatures() {
  191. String features = IdUtil.randomUUID();
  192. String imageToBase64 = QrCodeUtils.imageToBase64(QrCodeUtil.generate(features, 200, 200));
  193. return R.ok((new FeatureVo()).setFeature(features).setFeatureQrCode(imageToBase64));
  194. }
  195. @ApiOperation("获取已占用通道集合")
  196. @PostMapping({"/device/perception/getOccupiedChannelList"})
  197. public Object getOccupiedChannelList(@RequestParam(value = "deviceId",required = false) String deviceId) {
  198. return this.service.getOccupiedChannelList(deviceId);
  199. }
  200. @ApiOperation("通道标签列表")
  201. @PostMapping({"/device/perception/getChannelTagList"})
  202. public Object getChannelTagList() {
  203. return this.service.getChannelTagList();
  204. }
  205. public PerceptionController(final PerceptionEventCodeService service, final ConfigCacheListener config) {
  206. this.service = service;
  207. this.config = config;
  208. }
  209. }