package com.iden.bms.service; 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.*; import com.iden.common.exception.BDException; import com.iden.common.service.*; import com.iden.common.util.DateUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * * @author makejava * @since 2021-05-21 00:08:38 */ @Service public class WarningService { @Resource private IdenFaceImageService idenFaceImageService; @Resource private IdenCameraService idenCameraService; @Resource private IdenCommunityService idenCommunityService; @Resource private IdenWarningEventService idenWarningEventService; @Resource private IdenWarningPersonService idenWarningPersonService; @Resource private IdenWarningPersonHisService idenWarningPersonHisService; @Resource private IdenWarningPersonTraceService idenWarningPersonTraceService; @Resource private IdenWarningStaService idenWarningStaService; @Resource private IdenWarningRuleStrangerService idenWarningRuleStrangerService; @Resource private IdenWarningRuleResidentService idenWarningRuleResidentService; @Resource private IdenWarningRuleEveningCommingService idenWarningRuleEveningCommingService; @Resource private IdenPersonService idenPersonService; /** * 实时处理轨迹、重点人员预警等 * @return */ public void handleActualTimeWarning() throws BDException { //查询没有处理过的人脸图像数据 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(IdenFaceImage::getHandleWarningStatus, HandleWarningStatusEnum.NO_HANDLE.getValue()) .last("limit 5000"); //每次处理5000条 List idenFaceImageList = idenFaceImageService.list(queryWrapper); if (CollUtil.isEmpty(idenFaceImageList)) { return; } 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(PersonTypeEnum.KEYNOTE.getValue())) { handleKeynote(idenFaceImage); } IdenFaceImage idenFaceImageUpdate = new IdenFaceImage(); idenFaceImageUpdate.setId(idenFaceImage.getId()); idenFaceImageUpdate.setHandleWarningStatus(HandleWarningStatusEnum.HANDLED.getValue()); this.idenFaceImageService.updateById(idenFaceImageUpdate); } } /** * 每天处理陌生人预警、常驻人员预警、昼伏夜出预警, 凌晨0点10分开始处理昨天数据 * @return */ public void handleDayWarning() throws BDException { //常住人员识别预警 handleResident(); //查询昨天的人脸图像数据 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(IdenFaceImage::getDataDate, DateUtils.getYestodayYyyyMMddDate()).orderByDesc(IdenFaceImage::getPhotographTime); List 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);//陌生人员识别预警 } handleEveningComming(idenFaceImage);//昼伏夜出人员识别预警 } //按小区统昨天的数据 staCommunity(); } //陌生人员识别预警 private void handleStranger(IdenFaceImage idenFaceImage) { Long communityId = idenFaceImage.getCommunityId(); if (communityId == null) { return; } //查询此人1月内在该小区出现天次 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("distinct data_date dataDate ") ; queryWrapper.lambda().eq(IdenFaceImage::getUid,idenFaceImage.getUid()).eq(IdenFaceImage::getCommunityId,communityId) .orderByAsc(IdenFaceImage::getDataDate); 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 = 0; //1月内7天出现情况 List listDataDate = this.idenFaceImageService.list(queryWrapper); if(listDataDate != null){ strangerDayFrequency = listDataDate.size(); } QueryWrapper queryWrapper3 = new QueryWrapper<>(); IdenWarningRuleStranger idenWarningRuleStranger = idenWarningRuleStrangerService.getOne(queryWrapper3); int strangerFrequencyRule = 15; int strangerDays = 7; if (idenWarningRuleStranger != null){ strangerFrequencyRule = idenWarningRuleStranger.getStrangerFrequency(); strangerDays = idenWarningRuleStranger.getStrangerDays(); } String isContinue = getIsContinue(listDataDate,strangerDays); boolean isWarning = false; String strangerType = null; //此人1月出现频次少于15次及7内天每天未连续出现,视为陌生人 if(strangerDayFrequency < strangerFrequencyRule && IsContinueEnum.NO.getValue().equals(isContinue)) { isWarning = true; strangerType = StrangerTypeEnum.STRANGER.getValue(); //此人出现频次1月内大于15天次或连续7天每天都出现,标注为疑似未登记住户 } else if(strangerDayFrequency >= strangerFrequencyRule || IsContinueEnum.YES.getValue().equals(isContinue)) { isWarning = true; strangerType = StrangerTypeEnum.NO_REGISTER.getValue(); } if(isWarning) { //查询是不是已经有预警人员数据了 QueryWrapper queryWrapper0 = new QueryWrapper<>(); queryWrapper0.lambda() .eq(IdenWarningPerson::getCommunityId,communityId) .eq(IdenWarningPerson::getUid,idenFaceImage.getUid()) .eq(IdenWarningPerson::getType,WarningTypeEnum.STRANGER.getValue()); IdenWarningPerson idenWarningPerson = this.idenWarningPersonService.getOne(queryWrapper0); if (idenWarningPerson != null) { idenWarningPerson.setAppearFrequency(strangerDayFrequency); idenWarningPerson.setStrangerType(strangerType); idenWarningPerson.setHandleStatus(HandleWarningStatusEnum.NO_HANDLE.getValue()); idenWarningPerson.setModifyTime(new Date()); this.idenWarningPersonService.updateById(idenWarningPerson); } else { idenWarningPerson = new IdenWarningPerson(); idenWarningPerson.setStrangerType(strangerType); idenWarningPerson.setUid(idenFaceImage.getUid()); idenWarningPerson.setDataDate(idenFaceImage.getDataDate()); idenWarningPerson.setImage(idenFaceImage.getImage()); idenWarningPerson.setFeatPtr(idenFaceImage.getFeatPtr()); 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(strangerDayFrequency); idenWarningPerson.setIsContinue(isContinue); //查询此人在该小区最早出现时间 QueryWrapper 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); } IdenWarningPersonHis idenWarningPersonHis = new IdenWarningPersonHis(); BeanUtil.copyProperties(idenWarningPerson,idenWarningPersonHis,"id"); idenWarningPersonHisService.save(idenWarningPersonHis); IdenWarningEvent idenWarningEvent = new IdenWarningEvent(); idenWarningEvent.setWarningPersonId(idenWarningPerson.getId()); idenWarningEvent.setUid(idenWarningPerson.getUid()); 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.STRANGER.getValue()); idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime()); this.idenWarningEventService.save(idenWarningEvent); } } //重点人员识别预警 private void handleKeynote(IdenFaceImage idenFaceImage){ Long communityId = idenFaceImage.getCommunityId(); if(communityId == null) { return; } //查询是不是已经有预警人员数据了 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda() .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); idenWarningPerson.setHandleStatus(HandleWarningStatusEnum.NO_HANDLE.getValue()); idenWarningPerson.setModifyTime(new Date()); this.idenWarningPersonService.updateById(idenWarningPerson); } else { idenWarningPerson = new IdenWarningPerson(); idenWarningPerson.setUid(idenFaceImage.getUid()); idenWarningPerson.setImage(idenFaceImage.getImage()); idenWarningPerson.setFeatPtr(idenFaceImage.getFeatPtr()); 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 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); } IdenWarningPersonHis idenWarningPersonHis = new IdenWarningPersonHis(); BeanUtil.copyProperties(idenWarningPerson,idenWarningPersonHis,"id"); idenWarningPersonHisService.save(idenWarningPersonHis); IdenWarningEvent idenWarningEvent = new IdenWarningEvent(); idenWarningEvent.setWarningPersonId(idenWarningPerson.getId()); idenWarningEvent.setUid(idenWarningPerson.getUid()); 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.KEYNOTE.getValue()); idenWarningEvent.setPersonId(idenFaceImage.getPersonId()); idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime()); this.idenWarningEventService.save(idenWarningEvent); } //常住人员识别预警,小区人脸库内7天内未被命中人员或标记为独居老人或老人带小孩的7天内未被命中人员视为预警对象 private void handleResident() { //查询全部小区人员 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().like(IdenPerson::getType, PersonTypeEnum.COMMUNITY.getValue()); List listPerson = this.idenPersonService.list(queryWrapper); if(CollUtil.isEmpty(listPerson)){ return; } //遍历小区人员 for (IdenPerson idenPerson :listPerson ) { QueryWrapper 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 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 queryWrapper0 = new QueryWrapper<>(); queryWrapper0.lambda() .eq(IdenWarningPerson::getCommunityId,idenPerson.getCommunityId()) .eq(IdenWarningPerson::getPersonId,idenPerson.getId()) .eq(IdenWarningPerson::getType,WarningTypeEnum.RESIDENT.getValue()); IdenWarningPerson idenWarningPerson = this.idenWarningPersonService.getOne(queryWrapper0); if (idenWarningPerson != null) { idenWarningPerson.setContinueDisappearDays(continueDisappearDays); idenWarningPerson.setModifyTime(new Date()); idenWarningPerson.setHandleStatus(HandleWarningStatusEnum.NO_HANDLE.getValue()); this.idenWarningPersonService.updateById(idenWarningPerson); } else { //生成预警数据 idenWarningPerson = new IdenWarningPerson(); idenWarningPerson.setUid(idenPerson.getUid()); idenWarningPerson.setImage(idenPerson.getImage()); idenWarningPerson.setFeatPtr(idenFaceImage.getFeatPtr()); 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); } IdenWarningPersonHis idenWarningPersonHis = new IdenWarningPersonHis(); BeanUtil.copyProperties(idenWarningPerson,idenWarningPersonHis,"id"); idenWarningPersonHisService.save(idenWarningPersonHis); IdenWarningEvent idenWarningEvent = new IdenWarningEvent(); idenWarningEvent.setWarningPersonId(idenWarningPerson.getId()); idenWarningEvent.setUid(idenWarningPerson.getUid()); 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 handleEveningComming(IdenFaceImage idenFaceImage) { Long communityId = idenFaceImage.getCommunityId(); if (communityId == null) { return; } //设置默认 List idenWarningRuleEveningCommings = new ArrayList<>(); IdenWarningRuleEveningComming idenWarningRuleEveningComming = new IdenWarningRuleEveningComming(); idenWarningRuleEveningComming.setStartTime("23:00:00"); idenWarningRuleEveningComming.setEndTime("04:00:00"); idenWarningRuleEveningComming.setStatus(AppearStatusEnum.APPEAR.getValue()); idenWarningRuleEveningComming.setContinueDays(7); idenWarningRuleEveningCommings.add(idenWarningRuleEveningComming); idenWarningRuleEveningComming.setStartTime("08:00:00"); idenWarningRuleEveningComming.setEndTime("23:00:00"); idenWarningRuleEveningComming.setStatus(AppearStatusEnum.DISAPPEAR.getValue()); idenWarningRuleEveningComming.setContinueDays(7); idenWarningRuleEveningCommings.add(idenWarningRuleEveningComming); QueryWrapper queryWrapper3 = new QueryWrapper<>(); List idenWarningRuleEveningCommingsDb = idenWarningRuleEveningCommingService.list(queryWrapper3); if (CollUtil.isNotEmpty(idenWarningRuleEveningCommingsDb)) { idenWarningRuleEveningCommings = idenWarningRuleEveningCommingsDb; } int continueDays = idenWarningRuleEveningCommings.get(0).getContinueDays(); String beforeDate = DateUtils.formatToDateStr(DateUtils.getBeforeDates(continueDays + 1),"yyyyMMdd"); String yestoday = DateUtils.getYestodayYyyyMMddDate(); //查询此人长期晚上某时段出现(时间期间可设)且白天未出现,视为昼伏夜出人员,进行预警 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.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(IdenWarningRuleEveningComming idenWarningRuleEveningComming1 : idenWarningRuleEveningCommings) { String startTime = idenWarningRuleEveningComming1.getStartTime(); String endTime = idenWarningRuleEveningComming1.getEndTime(); Map map = DateUtils.convertDate(startTime,endTime); String startDate = map.get("startDate"); String endDate = map.get("endDate"); if (AppearStatusEnum.APPEAR.getValue().equals(idenWarningRuleEveningComming1.getStatus())) { queryWrapper.apply(" photograph_time > '" + startDate + "' and photograph_time < '" + endDate + "'"); } else if (AppearStatusEnum.DISAPPEAR.getValue().equals(idenWarningRuleEveningComming1.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 = 0; List idenFaceImageList = this.idenFaceImageService.list(queryWrapper); if(idenFaceImageList != null){ count = idenFaceImageList.size(); } if (count >= continueDays) { //连续超过7天,满足预警 //查询是不是已经有预警人员数据了 QueryWrapper queryWrapper0 = new QueryWrapper<>(); queryWrapper0.lambda() .eq(IdenWarningPerson::getCommunityId,communityId) .eq(IdenWarningPerson::getUid,idenFaceImage.getUid()) .eq(IdenWarningPerson::getType,WarningTypeEnum.EVENING_COMMING.getValue()); IdenWarningPerson idenWarningPerson = this.idenWarningPersonService.getOne(queryWrapper0); if (idenWarningPerson != null) { idenWarningPerson.setAppearFrequency(count); idenWarningPerson.setHandleStatus(HandleWarningStatusEnum.NO_HANDLE.getValue()); idenWarningPerson.setModifyTime(new Date()); this.idenWarningPersonService.updateById(idenWarningPerson); } else { idenWarningPerson = new IdenWarningPerson(); idenWarningPerson.setUid(idenFaceImage.getUid()); idenWarningPerson.setDataDate(idenFaceImage.getDataDate()); idenWarningPerson.setImage(idenFaceImage.getImage()); idenWarningPerson.setFeatPtr(idenFaceImage.getFeatPtr()); 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 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.EVENING_COMMING.getValue()); idenWarningPerson.setCreateTime(idenFaceImage.getCreateTime()); this.idenWarningPersonService.save(idenWarningPerson); } IdenWarningPersonHis idenWarningPersonHis = new IdenWarningPersonHis(); BeanUtil.copyProperties(idenWarningPerson,idenWarningPersonHis,"id"); idenWarningPersonHisService.save(idenWarningPersonHis); IdenWarningEvent idenWarningEvent = new IdenWarningEvent(); idenWarningEvent.setWarningPersonId(idenWarningPerson.getId()); idenWarningEvent.setUid(idenWarningPerson.getUid()); 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.EVENING_COMMING.getValue()); idenWarningEvent.setCreateTime(idenFaceImage.getCreateTime()); this.idenWarningEventService.save(idenWarningEvent); } } //按小区统计 private void staCommunity() { idenWarningStaService.insertWarningPersonRateSta(); } //是否有连续7天情况 private String getIsContinue(List listDataDate,int strangerDays) { if(CollUtil.isEmpty(listDataDate)){ return IsContinueEnum.NO.getValue(); } List dataDateList = new ArrayList<>(); for(IdenFaceImage idenFaceImage : listDataDate) { dataDateList.add(idenFaceImage.getDataDate()); } String minDataDate = listDataDate.get(0).getDataDate(); String maxDataDate = listDataDate.get(listDataDate.size() - 1).getDataDate(); List list = DateUtils.getBetweenDates(minDataDate,maxDataDate); int cnt = 0; for (String date : list) { if(dataDateList.contains(date)){ cnt++; } else { cnt = 0; } if(cnt >= strangerDays) { return IsContinueEnum.YES.getValue(); } } return IsContinueEnum.NO.getValue(); } }