EventController.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. package com.xjrsoft.module.hikvision.controller;
  2. import cn.hutool.core.util.IdUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  5. import com.google.gson.JsonArray;
  6. import com.google.gson.JsonElement;
  7. import com.google.gson.JsonObject;
  8. import com.google.gson.JsonParser;
  9. import com.xjrsoft.common.model.result.RT;
  10. import com.xjrsoft.common.utils.WeChatUtil;
  11. import com.xjrsoft.config.HikvisionConfig;
  12. import com.xjrsoft.module.base.entity.BaseClass;
  13. import com.xjrsoft.module.base.service.IBaseClassService;
  14. import com.xjrsoft.module.concat.service.IXjrUserService;
  15. import com.xjrsoft.module.hikvision.util.ApiUtil;
  16. import com.xjrsoft.module.hikvision.util.OutInRecordUtil;
  17. import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
  18. import com.xjrsoft.module.organization.entity.UserStudent;
  19. import com.xjrsoft.module.organization.service.IWeChatService;
  20. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  21. import com.xjrsoft.module.teacher.entity.XjrUser;
  22. import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
  23. import io.swagger.annotations.Api;
  24. import io.swagger.annotations.ApiOperation;
  25. import lombok.AllArgsConstructor;
  26. import lombok.extern.slf4j.Slf4j;
  27. import org.springframework.http.ResponseEntity;
  28. import org.springframework.web.bind.annotation.PostMapping;
  29. import org.springframework.web.bind.annotation.RequestBody;
  30. import org.springframework.web.bind.annotation.RequestMapping;
  31. import org.springframework.web.bind.annotation.RestController;
  32. import java.text.ParseException;
  33. import java.util.List;
  34. import java.util.Objects;
  35. @RestController
  36. @RequestMapping("/event")
  37. @Api(value = "/event", tags = "订阅事件接收")
  38. @AllArgsConstructor
  39. @Slf4j
  40. public class EventController {
  41. private final OutInRecordUtil outInRecordUtil = new OutInRecordUtil();
  42. private final FaceImportMapper faceImportMapper;
  43. private final HikvisionConfig hikvisionConfig;
  44. private final IBaseClassService classService;
  45. private final IWeChatService weChatService;
  46. private final IXjrUserService xjrUserService;
  47. private final WeChatUtil weChatUtil;
  48. @PostMapping("/receiveCar")
  49. @ApiOperation(value = "接收车辆事件")
  50. public ResponseEntity<Void> receiveCarEvent(@RequestBody(required = false) String eventData) {
  51. log.info("Received event data: {}", eventData);
  52. new Thread(() -> {
  53. try {
  54. outInRecordUtil.GetVehicleRecordTest(faceImportMapper, eventData);
  55. outInRecordUtil.UpdatePicVehicleRecordTest(eventData);
  56. outInRecordUtil.UpdateReleaseVehicleRecordTest(eventData);
  57. } catch (ParseException e) {
  58. throw new RuntimeException(e);
  59. }
  60. }).start();
  61. // 立即返回HTTP 200 OK响应
  62. return ResponseEntity.ok().build();
  63. }
  64. @PostMapping("/receivePeople")
  65. @ApiOperation(value = "接收人员事件")
  66. public ResponseEntity<Void> receivePeopleEvent(@RequestBody(required = false) String eventData) {
  67. log.info("Received event data: {}", eventData);
  68. new Thread(() -> {
  69. try {
  70. JsonObject data = new JsonParser().parse(eventData).getAsJsonObject();
  71. outInRecordUtil.GetTeacherAndStudentRecordsTest(faceImportMapper, data);
  72. JsonObject paramsObject = data.getAsJsonObject("params");
  73. JsonArray eventsArray = paramsObject.getAsJsonArray("events");
  74. for (JsonElement eventElement : eventsArray) {
  75. JsonObject eventObject = eventElement.getAsJsonObject();
  76. JsonObject dataObject = eventObject.getAsJsonObject("data");
  77. String idNum = null;
  78. if (dataObject.has("ExtEventPersonNo")) {
  79. idNum = dataObject.get("ExtEventPersonNo").getAsString();
  80. }
  81. String happenTime = eventObject.get("happenTime").getAsString();
  82. String recordTimeStr = outInRecordUtil.ChangeTime(happenTime);
  83. int status = eventObject.get("status").getAsInt();
  84. if (idNum == null) continue;
  85. if (!Objects.equals(faceImportMapper.IsStudentTypeByPersonId(Long.valueOf(idNum)), "学生")) {
  86. continue;
  87. }
  88. List<XjrUser> userList = xjrUserService.list(
  89. new MPJLambdaWrapper<XjrUser>()
  90. .select(XjrUser::getId)
  91. .leftJoin(UserStudent.class, UserStudent::getUserId, XjrUser::getId)
  92. .eq(UserStudent::getStudentId, idNum)
  93. );
  94. for (XjrUser member : userList) {
  95. XjrUser student = xjrUserService.getById(idNum);
  96. BaseClass baseClass = classService.getOne(
  97. new MPJLambdaWrapper<BaseClass>()
  98. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getClassId, BaseClass::getId)
  99. .eq(BaseStudentSchoolRoll::getUserId, student.getId())
  100. );
  101. WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
  102. weChatSendMessageDto.setUserId(member.getOpenId());
  103. weChatSendMessageDto.setTemplateId(weChatUtil.getOutInTemplate());
  104. weChatSendMessageDto.setMsgId(IdUtil.getSnowflakeNextId() + "");
  105. JSONObject paramJson = new JSONObject();
  106. JSONObject thing1 = new JSONObject();
  107. thing1.put("value", student.getName());
  108. paramJson.put("thing1", thing1);
  109. JSONObject time3 = new JSONObject();
  110. time3.put("value", recordTimeStr);
  111. paramJson.put("time3", time3);
  112. JSONObject thing2 = new JSONObject();
  113. thing2.put("value", baseClass.getName());
  114. paramJson.put("thing2", thing2);
  115. JSONObject const4 = new JSONObject();
  116. if(status == 1){
  117. const4.put("value", "进校");
  118. }else{
  119. const4.put("value", "出校");
  120. }
  121. paramJson.put("const4", const4);
  122. weChatSendMessageDto.setContent(paramJson);
  123. weChatService.sendTemplateMessage(weChatSendMessageDto);
  124. }
  125. }
  126. } catch (ParseException e) {
  127. log.error("Error processing event data", e);
  128. }
  129. }).start();
  130. return ResponseEntity.ok().build();
  131. }
  132. @PostMapping("/visit")
  133. @ApiOperation(value = "接收访客事件")
  134. public ResponseEntity<Void> receiveVisitEvent(@RequestBody(required = false) String eventData) {
  135. log.info("Received event data: {}", eventData);
  136. new Thread(() -> {
  137. try {
  138. outInRecordUtil.GetVisitRecordsTest(faceImportMapper, eventData);
  139. } catch (ParseException e) {
  140. log.error("Error processing event data", e);
  141. }
  142. }).start();
  143. // 立即返回HTTP 200 OK响应
  144. return ResponseEntity.ok().build();
  145. }
  146. @PostMapping("/subscribe")
  147. @ApiOperation(value = "订阅事件")
  148. public RT<Boolean> subscribeEvent() {
  149. ApiUtil apiUtil = new ApiUtil();
  150. JsonArray eventList = new JsonArray();
  151. String apiPath = "/api/eventService/v1/eventSubscriptionByEventTypes";
  152. JsonObject paramJson = new JsonObject();
  153. //*******手动更改****************************************************
  154. // eventList.add(196893); //人脸匹配成功
  155. // eventList.add(197151); //人脸匹配失败
  156. // eventList.add(771760130); //车辆入场压线事件
  157. // eventList.add(771760133); //车辆出场压线事件
  158. eventList.add(1392513025); //访客登记
  159. eventList.add(1392513026); //访客签离
  160. paramJson.addProperty("eventDest", hikvisionConfig.getVisitUrl()); //要修改第二个参数
  161. //******************************************************************
  162. paramJson.add("eventTypes", eventList);
  163. String response = apiUtil.doPost(apiPath, paramJson.toString(), null);
  164. log.info("Subscribe response: {}", response);
  165. return RT.ok(true);
  166. }
  167. @PostMapping("/query")
  168. @ApiOperation(value = "查询已订阅事件")
  169. public String queryEvent() {
  170. ApiUtil apiUtil = new ApiUtil();
  171. String apiPath = "/api/eventService/v1/eventSubscriptionView";
  172. String response = apiUtil.doPost(apiPath, null, null);
  173. System.out.println("output: " + response);
  174. // Gson gson = new GsonBuilder().setPrettyPrinting().create();
  175. //
  176. // JsonElement jsonElement = JsonParser.parseString(response);
  177. //
  178. // String prettyJson = gson.toJson(jsonElement);
  179. return response;
  180. }
  181. @PostMapping("/cancel")
  182. @ApiOperation(value = "取消已订阅事件")
  183. public String cancelEvent() {
  184. ApiUtil apiUtil = new ApiUtil();
  185. JsonArray eventList = new JsonArray();
  186. //*******手动更改****************************************************
  187. eventList.add(196893);
  188. // eventList.add(197151);
  189. eventList.add(1392513025); //访客登记
  190. eventList.add(1392513026); //访客签离
  191. // eventList.add(771760130);
  192. // eventList.add(771760133);
  193. //******************************************************************
  194. JsonObject paramJson = new JsonObject();
  195. paramJson.add("eventTypes", eventList);
  196. String apiPath = "/api/eventService/v1/eventUnSubscriptionByEventTypes";
  197. String response = apiUtil.doPost(apiPath, paramJson.toString(), null);
  198. System.out.println("output: " + response);
  199. return response;
  200. }
  201. }