TRX 1 год назад
Родитель
Сommit
376c6fd8d0

+ 36 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainModel.java

@@ -35,14 +35,30 @@ public class VisitorMainModel extends SuperModel {
 
 
     public String getStateStr() {
     public String getStateStr() {
         if (state != null) {
         if (state != null) {
+            if (isLeave != null && isLeave) {
+                if (isOverTimeLeave != null && isOverTimeLeave) {
+                    return "超时离开";
+                } else {
+                    return "已离开";
+                }
+            }
             return state.getRemark();
             return state.getRemark();
         }
         }
         return "";
         return "";
     }
     }
 
 
+    @Schema(description = "是否显示警告红点")
     private Boolean isWarning = Boolean.FALSE;
     private Boolean isWarning = Boolean.FALSE;
 
 
     public Boolean getWarning() {
     public Boolean getWarning() {
+        if (state != null) {
+            if (state == VisitorState.Refuse) {
+                return Boolean.TRUE;
+            }
+            if (isOverTimeLeave != null && isOverTimeLeave) {
+                return Boolean.TRUE;
+            }
+        }
         return Boolean.FALSE;
         return Boolean.FALSE;
     }
     }
 
 
@@ -123,9 +139,6 @@ public class VisitorMainModel extends SuperModel {
     @Schema(description = "设备列表")
     @Schema(description = "设备列表")
     private List<DeviceInfoSimpleModel> deviceInfos = new ArrayList<>();
     private List<DeviceInfoSimpleModel> deviceInfos = new ArrayList<>();
 
 
-    @Schema(description = "第一次访问时间")
-    private Long firstVisitTime;
-
     @Schema(description = "到访部门")
     @Schema(description = "到访部门")
     private String departments = "";
     private String departments = "";
 
 
@@ -139,4 +152,24 @@ public class VisitorMainModel extends SuperModel {
     private String visitAddress;
     private String visitAddress;
 
 
     private Map<String, Object> meatInfo = new HashMap<>();
     private Map<String, Object> meatInfo = new HashMap<>();
+
+    //----------------------访问信息 start----------------
+
+    @Schema(description = "第一次访问时间")
+    private Long firstVisitTime;
+
+    @Schema(description = "最后访问时间")
+    private Long lastVisitTime;
+
+    @Schema(description = "使用次数")
+    private Long useNumber = 0L;
+
+    @Schema(description = "是否离开")
+    private Boolean isLeave = Boolean.FALSE;
+
+    @Schema(description = "离开时间")
+    private Long leaveTime;
+
+    @Schema(description = "是否是超时离开")
+    private Boolean isOverTimeLeave;
 }
 }

+ 2 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/Device2UseUsableDao.java

@@ -14,4 +14,6 @@ public interface Device2UseUsableDao extends MongoDao<Device2UseUsable>, Device2
 
 
     Device2UseUsable findTopById(String id);
     Device2UseUsable findTopById(String id);
 
 
+    Device2UseUsable findToByFromDataId(String fromDataId);
+
 }
 }

+ 21 - 9
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/visitor/VisitorMain.java

