WarningService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package com.iden.bms.service;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.core.collection.CollUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.iden.common.entity.*;
  6. import com.iden.common.enums.HandleWarningStatusEnum;
  7. import com.iden.common.enums.StrangerTypeEnum;
  8. import com.iden.common.enums.WarningTypeEnum;
  9. import com.iden.common.exception.BDException;
  10. import com.iden.common.service.*;
  11. import com.iden.common.util.DateUtils;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.springframework.stereotype.Service;
  14. import javax.annotation.Resource;
  15. import java.util.ArrayList;
  16. import java.util.Date;
  17. import java.util.List;
  18. /**
  19. *
  20. * @author makejava
  21. * @since 2021-05-21 00:08:38
  22. */
  23. @Service
  24. public class WarningService {
  25. @Resource
  26. private IdenFaceImageService idenFaceImageService;
  27. @Resource
  28. private IdenCameraService idenCameraService;
  29. @Resource
  30. private IdenCommunityService idenCommunityService;
  31. @Resource
  32. private IdenWarningEventService idenWarningEventService;
  33. @Resource
  34. private IdenWarningPersonService idenWarningPersonService;
  35. @Resource
  36. private IdenWarningPersonTraceService idenWarningPersonTraceService;
  37. @Resource
  38. private IdenWarningStaService idenWarningStaService;
  39. @Resource
  40. private IdenWarningRuleStrangerService idenWarningRuleStrangerService;
  41. /**
  42. * 处理预警
  43. * @return
  44. */
  45. public void handleWarning() throws BDException {
  46. //查询没有处理过的人脸图像数据
  47. QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
  48. queryWrapper.lambda().eq(IdenFaceImage::getHandleWarningStatus, HandleWarningStatusEnum.NO_HANDLE.getValue())
  49. .last("limit 5000"); //每次处理5000条
  50. List<IdenFaceImage> idenFaceImageList = idenFaceImageService.list(queryWrapper);
  51. if (CollUtil.isEmpty(idenFaceImageList)) {
  52. return;
  53. }
  54. for (IdenFaceImage idenFaceImage : idenFaceImageList) {
  55. String type = idenFaceImage.getType();
  56. if (StringUtils.isNotEmpty(type) && type.contains("0")) {
  57. handleStranger(idenFaceImage);
  58. }
  59. else if (StringUtils.isNotEmpty(type) && type.contains("1")) {
  60. handleKeynote(idenFaceImage);
  61. }
  62. else if (StringUtils.isNotEmpty(type) && type.contains("2")) { //小区人员
  63. }
  64. else if (StringUtils.isNotEmpty(type) && type.contains("3")) { //昼伏夜出人员
  65. }
  66. IdenFaceImage idenFaceImageUpdate = new IdenFaceImage();
  67. idenFaceImageUpdate.setId(idenFaceImage.getId());
  68. idenFaceImageUpdate.setHandleWarningStatus(HandleWarningStatusEnum.HANDLED.getValue());
  69. this.idenFaceImageService.updateById(idenFaceImageUpdate);
  70. }
  71. }
  72. //陌生人员
  73. private void handleStranger(IdenFaceImage idenFaceImage){
  74. //查询此人1月出现天次
  75. QueryWrapper<IdenFaceImage> queryWrapper1 = new QueryWrapper<>();
  76. queryWrapper1.select("select distinct data_date dataDate ") ;
  77. queryWrapper1.lambda().eq(IdenFaceImage::getUid,idenFaceImage.getUid())
  78. .orderByAsc(IdenFaceImage::getDataDate);
  79. queryWrapper1.apply(" data_date > date_format(DATE_SUB(CURDATE(), INTERVAL 30 DAY),'%Y%m%d')");
  80. int strangerDayFrequency = this.idenFaceImageService.count(queryWrapper1);
  81. //1月内-7天出现情况
  82. List<IdenFaceImage> listDataDate = this.idenFaceImageService.list(queryWrapper1);
  83. QueryWrapper<IdenWarningRuleStranger> queryWrapper3 = new QueryWrapper<>();
  84. IdenWarningRuleStranger idenWarningRuleStranger = idenWarningRuleStrangerService.getOne(queryWrapper3);
  85. int strangerFrequency = 15;
  86. int strangerDays = 7;
  87. if (idenWarningRuleStranger != null){
  88. strangerFrequency = idenWarningRuleStranger.getStrangerFrequency();
  89. strangerDays = idenWarningRuleStranger.getStrangerDays();
  90. }
  91. boolean isContinue = getIsContinue(listDataDate,strangerDays);
  92. IdenWarningPerson idenWarningPerson = new IdenWarningPerson();
  93. //此人1月出现频次少于15次及7内天每天未连续出现,视为陌生人
  94. if(strangerDayFrequency < strangerFrequency && !isContinue) {
  95. idenWarningPerson.setStrangerType(StrangerTypeEnum.STRANGER.getValue());
  96. } else if(strangerDayFrequency >= strangerFrequency || isContinue) {
  97. idenWarningPerson.setStrangerType(StrangerTypeEnum.NO_REGISTER.getValue());
  98. } else {
  99. return;
  100. }
  101. idenWarningPerson.setDataDate(DateUtils.strToDate(DateUtils.formatToDateStr(idenFaceImage.getPhotographTime(),"yyyy-MM-dd"),"yyyy-MM-dd"));
  102. idenWarningPerson.setImage(idenFaceImage.getImage());
  103. Long cameraId = idenFaceImage.getCameraId();
  104. if(cameraId != null) {
  105. IdenCamera idenCamera = this.idenCameraService.getById(cameraId);
  106. idenWarningPerson.setDistrict(idenCamera.getDistrict());
  107. idenWarningPerson.setSubdistrict(idenCamera.getSubdistrict());
  108. }
  109. Long communityId = idenFaceImage.getCommunityId();
  110. if(communityId != null) {
  111. IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
  112. if (idenCommunity != null) {
  113. idenWarningPerson.setCommunityId(communityId);
  114. idenWarningPerson.setCommunityCode(idenCommunity.getCode());
  115. idenWarningPerson.setCommunityName(idenCommunity.getName());
  116. }
  117. }
  118. idenWarningPerson.setAppearFrequency(strangerDayFrequency);
  119. idenWarningPerson.setEarliestAppearTime(idenFaceImage.getPhotographTime());
  120. idenWarningPerson.setType(WarningTypeEnum.KEYNOTE.getValue());
  121. idenWarningPerson.setPersonId(idenFaceImage.getPersonId());
  122. idenWarningPerson.setCreateTime(idenFaceImage.getCreateTime());
  123. this.idenWarningPersonService.save(idenWarningPerson);
  124. IdenWarningEvent idenWarningEvent = new IdenWarningEvent();
  125. idenWarningEvent.setWarningPersonId(idenWarningPerson.getId());
  126. idenWarningEvent.setDataTime(idenFaceImage.getPhotographTime());
  127. idenWarningEvent.setImage(idenFaceImage.getImage());
  128. idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
  129. idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
  130. idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
  131. idenWarningEvent.setCommunityName(idenWarningPerson.getDistrict());
  132. idenWarningEvent.setSubdistrict(idenWarningPerson.getSubdistrict());
  133. idenWarningEvent.setAppearTime(idenFaceImage.getPhotographTime());
  134. idenWarningEvent.setType(WarningTypeEnum.KEYNOTE.getValue());
  135. idenWarningEvent.setPersonId(idenFaceImage.getPersonId());
  136. idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime());
  137. this.idenWarningEventService.save(idenWarningEvent);
  138. IdenWarningPersonTrace idenWarningPersonTrace = new IdenWarningPersonTrace();
  139. BeanUtil.copyProperties(idenFaceImage,idenWarningPersonTrace,"id");
  140. idenWarningPersonTrace.setWarningPersonId(idenWarningPerson.getId());
  141. this.idenWarningPersonTraceService.save(idenWarningPersonTrace);
  142. }
  143. //重点人员
  144. private void handleKeynote(IdenFaceImage idenFaceImage){
  145. IdenWarningPerson idenWarningPerson = new IdenWarningPerson();
  146. idenWarningPerson.setImage(idenFaceImage.getImage());
  147. idenWarningPerson.setDataDate(DateUtils.strToDate(DateUtils.formatToDateStr(idenFaceImage.getPhotographTime(),"yyyy-MM-dd"),"yyyy-MM-dd"));
  148. Long cameraId = idenFaceImage.getCameraId();
  149. if(cameraId != null) {
  150. IdenCamera idenCamera = this.idenCameraService.getById(cameraId);
  151. idenWarningPerson.setDistrict(idenCamera.getDistrict());
  152. idenWarningPerson.setSubdistrict(idenCamera.getSubdistrict());
  153. }
  154. Long communityId = idenFaceImage.getCommunityId();
  155. if(communityId != null) {
  156. IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
  157. if (idenCommunity != null) {
  158. idenWarningPerson.setCommunityId(communityId);
  159. idenWarningPerson.setCommunityCode(idenCommunity.getCode());
  160. idenWarningPerson.setCommunityName(idenCommunity.getName());
  161. }
  162. }
  163. idenWarningPerson.setAppearFrequency(1);
  164. idenWarningPerson.setEarliestAppearTime(idenFaceImage.getPhotographTime());
  165. idenWarningPerson.setType(WarningTypeEnum.KEYNOTE.getValue());
  166. idenWarningPerson.setPersonId(idenFaceImage.getPersonId());
  167. idenWarningPerson.setCreateTime(idenFaceImage.getCreateTime());
  168. this.idenWarningPersonService.save(idenWarningPerson);
  169. IdenWarningEvent idenWarningEvent = new IdenWarningEvent();
  170. idenWarningEvent.setWarningPersonId(idenWarningPerson.getId());
  171. idenWarningEvent.setDataTime(idenFaceImage.getPhotographTime());
  172. idenWarningEvent.setImage(idenFaceImage.getImage());
  173. idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
  174. idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
  175. idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
  176. idenWarningEvent.setCommunityName(idenWarningPerson.getDistrict());
  177. idenWarningEvent.setSubdistrict(idenWarningPerson.getSubdistrict());
  178. idenWarningEvent.setAppearTime(idenFaceImage.getPhotographTime());
  179. idenWarningEvent.setType(WarningTypeEnum.KEYNOTE.getValue());
  180. idenWarningEvent.setPersonId(idenFaceImage.getPersonId());
  181. idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime());
  182. this.idenWarningEventService.save(idenWarningEvent);
  183. IdenWarningPersonTrace idenWarningPersonTrace = new IdenWarningPersonTrace();
  184. BeanUtil.copyProperties(idenFaceImage,idenWarningPersonTrace,"id");
  185. idenWarningPersonTrace.setWarningPersonId(idenWarningPerson.getId());
  186. this.idenWarningPersonTraceService.save(idenWarningPersonTrace);
  187. }
  188. private boolean getIsContinue(List<IdenFaceImage> listDataDate,int strangerDays) {
  189. if(CollUtil.isEmpty(listDataDate)){
  190. return false;
  191. }
  192. List<String> dataDateList = new ArrayList<>();
  193. for(IdenFaceImage idenFaceImage : listDataDate) {
  194. dataDateList.add(idenFaceImage.getDataDate());
  195. }
  196. String minDataDate = listDataDate.get(0).getDataDate();
  197. String maxDataDate = listDataDate.get(listDataDate.size() - 1).getDataDate();
  198. List<String> list = DateUtils.getBetweenDates(minDataDate,maxDataDate);
  199. int cnt = 0;
  200. for (String date : list) {
  201. if(dataDateList.contains(date)){
  202. cnt++;
  203. } else {
  204. cnt = 0;
  205. }
  206. if(cnt >= strangerDays) {
  207. return true;
  208. }
  209. }
  210. return false;
  211. }
  212. }