TRX 1 سال پیش
والد
کامیت
4c76ba5e77

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

@@ -41,6 +41,9 @@ public class VisitorMainSearch extends SuperSearch {
     @Schema(description = "手机号码")
     private String phone;
 
+    @Schema(description = "审核是否成功")
+    private Boolean reViewSuccess;
+
     @Schema(description = "访客类型")
     private List<String> visitorTypes;
 

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

@@ -8,8 +8,8 @@ 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.server.core.service.visitor.VisitorMainService;
-import com.zhongshu.card.server.core.service.visitor.VisitorSettingDeviceService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -34,9 +34,6 @@ import org.springframework.web.bind.annotation.RestController;
 @Tag(name = "访客管理-申请")
 public class VisitorMainController {
 
-    @Autowired
-    private VisitorSettingDeviceService visitorSettingDeviceService;
-
     @Autowired
     private VisitorMainService visitorMainService;
 
@@ -96,4 +93,24 @@ public class VisitorMainController {
         return visitorMainService.page(param, pageable);
     }
 
+    @Operation(summary = "访客申请详情", description = "访客申请详情")
+    @RequestMapping(value = "getInfo", method = {RequestMethod.POST})
+    public ResultContent getInfo(@RequestBody IDParam param) {
+        return this.visitorMainService.getInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "审核--拒绝申请", description = "审核--拒绝申请")
+    @RequestMapping(value = "refuseVisitApply", method = {RequestMethod.POST})
+    public ResultContent refuseVisitApply(@RequestBody VisitorReViewParam param) {
+        return this.visitorMainService.refuseVisitApply(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "审核--通过申请", description = "审核--通过申请")
+    @RequestMapping(value = "passVisitApply", method = {RequestMethod.POST})
+    public ResultContent passVisitApply(@RequestBody VisitorReViewParam param) {
+        return this.visitorMainService.passVisitApply(param);
+    }
+
 }

+ 3 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/visitor/VisitorMainDao.java

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.dao.visitor;
 
 import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.client.type.visitor.VisitorState;
 import com.zhongshu.card.server.core.dao.visitor.extend.VisitorMainDaoExtend;
 import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
 
@@ -16,4 +17,6 @@ public interface VisitorMainDao extends MongoDao<VisitorMain>, VisitorMainDaoExt
 
     List<VisitorMain> findByIdIn(List<String> ids);
 
+    List<VisitorMain> findByState(VisitorState state);
+
 }

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

@@ -78,6 +78,10 @@ public class VisitorMainDaoImpl extends BaseImpl implements VisitorMainDaoExtend
             criteria.and("deviceIds").in(param.getDeviceIds());
         }
 