@@ -72,7 +72,7 @@ public class VisitorMain extends SuperMain {
     @Schema(description = "是否已清理人脸信息")
     @Schema(description = "是否已清理人脸信息")
     private Boolean isClearFace = Boolean.FALSE;
     private Boolean isClearFace = Boolean.FALSE;
 
 
-    @Schema(description = "审核通过后,,但又取消")
+    @Schema(description = "审核通过后,,但又取消,主动取消")
     private Boolean isCancel = Boolean.FALSE;
     private Boolean isCancel = Boolean.FALSE;
 
 
     @Schema(description = "取消申请的用户userId")
     @Schema(description = "取消申请的用户userId")
@@ -146,14 +146,6 @@ public class VisitorMain extends SuperMain {
     @DBRef(lazy = true)
     @DBRef(lazy = true)
     private List<DeviceInfo> deviceInfos = new ArrayList<>();
     private List<DeviceInfo> deviceInfos = new ArrayList<>();
 
 
-    //----------------------访问信息 start----------------
-
-    @Schema(description = "第一次访问时间")
-    private Long firstVisitTime;
-
-    @Schema(description = "最后访问时间")
-    private Long lastVisitTime;
-
     @Schema(description = "到访部门")
     @Schema(description = "到访部门")
     private String departments = "";
     private String departments = "";
 
 
@@ -168,4 +160,24 @@ public class VisitorMain extends SuperMain {
 
 
     @Schema(description = "扩展信息")
     @Schema(description = "扩展信息")
     private Map<String, Object> meatInfo = new HashMap<>();
     private Map<String, Object> meatInfo = new HashMap<>();
+
+    //----------------------访问信息 start----------------
+
+    @Schema(description = "第一次访问时间")
+    private Long firstVisitTime;
+
+    @Schema(description = "最后访问时间")
+    private Long lastVisitTime;
+
+    @Schema(description = "使用次数")
+    private Long useNumber = 0L;
+
+    @Schema(description = "是否离开")
+    private Boolean isLeave = Boolean.FALSE;
+
+    @Schema(description = "离开时间")
+    private Long leaveTime;
+
+    @Schema(description = "是否是超时离开")
+    private Boolean isOverTimeLeave;
 }
 }

+ 31 - 23
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/permissVerify/Device2UseUsableService.java

@@ -49,36 +49,44 @@ public class Device2UseUsableService {
      * @param visitorMain
      * @param visitorMain
      * @return
      * @return
      */
      */
-    public ResultContent addByVisitorData(VisitorMain visitorMain) {
+    public ResultContent addByVisitorData(VisitorMain visitorMain, boolean isDayLastTime) {
         if (ObjectUtils.isEmpty(visitorMain)) {
         if (ObjectUtils.isEmpty(visitorMain)) {
             return ResultContent.buildFail("访客数据为空");
             return ResultContent.buildFail("访客数据为空");
         }
         }
-        Device2UseUsable entity = new Device2UseUsable();
-        entity.setFromDataId(visitorMain.getId());
-        entity.setServiceBeanName(CommonUtil.getCollectionName(VisitorMainService.class));
-        entity.setTempType(DevicePermissFromType.Visitor);
+        String fromDataId = visitorMain.getId();
+        Device2UseUsable entity = device2UseUsableDao.findToByFromDataId(fromDataId);
+        if (ObjectUtils.isEmpty(entity)) {
+            entity = new Device2UseUsable();
+            entity.setFromDataId(visitorMain.getId());
+            entity.setServiceBeanName(CommonUtil.getCollectionName(VisitorMainService.class));
+            entity.setTempType(DevicePermissFromType.Visitor);
 
 
-        List<String> useDataIds = new ArrayList<>();
-        useDataIds.add(visitorMain.getTempUserId());
-        if (StringUtils.isNotEmpty(visitorMain.getApplyUserId())) {
-            useDataIds.add(visitorMain.getApplyUserId());
-        }
+            List<String> useDataIds = new ArrayList<>();
+            useDataIds.add(visitorMain.getTempUserId());
+            if (StringUtils.isNotEmpty(visitorMain.getApplyUserId())) {
+                useDataIds.add(visitorMain.getApplyUserId());
+            }
+
+            entity.setUseDataIds(useDataIds);
+            entity.setStartTime(visitorMain.getPerStartTime());
 
 
-        entity.setUseDataIds(useDataIds);
-        entity.setStartTime(visitorMain.getPerStartTime());
-        entity.setEndTime(visitorMain.getPerEndTime());
-        entity.setTtl(new Date(visitorMain.getPerEndTime()));
-        List<String> deviceIds = visitorMain.getDeviceIds();
-        if (ObjectUtils.isEmpty(deviceIds)) {
-            List<VisitorSettingDevice> list = visitorSettingDeviceDao.findBySceneComponentId(visitorMain.getSceneComponentId());
-            if (ObjectUtils.isNotEmpty(list)) {
-                deviceIds = list.stream().map(VisitorSettingDevice::getDeviceId).collect(Collectors.toList());
+            List<String> deviceIds = visitorMain.getDeviceIds();
+            if (ObjectUtils.isEmpty(deviceIds)) {
+                List<VisitorSettingDevice> list = visitorSettingDeviceDao.findBySceneComponentId(visitorMain.getSceneComponentId());
+                if (ObjectUtils.isNotEmpty(list)) {
+                    deviceIds = list.stream().map(VisitorSettingDevice::getDeviceId).collect(Collectors.toList());
+                }
             }
             }
+            entity.setDeviceIds(deviceIds);
+            entity.setProjectOid(visitorMain.getProjectOid());
+            entity.setOid(visitorMain.getOid());
         }
         }
-        entity.setDeviceIds(deviceIds);
-        entity.setProjectOid(visitorMain.getProjectOid());
-        entity.setOid(visitorMain.getOid());
-
+        Long endTime = visitorMain.getEndTime();
+        if (isDayLastTime) {
+            endTime = visitorMain.getPerEndTime();
+        }
+        entity.setEndTime(endTime);
+        entity.setTtl(new Date(endTime));
         device2UseUsableDao.save(entity);
         device2UseUsableDao.save(entity);
         return ResultContent.buildSuccess();
         return ResultContent.buildSuccess();
     }
     }

+ 18 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorMainService.java

@@ -301,7 +301,7 @@ public class VisitorMainService extends SuperPermissService {
         visitorMain.setFaceFileId(updateFaceFileId);
         visitorMain.setFaceFileId(updateFaceFileId);
 
 
         // 把用户头像对应的设备权限写入 临时权限表
         // 把用户头像对应的设备权限写入 临时权限表
-        device2UseUsableService.addByVisitorData(visitorMain);
+        device2UseUsableService.addByVisitorData(visitorMain, false);
 
 
         visitorMainDao.save(visitorMain);
         visitorMainDao.save(visitorMain);
         return ResultContent.buildSuccess();
         return ResultContent.buildSuccess();
@@ -331,8 +331,23 @@ public class VisitorMainService extends SuperPermissService {
             if (visitorMain.getState() == VisitorState.WaitVisit) {
             if (visitorMain.getState() == VisitorState.WaitVisit) {
                 visitorMain.setState(VisitorState.Visit);
                 visitorMain.setState(VisitorState.Visit);
                 visitorMain.setFirstVisitTime(System.currentTimeMillis());
                 visitorMain.setFirstVisitTime(System.currentTimeMillis());
+                // 更新权限使用时间
+                device2UseUsableService.addByVisitorData(visitorMain, true);
             }
             }
             visitorMain.setLastVisitTime(System.currentTimeMillis());
             visitorMain.setLastVisitTime(System.currentTimeMillis());
+            visitorMain.setUseNumber(visitorMain.getUseNumber() + 1);
+            if (visitorMain.getUseNumber() >= 2) {
+                // 访问次数大于2次,则判断Wie离开了
+                visitorMain.setIsLeave(Boolean.TRUE);
+                if (CommonUtil.longIsEmpty(visitorMain.getLeaveTime())) {
+                    visitorMain.setLeaveTime(System.currentTimeMillis());
+                }
+                if (visitorMain.getLeaveTime() >= visitorMain.getEndTime()) {
+                    visitorMain.setIsOverTimeLeave(Boolean.TRUE);
+                } else {
+                    visitorMain.setIsOverTimeLeave(Boolean.FALSE);
+                }
+            }
             visitorMainDao.save(visitorMain);
             visitorMainDao.save(visitorMain);
             return ResultContent.buildSuccess(visitorMain);
             return ResultContent.buildSuccess(visitorMain);
         }
         }
@@ -414,6 +429,7 @@ public class VisitorMainService extends SuperPermissService {
                 if (resultContent.isSuccess()) {
                 if (resultContent.isSuccess()) {
                     visitorMain.setIsOverTime(Boolean.TRUE);
                     visitorMain.setIsOverTime(Boolean.TRUE);
                     visitorMain.setIsClearFace(Boolean.TRUE);
                     visitorMain.setIsClearFace(Boolean.TRUE);
+
                     // 如果未使用,,则把状态改为 已失效
                     // 如果未使用,,则把状态改为 已失效
                     if (visitorMain.getState() == VisitorState.WaitVisit) {
                     if (visitorMain.getState() == VisitorState.WaitVisit) {
                         visitorMain.setState(VisitorState.Cancel);
                         visitorMain.setState(VisitorState.Cancel);
@@ -444,7 +460,7 @@ public class VisitorMainService extends SuperPermissService {
         VisitorMainSearch param = new VisitorMainSearch();
         VisitorMainSearch param = new VisitorMainSearch();
         // 审核通过
         // 审核通过
         param.setReViewSuccess(Boolean.TRUE);
         param.setReViewSuccess(Boolean.TRUE);
-        // 未权限
+        // 未失效
         param.setIsOverTime(Boolean.FALSE);
         param.setIsOverTime(Boolean.FALSE);
         param.setIsCancel(Boolean.FALSE);
         param.setIsCancel(Boolean.FALSE);