suntianwu 3 years atrás
parent
commit
4aea45e178
24 changed files with 558 additions and 229 deletions
  1. 1 6
      pom.xml
  2. 1 1
      src/main/java/com/iden/bms/controller/FaceImageController.java
  3. 71 0
      src/main/java/com/iden/bms/controller/WarningPersonController.java
  4. 1 35
      src/main/java/com/iden/bms/controller/WarningStaController.java
  5. 41 4
      src/main/java/com/iden/bms/face/FaceIdenService.java
  6. 5 6
      src/main/java/com/iden/bms/face/FaceIdenTool.java
  7. 3 5
      src/main/java/com/iden/bms/service/PersonService.java
  8. 128 0
      src/main/java/com/iden/bms/service/WarningPersonService.java
  9. 171 47
      src/main/java/com/iden/bms/service/WarningService.java
  10. 1 86
      src/main/java/com/iden/bms/service/WarningStaService.java
  11. 0 5
      src/main/java/com/iden/common/entity/IdenCrowd.java
  12. 10 2
      src/main/java/com/iden/common/entity/IdenFaceImage.java
  13. 9 2
      src/main/java/com/iden/common/entity/IdenPerson.java
  14. 8 1
      src/main/java/com/iden/common/entity/IdenWarningPerson.java
  15. 1 1
      src/main/java/com/iden/common/enums/HandleWarningStatusEnum.java
  16. 38 0
      src/main/java/com/iden/common/enums/IsContinueEnum.java
  17. 4 4
      src/main/java/com/iden/common/enums/PersonTypeEnum.java
  18. 2 2
      src/main/java/com/iden/common/enums/StrangerTypeEnum.java
  19. 9 9
      src/main/java/com/iden/common/enums/TrueFalseEnum.java
  20. 29 0
      src/main/java/com/iden/common/util/DateUtils.java
  21. 0 7
      src/main/java/com/iden/common/vo/CrowdVO.java
  22. 7 3
      src/main/java/com/iden/common/vo/FaceImageVO.java
  23. 6 1
      src/main/java/com/iden/common/vo/PersonVO.java
  24. 12 2
      src/main/java/com/iden/common/vo/WarningPersonVO.java

+ 1 - 6
pom.xml

@@ -251,12 +251,7 @@
             <artifactId>commons-beanutils</artifactId>
             <version>1.9.3</version>
         </dependency>
-        <!-- 引入MQTT -->
-        <dependency>
-            <groupId>org.eclipse.paho</groupId>
-            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
-            <version>1.2.0</version>
-        </dependency>
+
         <dependency>
             <groupId>org.bouncycastle</groupId>
             <artifactId>bcprov-jdk16</artifactId>

+ 1 - 1
src/main/java/com/iden/bms/controller/FaceImageController.java

@@ -41,7 +41,7 @@ public class FaceImageController {
     @GetMapping("/listFaceImage")
     @ApiOperation(value = "人脸抓拍库列表分页 ")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(paramType = "query", name = "type", value = "类型,0:陌生人员 ,1重点人员,2小区人员"),
+            @ApiImplicitParam(paramType = "query", name = "type", value = "类型,1:陌生人员 ,2重点人员,3小区人员"),
             @ApiImplicitParam(paramType = "query", name = "communityId", value = "小区ID"),
             @ApiImplicitParam(paramType = "query", name = "photographPlace", value = "抓拍地点"),
             @ApiImplicitParam(paramType = "query", name = "beginDate", value = "开始时间"),

+ 71 - 0
src/main/java/com/iden/bms/controller/WarningPersonController.java

@@ -0,0 +1,71 @@
+package com.iden.bms.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.iden.bms.service.WarningPersonService;
+import com.iden.common.annotation.Permission;
+import com.iden.common.exception.BDException;
+import com.iden.common.util.PageResult;
+import com.iden.common.util.WebPageUtils;
+import com.iden.common.vo.PageReqVO;
+import com.iden.common.vo.UserLoginedConvertVO;
+import com.iden.common.vo.WarningPersonVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * @Author: lilt
+ * @Date: 2021/5/26
+ * @Desc:
+ */
+@RestController
+@Api(value = "WarningPersonController", tags = { "预警管理" })
+@Slf4j
+@RequestMapping("/bms/warningPersion")
+@Permission
+public class WarningPersonController {
+    @Autowired
+    private WarningPersonService warningPersonService;
+
+
+    @GetMapping("/listWarningPersonbyCommunity")
+    @ApiOperation(value = "根据小区查询预警人员列表分页 ")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(paramType = "query", name = "type", value = "预警类型,1 陌生人员预警 2重点人员预警 3常住人员预警 4昼伏夜出人员预警"),
+            @ApiImplicitParam(paramType = "query", name = "communityId", value = "小区ID"),
+            @ApiImplicitParam(paramType = "query", name = "nameOrCred", value = "名称/身份证"),
+            @ApiImplicitParam(paramType = "query", name = "populationType", value = "人口类型"),
+            @ApiImplicitParam(paramType = "query", name = "crowdId", value = "人群类型ID"),
+            @ApiImplicitParam(paramType = "query", name = "beginDate", value = "开始时间"),
+            @ApiImplicitParam(paramType = "query", name = "endDate", value = "结束时间")
+
+    })
+    public PageResult<List<WarningPersonVO>> listWarningPersonbyCommunity(HttpServletRequest request, @RequestHeader(value = "token") String token,
+                                                                          @RequestParam(value = "type", required = true) String type,
+                                                                          @RequestParam(value = "communityId", required = true) Long communityId,
+                                                                          @RequestParam(value = "nameOrCred", required = false) String nameOrCred,
+                                                                          @RequestParam(value = "populationType", required = false) String populationType,
+                                                                          @RequestParam(value = "crowdId", required = false) Long crowdId,
+                                                                          @RequestParam(value = "beginDate", required = false) String beginDate,
+                                                                          @RequestParam(value = "endDate", required = false) String endDate,
+                                                                          PageReqVO pageReqVo){
+        try {
+            UserLoginedConvertVO loginUser = WebPageUtils.getCurrentLoginedUser(request);
+            IPage<WarningPersonVO> pageResponse = this.warningPersonService.listWarningPersonbyCommunity(type,communityId,nameOrCred,populationType,crowdId,beginDate,endDate,loginUser ,pageReqVo);
+            return PageResult.success(pageResponse.getRecords(),pageResponse.getCurrent(),pageResponse.getSize(),pageResponse.getTotal());
+        }catch (BDException e) {
+            log.error("根据小区查询预警人员列表查询-分页列表出现异常",e);
+            return  PageResult.error(e.getMessage());
+        } catch (Exception e) {
+            log.error("预警管理: 根据小区查询预警人员列表查询出现异常",e);
+            return PageResult.error( "获取列表失败");
+        }
+    }
+}

