EventController.java 8.7 KB

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