Browse Source

更新!

TRX 1 year ago
parent
commit
0bea2c72b2
15 changed files with 226 additions and 19 deletions
  1. 13 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/DeviceUseRecordSearch.java
  2. 13 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainModel.java
  3. 8 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainParam.java
  4. 3 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainSearch.java
  5. 25 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorStaticModel.java
  6. 15 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorStaticParam.java
  7. 18 0
      FullCardClient/src/main/java/com/zhongshu/card/client/type/visitor/VisitorApplyType.java
  8. 14 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/visitor/VisitorMainController.java
  9. 16 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/impl/DeviceUseRecordDaoImpl.java
  10. 1 2
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/extend/VisitorMainDaoExtend.java
  11. 15 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/impl/VisitorMainDaoImpl.java
  12. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/permiss/Device2UseUsable.java
  13. 18 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/visitor/VisitorMain.java
  14. 3 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceUseRecordService.java
  15. 63 11
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorMainService.java

+ 13 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/DeviceUseRecordSearch.java

@@ -3,6 +3,8 @@ package com.zhongshu.card.client.model.devices;
 import com.github.microservice.models.type.DeviceType;
 import com.github.microservice.models.type.DeviceType;
 import com.github.microservice.types.deviceUse.OperateState;
 import com.github.microservice.types.deviceUse.OperateState;
 import com.github.microservice.types.deviceUse.OperateType;
 import com.github.microservice.types.deviceUse.OperateType;
+import com.github.microservice.types.user.DevicePermissFromType;
+import com.github.microservice.types.user.UserFromType;
 import com.zhongshu.card.client.model.base.SuperSearch;
 import com.zhongshu.card.client.model.base.SuperSearch;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -44,4 +46,15 @@ public class DeviceUseRecordSearch extends SuperSearch {
     @Schema(description = "用户userId")
     @Schema(description = "用户userId")
     private String userId;
     private String userId;
 
 
+    @Schema(description = "权限来自哪里的配置")
+    private DevicePermissFromType permissFromType;
+
+    @Schema(description = "用户类型")
+    private UserFromType userFromType;
+
+    @Schema(description = "处理的service名称")
+    private String serviceBeanName;
+
+    @Schema(description = "关联的数据id")
+    private String aboutDataId;
 }
 }

+ 13 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainModel.java

@@ -4,6 +4,7 @@ import com.zhongshu.card.client.model.base.SuperModel;
 import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
 import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
 import com.zhongshu.card.client.model.org.OrganizationUserSimpleModel;
 import com.zhongshu.card.client.model.org.OrganizationUserSimpleModel;
 import com.zhongshu.card.client.model.org.UserCountSimpleModel;
 import com.zhongshu.card.client.model.org.UserCountSimpleModel;
+import com.zhongshu.card.client.type.visitor.VisitorApplyType;
 import com.zhongshu.card.client.type.visitor.VisitorState;
 import com.zhongshu.card.client.type.visitor.VisitorState;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -39,6 +40,18 @@ public class VisitorMainModel extends SuperModel {
         return "";
         return "";
     }
     }
 
 
+    @Schema(description = "申请方式")
+    private VisitorApplyType applyType;
+
+    private String applyTypeStr;
+
+    public String getApplyTypeStr() {
+        if (applyType != null) {
+            return applyType.getRemark();
+        }
+        return "";
+    }
+
     //-----------------------被访人 start--------------------------
     //-----------------------被访人 start--------------------------
     @Schema(description = "被访人,也是审核人的用户userId")
     @Schema(description = "被访人,也是审核人的用户userId")
     private String visitorUserId;
     private String visitorUserId;

+ 8 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainParam.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.client.model.visitor;
 package com.zhongshu.card.client.model.visitor;
 
 