+ 1 - 35
src/main/java/com/iden/bms/controller/WarningStaController.java

@@ -10,7 +10,6 @@ import com.iden.common.util.WebPageUtils;
 
 import com.iden.common.vo.PageReqVO;
 import com.iden.common.vo.UserLoginedConvertVO;
-import com.iden.common.vo.WarningPersonVO;
 import com.iden.common.vo.WarningStaVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -72,7 +71,7 @@ public class WarningStaController {
     }
 
     @GetMapping("/listWarningSta")
-    @ApiOperation(value = "预警统计列表分页 ")
+    @ApiOperation(value = "小区预警统计列表分页 ")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(paramType = "query", name = "type", value = "预警类型,1 陌生人员预警 2重点人员预警 3常住人员预警 4昼伏夜出人员预警"),
             @ApiImplicitParam(paramType = "query", name = "district", value = "所属区域"),
@@ -103,37 +102,4 @@ public class WarningStaController {
         }
     }
 
-    @GetMapping("/listWarningPersonbyCommunity")
-    @ApiOperation(value = "根据小区查询预警人员列表分页 ")
-    @ApiImplicitParams(value = {
-            @ApiImplicitParam(paramType = "query", name = "type", value = "预警类型,1 陌生人员预警 2重点人员预警 3常住人员预警 4昼伏夜出人员预警"),
-            @ApiImplicitParam(paramType = "query", name = "communityId", value = "小区ID"),
-            @ApiImplicitParam(paramType = "query", name = "nameOrCred", value = "名称/身份证"),
-            @ApiImplicitParam(paramType = "query", name = "populationType", value = "人口类型"),
-            @ApiImplicitParam(paramType = "query", name = "crowdId", value = "人群类型ID"),
-            @ApiImplicitParam(paramType = "query", name = "beginDate", value = "开始时间"),
-            @ApiImplicitParam(paramType = "query", name = "endDate", value = "结束时间")
-
-    })
-    public PageResult<List<WarningPersonVO>> listWarningPersonbyCommunity(HttpServletRequest request, @RequestHeader(value = "token") String token,
-                                                                          @RequestParam(value = "type", required = true) String type,
-                                                                          @RequestParam(value = "communityId", required = true) Long communityId,
-                                                                          @RequestParam(value = "nameOrCred", required = false) String nameOrCred,
-                                                                          @RequestParam(value = "populationType", required = false) String populationType,
-                                                                          @RequestParam(value = "crowdId", required = false) Long crowdId,
-                                                                          @RequestParam(value = "beginDate", required = false) String beginDate,
-                                                                          @RequestParam(value = "endDate", required = false) String endDate,
-                                                                          PageReqVO pageReqVo){
-        try {
-            UserLoginedConvertVO loginUser = WebPageUtils.getCurrentLoginedUser(request);
-            IPage<WarningPersonVO> pageResponse = this.warningStaService.listWarningPersonbyCommunity(type,communityId,nameOrCred,populationType,crowdId,beginDate,endDate,loginUser ,pageReqVo);
-            return PageResult.success(pageResponse.getRecords(),pageResponse.getCurrent(),pageResponse.getSize(),pageResponse.getTotal());
-        }catch (BDException e) {
-            log.error("根据小区查询预警人员列表查询-分页列表出现异常",e);
-            return  PageResult.error(e.getMessage());
-        } catch (Exception e) {
-            log.error("预警管理: 根据小区查询预警人员列表查询出现异常",e);
-            return PageResult.error( "获取列表失败");
-        }
-    }
 }

+ 41 - 4
src/main/java/com/iden/bms/face/FaceIdenService.java

@@ -15,6 +15,7 @@ import com.iden.common.entity.IdenCommunity;
 import com.iden.common.entity.IdenFaceImage;
 
 import com.iden.common.entity.IdenPerson;
+import com.iden.common.enums.HandleWarningStatusEnum;
 import com.iden.common.enums.PersonTypeEnum;
 import com.iden.common.service.IdenCameraService;
 import com.iden.common.service.IdenCommunityService;
