123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578 |
- 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<IdenFaceImage> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().eq(IdenFaceImage::getHandleWarningStatus, HandleWarningStatusEnum.NO_HANDLE.getValue())
- .last("limit 5000"); //每次处理5000条
- List<IdenFaceImage> 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<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);//陌生人员识别预警
- }
- handleEveningComming(idenFaceImage);//昼伏夜出人员识别预警
- }
- //按小区统昨天的数据
- staCommunity();
- }
- //陌生人员识别预警
- private void handleStranger(IdenFaceImage idenFaceImage) {
- Long communityId = idenFaceImage.getCommunityId();
- if (communityId == null) {
- return;
- }
- //查询此人1月内在该小区出现天次
- QueryWrapper<IdenFaceImage> 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<IdenFaceImage> listDataDate = this.idenFaceImageService.list(queryWrapper);
- if(listDataDate != null){
- strangerDayFrequency = listDataDate.size();
- }
- QueryWrapper<IdenWarningRuleStranger> 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<IdenWarningPerson> 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<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);
- }
- 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<IdenWarningPerson> 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<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);
- }
- 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<IdenPerson> queryWrapper = new QueryWrapper<>();
- queryWrapper.lambda().like(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::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<IdenWarningRuleEveningComming> 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<IdenWarningRuleEveningComming> queryWrapper3 = new QueryWrapper<>();
- List<IdenWarningRuleEveningComming> 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<IdenFaceImage> 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<String, String> 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<IdenFaceImage> idenFaceImageList = this.idenFaceImageService.list(queryWrapper);
- if(idenFaceImageList != null){
- count = idenFaceImageList.size();
- }
- if (count >= continueDays) { //连续超过7天,满足预警
- //查询是不是已经有预警人员数据了
- QueryWrapper<IdenWarningPerson> 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<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.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<IdenFaceImage> listDataDate,int strangerDays) {
- if(CollUtil.isEmpty(listDataDate)){
- return IsContinueEnum.NO.getValue();
- }
- List<String> 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<String> 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();
- }
- }
|