+import com.zhongshu.card.client.type.visitor.VisitorApplyType;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -13,8 +14,15 @@ import java.util.Map;
 @Data
 @Data
 public class VisitorMainParam {
 public class VisitorMainParam {
 
 
+    @Schema(description = "数据id")
     private String id;
     private String id;
 
 
+    @Schema(description = "申请方式")
+    private VisitorApplyType applyType = VisitorApplyType.Apply;
+
+    @Schema(description = "邀请用户userId")
+    private String inviteUserId;
+
     @Schema(description = "组件id")
     @Schema(description = "组件id")
     private String sceneComponentId;
     private String sceneComponentId;
 
 

+ 3 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorMainSearch.java

@@ -28,6 +28,9 @@ public class VisitorMainSearch extends SuperSearch {
     @Schema(description = "是否已失效")
     @Schema(description = "是否已失效")
     private Boolean isCancel = Boolean.FALSE;
     private Boolean isCancel = Boolean.FALSE;
 
 
+    @Schema(description = "是否已失效(审核通过,但使用时间已过)")
+    private Boolean isOverTime = Boolean.FALSE;
+
     //-------------------------------申请信息start--------------------
     //-------------------------------申请信息start--------------------
     @Schema(description = "申请人userId")
     @Schema(description = "申请人userId")
     private String applyUserId;
     private String applyUserId;

+ 25 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorStaticModel.java

@@ -0,0 +1,25 @@
+package com.zhongshu.card.client.model.visitor;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2025/2/13
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class VisitorStaticModel {
+
+    @Schema(description = "待审核数量")
+    private Long waitReViewNumber = 0L;
+
+    @Schema(description = "待来访数量")
+    private Long waitVisitNumber = 0L;
+
+    @Schema(description = "当前访客")
+    private Long visitNumber = 0L;
+}

+ 15 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/visitor/VisitorStaticParam.java

@@ -0,0 +1,15 @@
+package com.zhongshu.card.client.model.visitor;
+
+import com.zhongshu.card.client.model.base.ProjectOidParam;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2025/2/13
+ */
+@Data
+public class VisitorStaticParam extends ProjectOidParam {
+
+    private Boolean isVisitorUser = Boolean.TRUE;
+
+}

+ 18 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/type/visitor/VisitorApplyType.java

@@ -0,0 +1,18 @@
+package com.zhongshu.card.client.type.visitor;
+
+import lombok.Getter;
+
+/**
+ * 访客方式
+ */
+public enum VisitorApplyType {
+    Invite("邀请"),
+    Apply("申请");
+
+    @Getter
+    private String remark;
+
+    VisitorApplyType(String remark) {
+        this.remark = remark;
+    }
+}

+ 14 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/visitor/VisitorMainController.java

@@ -5,10 +5,7 @@ import com.github.microservice.auth.security.helper.AuthHelper;
 import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.base.IDParam;
 import com.zhongshu.card.client.model.base.IDParam;
-import com.zhongshu.card.client.model.visitor.VisitorMainModel;
-import com.zhongshu.card.client.model.visitor.VisitorMainParam;
-import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
-import com.zhongshu.card.client.model.visitor.VisitorReViewParam;
+import com.zhongshu.card.client.model.visitor.*;
 import com.zhongshu.card.server.core.service.visitor.VisitorMainService;
 import com.zhongshu.card.server.core.service.visitor.VisitorMainService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -115,4 +112,17 @@ public class VisitorMainController {
         return this.visitorMainService.passVisitApply(param);
         return this.visitorMainService.passVisitApply(param);
     }
     }
 
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "取消申请", description = "取消申请")
+    @RequestMapping(value = "cancelVisitApply", method = {RequestMethod.POST})
+    public ResultContent cancelVisitApply(@RequestBody IDParam param) {
+        return this.visitorMainService.cancelVisitApply(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "当前用户信息统计(被访人员)", description = "当前用户信息统计")
+    @RequestMapping(value = "staticCurrentUserTotal", method = {RequestMethod.POST})
+    public ResultContent staticCurrentUserTotal(@RequestBody VisitorStaticParam param) {
+        return this.visitorMainService.staticCurrentUserTotal(param);
+    }
 }
 }