+        if (param.getReViewSuccess() != null) {
+            criteria.and("reViewSuccess").is(param.getReViewSuccess());
+        }
+
         // 模糊搜索
         List<Criteria> criterias = new ArrayList<>();
         if (StringUtils.isNotEmpty(param.getName())) {

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

@@ -54,12 +54,15 @@ public class VisitorMain extends SuperMain {
     @Schema(description = "审核备注")
     private String reviewRemark;
 
-    @Schema(description = "是否已失效")
+    @Schema(description = "是否已失效(审核通过,但使用时间已过)")
     private Boolean isCancel = Boolean.FALSE;
 
     @Schema(description = "审核是否成功")
     private Boolean reViewSuccess;
 
+    @Schema(description = "是否已清理人脸信息")
+    private Boolean isClearFace = Boolean.FALSE;
+
     //-------------------------------申请信息start--------------------
 
     @Schema(description = "用户类型")

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

@@ -103,6 +103,7 @@ public class DeviceUseRecordService extends SuperService {
         // 返回数据
         String mqttDataId = param.getMqttDataId();
         DeviceUseRecords deviceUseRecord = null;
+
         log.info("saveDeviceUseRecord mqttDataId: {}", mqttDataId);
         if (StringUtils.isNotEmpty(mqttDataId)) {
             deviceUseRecord = init(mqttDataId);

+ 4 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/gateDoor/GateDoorService.java

@@ -179,6 +179,7 @@ public class GateDoorService extends SuperService {
             String userId = info.getCustomId();
 
             GateDoorUseParam deviceUserParam = new GateDoorUseParam();
+            // 验证权限
             ResultContent<String> resultContent = devicePermissVerifyService.verifyDevice(userId, deviceId, deviceUserParam);
             deviceUserParam.setMqttDataId(mqttDataId);
             deviceUserParam.setOperateType(OperateType.Face);
@@ -188,7 +189,7 @@ public class GateDoorService extends SuperService {
             deviceUserParam.setPic(info.getPic());
             if (resultContent.isSuccess()) {
                 result.setSuccess();
-                result.setMsg(resultContent.getContent());
+                result.setMsg(deviceUserParam.getUserName());
                 deviceUserParam.setOperateState(OperateState.Success);
                 deviceUserParam.setIsPassed(Boolean.TRUE);
                 deviceUserParam.setVerifyMsg(resultContent.getContent());
@@ -198,7 +199,8 @@ public class GateDoorService extends SuperService {
                 deviceUserParam.setIsPassed(Boolean.FALSE);
                 deviceUserParam.setVerifyMsg(resultContent.getMsg());
             }
-            // 添加设备使用记录
+
+            // 保存设备使用记录
             deviceUseRecordService.asyncSaveRecord(deviceUserParam);
         } else {
             result.setFailed("参数错误");

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

@@ -37,6 +37,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
@@ -172,6 +173,7 @@ public class VisitorMainService extends SuperService {
         if (entity == null) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
         }
+        checkReViewInfo(entity);
         return ResultContent.buildSuccess(toModel(entity));
     }
 
@@ -285,19 +287,86 @@ public class VisitorMainService extends SuperService {
         return null;
     }
 
+    /**
+     * 检查数据 审核是否是否已过期
+     *
+     * @param visitorMain
+     * @return
+     */
     public ResultContent checkReViewInfo(VisitorMain visitorMain) {
         if (ObjectUtils.isNotEmpty(visitorMain)) {
             if (visitorMain.getState() == VisitorState.WaitReView && visitorMain.getEndTime() <= System.currentTimeMillis()) {
                 // 待审核 结束时间已过期
                 visitorMain.setState(VisitorState.Cancel);
-                visitorMain.setReviewRemark("申请数据过期");
+                visitorMain.setReviewRemark("申请数据已失效");
                 visitorMainDao.save(visitorMain);
-                return ResultContent.buildFail("数据已过期");
+                return ResultContent.buildFail("数据已失效");
             }
         }
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 检查数据是否过期
+     *
+     * @param visitorMain
+     * @return
+     */
+    public ResultContent checkExpireInfo(VisitorMain visitorMain) {
+        if (ObjectUtils.isNotEmpty(visitorMain)) {
+            if (visitorMain.getReViewSuccess() != null && visitorMain.getReViewSuccess() && visitorMain.getEndTime() <= System.currentTimeMillis()) {
+                com.github.microservice.auth.client.content.ResultContent resultContent = userFaceService.delete(visitorMain.getTempUserId(), visitorMain.getFaceFileId());
+                if (resultContent.isSuccess()) {
+                    visitorMain.setIsCancel(Boolean.TRUE);
+                    visitorMain.setIsClearFace(Boolean.TRUE);
+                    visitorMainDao.save(visitorMain);
+                    return ResultContent.buildSuccess();
+                } else {
+                    return ResultContent.buildFail(resultContent.getMsg());
+                }
+            }
+        }
+        return ResultContent.buildFail("数据为空");
+    }
+
+    /**
+     * 每天检查数据,,如果访问时间已过期,则清除人脸数据
+     */
+    public void loopCheckVisitorData() {
+        this.checkAllWaitReView();
+        this.checkAllOverTimeData();
+    }
+
+    /**
+     * 检查所有的 审核通过的是否过期(好清理人脸信息)
+     */
+    private void checkAllOverTimeData() {
+        VisitorMainSearch param = new VisitorMainSearch();
+        param.setReViewSuccess(Boolean.TRUE);
+        param.setIsCancel(Boolean.FALSE);
+
+        Pageable pageable = PageRequest.of(0, 100);
+        Page<VisitorMain> page = visitorMainDao.page(pageable, param);
+        List<VisitorMain> list = page.getContent();
+        if (ObjectUtils.isNotEmpty(list)) {
+            list.forEach(visitorMain -> {
+                checkExpireInfo(visitorMain);
+            });
+        }
+    }
+
+    /**
+     * 检查所有的待审核得数据是否过期
+     */
+    private void checkAllWaitReView() {
+        List<VisitorMain> list = visitorMainDao.findByState(VisitorState.WaitReView);
+        if (ObjectUtils.isNotEmpty(list)) {
+            list.stream().forEach(visitorMain -> {
+                checkReViewInfo(visitorMain);
+            });
+        }
+    }
+
     public VisitorMainModel toModel(VisitorMain entity) {
         VisitorMainModel model = null;
         if (ObjectUtils.isNotEmpty(entity)) {

+ 7 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/timer/SchedulEarlyMorning.java

@@ -1,6 +1,8 @@
 package com.zhongshu.card.server.core.timer;
 
+import com.zhongshu.card.server.core.service.visitor.VisitorMainService;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -14,10 +16,14 @@ import org.springframework.stereotype.Component;
 @Component
 public class SchedulEarlyMorning {
 
+    @Autowired
+    private VisitorMainService visitorMainService;
+
     // 每天凌晨1点执行
     @Scheduled(cron = "0 0 1 * * ?")
     public void executeMorning() {
-
+        log.info("Early Morning");
+        visitorMainService.loopCheckVisitorData();
     }
 
 }

+ 29 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/timer/SchedulOneHour.java

@@ -0,0 +1,29 @@
+package com.zhongshu.card.server.core.timer;
+
+import com.zhongshu.card.server.core.service.visitor.VisitorMainService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author TRX
+ * @date 2025/2/11
+ */
+@Slf4j
+@EnableScheduling
+@Component
+public class SchedulOneHour {
+
+    @Autowired
+    private VisitorMainService visitorMainService;
+
+    // 每小时
+    @Scheduled(cron = "0 0 */1 * * ?")
+    public void execute() {
+        log.info("every hour");
+        visitorMainService.loopCheckVisitorData();
+    }
+
+}