SmartFaceDiscernTestController.java 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  5. import com.template.annotation.DESRespondSecret;
  6. import com.template.annotation.PassToken;
  7. import com.template.api.SmartFaceDiscernTestControllerAPI;
  8. import com.template.common.utils.Message2;
  9. import com.template.common.utils.MultipartFileUtils;
  10. import com.template.model.pojo.*;
  11. import com.template.services.*;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RestController;
  15. import org.springframework.web.multipart.MultipartFile;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18. import java.io.BufferedReader;
  19. import java.io.InputStreamReader;
  20. import java.time.LocalDateTime;
  21. import java.time.format.DateTimeFormatter;
  22. import java.util.Date;
  23. import java.util.List;
  24. /**
  25. * <p>
  26. * 前端控制器
  27. * </p>
  28. *
  29. * @author ceshi
  30. * @since 2024-05-20
  31. */
  32. @RestController
  33. public class SmartFaceDiscernTestController implements SmartFaceDiscernTestControllerAPI {
  34. @Autowired
  35. SmartFaceDiscernTestService smartFaceDiscernTestService;
  36. @Autowired
  37. SmartUserService smartUserService;
  38. @Autowired
  39. SmartDeviceService smartDeviceService;
  40. @Autowired
  41. SmartUploadService smartUploadService;
  42. @Autowired
  43. SmartNotificationService smartNotificationService;
  44. @Override
  45. @PassToken
  46. @DESRespondSecret(validated = false)
  47. public String callBack(HttpServletRequest request, HttpServletResponse response) {
  48. try {
  49. BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
  50. StringBuilder responseStrBuilder = new StringBuilder();
  51. String inputStr;
  52. while ((inputStr = streamReader.readLine()) != null) {
  53. responseStrBuilder.append(inputStr);
  54. }
  55. JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
  56. // 比对结果
  57. Integer resultStatus = jsonObject.getInteger("resultStatus");
  58. if (1 == resultStatus) {
  59. // 比对时间
  60. String time = jsonObject.getString("time");
  61. // 设备sn
  62. String sn = jsonObject.getString("sn");
  63. SmartDevice smartDevice = smartDeviceService.getNum(sn);
  64. String address = "";
  65. String type = "";
  66. if (ObjectUtils.isNotEmpty(smartDevice)) {
  67. // 地点
  68. address = smartDevice.getAddress();
  69. // 类型
  70. type = smartDevice.getName();
  71. }
  72. // 名字,学生会加班级[]
  73. String name = jsonObject.getString("name");
  74. System.out.println("name = " + name);
  75. String[] split = name.split("\\[");
  76. String s = split[0];
  77. System.out.println("s = " + s);
  78. // 百胜门禁编号
  79. String idNum = jsonObject.getString("idNum");
  80. System.out.println("idNum = " + idNum);
  81. SmartUser smartUser = smartUserService.getBsStudentNo(idNum);
  82. Integer userId = 0;
  83. if (ObjectUtils.isNotEmpty(smartUser)) {
  84. userId = smartUser.getId();
  85. } else {
  86. userId = 0;
  87. }
  88. // 抓拍的照片 base64字符串
  89. String scenePhoto = jsonObject.getString("scenePhoto");
  90. scenePhoto = "data:image/jpeg;base64," + scenePhoto;
  91. // base64转文件
  92. MultipartFile multipartFile = MultipartFileUtils.base64ToMultipartFile(scenePhoto);
  93. // 上传到cos桶,并生成图片地址
  94. String image = smartUploadService.upload(new MultipartFile[]{multipartFile});
  95. SmartFaceDiscernTest smartFaceDiscernTest = new SmartFaceDiscernTest();
  96. smartFaceDiscernTest.setImage(image);
  97. smartFaceDiscernTest.setName(s);
  98. smartFaceDiscernTest.setLocation(address);
  99. smartFaceDiscernTest.setType(type);
  100. smartFaceDiscernTest.setUserId(userId);
  101. smartFaceDiscernTest.setDateTime(time);
  102. if (userId != 0) {
  103. // 判断是否已经添加
  104. LambdaQueryWrapper<SmartFaceDiscernTest> wrapperFD = new LambdaQueryWrapper<>();
  105. wrapperFD.eq(SmartFaceDiscernTest::getDateTime, time)
  106. .eq(SmartFaceDiscernTest::getUserId, userId);
  107. List<SmartFaceDiscernTest> list = smartFaceDiscernTestService.list(wrapperFD);
  108. if (ObjectUtils.isEmpty(list) && list.size() == 0) {
  109. smartFaceDiscernTestService.save(smartFaceDiscernTest);
  110. // 通过学生id找到关联的家长affiliate,并找到公众号,如果openid为空则不传
  111. List<SmartUser> userList = smartUserService.getAffiliateList(userId);
  112. if (ObjectUtils.isNotEmpty(userList) && userList.size() > 0) {
  113. for (SmartUser user : userList) {
  114. String gzhOpenId = user.getGzhOpenId();
  115. if (ObjectUtils.isNotEmpty(gzhOpenId)) {
  116. String pushType = "";
  117. if (type.contains("进校")) {
  118. pushType = "进入大门";
  119. } else if (type.contains("出校")) {
  120. pushType = "离开大门";
  121. }
  122. DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  123. LocalDateTime date = LocalDateTime.now();
  124. String format = date.format(dateTimeFormatter1);
  125. // 公众号信息推送
  126. Message2.send(gzhOpenId, pushType, address,format);
  127. SmartNotification smartNotification = new SmartNotification();
  128. smartNotification.setUserId(smartUser.getId());
  129. smartNotification.setUserName(smartUser.getName());
  130. smartNotification.setTypeName(pushType);
  131. smartNotification.setLocation(address);
  132. smartNotification.setImage(image);
  133. smartNotification.setDateTime(time);
  134. smartNotification.setType(2);
  135. smartNotificationService.save(smartNotification);
  136. }
  137. }
  138. }
  139. }
  140. }else {
  141. smartFaceDiscernTest.setUserId(0);
  142. // 判断是否已经添加
  143. LambdaQueryWrapper<SmartFaceDiscernTest> wrapperFD = new LambdaQueryWrapper<>();
  144. wrapperFD.eq(SmartFaceDiscernTest::getDateTime, time)
  145. .eq(SmartFaceDiscernTest::getName, s)
  146. .eq(SmartFaceDiscernTest::getType, type);
  147. List<SmartFaceDiscernTest> list = smartFaceDiscernTestService.list(wrapperFD);
  148. if (ObjectUtils.isEmpty(list) && list.size() == 0) {
  149. smartFaceDiscernTestService.save(smartFaceDiscernTest);
  150. }
  151. }
  152. }
  153. } catch (
  154. Exception e) {
  155. e.printStackTrace();
  156. JSONObject r = new JSONObject();
  157. r.put("message", "Success");
  158. r.put("result", 0);
  159. return r.toJSONString();
  160. }
  161. JSONObject r = new JSONObject();
  162. r.put("message", "Success");
  163. r.put("result", 0);
  164. return r.toJSONString();
  165. }
  166. @Override
  167. @PassToken
  168. @DESRespondSecret(validated = false)
  169. public String heartBeatAlive(HttpServletRequest request, HttpServletResponse response) {
  170. try {
  171. BufferedReader streamReader = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
  172. StringBuilder responseStrBuilder = new StringBuilder();
  173. String inputStr;
  174. while ((inputStr = streamReader.readLine()) != null) {
  175. responseStrBuilder.append(inputStr);
  176. }
  177. JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
  178. System.out.println("jsonObject = " + jsonObject);
  179. } catch (Exception e) {
  180. e.printStackTrace();
  181. }
  182. JSONObject r = new JSONObject();
  183. r.put("message", "Success");
  184. r.put("result", 0);
  185. return r.toJSONString();
  186. }
  187. }