+ 16 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/impl/DeviceUseRecordDaoImpl.java

@@ -74,6 +74,22 @@ public class DeviceUseRecordDaoImpl extends BaseImpl implements DeviceUseRecordD
             criteria.and("userId").is(param.getUserId());
             criteria.and("userId").is(param.getUserId());
         }
         }
 
 
+        if (param.getPermissFromType() != null) {
+            criteria.and("permissFromType").is(param.getPermissFromType());
+        }
+
+        if (param.getUserFromType() != null) {
+            criteria.and("userFromType").is(param.getUserFromType());
+        }
+
+        if (StringUtils.isNotEmpty(param.getServiceBeanName())) {
+            criteria.and("serviceBeanName").is(param.getServiceBeanName());
+        }
+
+        if (StringUtils.isNotEmpty(param.getAboutDataId())) {
+            criteria.and("aboutDataId").is(param.getAboutDataId());
+        }
+
         // 模糊搜索
         // 模糊搜索
         List<Criteria> criterias = new ArrayList<>();
         List<Criteria> criterias = new ArrayList<>();
         if (StringUtils.isNotEmpty(param.getDeviceId())) {
         if (StringUtils.isNotEmpty(param.getDeviceId())) {

+ 1 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/extend/VisitorMainDaoExtend.java

@@ -1,9 +1,7 @@
 package com.zhongshu.card.server.core.dao.visitor.extend;
 package com.zhongshu.card.server.core.dao.visitor.extend;
 
 
 import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
 import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
-import com.zhongshu.card.client.model.visitor.setting.VisitorSettingDeviceSearch;
 import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
 import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
-import com.zhongshu.card.server.core.domain.visitor.VisitorSettingDevice;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 
 
@@ -16,4 +14,5 @@ public interface VisitorMainDaoExtend {
 
 
     Page<VisitorMain> page(Pageable pageable, VisitorMainSearch param);
     Page<VisitorMain> page(Pageable pageable, VisitorMainSearch param);
 
 
+    Long count(VisitorMainSearch param);
 }
 }

+ 15 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/impl/VisitorMainDaoImpl.java

@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.CollectionUtils;
@@ -29,6 +30,9 @@ public class VisitorMainDaoImpl extends BaseImpl implements VisitorMainDaoExtend
     @Autowired
     @Autowired
     private DBHelper dbHelper;
     private DBHelper dbHelper;
 
 
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
     @Override
     @Override
     public Page<VisitorMain> page(Pageable pageable, VisitorMainSearch param) {
     public Page<VisitorMain> page(Pageable pageable, VisitorMainSearch param) {
         Criteria criteria = buildFilterCriteria(param);
         Criteria criteria = buildFilterCriteria(param);
@@ -39,6 +43,13 @@ public class VisitorMainDaoImpl extends BaseImpl implements VisitorMainDaoExtend
         return dbHelper.pages(query, pageable, VisitorMain.class);
         return dbHelper.pages(query, pageable, VisitorMain.class);
     }
     }
 
 
+    @Override
+    public Long count(VisitorMainSearch param) {
+        Criteria criteria = buildFilterCriteria(param);
+        Query query = Query.query(criteria);
+        return mongoTemplate.count(query, VisitorMain.class);
+    }
+
     private Criteria buildFilterCriteria(VisitorMainSearch param) {
     private Criteria buildFilterCriteria(VisitorMainSearch param) {
         Criteria criteria = buildCriteriaNotOid(param);
         Criteria criteria = buildCriteriaNotOid(param);
 
 
@@ -62,6 +73,10 @@ public class VisitorMainDaoImpl extends BaseImpl implements VisitorMainDaoExtend
             criteria.and("isCancel").is(param.getIsCancel());
             criteria.and("isCancel").is(param.getIsCancel());
         }
         }
 
 
+        if (param.getIsOverTime() != null) {
+            criteria.and("isOverTime").is(param.getIsOverTime());
+        }
+
         if (StringUtils.isNotEmpty(param.getApplyUserId())) {
         if (StringUtils.isNotEmpty(param.getApplyUserId())) {
             criteria.and("applyUserId").is(param.getApplyUserId());
             criteria.and("applyUserId").is(param.getApplyUserId());
         }
         }

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/permiss/Device2UseUsable.java

@@ -14,7 +14,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * 用户可使用设备临时绑定
+ * 用户可使用设备临时权限
  *
  *
  * @author TRX
  * @author TRX
  * @date 2025/2/11
  * @date 2025/2/11

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

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.domain.visitor;
 package com.zhongshu.card.server.core.domain.visitor;
 
 
 import com.github.microservice.types.user.UserFromType;
 import com.github.microservice.types.user.UserFromType;
+import com.zhongshu.card.client.type.visitor.VisitorApplyType;
 import com.zhongshu.card.client.type.visitor.VisitorState;
 import com.zhongshu.card.client.type.visitor.VisitorState;
 import com.zhongshu.card.server.core.domain.base.SuperMain;
 import com.zhongshu.card.server.core.domain.base.SuperMain;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
@@ -38,6 +39,12 @@ public class VisitorMain extends SuperMain {
     @Schema(description = "状态")
     @Schema(description = "状态")
     private VisitorState state;
     private VisitorState state;
 
 
+    @Schema(description = "申请方式")
+    private VisitorApplyType applyType;
+
+    @Schema(description = "邀请用户userId")
+    private String inviteUserId;
+
     //-----------------------被访人 start--------------------------
     //-----------------------被访人 start--------------------------
     @Schema(description = "被访人,也是审核人的用户userId")
     @Schema(description = "被访人,也是审核人的用户userId")
     private String visitorUserId;
     private String visitorUserId;
@@ -57,7 +64,7 @@ public class VisitorMain extends SuperMain {
     private String reviewRemark;
     private String reviewRemark;
 
 
     @Schema(description = "是否已失效(审核通过,但使用时间已过)")
     @Schema(description = "是否已失效(审核通过,但使用时间已过)")
-    private Boolean isCancel = Boolean.FALSE;
+    private Boolean isOverTime = Boolean.FALSE;
 
 
     @Schema(description = "审核是否成功")
     @Schema(description = "审核是否成功")
     private Boolean reViewSuccess;
     private Boolean reViewSuccess;
@@ -65,6 +72,15 @@ public class VisitorMain extends SuperMain {
     @Schema(description = "是否已清理人脸信息")
     @Schema(description = "是否已清理人脸信息")
     private Boolean isClearFace = Boolean.FALSE;
     private Boolean isClearFace = Boolean.FALSE;
 
 
+    @Schema(description = "审核通过后,,但又取消")
+    private Boolean isCancel = Boolean.FALSE;
+
+    @Schema(description = "取消申请的用户userId")
+    private String cancelUserId;
+
+    @Schema(description = "取消申请的时间")
+    private Long cancelTime;
+
     //-------------------------------申请信息start--------------------
     //-------------------------------申请信息start--------------------
 
 
     @Schema(description = "用户类型")
     @Schema(description = "用户类型")
@@ -150,5 +166,6 @@ public class VisitorMain extends SuperMain {
     @Schema(description = "到访地址")
     @Schema(description = "到访地址")
     private String visitAddress;
     private String visitAddress;
 
 
+    @Schema(description = "扩展信息")
     private Map<String, Object> meatInfo = new HashMap<>();
     private Map<String, Object> meatInfo = new HashMap<>();
 }
 }

+ 3 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceUseRecordService.java

@@ -100,6 +100,9 @@ public class DeviceUseRecordService extends SuperService {
      * @return
      * @return
      */
      */
     public ResultContent<DeviceUseRecords> saveDeviceLogs(GateDoorUseParam param) {
     public ResultContent<DeviceUseRecords> saveDeviceLogs(GateDoorUseParam param) {
+        if (param == null) {
+            return ResultContent.buildFail("param is null");
+        }
         // 返回数据
         // 返回数据
         String mqttDataId = param.getMqttDataId();
         String mqttDataId = param.getMqttDataId();
         DeviceUseRecords deviceUseRecord = null;
         DeviceUseRecords deviceUseRecord = null;

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

@@ -9,10 +9,7 @@ import com.github.microservice.net.ResultMessage;
 import com.github.microservice.types.user.DevicePermissFromType;
 import com.github.microservice.types.user.DevicePermissFromType;
 import com.github.microservice.types.user.UserFromType;
 import com.github.microservice.types.user.UserFromType;
 import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
 import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
-import com.zhongshu.card.client.model.visitor.VisitorMainModel;
-import com.zhongshu.card.client.model.visitor.VisitorMainParam;
-import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
-import com.zhongshu.card.client.model.visitor.VisitorReViewParam;
+import com.zhongshu.card.client.model.visitor.*;
 import com.zhongshu.card.client.type.visitor.VisitorState;
 import com.zhongshu.card.client.type.visitor.VisitorState;
 import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
@@ -27,8 +24,8 @@ import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
 import com.zhongshu.card.server.core.domain.visitor.VisitorSetting;
 import com.zhongshu.card.server.core.domain.visitor.VisitorSetting;
 import com.zhongshu.card.server.core.service.base.CommonService;
 import com.zhongshu.card.server.core.service.base.CommonService;
 import com.zhongshu.card.server.core.service.devices.DeviceInfoServiceImpl;
 import com.zhongshu.card.server.core.service.devices.DeviceInfoServiceImpl;
-import com.zhongshu.card.server.core.service.permissVerify.Device2UseUsableService;
 import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
 import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
+import com.zhongshu.card.server.core.service.permissVerify.Device2UseUsableService;
 import com.zhongshu.card.server.core.service.permissVerify.SuperPermissService;
 import com.zhongshu.card.server.core.service.permissVerify.SuperPermissService;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.util.CommonUtil;
 import com.zhongshu.card.server.core.util.CommonUtil;
@@ -104,6 +101,9 @@ public class VisitorMainService extends SuperPermissService {
             return ResultContent.buildFail("访问时长不能为空");
             return ResultContent.buildFail("访问时长不能为空");
         }
         }
         Long endTime = startTime + minutes * 60 * 1000l;
         Long endTime = startTime + minutes * 60 * 1000l;
+        if (param.getApplyType() == null) {
+            return ResultContent.buildFail("applyType 不能为空");
+        }
 
 
         // 所属组件信息
         // 所属组件信息
         String sceneComponentId = param.getSceneComponentId();
         String sceneComponentId = param.getSceneComponentId();
@@ -235,6 +235,32 @@ public class VisitorMainService extends SuperPermissService {
         return ResultContent.buildSuccess();
         return ResultContent.buildSuccess();
     }
     }
 
 
+    /**
+     * 取消申请 (申请审核通过后取消)
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent cancelVisitApply(String id) {
+        VisitorMain visitorMain = visitorMainDao.findTopById(id);
+        if (visitorMain == null) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        ResultContent resultContent = checkReViewInfo(visitorMain);
+        if (resultContent.isFailed()) {
+            return resultContent;
+        }
+        if (visitorMain.getState() != VisitorState.WaitVisit) {
+            return ResultContent.buildFail("当前状态不能取消");
+        }
+        visitorMain.setIsCancel(Boolean.TRUE);
+        visitorMain.setState(VisitorState.Cancel);
+        visitorMain.setCancelUserId(getCurrentUserId());
+        visitorMain.setCancelTime(System.currentTimeMillis());
+        visitorMainDao.save(visitorMain);
+        return ResultContent.buildSuccess();
+    }
+
     /**
     /**
      * 审核通过
      * 审核通过
      *
      *
@@ -293,11 +319,13 @@ public class VisitorMainService extends SuperPermissService {
             if (ObjectUtils.isEmpty(visitorMain)) {
             if (ObjectUtils.isEmpty(visitorMain)) {
                 return null;
                 return null;
             }
             }
-            // 封装使用记录参数
-            deviceUserParam.setPermissFromType(DevicePermissFromType.Visitor);
-            deviceUserParam.setUserName(visitorMain.getName());
-            deviceUserParam.setUserFromType(visitorMain.getUserFromType());
-            deviceUserParam.setAboutDataId(visitorMain.getId());
+            if (deviceUserParam != null) {
+                // 封装使用记录参数
+                deviceUserParam.setPermissFromType(DevicePermissFromType.Visitor);
+                deviceUserParam.setUserName(visitorMain.getName());
+                deviceUserParam.setUserFromType(visitorMain.getUserFromType());
+                deviceUserParam.setAboutDataId(visitorMain.getId());
+            }
 
 
             // 如果是 待来访 状态 则改为 已到访
             // 如果是 待来访 状态 则改为 已到访
             if (visitorMain.getState() == VisitorState.WaitVisit) {
             if (visitorMain.getState() == VisitorState.WaitVisit) {
@@ -316,6 +344,29 @@ public class VisitorMainService extends SuperPermissService {
         return super.detailInfo(fromDataId);
         return super.detailInfo(fromDataId);
     }
     }
 
 
+    /**
+     * 统计当前用户访客数据 (被访人员)
+     *
+     * @return
+     */
+    public ResultContent staticCurrentUserTotal(VisitorStaticParam param) {
+        if (StringUtils.isEmpty(param.getProjectOid())) {
+            param.setProjectOid(getCurrentProjectOid());
+        }
+        if (StringUtils.isEmpty(param.getProjectOid())) {
+            return ResultContent.buildFail("projectOid 信息为空");
+        }
+        VisitorStaticModel model = new VisitorStaticModel();
+
+        Long waitReViewNumber = 0L;
+
+        Long waitVisitNumber = 0L;
+
+        Long visitNumber = 0L;
+
+        return ResultContent.buildSuccess(model);
+    }
+
     /**
     /**
      * 检查数据 审核是否是否已过期
      * 检查数据 审核是否是否已过期
      *
      *
@@ -348,7 +399,7 @@ public class VisitorMainService extends SuperPermissService {
                 // 取消人脸
                 // 取消人脸
                 com.github.microservice.auth.client.content.ResultContent resultContent = userFaceService.delete(visitorMain.getTempUserId(), visitorMain.getFaceFileId());
                 com.github.microservice.auth.client.content.ResultContent resultContent = userFaceService.delete(visitorMain.getTempUserId(), visitorMain.getFaceFileId());
                 if (resultContent.isSuccess()) {
                 if (resultContent.isSuccess()) {
-                    visitorMain.setIsCancel(Boolean.TRUE);
+                    visitorMain.setIsOverTime(Boolean.TRUE);
                     visitorMain.setIsClearFace(Boolean.TRUE);
                     visitorMain.setIsClearFace(Boolean.TRUE);
                     // 如果未使用,,则把状态改为 已失效
                     // 如果未使用,,则把状态改为 已失效
                     if (visitorMain.getState() == VisitorState.WaitVisit) {
                     if (visitorMain.getState() == VisitorState.WaitVisit) {
@@ -381,6 +432,7 @@ public class VisitorMainService extends SuperPermissService {
         // 审核通过
         // 审核通过
         param.setReViewSuccess(Boolean.TRUE);
         param.setReViewSuccess(Boolean.TRUE);
         // 未权限
         // 未权限
+        param.setIsOverTime(Boolean.FALSE);
         param.setIsCancel(Boolean.FALSE);
         param.setIsCancel(Boolean.FALSE);
 
 
         Pageable pageable = PageRequest.of(0, 100);
         Pageable pageable = PageRequest.of(0, 100);