@@ -138,6 +139,7 @@ public class FaceIdenService {
 
                                 String photographTime = imgFileName.substring(0, imgFileName.indexOf("_"));
                                 idenFaceImage.setPhotographTime(DateUtils.strToDate(photographTime,"yyyyMMddHHmmss"));
+                                idenFaceImage.setDataDate(photographTime.substring(0,8));
 
                                 File finalDir = new File(imgFile.getParentFile().getAbsolutePath().replace("origin","final"));
                                 if(!finalDir.exists()){
@@ -162,6 +164,7 @@ public class FaceIdenService {
                                         IdenPerson idenPerson = personService.getPersonIdByImageFileName(imgPersonFiles[hitIndex].getName());
                                         if(idenPerson != null) {
                                             idenFaceImage.setPersonId(idenPerson.getId());
+                                            idenFaceImage.setUid(idenPerson.getUid());
                                             idenFaceImage.setType(idenPerson.getType());
                                             idenFaceImage.setGender(idenPerson.getGender());
                                             float score = faceRetrieveResultVO.getScore();
@@ -173,8 +176,15 @@ public class FaceIdenService {
                                     }
 
                                 }
-                                if (idenFaceImage.getPersonId() == null){
+                                if (idenFaceImage.getPersonId() == null){ //没有关联上,是陌生人
                                     idenFaceImage.setType(PersonTypeEnum.STRANGER.getValue());
+
+                                    //查询以前的陌生人图库,进行人脸识别,若是同一个人,得到uid, 设置为一样
+                                    String uid = relevanceBeforeFace(idenFaceImage.getFeatPtr());
+                                    if (StringUtils.isEmpty(uid)) {
+                                        uid = UUID.randomUUID().toString();
+                                    }
+                                    idenFaceImage.setUid(uid);
                                 }
                                 idenFaceImage.setCreateTime(new Date());
                                 idenFaceImageList.add(idenFaceImage);
@@ -195,6 +205,29 @@ public class FaceIdenService {
         logger.info("FaceIdenService.handleCameraImage end");
     }
 
+    //查询以前的陌生人图库,进行人脸识别,若是同一个人,得到uid
+    private String relevanceBeforeFace(String featPtrVisitor){
+        QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(IdenFaceImage::getType, PersonTypeEnum.STRANGER.getValue())
+                .eq(IdenFaceImage::getHandleWarningStatus,HandleWarningStatusEnum.HANDLED.getValue());
+        //queryWrapper.last("limit 500"); //TODO 数据量大了需要分批处理 优化,以及是否区分小区
+        List<IdenFaceImage> list = this.idenFaceImageService.list(queryWrapper);
+        if (CollUtil.isNotEmpty(list)) {
+            List<String> featPtrList = new ArrayList<>();
+            for(IdenFaceImage idenFaceImage : list) {
+                String featPtr = idenFaceImage.getFeatPtr();
+                featPtrList.add(featPtr);
+            }
+
+            FaceRetrieveResultVO vo = FaceIdenTool.isHit(idenRoot,featPtrVisitor,featPtrList);
+            if(vo != null) {
+                return list.get(vo.getIndex()).getUid();
+            }
+        }
+
+        return null;
+
+    }
 
     private boolean isBad(String featPtr){
         if (StringUtils.isEmpty(featPtr)) {
@@ -210,10 +243,11 @@ public class FaceIdenService {
         return true;
     }
 
+   //是否连拍
     private boolean isContinuation(String cameraCode,String imgFileName, String featPtr) {
         String photographTime = imgFileName.substring(0, imgFileName.indexOf("_"));
         Long photographTimeLong = DateUtils.strToDate(photographTime,"yyyyMMddHHmmss").getTime();
-        //获取cameraCode/final下图片
+        //获取data/final/camera/image下图片
         File originImageDirFile = new File(idenRoot + "data/final/camera/image");
         File[] imgFiles = originImageDirFile.listFiles();
          List<String> featPtrList = new ArrayList<>();
@@ -225,10 +259,13 @@ public class FaceIdenService {
                 //目标图片和以前图片拍照时间相差2分钟内
                 if (photographTimeLong <= photographTimeTmpLong + 2 * 60 * 1000) {
                     String featPtrTmp = (String)redisUtil.hget(RedisKeyConstant.HANDLE_CAMERA_IMAGE_FIRST + "_" + cameraCode, imgFile.getName());
-                    featPtrList.add(featPtrTmp);
+                    if(StringUtils.isNotEmpty(featPtrTmp)){
+                        featPtrList.add(featPtrTmp);
+                    }
                 }
             }
-            return FaceIdenTool.isHit(idenRoot,featPtr,featPtrList);
+            FaceRetrieveResultVO vo = FaceIdenTool.isHit(idenRoot,featPtr,featPtrList);
+            return vo != null;
 
         } else {
             return false;

+ 5 - 6
src/main/java/com/iden/bms/face/FaceIdenTool.java

@@ -116,7 +116,7 @@ public class FaceIdenTool {
         return null;
     }
 
-    public static boolean isHit(String idenRoot, String featPtrVisitor, List<String> featPtrList){
+    public static FaceRetrieveResultVO isHit(String idenRoot, String featPtrVisitor, List<String> featPtrList){
         //初始化引擎
         FaceMonitor faceMonitor = new FaceMonitor();
         faceMonitor.init(idenRoot + "face/model", 0);
@@ -133,12 +133,11 @@ public class FaceIdenTool {
         faceModelPtrVisitor.setName(String.valueOf(0));
         faceModelPtrVisitor.setPersonId(0);
         faceModelPtrVisitor.setFeatValue(ByteUtil.hex2Byte(featPtrVisitor));
+
         FaceRetrieveResultVO vo = getHitResult(faceMonitor,faceModelPtrVisitor);
-        if(vo != null) {
-            return true;
-        } else {
-            return false;
-        }
+        //释放人脸引擎
+        faceMonitor.releaseEngine();
+        return vo;
     }
 
     /**

+ 3 - 5
src/main/java/com/iden/bms/service/PersonService.java

@@ -243,18 +243,16 @@ public class PersonService {
 
     /**
      * 保存人员
+     * 一个人只属于一个小区。同一个自然人若是属于二个小区,则视为不同人,二条数据
      * @param vo
      */
     @Transactional(rollbackFor = Exception.class)
     public int createPerson(PersonVO vo, UserLoginedConvertVO loginUser){
-        QueryWrapper<IdenPerson> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(IdenPerson::getCredentialsCode,vo.getCredentialsCode());
-        if(idenPersonService.count(queryWrapper) > 0){
-            return 1;
-        }
+
         //保存人员
         IdenPerson idenPerson = new IdenPerson();
         BeanUtil.copyProperties(vo,idenPerson);
+        idenPerson.setUid(UUID.randomUUID().toString());
         idenPerson.setCreateTime(new Date());
         //识别
         String image = idenPerson.getImage();

+ 128 - 0
src/main/java/com/iden/bms/service/WarningPersonService.java

@@ -0,0 +1,128 @@
+package com.iden.bms.service;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.iden.common.entity.*;
+import com.iden.common.enums.*;
+import com.iden.common.service.*;
+import com.iden.common.vo.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * @author makejava
+ * @since 2021-05-21 00:08:38
+ */
+@Service
+public class WarningPersonService {
+
+    @Resource
+    private IdenPersonService idenPersonService;
+    @Resource
+    private IdenWarningPersonService idenWarningPersonService;
+
+    @Resource
+    private IdenPersonCrowdRefService idenPersonCrowdRefService;
+    @Resource
+    private IdenCrowdService idenCrowdService;
+
+
+    /**
+     * 根据小区查询预警人员列表分页
+     * @return
+     */
+    public IPage<WarningPersonVO> listWarningPersonbyCommunity(String type, Long communityId, String nameOrCred, String populationType, Long crowdId, String beginDate, String endDate, UserLoginedConvertVO loginUser, PageReqVO pageReqVo) {
+        QueryWrapper<IdenPerson> queryWrapper0 = new QueryWrapper<>();
+        queryWrapper0.lambda().eq(StrUtil.isNotEmpty(populationType),IdenPerson::getPopulationType,populationType)
+                .and(StrUtil.isNotEmpty(nameOrCred),wrapper -> wrapper.like(IdenPerson::getName,nameOrCred)
+                .or().like(IdenPerson::getCredentialsCode,nameOrCred));
+        if (crowdId != null) {
+            queryWrapper0.apply(" EXISTS ( select dev_code from iden_person_crowd_ref ipcr where ipcr.person_id = iden_person.id  and ipcr.crowd_id  = " + crowdId + ")");
+        }
+
+        List<IdenPerson> listIdenPerson = idenPersonService.list(queryWrapper0);
+        List<Long> listIdenPersonId = new ArrayList<>();
+        if(CollUtil.isNotEmpty(listIdenPerson)){
+            listIdenPerson.forEach(item->{
+                listIdenPersonId.add(item.getId());
+            });
+        }
+
+        IPage<IdenWarningPerson> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
+        QueryWrapper<IdenWarningPerson> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(IdenWarningPerson::getType,type).eq(IdenWarningPerson::getCommunityId,communityId)
+                .ge(StrUtil.isNotEmpty(beginDate),IdenWarningPerson::getDataDate,beginDate)
+                .le(StrUtil.isNotEmpty(endDate),IdenWarningPerson::getDataDate,endDate)
+                .in(CollUtil.isNotEmpty(listIdenPersonId),IdenWarningPerson::getPersonId,listIdenPersonId)
+                .orderByAsc(IdenWarningPerson::getId);
+
+        queryWrapper.groupBy("uid");
+        queryWrapper.select(
+                "max(community_id) communityId",
+                "max(image) image",
+                "sum(appear_frequency) appearFrequency",
+                "max(is_continue) isContinue",
+                "max(subdistrict) subdistrict",
+                "max(stranger_type) strangerType",
+                "max(handle_status) handleStatus",
+                "max(remark) remark",
+                "max(earliest_appear_time) earliestAppearTime",
+                "max(continue_disappear_days) continueDisappearDays",
+                "max(person_id) personId"
+        );
+
+        IPage<IdenWarningPerson> pageRes = this.idenWarningPersonService.page(page, queryWrapper);
+        IPage<WarningPersonVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
+        if(CollUtil.isNotEmpty(pageRes.getRecords())){
+            List<WarningPersonVO> list = new ArrayList<>();
+            pageRes.getRecords().forEach(item -> {
+                WarningPersonVO resVO = new WarningPersonVO();
+                BeanUtils.copyProperties(item,resVO);
+                resVO.setTypeName(WarningTypeEnum.getValueToName(resVO.getType()));
+                resVO.setStrangerTypeName(StrangerTypeEnum.getValueToName(resVO.getStrangerType()));
+                resVO.setIsContinueName(IsContinueEnum.getValueToName(resVO.getIsContinue()));
+                resVO.setHandleStatusName(HandleWarningStatusEnum.getValueToName(resVO.getHandleStatus()));
+                Long personId = resVO.getPersonId();
+                if (personId != null) {
+                    IdenPerson idenPerson = this.idenPersonService.getById(personId);
+                    PersonVO personVO = new PersonVO();
+                    BeanUtils.copyProperties(idenPerson,personVO);
+                    personVO.setPopulationTypeName(PopulationTypeEnum.getValueToName(personVO.getPopulationType()));
+                    personVO.setTypeName(PersonTypeEnum.getValueToName(personVO.getType()));
+
+                    QueryWrapper<IdenPersonCrowdRef> queryWrapper1 = new QueryWrapper<>();
+                    queryWrapper1.lambda().eq(IdenPersonCrowdRef::getPersonId,personVO.getId());
+                    List<IdenPersonCrowdRef> listIdenPersonCrowdRef = idenPersonCrowdRefService.list(queryWrapper1);
+                    StringBuilder sb = new StringBuilder();
+                    if (CollUtil.isNotEmpty(listIdenPersonCrowdRef)) {
+                        for(IdenPersonCrowdRef idenPersonCrowdRef : listIdenPersonCrowdRef){
+                            IdenCrowd idenCrowd = idenCrowdService.getById(idenPersonCrowdRef.getCrowdId());
+                            if(idenCrowd != null) {
+                                sb.append(idenCrowd.getName()).append(",");
+                            }
+                        }
+                    }
+                    String crowdName = sb.toString();
+                    if(crowdName != null && crowdName.endsWith(",")) {
+                        crowdName = crowdName.substring(0, crowdName.length() - 1);
+                    }
+                    personVO.setCrowdName(crowdName);
+                    resVO.setPersonVO(personVO);
+                }
+                list.add(resVO);
+            });
+            results.setRecords(list);
+        }
+        return results;
+    }
+
+
+}

+ 171 - 47
src/main/java/com/iden/bms/service/WarningService.java

@@ -6,6 +6,7 @@ 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.exception.BDException;
 
@@ -18,6 +19,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -43,11 +45,14 @@ public class WarningService {
     private IdenWarningPersonTraceService idenWarningPersonTraceService;
     @Resource
     private IdenWarningStaService idenWarningStaService;
+    @Resource
+    private IdenWarningRuleStrangerService idenWarningRuleStrangerService;
 
     /**
      * 处理预警
      * @return
      */
+
     public void handleWarning() throws BDException {
       //查询没有处理过的人脸图像数据
         QueryWrapper<IdenFaceImage> queryWrapper = new QueryWrapper<>();
@@ -61,54 +66,11 @@ public class WarningService {
         for (IdenFaceImage idenFaceImage : idenFaceImageList) {
 
             String type = idenFaceImage.getType();
-            if (StringUtils.isNotEmpty(type) && type.contains("0")) { //陌生人员
-
+            if (StringUtils.isNotEmpty(type) && type.contains("0")) {
+                handleStranger(idenFaceImage);
             }
-            else if (StringUtils.isNotEmpty(type) && type.contains("1")) { //重点人员
-                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.setCommunityName(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());
-                    }
-                }
-                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());
-                idenWarningEvent.setDataTime(idenFaceImage.getPhotographTime());
-                idenWarningEvent.setImage(idenFaceImage.getImage());
-                idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
-                idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
-                idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
-                idenWarningEvent.setCommunityName(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);
-
-                IdenWarningPersonTrace idenWarningPersonTrace = new IdenWarningPersonTrace();
-                BeanUtil.copyProperties(idenFaceImage,idenWarningPersonTrace,"id");
-                idenWarningPersonTrace.setWarningPersonId(idenWarningPerson.getId());
-                this.idenWarningPersonTraceService.save(idenWarningPersonTrace);
+            else if (StringUtils.isNotEmpty(type) && type.contains("1")) {
+                handleKeynote(idenFaceImage);
             }
             else if (StringUtils.isNotEmpty(type) && type.contains("2")) { //小区人员
 
@@ -116,9 +78,171 @@ public class WarningService {
             else if (StringUtils.isNotEmpty(type) && type.contains("3")) { //昼伏夜出人员
 
             }
+
+            IdenFaceImage idenFaceImageUpdate = new IdenFaceImage();
+            idenFaceImageUpdate.setId(idenFaceImage.getId());
+            idenFaceImageUpdate.setHandleWarningStatus(HandleWarningStatusEnum.HANDLED.getValue());
+            this.idenFaceImageService.updateById(idenFaceImageUpdate);
+        }
+
+    }
+
+    //陌生人员
+    private void handleStranger(IdenFaceImage idenFaceImage){
+
+        //查询此人1月出现天次
+        QueryWrapper<IdenFaceImage> queryWrapper1 = new QueryWrapper<>();
+        queryWrapper1.select("select distinct data_date dataDate ") ;
+        queryWrapper1.lambda().eq(IdenFaceImage::getUid,idenFaceImage.getUid())
+                .orderByAsc(IdenFaceImage::getDataDate);
+        queryWrapper1.apply(" data_date > date_format(DATE_SUB(CURDATE(), INTERVAL 30 DAY),'%Y%m%d')");
+        int strangerDayFrequency = this.idenFaceImageService.count(queryWrapper1);
+
+        //1月内-7天出现情况
+        List<IdenFaceImage> listDataDate =  this.idenFaceImageService.list(queryWrapper1);
+
+        QueryWrapper<IdenWarningRuleStranger> queryWrapper3 = new QueryWrapper<>();
+        IdenWarningRuleStranger idenWarningRuleStranger = idenWarningRuleStrangerService.getOne(queryWrapper3);
+        int strangerFrequency = 15;
+        int strangerDays = 7;
+        if (idenWarningRuleStranger != null){
+            strangerFrequency = idenWarningRuleStranger.getStrangerFrequency();
+            strangerDays = idenWarningRuleStranger.getStrangerDays();
+        }
+        boolean isContinue = getIsContinue(listDataDate,strangerDays);
+
+        IdenWarningPerson idenWarningPerson = new IdenWarningPerson();
+
+        //此人1月出现频次少于15次及7内天每天未连续出现,视为陌生人
+        if(strangerDayFrequency < strangerFrequency &&  !isContinue) {
+            idenWarningPerson.setStrangerType(StrangerTypeEnum.STRANGER.getValue());
+        } else if(strangerDayFrequency >= strangerFrequency ||  isContinue) {
+            idenWarningPerson.setStrangerType(StrangerTypeEnum.NO_REGISTER.getValue());
+        } else {
+            return;
+        }
+
+        idenWarningPerson.setDataDate(DateUtils.strToDate(DateUtils.formatToDateStr(idenFaceImage.getPhotographTime(),"yyyy-MM-dd"),"yyyy-MM-dd"));
+        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());
+        }
+        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());
+            }
         }
+        idenWarningPerson.setAppearFrequency(strangerDayFrequency);
+        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());
+        idenWarningEvent.setDataTime(idenFaceImage.getPhotographTime());
+        idenWarningEvent.setImage(idenFaceImage.getImage());
+        idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
+        idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
+        idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
+        idenWarningEvent.setCommunityName(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);
+
+        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) {
+            IdenCommunity idenCommunity = this.idenCommunityService.getById(communityId);
+            if (idenCommunity != null) {
+                idenWarningPerson.setCommunityId(communityId);
+                idenWarningPerson.setCommunityCode(idenCommunity.getCode());
+                idenWarningPerson.setCommunityName(idenCommunity.getName());
+            }
+        }
+        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());
+        idenWarningEvent.setDataTime(idenFaceImage.getPhotographTime());
+        idenWarningEvent.setImage(idenFaceImage.getImage());
+        idenWarningEvent.setCommunityId(idenWarningPerson.getCommunityId());
+        idenWarningEvent.setCommunityCode(idenWarningPerson.getCommunityCode());
+        idenWarningEvent.setCommunityName(idenWarningPerson.getCommunityName());
+        idenWarningEvent.setCommunityName(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);
+
+        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) {
+        if(CollUtil.isEmpty(listDataDate)){
+            return false;
+        }
+        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 true;
+            }
+        }
 
+        return false;
+    }
 }

+ 1 - 86
src/main/java/com/iden/bms/service/WarningStaService.java

@@ -7,11 +7,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
 import com.iden.common.entity.*;
-import com.iden.common.enums.PersonTypeEnum;
-import com.iden.common.enums.PopulationTypeEnum;
-import com.iden.common.enums.StrangerTypeEnum;
-import com.iden.common.enums.WarningTypeEnum;
-
+import com.iden.common.enums.*;
 
 
 import com.iden.common.service.*;
@@ -31,17 +27,9 @@ import java.util.List;
 @Service
 public class WarningStaService {
 
-    @Resource
-    private IdenPersonService idenPersonService;
     @Resource
     private IdenWarningStaService idenWarningStaService;
-    @Resource
-    private IdenWarningPersonService idenWarningPersonService;
 
-    @Resource
-    private IdenPersonCrowdRefService idenPersonCrowdRefService;
-    @Resource
-    private IdenCrowdService idenCrowdService;
 
     public Integer countCommunity(String type,String district, String subdistrict, String communityName, String beginDate, String endDate, UserLoginedConvertVO loginUser) {
         QueryWrapper<IdenWarningSta> queryWrapper = new QueryWrapper<>();
@@ -107,77 +95,4 @@ public class WarningStaService {
     }
 
 
-    /**
-     * 根据小区查询预警人员列表分页
-     * @return
-     */
-    public IPage<WarningPersonVO> listWarningPersonbyCommunity(String type, Long communityId, String nameOrCred, String populationType, Long crowdId, String beginDate, String endDate, UserLoginedConvertVO loginUser, PageReqVO pageReqVo) {
-        QueryWrapper<IdenPerson> queryWrapper0 = new QueryWrapper<>();
-        queryWrapper0.lambda().eq(StrUtil.isNotEmpty(populationType),IdenPerson::getPopulationType,populationType)
-                .and(StrUtil.isNotEmpty(nameOrCred),wrapper -> wrapper.like(IdenPerson::getName,nameOrCred)
-                .or().like(IdenPerson::getCredentialsCode,nameOrCred));
-        if (crowdId != null) {
-            queryWrapper0.apply(" EXISTS ( select dev_code from iden_person_crowd_ref ipcr where ipcr.person_id = iden_person.id  and ipcr.crowd_id  = " + crowdId + ")");
-        }
-        List<IdenPerson> listIdenPerson = idenPersonService.list(queryWrapper0);
-        List<Long> listIdenPersonId = new ArrayList<>();
-        if(CollUtil.isNotEmpty(listIdenPerson)){
-            listIdenPerson.forEach(item->{
-                listIdenPersonId.add(item.getId());
-            });
-        }
-
-        IPage<IdenWarningPerson> page = new Page<>(pageReqVo.getCurrent(), pageReqVo.getPageSize());
-        QueryWrapper<IdenWarningPerson> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(IdenWarningPerson::getType,type).eq(IdenWarningPerson::getCommunityId,communityId)
-                .ge(StrUtil.isNotEmpty(beginDate),IdenWarningPerson::getDataDate,beginDate)
-                .le(StrUtil.isNotEmpty(endDate),IdenWarningPerson::getDataDate,endDate)
-                .in(CollUtil.isNotEmpty(listIdenPersonId),IdenWarningPerson::getPersonId,listIdenPersonId)
-                .orderByAsc(IdenWarningPerson::getId);
-
-        IPage<IdenWarningPerson> pageRes = this.idenWarningPersonService.page(page, queryWrapper);
-        IPage<WarningPersonVO> results = new Page<>(pageRes.getCurrent(),pageRes.getSize(),pageRes.getTotal());
-        if(CollUtil.isNotEmpty(pageRes.getRecords())){
-            List<WarningPersonVO> list = new ArrayList<>();
-            pageRes.getRecords().forEach(item -> {
-                WarningPersonVO resVO = new WarningPersonVO();
-                BeanUtils.copyProperties(item,resVO);
-                resVO.setTypeName(WarningTypeEnum.getValueToName(resVO.getType()));
-                resVO.setStrangerTypeName(StrangerTypeEnum.getValueToName(resVO.getStrangerType()));
-
-                Long personId = resVO.getPersonId();
-                if (personId != null) {
-                    IdenPerson idenPerson = this.idenPersonService.getById(personId);
-                    PersonVO personVO = new PersonVO();
-                    BeanUtils.copyProperties(idenPerson,personVO);
-                    personVO.setPopulationTypeName(PopulationTypeEnum.getValueToName(personVO.getPopulationType()));
-                    personVO.setTypeName(PersonTypeEnum.getValueToName(personVO.getType()));
-
-                    QueryWrapper<IdenPersonCrowdRef> queryWrapper1 = new QueryWrapper<>();
-                    queryWrapper1.lambda().eq(IdenPersonCrowdRef::getPersonId,personVO.getId());
-                    List<IdenPersonCrowdRef> listIdenPersonCrowdRef = idenPersonCrowdRefService.list(queryWrapper1);
-                    StringBuilder sb = new StringBuilder();
-                    if (CollUtil.isNotEmpty(listIdenPersonCrowdRef)) {
-                        for(IdenPersonCrowdRef idenPersonCrowdRef : listIdenPersonCrowdRef){
-                            IdenCrowd idenCrowd = idenCrowdService.getById(idenPersonCrowdRef.getCrowdId());
-                            if(idenCrowd != null) {
-                                sb.append(idenCrowd.getName()).append(",");
-                            }
-                        }
-                    }
-                    String crowdName = sb.toString();
-                    if(crowdName != null && crowdName.endsWith(",")) {
-                        crowdName = crowdName.substring(0, crowdName.length() - 1);
-                    }
-                    personVO.setCrowdName(crowdName);
-                    resVO.setPersonVO(personVO);
-                }
-                list.add(resVO);
-            });
-            results.setRecords(list);
-        }
-        return results;
-    }
-
-
 }

+ 0 - 5
src/main/java/com/iden/common/entity/IdenCrowd.java

@@ -50,11 +50,6 @@ public class IdenCrowd implements Serializable {
     private Integer quantity;
 
 
-    @ApiModelProperty("更新周期,1每天,2每月")
-    @TableField("UPDATE_CYCLE")
-    private String updateCycle;
-
-
     @ApiModelProperty("备注")
     @TableField("REMARK")
     private String remark;

+ 10 - 2
src/main/java/com/iden/common/entity/IdenFaceImage.java

@@ -34,8 +34,16 @@ public class IdenFaceImage implements Serializable {
     @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
 
+    @ApiModelProperty("唯一生物学标识")
+    @TableField("UID")
+    private String uid;
 
-    @ApiModelProperty("人脸特征ID")
+
+    @ApiModelProperty("数据日期(yyyyMMdd)")
+    @TableField("DATA_DATE")
+    private String dataDate;
+
+    @ApiModelProperty("人脸特征码")
     @TableField("FEAT_PTR")
     private String featPtr;
 
@@ -85,7 +93,7 @@ public class IdenFaceImage implements Serializable {
     private Long personId;
 
 
-    @ApiModelProperty("类型,0:陌生人员 ,1重点人员,2小区人员,3昼伏夜出人员 多个用逗号分割")
+    @ApiModelProperty("类型,1:陌生人员 ,2重点人员,3小区人员,4昼伏夜出人员 多个用逗号分割")
     @TableField("TYPE")
     private String type;
 

+ 9 - 2
src/main/java/com/iden/common/entity/IdenPerson.java

@@ -34,8 +34,15 @@ public class IdenPerson implements Serializable {
     @TableId(value = "ID", type = IdType.AUTO)
     private Long id;
 
+    @ApiModelProperty("唯一生物学标识")
+    @TableField("UID")
+    private String uid;
 
-    @ApiModelProperty("人脸特征ID")
+    @ApiModelProperty("人员编码(人员ID)")
+    @TableField("CODE")
+    private String code;
+
+    @ApiModelProperty("人脸特征码")
     @TableField("FEAT_PTR")
     private String featPtr;
 
@@ -123,7 +130,7 @@ public class IdenPerson implements Serializable {
     private String workAddress;
 
 
-    @ApiModelProperty("类型:1、重点人员,2、小区人员,多个用逗号分割")
+    @ApiModelProperty("类型:2、重点人员,3、小区人员,多个用逗号分割")
     @TableField("TYPE")
     private String type;
 

+ 8 - 1
src/main/java/com/iden/common/entity/IdenWarningPerson.java

@@ -74,6 +74,9 @@ public class IdenWarningPerson implements Serializable {
     @TableField("APPEAR_FREQUENCY")
     private Integer appearFrequency;
 
+    @ApiModelProperty("1月内-7天出现情况,1连续出现,0未连续出现")
+    @TableField("IS_CONTINUE")
+    private String isContinue;
 
     @ApiModelProperty("最早出现时间")
     @TableField("EARLIEST_APPEAR_TIME")
@@ -85,7 +88,7 @@ public class IdenWarningPerson implements Serializable {
     private String type;
 
 
-    @ApiModelProperty("陌生人员类型,1陌生人 2疑似未登记住户")
+    @ApiModelProperty("陌生人员标记,1陌生人 2未登记")
     @TableField("STRANGER_TYPE")
     private String strangerType;
 
@@ -100,6 +103,10 @@ public class IdenWarningPerson implements Serializable {
     private Integer continueDisappearDays;
 
 
+    @ApiModelProperty("处理状态,0未处理,1已处理")
+    @TableField("HANDLE_STATUS")
+    private int handleStatus;
+
     @ApiModelProperty("备注")
     @TableField("REMARK")
     private String remark;

+ 1 - 1
src/main/java/com/iden/common/enums/HandleWarningStatusEnum.java

@@ -8,7 +8,7 @@ package com.iden.common.enums;
  */
 public enum HandleWarningStatusEnum {
     /**
-     * 启用停用
+     * 处理状态
      */
     NO_HANDLE(0,"未处理"),
     HANDLED(1,"已处理");

+ 38 - 0
src/main/java/com/iden/common/enums/IsContinueEnum.java

@@ -0,0 +1,38 @@
+package com.iden.common.enums;
+
+
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * @Author:java
+ * @Date: 2021/05/27
+ */
+public enum IsContinueEnum {
+    /**
+     * 1月内-7天出现情况
+     */
+    YES("1","连续出现"),
+    NO("0","未连续出现");
+    private String value;
+    private String name;
+    IsContinueEnum(String value, String name) {
+        this.value = value;
+        this.name = name;
+    }
+    public String getValue() {
+        return value;
+    }
+
+    public static String getValueToName(String value){
+        if (StrUtil.isEmpty(value)){
+            return null;
+        }
+        if (YES.getValue().equals(value)){
+            return  YES.name;
+        }else if (NO.getValue().equals(value)){
+            return  NO.name;
+        }
+
+        return null;
+    }
+}

+ 4 - 4
src/main/java/com/iden/common/enums/PersonTypeEnum.java

@@ -11,10 +11,10 @@ public enum PersonTypeEnum {
     /**
      * 人员类型
      */
-    STRANGER("0","陌生人员"),
-    KEYNOTE("1","重点人员"),
-    COMMUNITY("2","小区人员"),
-    EVENT_COMMING("3","昼伏夜出人员");
+    STRANGER("1","陌生人员"),
+    KEYNOTE("2","重点人员"),
+    COMMUNITY("3","小区人员"),
+    EVENT_COMMING("4","昼伏夜出人员");
     private String value;
     private String name;
     PersonTypeEnum(String value, String name) {

+ 2 - 2
src/main/java/com/iden/common/enums/StrangerTypeEnum.java

@@ -9,10 +9,10 @@ import cn.hutool.core.util.StrUtil;
  */
 public enum StrangerTypeEnum {
     /**
-     * 陌生人员类型
+     * 陌生人员标记
      */
     STRANGER("1","陌生人"),
-    NO_REGISTER("2","疑似未登记住户");
+    NO_REGISTER("2","未登记");
     private String value;
     private String name;
     StrangerTypeEnum(String value, String name) {

+ 9 - 9
src/main/java/com/iden/common/enums/TrueFalseEnum.java

@@ -7,15 +7,15 @@ import cn.hutool.core.util.StrUtil;
  * @Author:java
  * @Date: 2021/05/27
  */
-public enum TrueFalseEnum {
+public enum YesNoEnum {
     /**
-     * 真假
+     * 是否
      */
-    TRUE("T","真"),
-    FALSE("F","假");
+    YES("Y","是"),
+    NO("N","否");
     private String value;
     private String name;
-    TrueFalseEnum(String value, String name) {
+    YesNoEnum(String value, String name) {
         this.value = value;
         this.name = name;
     }
@@ -27,10 +27,10 @@ public enum TrueFalseEnum {
         if (StrUtil.isEmpty(value)){
             return null;
         }
-        if (TRUE.getValue().equals(value)){
-            return  TRUE.name;
-        }else if (FALSE.getValue().equals(value)){
-            return  FALSE.name;
+        if (YES.getValue().equals(value)){
+            return  YES.name;
+        }else if (NO.getValue().equals(value)){
+            return  NO.name;
         }
 
         return null;

+ 29 - 0
src/main/java/com/iden/common/util/DateUtils.java

@@ -2,8 +2,10 @@ package com.iden.common.util;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 /**
  *  @description 时间控件
@@ -169,4 +171,31 @@ public class DateUtils {
         return (endDate.getTime() - startDate.getTime()) / 1000L;
     }
 
+    /**
+     * 获取两个日期之间的所有日期(yyyyMMdd,yyyyMMdd)
+     * @Description TODO
+     * @param begin
+     * @param end
+     * @return
+     * @author XuJD
+     * @date 2017-4-1
+     */
+    public static List<String> getBetweenDates(String begin, String end) {
+        List<String> result = new ArrayList<>();
+        try {
+            Date beginDate = yyyyMMdd.parse(begin);
+            Date endDate = yyyyMMdd.parse(end);
+            Calendar tempStart = Calendar.getInstance();
+            tempStart.setTime(beginDate);
+
+            while (beginDate.getTime() <= endDate.getTime()) {
+                result.add(yyyyMMdd.format(tempStart.getTime()));
+                tempStart.add(Calendar.DAY_OF_YEAR, 1);
+                beginDate = tempStart.getTime();
+            }
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+        return result;
+    }
 }

+ 0 - 7
src/main/java/com/iden/common/vo/CrowdVO.java

@@ -35,13 +35,6 @@ public class CrowdVO implements Serializable {
     private Integer quantity;
 
 
-    @ApiModelProperty("更新周期,1每天,2每月")
-    private String updateCycle;
-
-    @ApiModelProperty("更新周期名,1每天,2每月")
-    private String updateCycleName;
-
-
     @ApiModelProperty("备注")
     private String remark;
 

+ 7 - 3
src/main/java/com/iden/common/vo/FaceImageVO.java

@@ -24,10 +24,14 @@ public class FaceImageVO implements Serializable {
 
     private Long id;
 
+    @ApiModelProperty("唯一生物学标识")
+    private String uid;
 
-    @ApiModelProperty("人脸特征ID")
+    @ApiModelProperty("人脸特征")
     private String featPtr;
 
+    @ApiModelProperty("数据日期(yyyyMMdd)")
+    private String dataDate;
 
     @ApiModelProperty("图像")
     private String image;
@@ -63,10 +67,10 @@ public class FaceImageVO implements Serializable {
     @ApiModelProperty("人员ID")
     private Long personId;
 
-    @ApiModelProperty("类型,0:陌生人员 ,1重点人员,2小区人员,3昼伏夜出人员 多个用逗号分割")
+    @ApiModelProperty("类型,1:陌生人员 ,2重点人员,3小区人员,4昼伏夜出人员 多个用逗号分割")
     private String type;
 
-    @ApiModelProperty("类型,0:陌生人员 ,1重点人员,2小区人员,3昼伏夜出人员 多个用逗号分割'")
+    @ApiModelProperty("类型,1:陌生人员 ,2重点人员,3小区人员,4昼伏夜出人员 多个用逗号分割")
     private String typeName;
 
     @ApiModelProperty("备注")

+ 6 - 1
src/main/java/com/iden/common/vo/PersonVO.java

@@ -24,8 +24,13 @@ public class PersonVO implements Serializable {
 
     private Long id;
 
+    @ApiModelProperty("唯一生物学标识")
+    private String uid;
 
-    @ApiModelProperty("人脸特征ID")
+    @ApiModelProperty("人员编码(人员ID)")
+    private String code;
+
+    @ApiModelProperty("人脸特征码")
     private String featPtr;
 
 

+ 12 - 2
src/main/java/com/iden/common/vo/WarningPersonVO.java

@@ -54,6 +54,11 @@ public class WarningPersonVO implements Serializable {
     @ApiModelProperty("出现频次")
     private Integer appearFrequency;
 
+    @ApiModelProperty("1月内-7天出现情况,1连续出现,0未连续出现")
+    private String isContinue;
+
+    @ApiModelProperty("1月内-7天出现情况,1连续出现,0未连续出现")
+    private String isContinueName;
 
     @ApiModelProperty("最早出现时间")
     private Date earliestAppearTime;
@@ -65,10 +70,10 @@ public class WarningPersonVO implements Serializable {
     @ApiModelProperty("预警类型名称,1 陌生人员预警 2重点人员预警 3常住人员预警 4昼伏夜出人员预警")
     private String typeName;
 
-    @ApiModelProperty("陌生人员类型,1陌生人 2疑似未登记住户")
+    @ApiModelProperty("陌生人员标记,1陌生人 2未登记")
     private String strangerType;
 
-    @ApiModelProperty("陌生人员类型,1陌生人 2疑似未登记住户")
+    @ApiModelProperty("陌生人员标记,1陌生人 2未登记")
     private String strangerTypeName;
 
     @ApiModelProperty("人员ID")
@@ -78,6 +83,11 @@ public class WarningPersonVO implements Serializable {
     @ApiModelProperty("连续未出现天数")
     private Integer continueDisappearDays;
 
+    @ApiModelProperty("处理状态,0未处理,1已处理")
+    private int handleStatus;
+
+    @ApiModelProperty("处理状态名,0未处理,1已处理")
+    private String handleStatusName;
 
     @ApiModelProperty("备注")
     private String remark;