|
@@ -5,9 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.iden.common.entity.*;
|
|
|
-import com.iden.common.enums.HandleWarningStatusEnum;
|
|
|
-import com.iden.common.enums.StrangerTypeEnum;
|
|
|
-import com.iden.common.enums.WarningTypeEnum;
|
|
|
+import com.iden.common.enums.*;
|
|
|
import com.iden.common.exception.BDException;
|
|
|
|
|
|
|
|
@@ -22,6 +20,7 @@ import javax.annotation.Resource;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -47,13 +46,19 @@ public class WarningService {
|
|
|
private IdenWarningStaService idenWarningStaService;
|
|
|
@Resource
|
|
|
private IdenWarningRuleStrangerService idenWarningRuleStrangerService;
|
|
|
+ @Resource
|
|
|
+ private IdenWarningRuleResidentService idenWarningRuleResidentService;
|
|
|
+ @Resource
|
|
|
+ private IdenWarningRuleEventCommingService idenWarningRuleEventCommingService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private IdenPersonService idenPersonService;
|
|
|
/**
|
|
|
- * 处理预警
|
|
|
+ * 实时处理轨迹、重点人员预警等
|
|
|
* @return
|
|
|
*/
|
|
|
|
|
|
- public void handleWarning() throws BDException {
|
|
|
+ public void handleActualTimeWarning() throws BDException {
|
|
|
//查询没有处理过的人脸图像数据
|
|
|
QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
|
|
|
queryWrapper.lambda().eq(IdenFaceImage::getHandleWarningStatus, HandleWarningStatusEnum.NO_HANDLE.getValue())
|
|
@@ -65,19 +70,16 @@ public class WarningService {
|
|
|
|
|
|
for (IdenFaceImage idenFaceImage : idenFaceImageList) {
|
|
|
|
|
|
+ //生成轨迹
|
|
|
+ IdenWarningPersonTrace idenWarningPersonTrace = new IdenWarningPersonTrace();
|
|
|
+ BeanUtil.copyProperties(idenFaceImage,idenWarningPersonTrace,"id");
|
|
|
+ this.idenWarningPersonTraceService.save(idenWarningPersonTrace);
|
|
|
+
|
|
|
String type = idenFaceImage.getType();
|
|
|
- if (StringUtils.isNotEmpty(type) && type.contains("0")) {
|
|
|
- handleStranger(idenFaceImage);
|
|
|
- }
|
|
|
- else if (StringUtils.isNotEmpty(type) && type.contains("1")) {
|
|
|
+ //重点人员
|
|
|
+ if (StringUtils.isNotEmpty(type) && type.contains(PersonTypeEnum.KEYNOTE.getValue())) {
|
|
|
handleKeynote(idenFaceImage);
|
|
|
}
|
|
|
- else if (StringUtils.isNotEmpty(type) && type.contains("2")) { //小区人员
|
|
|
-
|
|
|
- }
|
|
|
- else if (StringUtils.isNotEmpty(type) && type.contains("3")) { //昼伏夜出人员
|
|
|
-
|
|
|
- }
|
|
|
|
|
|
IdenFaceImage idenFaceImageUpdate = new IdenFaceImage();
|
|
|
idenFaceImageUpdate.setId(idenFaceImage.getId());
|
|
@@ -87,19 +89,60 @@ public class WarningService {
|
|
|
|
|
|
}
|
|
|
|
|
|
- //陌生人员
|
|
|
- private void handleStranger(IdenFaceImage idenFaceImage){
|
|
|
+ /**
|
|
|
+ * 每天处理陌生人预警、常驻人员预警、昼伏夜出预警, 凌晨0点10分开始处理昨天数据
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public void handleDayWarning() throws BDException {
|
|
|
+ //昼伏夜出识别预警
|
|
|
+ handleResident();
|
|
|
|
|
|
- //查询此人1月出现天次
|
|
|
- QueryWrapper<IdenFaceImage> queryWrapper1 = new QueryWrapper<>();
|
|
|
- queryWrapper1.select("select distinct data_date dataDate ") ;
|
|
|
- queryWrapper1.lambda().eq(IdenFaceImage::getUid,idenFaceImage.getUid())
|
|
|
+ //查询昨天的人脸图像数据
|
|
|
+ QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda().eq(IdenFaceImage::getDataDate, DateUtils.getYestodayYyyyMMddDate()).orderByDesc(IdenFaceImage::getPhotographTime);
|
|
|
+ List<IdenFaceImage> idenFaceImageList = idenFaceImageService.list(queryWrapper);
|
|
|
+ if (CollUtil.isEmpty(idenFaceImageList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (IdenFaceImage idenFaceImage : idenFaceImageList) {
|
|
|
+ String type = idenFaceImage.getType();
|
|
|
+
|
|
|
+ if (StringUtils.isNotEmpty(type) && type.contains(PersonTypeEnum.STRANGER.getValue())) { //陌生人员
|
|
|
+ handleStranger(idenFaceImage);//陌生人员识别预警
|
|
|
+ } else if (StringUtils.isNotEmpty(type) && type.contains(PersonTypeEnum.EVENT_COMMING.getValue())) { //昼伏夜出人员
|
|
|
+ handleEventComming(idenFaceImage);//昼伏夜出人员识别预警
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //陌生人员识别预警
|
|
|
+ private void handleStranger(IdenFaceImage idenFaceImage) {
|
|
|
+ Long communityId = idenFaceImage.getCommunityId();
|
|
|
+ if (communityId == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询是不是已经有预警人员数据了
|
|
|
+ QueryWrapper<IdenWarningPerson> queryWrapper0 = new QueryWrapper<>();
|
|
|
+ queryWrapper0.lambda().eq(IdenWarningPerson::getDataDate,idenFaceImage.getDataDate())
|
|
|
+ .eq(IdenWarningPerson::getUid,idenFaceImage.getUid())
|
|
|
+ .eq(IdenWarningPerson::getType,WarningTypeEnum.STRANGER.getValue());
|
|
|
+ int cnt = this.idenWarningPersonService.count(queryWrapper0);
|
|
|
+ if (cnt > 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询此人1月内在该小区出现天次
|
|
|
+ QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.select("select distinct data_date dataDate ") ;
|
|
|
+ queryWrapper.lambda().eq(IdenFaceImage::getUid,idenFaceImage.getUid()).eq(IdenFaceImage::getCommunityId,communityId)
|
|
|
.orderByAsc(IdenFaceImage::getDataDate);
|
|
|
- queryWrapper1.apply(" data_date > date_format(DATE_SUB(CURDATE(), INTERVAL 30 DAY),'%Y%m%d')");
|
|
|
- int strangerDayFrequency = this.idenFaceImageService.count(queryWrapper1);
|
|
|
+ queryWrapper.apply(" data_date >= date_format(DATE_SUB(CURDATE(), INTERVAL 30 DAY),'%Y%m%d') and data_date <= date_format(DATE_SUB(CURDATE(), INTERVAL 1 DAY),'%Y%m%d')");
|
|
|
+ int strangerDayFrequency = this.idenFaceImageService.count(queryWrapper);
|
|
|
|
|
|
- //1月内-7天出现情况
|
|
|
- List<IdenFaceImage> listDataDate = this.idenFaceImageService.list(queryWrapper1);
|
|
|
+ //1月内7天出现情况
|
|
|
+ List<IdenFaceImage> listDataDate = this.idenFaceImageService.list(queryWrapper);
|
|
|
|
|
|
QueryWrapper<IdenWarningRuleStranger> queryWrapper3 = new QueryWrapper<>();
|
|
|
IdenWarningRuleStranger idenWarningRuleStranger = idenWarningRuleStrangerService.getOne(queryWrapper3);
|
|
@@ -109,20 +152,21 @@ public class WarningService {
|
|
|
strangerFrequency = idenWarningRuleStranger.getStrangerFrequency();
|
|
|
strangerDays = idenWarningRuleStranger.getStrangerDays();
|
|
|
}
|
|
|
- boolean isContinue = getIsContinue(listDataDate,strangerDays);
|
|
|
+ String isContinue = getIsContinue(listDataDate,strangerDays);
|
|
|
|
|
|
IdenWarningPerson idenWarningPerson = new IdenWarningPerson();
|
|
|
|
|
|
//此人1月出现频次少于15次及7内天每天未连续出现,视为陌生人
|
|
|
- if(strangerDayFrequency < strangerFrequency && !isContinue) {
|
|
|
+ if(strangerDayFrequency < strangerFrequency && IsContinueEnum.NO.getValue().equals(isContinue)) {
|
|
|
idenWarningPerson.setStrangerType(StrangerTypeEnum.STRANGER.getValue());
|
|
|
- } else if(strangerDayFrequency >= strangerFrequency || isContinue) {
|
|
|
+ //此人出现频次1月内大于15天次或连续7天每天都出现,标注为疑似未登记住户
|
|
|
+ } else if(strangerDayFrequency >= strangerFrequency || IsContinueEnum.YES.getValue().equals(isContinue)) {
|
|
|
idenWarningPerson.setStrangerType(StrangerTypeEnum.NO_REGISTER.getValue());
|
|
|
} else {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- idenWarningPerson.setDataDate(DateUtils.strToDate(DateUtils.formatToDateStr(idenFaceImage.getPhotographTime(),"yyyy-MM-dd"),"yyyy-MM-dd"));
|
|
|
+ idenWarningPerson.setUid(idenFaceImage.getUid());
|
|
|
+ idenWarningPerson.setDataDate(idenFaceImage.getDataDate());
|
|
|
idenWarningPerson.setImage(idenFaceImage.getImage());
|
|
|
|
|
|
Long cameraId = idenFaceImage.getCameraId();
|
|
@@ -131,19 +175,27 @@ public class WarningService {
|
|
|
idenWarningPerson.setDistrict(idenCamera.getDistrict());
|
|
|
idenWarningPerson.setSubdistrict(idenCamera.getSubdistrict());
|
|
|
}
|
|
|
- Long communityId = idenFaceImage.getCommunityId();
|
|
|
- if(communityId != null) {
|
|
|
- IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
|
|
|
- if (idenCommunity != null) {
|
|
|
- idenWarningPerson.setCommunityId(communityId);
|
|
|
- idenWarningPerson.setCommunityCode(idenCommunity.getCode());
|
|
|
- idenWarningPerson.setCommunityName(idenCommunity.getName());
|
|
|
- }
|
|
|
+
|
|
|
+ IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
|
|
|
+ if (idenCommunity != null) {
|
|
|
+ idenWarningPerson.setCommunityId(communityId);
|
|
|
+ idenWarningPerson.setCommunityCode(idenCommunity.getCode());
|
|
|
+ idenWarningPerson.setCommunityName(idenCommunity.getName());
|
|
|
}
|
|
|
idenWarningPerson.setAppearFrequency(strangerDayFrequency);
|
|
|
- idenWarningPerson.setEarliestAppearTime(idenFaceImage.getPhotographTime());
|
|
|
- idenWarningPerson.setType(WarningTypeEnum.KEYNOTE.getValue());
|
|
|
- idenWarningPerson.setPersonId(idenFaceImage.getPersonId());
|
|
|
+ idenWarningPerson.setIsContinue(isContinue);
|
|
|
+
|
|
|
+ //查询此人在该小区最早出现时间
|
|
|
+ QueryWrapper<IdenFaceImage> queryWrapper1 = new QueryWrapper<>();
|
|
|
+ queryWrapper1.lambda().eq(IdenFaceImage::getCommunityId,communityId)
|
|
|
+ .orderByAsc(IdenFaceImage::getPhotographTime);
|
|
|
+ queryWrapper1.last("limit 1");
|
|
|
+ IdenFaceImage idenFaceImage1 = this.idenFaceImageService.getOne(queryWrapper1);
|
|
|
+ if(idenFaceImage1 != null){
|
|
|
+ idenWarningPerson.setEarliestAppearTime(idenFaceImage1.getPhotographTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ idenWarningPerson.setType(WarningTypeEnum.STRANGER.getValue());
|
|
|
idenWarningPerson.setCreateTime(idenFaceImage.getCreateTime());
|
|
|
this.idenWarningPersonService.save(idenWarningPerson);
|
|
|
|
|
@@ -154,47 +206,65 @@ public class WarningService {
|
|
|
idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
|
|
|
idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
|
|
|
idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
|
|
|
- idenWarningEvent.setCommunityName(idenWarningPerson.getDistrict());
|
|
|
+ idenWarningEvent.setDistrict(idenWarningPerson.getDistrict());
|
|
|
idenWarningEvent.setSubdistrict(idenWarningPerson.getSubdistrict());
|
|
|
idenWarningEvent.setAppearTime(idenFaceImage.getPhotographTime());
|
|
|
- idenWarningEvent.setType(WarningTypeEnum.KEYNOTE.getValue());
|
|
|
- idenWarningEvent.setPersonId(idenFaceImage.getPersonId());
|
|
|
+ idenWarningEvent.setType(WarningTypeEnum.STRANGER.getValue());
|
|
|
idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime());
|
|
|
this.idenWarningEventService.save(idenWarningEvent);
|
|
|
|
|
|
- IdenWarningPersonTrace idenWarningPersonTrace = new IdenWarningPersonTrace();
|
|
|
- BeanUtil.copyProperties(idenFaceImage,idenWarningPersonTrace,"id");
|
|
|
- idenWarningPersonTrace.setWarningPersonId(idenWarningPerson.getId());
|
|
|
- this.idenWarningPersonTraceService.save(idenWarningPersonTrace);
|
|
|
}
|
|
|
|
|
|
- //重点人员
|
|
|
+ //重点人员识别预警
|
|
|
private void handleKeynote(IdenFaceImage idenFaceImage){
|
|
|
-
|
|
|
- IdenWarningPerson idenWarningPerson = new IdenWarningPerson();
|
|
|
- idenWarningPerson.setImage(idenFaceImage.getImage());
|
|
|
- idenWarningPerson.setDataDate(DateUtils.strToDate(DateUtils.formatToDateStr(idenFaceImage.getPhotographTime(),"yyyy-MM-dd"),"yyyy-MM-dd"));
|
|
|
- Long cameraId = idenFaceImage.getCameraId();
|
|
|
- if(cameraId != null) {
|
|
|
- IdenCamera idenCamera = this.idenCameraService.getById(cameraId);
|
|
|
- idenWarningPerson.setDistrict(idenCamera.getDistrict());
|
|
|
- idenWarningPerson.setSubdistrict(idenCamera.getSubdistrict());
|
|
|
- }
|
|
|
Long communityId = idenFaceImage.getCommunityId();
|
|
|
- if(communityId != null) {
|
|
|
+ if(communityId == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //查询该天是不是已经有预警人员数据了
|
|
|
+ QueryWrapper<IdenWarningPerson> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda().eq(IdenWarningPerson::getDataDate,idenFaceImage.getDataDate())
|
|
|
+ .eq(IdenWarningPerson::getCommunityId,communityId)
|
|
|
+ .eq(IdenWarningPerson::getPersonId,idenFaceImage.getPersonId())
|
|
|
+ .eq(IdenWarningPerson::getType,WarningTypeEnum.KEYNOTE.getValue());
|
|
|
+ IdenWarningPerson idenWarningPerson = this.idenWarningPersonService.getOne(queryWrapper);
|
|
|
+ if (idenWarningPerson != null) {
|
|
|
+ idenWarningPerson.setAppearFrequency(idenWarningPerson.getAppearFrequency() + 1);
|
|
|
+ } else {
|
|
|
+ idenWarningPerson = new IdenWarningPerson();
|
|
|
+ idenWarningPerson.setUid(idenFaceImage.getUid());
|
|
|
+ idenWarningPerson.setImage(idenFaceImage.getImage());
|
|
|
+ idenWarningPerson.setDataDate(idenFaceImage.getDataDate());
|
|
|
+ Long cameraId = idenFaceImage.getCameraId();
|
|
|
+ if(cameraId != null) {
|
|
|
+ IdenCamera idenCamera = this.idenCameraService.getById(cameraId);
|
|
|
+ idenWarningPerson.setDistrict(idenCamera.getDistrict());
|
|
|
+ idenWarningPerson.setSubdistrict(idenCamera.getSubdistrict());
|
|
|
+ }
|
|
|
IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
|
|
|
if (idenCommunity != null) {
|
|
|
idenWarningPerson.setCommunityId(communityId);
|
|
|
idenWarningPerson.setCommunityCode(idenCommunity.getCode());
|
|
|
idenWarningPerson.setCommunityName(idenCommunity.getName());
|
|
|
}
|
|
|
+
|
|
|
+ idenWarningPerson.setAppearFrequency(1);
|
|
|
+
|
|
|
+ //查询此人在该小区最早出现时间
|
|
|
+ QueryWrapper<IdenFaceImage> queryWrapper1 = new QueryWrapper<>();
|
|
|
+ queryWrapper1.lambda().eq(IdenFaceImage::getCommunityId,communityId)
|
|
|
+ .orderByAsc(IdenFaceImage::getPhotographTime);
|
|
|
+ queryWrapper1.last("limit 1");
|
|
|
+ IdenFaceImage idenFaceImage1 = this.idenFaceImageService.getOne(queryWrapper1);
|
|
|
+ if(idenFaceImage1 != null){
|
|
|
+ idenWarningPerson.setEarliestAppearTime(idenFaceImage1.getPhotographTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ idenWarningPerson.setType(WarningTypeEnum.KEYNOTE.getValue());
|
|
|
+ idenWarningPerson.setPersonId(idenFaceImage.getPersonId());
|
|
|
+ idenWarningPerson.setCreateTime(idenFaceImage.getCreateTime());
|
|
|
+ this.idenWarningPersonService.save(idenWarningPerson);
|
|
|
}
|
|
|
- idenWarningPerson.setAppearFrequency(1);
|
|
|
- idenWarningPerson.setEarliestAppearTime(idenFaceImage.getPhotographTime());
|
|
|
- idenWarningPerson.setType(WarningTypeEnum.KEYNOTE.getValue());
|
|
|
- idenWarningPerson.setPersonId(idenFaceImage.getPersonId());
|
|
|
- idenWarningPerson.setCreateTime(idenFaceImage.getCreateTime());
|
|
|
- this.idenWarningPersonService.save(idenWarningPerson);
|
|
|
|
|
|
IdenWarningEvent idenWarningEvent = new IdenWarningEvent();
|
|
|
idenWarningEvent.setWarningPersonId(idenWarningPerson.getId());
|
|
@@ -203,7 +273,7 @@ public class WarningService {
|
|
|
idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
|
|
|
idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
|
|
|
idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
|
|
|
- idenWarningEvent.setCommunityName(idenWarningPerson.getDistrict());
|
|
|
+ idenWarningEvent.setDistrict(idenWarningPerson.getDistrict());
|
|
|
idenWarningEvent.setSubdistrict(idenWarningPerson.getSubdistrict());
|
|
|
idenWarningEvent.setAppearTime(idenFaceImage.getPhotographTime());
|
|
|
idenWarningEvent.setType(WarningTypeEnum.KEYNOTE.getValue());
|
|
@@ -211,15 +281,214 @@ public class WarningService {
|
|
|
idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime());
|
|
|
this.idenWarningEventService.save(idenWarningEvent);
|
|
|
|
|
|
- IdenWarningPersonTrace idenWarningPersonTrace = new IdenWarningPersonTrace();
|
|
|
- BeanUtil.copyProperties(idenFaceImage,idenWarningPersonTrace,"id");
|
|
|
- idenWarningPersonTrace.setWarningPersonId(idenWarningPerson.getId());
|
|
|
- this.idenWarningPersonTraceService.save(idenWarningPersonTrace);
|
|
|
}
|
|
|
|
|
|
- private boolean getIsContinue(List<IdenFaceImage> listDataDate,int strangerDays) {
|
|
|
+ //常住人员识别预警,小区人脸库内7天内未被命中人员或标记为独居老人或老人带小孩的7天内未被命中人员视为预警对象
|
|
|
+ private void handleResident() {
|
|
|
+ //查询全部小区人员
|
|
|
+ QueryWrapper<IdenPerson> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.lambda().eq(IdenPerson::getType, PersonTypeEnum.COMMUNITY.getValue());
|
|
|
+ List<IdenPerson> listPerson = this.idenPersonService.list(queryWrapper);
|
|
|
+ if(CollUtil.isEmpty(listPerson)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //遍历小区人员
|
|
|
+ for (IdenPerson idenPerson :listPerson ) {
|
|
|
+ QueryWrapper<IdenFaceImage> queryWrapper1 = new QueryWrapper<>();
|
|
|
+ queryWrapper1.lambda().eq(IdenFaceImage::getPersonId, idenPerson.getId())
|
|
|
+ .orderByDesc(IdenFaceImage::getPhotographTime);
|
|
|
+ queryWrapper1.last("limit 1");
|
|
|
+
|
|
|
+ IdenFaceImage idenFaceImage = this.idenFaceImageService.getOne(queryWrapper1);
|
|
|
+
|
|
|
+ int continueDisappearDaysRule = 7;
|
|
|
+ QueryWrapper<IdenWarningRuleResident> queryWrapper2 = new QueryWrapper<>();
|
|
|
+ IdenWarningRuleResident idenWarningRuleResident = this.idenWarningRuleResidentService.getOne(queryWrapper2);
|
|
|
+ if(idenWarningRuleResident != null) {
|
|
|
+ continueDisappearDaysRule = idenWarningRuleResident.getContinueDisappearDays();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (idenFaceImage == null){
|
|
|
+ idenFaceImage = new IdenFaceImage();
|
|
|
+ idenFaceImage.setPhotographTime(DateUtils.getBeforeDates(100)); //设定一个假时间
|
|
|
+ }
|
|
|
+ int continueDisappearDays = DateUtils.getDaysGap(idenFaceImage.getPhotographTime(), new Date()) - 1;
|
|
|
+ //超过7天没出现
|
|
|
+ if ( continueDisappearDays > continueDisappearDaysRule ) {
|
|
|
+ //查询是不是已经有预警人员数据了
|
|
|
+ QueryWrapper<IdenWarningPerson> queryWrapper0 = new QueryWrapper<>();
|
|
|
+ queryWrapper0.lambda().eq(IdenWarningPerson::getDataDate,DateUtils.getYestodayYyyyMMddDate())
|
|
|
+ .eq(IdenWarningPerson::getCommunityId,idenPerson.getCommunityId())
|
|
|
+ .eq(IdenWarningPerson::getPersonId,idenPerson.getId())
|
|
|
+ .eq(IdenWarningPerson::getType,WarningTypeEnum.RESIDENT.getValue());
|
|
|
+ int cnt = this.idenWarningPersonService.count(queryWrapper0);
|
|
|
+ if (cnt > 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //生成预警数据
|
|
|
+ IdenWarningPerson idenWarningPerson = new IdenWarningPerson();
|
|
|
+ idenWarningPerson.setUid(idenPerson.getUid());
|
|
|
+ idenWarningPerson.setImage(idenPerson.getImage());
|
|
|
+ idenWarningPerson.setDataDate(DateUtils.getYestodayYyyyMMddDate());
|
|
|
+ Long communityId = idenPerson.getCommunityId();
|
|
|
+ IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
|
|
|
+ if (idenCommunity != null) {
|
|
|
+ idenWarningPerson.setCommunityId(communityId);
|
|
|
+ idenWarningPerson.setCommunityCode(idenCommunity.getCode());
|
|
|
+ idenWarningPerson.setCommunityName(idenCommunity.getName());
|
|
|
+ idenWarningPerson.setSubdistrict(idenCommunity.getSubdistrict());
|
|
|
+ idenWarningPerson.setDistrict(idenCommunity.getDistrict());
|
|
|
+ }
|
|
|
+
|
|
|
+ idenWarningPerson.setContinueDisappearDays(continueDisappearDays);
|
|
|
+ //此人在该小区最晚出现时间
|
|
|
+ idenWarningPerson.setLatestAppearTime(idenFaceImage.getPhotographTime());
|
|
|
+
|
|
|
+ idenWarningPerson.setType(WarningTypeEnum.RESIDENT.getValue());
|
|
|
+ idenWarningPerson.setCreateTime(DateUtils.strToDate(DateUtils.getYestodayYyyyMMddDate(),"yyyyMMdd"));
|
|
|
+ this.idenWarningPersonService.save(idenWarningPerson);
|
|
|
+
|
|
|
+ IdenWarningEvent idenWarningEvent = new IdenWarningEvent();
|
|
|
+ idenWarningEvent.setWarningPersonId(idenWarningPerson.getId());
|
|
|
+ idenWarningEvent.setDataTime(idenWarningPerson.getLatestAppearTime());
|
|
|
+ idenWarningEvent.setImage(idenWarningPerson.getImage());
|
|
|
+ idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
|
|
|
+ idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
|
|
|
+ idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
|
|
|
+ idenWarningEvent.setDistrict(idenWarningPerson.getDistrict());
|
|
|
+ idenWarningEvent.setSubdistrict(idenWarningPerson.getSubdistrict());
|
|
|
+ idenWarningEvent.setAppearTime(idenWarningPerson.getLatestAppearTime());
|
|
|
+ idenWarningEvent.setType(WarningTypeEnum.RESIDENT.getValue());
|
|
|
+ idenWarningEvent.setCreateTime(idenWarningPerson.getCreateTime());
|
|
|
+ this.idenWarningEventService.save(idenWarningEvent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //昼伏夜出人员识别预警
|
|
|
+ private void handleEventComming(IdenFaceImage idenFaceImage) {
|
|
|
+ Long communityId = idenFaceImage.getCommunityId();
|
|
|
+ if (communityId == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询是不是已经有预警人员数据了
|
|
|
+ QueryWrapper<IdenWarningPerson> queryWrapper0 = new QueryWrapper<>();
|
|
|
+ queryWrapper0.lambda().eq(IdenWarningPerson::getDataDate,idenFaceImage.getDataDate())
|
|
|
+ .eq(IdenWarningPerson::getUid,idenFaceImage.getUid())
|
|
|
+ .eq(IdenWarningPerson::getType,WarningTypeEnum.EVENT_COMMING.getValue());
|
|
|
+ int cnt = this.idenWarningPersonService.count(queryWrapper0);
|
|
|
+ if (cnt > 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询配置
|
|
|
+
|
|
|
+ //设置默认
|
|
|
+ List<IdenWarningRuleEventComming> idenWarningRuleEventCommings = new ArrayList<>();
|
|
|
+ IdenWarningRuleEventComming idenWarningRuleEventComming = new IdenWarningRuleEventComming();
|
|
|
+ idenWarningRuleEventComming.setStartTime("23:00:00");
|
|
|
+ idenWarningRuleEventComming.setEndTime("04:00:00");
|
|
|
+ idenWarningRuleEventComming.setStatus(AppearStatusEnum.APPEAR.getValue());
|
|
|
+ idenWarningRuleEventComming.setContinueDays(7);
|
|
|
+ idenWarningRuleEventCommings.add(idenWarningRuleEventComming);
|
|
|
+
|
|
|
+ idenWarningRuleEventComming.setStartTime("08:00:00");
|
|
|
+ idenWarningRuleEventComming.setEndTime("23:00:00");
|
|
|
+ idenWarningRuleEventComming.setStatus(AppearStatusEnum.DISAPPEAR.getValue());
|
|
|
+ idenWarningRuleEventComming.setContinueDays(7);
|
|
|
+ idenWarningRuleEventCommings.add(idenWarningRuleEventComming);
|
|
|
+
|
|
|
+ QueryWrapper<IdenWarningRuleEventComming> queryWrapper3 = new QueryWrapper<>();
|
|
|
+ List<IdenWarningRuleEventComming> idenWarningRuleEventCommingsDb = idenWarningRuleEventCommingService.list(queryWrapper3);
|
|
|
+ if (CollUtil.isNotEmpty(idenWarningRuleEventCommingsDb)) {
|
|
|
+ idenWarningRuleEventCommings = idenWarningRuleEventCommingsDb;
|
|
|
+ }
|
|
|
+
|
|
|
+ int continueDays = idenWarningRuleEventCommings.get(0).getContinueDays();
|
|
|
+ String beforeDate = DateUtils.formatToDateStr(DateUtils.getBeforeDates(continueDays + 1),"yyyyMMdd");
|
|
|
+ String yestoday = DateUtils.getYestodayYyyyMMddDate();
|
|
|
+ //查询此人长期晚上某时段出现(时间期间可设)且白天未出现,视为昼伏夜出人员,进行预警
|
|
|
+ QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.select("select distinct data_date dataDate ") ;
|
|
|
+ queryWrapper.lambda().eq(IdenFaceImage::getUid,idenFaceImage.getUid())
|
|
|
+ .eq(IdenFaceImage::getCommunityId,communityId)
|
|
|
+ .ge(IdenFaceImage::getDataDate,beforeDate)
|
|
|
+ .le(IdenFaceImage::getDataDate,yestoday);
|
|
|
+
|
|
|
+ for(IdenWarningRuleEventComming idenWarningRuleEventComming1 : idenWarningRuleEventCommings) {
|
|
|
+ String startTime = idenWarningRuleEventComming1.getStartTime();
|
|
|
+ String endTime = idenWarningRuleEventComming1.getEndTime();
|
|
|
+ Map<String, Date> map = DateUtils.convertDate(startTime,endTime);
|
|
|
+ Date startDate = map.get("startDate");
|
|
|
+ Date endDate = map.get("endDate");
|
|
|
+ if (AppearStatusEnum.APPEAR.getValue().equals(idenWarningRuleEventComming1.getStatus())) {
|
|
|
+ queryWrapper.apply(" photograph_time > " + startDate + " and photograph_time < " + endDate + "");
|
|
|
+ } else if (AppearStatusEnum.DISAPPEAR.getValue().equals(idenWarningRuleEventComming1.getStatus())) {
|
|
|
+ queryWrapper.apply(" not exists (select 1 from iden_face_image a where a.data_date = iden_face_image.data_date" +
|
|
|
+ " and a.photograph_time > " + startDate + " and a.photograph_time < " + endDate + ") ");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int count = this.idenFaceImageService.count(queryWrapper);
|
|
|
+ if (count >= continueDays) { //连续超过7天
|
|
|
+ IdenWarningPerson idenWarningPerson = new IdenWarningPerson();
|
|
|
+
|
|
|
+ idenWarningPerson.setUid(idenFaceImage.getUid());
|
|
|
+ idenWarningPerson.setDataDate(idenFaceImage.getDataDate());
|
|
|
+ idenWarningPerson.setImage(idenFaceImage.getImage());
|
|
|
+
|
|
|
+ Long cameraId = idenFaceImage.getCameraId();
|
|
|
+ if(cameraId != null) {
|
|
|
+ IdenCamera idenCamera = this.idenCameraService.getById(cameraId);
|
|
|
+ idenWarningPerson.setDistrict(idenCamera.getDistrict());
|
|
|
+ idenWarningPerson.setSubdistrict(idenCamera.getSubdistrict());
|
|
|
+ }
|
|
|
+
|
|
|
+ IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
|
|
|
+ if (idenCommunity != null) {
|
|
|
+ idenWarningPerson.setCommunityId(communityId);
|
|
|
+ idenWarningPerson.setCommunityCode(idenCommunity.getCode());
|
|
|
+ idenWarningPerson.setCommunityName(idenCommunity.getName());
|
|
|
+ }
|
|
|
+ idenWarningPerson.setAppearFrequency(count);
|
|
|
+
|
|
|
+ //查询此人在该小区最早出现时间
|
|
|
+ QueryWrapper<IdenFaceImage> queryWrapper1 = new QueryWrapper<>();
|
|
|
+ queryWrapper1.lambda().eq(IdenFaceImage::getCommunityId,communityId)
|
|
|
+ .orderByAsc(IdenFaceImage::getPhotographTime);
|
|
|
+ queryWrapper1.last("limit 1");
|
|
|
+ IdenFaceImage idenFaceImage1 = this.idenFaceImageService.getOne(queryWrapper1);
|
|
|
+ if(idenFaceImage1 != null){
|
|
|
+ idenWarningPerson.setEarliestAppearTime(idenFaceImage1.getPhotographTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ idenWarningPerson.setType(WarningTypeEnum.EVENT_COMMING.getValue());
|
|
|
+ idenWarningPerson.setCreateTime(idenFaceImage.getCreateTime());
|
|
|
+ this.idenWarningPersonService.save(idenWarningPerson);
|
|
|
+
|
|
|
+ IdenWarningEvent idenWarningEvent = new IdenWarningEvent();
|
|
|
+ idenWarningEvent.setWarningPersonId(idenWarningPerson.getId());
|
|
|
+ idenWarningEvent.setDataTime(idenFaceImage.getPhotographTime());
|
|
|
+ idenWarningEvent.setImage(idenFaceImage.getImage());
|
|
|
+ idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
|
|
|
+ idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
|
|
|
+ idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
|
|
|
+ idenWarningEvent.setDistrict(idenWarningPerson.getDistrict());
|
|
|
+ idenWarningEvent.setSubdistrict(idenWarningPerson.getSubdistrict());
|
|
|
+ idenWarningEvent.setAppearTime(idenFaceImage.getPhotographTime());
|
|
|
+ idenWarningEvent.setType(WarningTypeEnum.EVENT_COMMING.getValue());
|
|
|
+ idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime());
|
|
|
+ this.idenWarningEventService.save(idenWarningEvent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //是否有连续7天情况
|
|
|
+ private String getIsContinue(List<IdenFaceImage> listDataDate,int strangerDays) {
|
|
|
if(CollUtil.isEmpty(listDataDate)){
|
|
|
- return false;
|
|
|
+ return IsContinueEnum.NO.getValue();
|
|
|
}
|
|
|
List<String> dataDateList = new ArrayList<>();
|
|
|
|
|
@@ -239,10 +508,10 @@ public class WarningService {
|
|
|
cnt = 0;
|
|
|
}
|
|
|
if(cnt >= strangerDays) {
|
|
|
- return true;
|
|
|
+ return IsContinueEnum.YES.getValue();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return false;
|
|
|
+ return IsContinueEnum.NO.getValue();
|
|
|
}
|
|
|
}
|