Просмотр исходного кода

信息牌接口 指纹和刷卡 ,人脸验证,密码验证,刷卡验证,密码验证 2023-04-05

donggaosheng лет назад: 2
Родитель
Сommit
37735a3874
29 измененных файлов с 385 добавлено и 72 удалено
  1. 10 0
      zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/FaceCompare.java
  2. 9 0
      zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/RemoteFaceService.java
  3. 6 0
      zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/fallback/RemoteFaceFallbackFactory.java
  4. 13 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteDutyService.java
  5. 12 6
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteStudentsService.java
  6. 5 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteDutyFailback.java
  7. 13 0
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteStudentsFallbackFactory.java
  8. 54 18
      zd-modules/zd-algorithm/src/main/java/com/zd/alg/face/controller/FaceApi.java
  9. 57 5
      zd-modules/zd-base/src/main/java/com/zd/base/app/controller/LabBoardApi.java
  10. 8 7
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSecurityApplyController.java
  11. 10 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabStudentsInfoController.java
  12. 46 31
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabXxpCardInfoController.java
  13. 10 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabSecurityApplyMapper.java
  14. 7 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabStudentsInfoMapper.java
  15. 9 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/XxpCardInfoMapper.java
  16. 9 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSecurityApplyService.java
  17. 8 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabStudentsInfoService.java
  18. 8 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/IXxpCardInfoService.java
  19. 14 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSecurityApplyServiceImpl.java
  20. 10 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabStudentsInfoServiceImpl.java
  21. 11 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/XxpCardInfoServiceImpl.java
  22. 7 2
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSecurityApplyMapper.xml
  23. 5 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabStudentsInfoMapper.xml
  24. 4 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/XxpCardInfoMapper.xml
  25. 12 0
      zd-modules/zd-modules-system/src/main/java/com/zd/system/controller/SysUserController.java
  26. 7 0
      zd-modules/zd-modules-system/src/main/java/com/zd/system/mapper/SysUserMapper.java
  27. 7 0
      zd-modules/zd-modules-system/src/main/java/com/zd/system/service/ISysUserService.java
  28. 10 0
      zd-modules/zd-modules-system/src/main/java/com/zd/system/service/impl/SysUserServiceImpl.java
  29. 4 0
      zd-modules/zd-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

+ 10 - 0
zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/FaceCompare.java

@@ -13,6 +13,8 @@ public class FaceCompare {
     @ApiModelProperty("userId")
     private Long userId;
 
+    @ApiModelProperty("实验室ID")
+    private Long labId;
 
     @ApiModelProperty("特征码")
     private byte[] data;
@@ -33,4 +35,12 @@ public class FaceCompare {
     public void setData(byte[] data) {
         this.data = data;
     }
+
+    public Long getLabId() {
+        return labId;
+    }
+
+    public void setLabId(Long labId) {
+        this.labId = labId;
+    }
 }

+ 9 - 0
zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/RemoteFaceService.java

@@ -3,6 +3,7 @@ package com.zd.algorithm.api.face.feign;
 import com.zd.algorithm.api.face.feign.fallback.RemoteFaceFallbackFactory;
 import com.zd.model.constant.ApplicationConstants;
 import com.zd.model.domain.R;
+import com.zd.model.domain.ResultData;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -33,4 +34,12 @@ public interface RemoteFaceService {
      */
     @PostMapping(value = "/faceApi/compare")
     public R compare(@RequestBody FaceCompare faceCompare);
+
+    /**
+     * 多人人脸对比
+     * @param faceCompare
+     * @return
+     */
+    @PostMapping("/faceApi/multiCompare")
+    public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare);
 }

+ 6 - 0
zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/fallback/RemoteFaceFallbackFactory.java

@@ -3,6 +3,7 @@ package com.zd.algorithm.api.face.feign.fallback;
 import com.zd.algorithm.api.face.feign.FaceCompare;
 import com.zd.algorithm.api.face.feign.RemoteFaceService;
 import com.zd.model.domain.R;
+import com.zd.model.domain.ResultData;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -38,6 +39,11 @@ public class RemoteFaceFallbackFactory implements FallbackFactory<RemoteFaceServ
             public R compare(FaceCompare faceCompare) {
                 return R.fail("人脸对比服务调用失败:" + throwable.getMessage());
             }
+
+            @Override
+            public ResultData multiFaceDetection(FaceCompare faceCompare) {
+                return ResultData.fail("多人脸对比服务调用失败:" + throwable.getMessage());
+            }
         };
     }
 }

+ 13 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteDutyService.java

@@ -164,4 +164,17 @@ public interface RemoteDutyService {
      */
     @RequestMapping("/XxpUserAuth/deleteFingerById")
     ResultData deleteFingerById(@RequestParam("id") Long id);
+
+
+    /**
+     * 验证密码是否正确
+     *
+     * @param cardNum 电子班牌号码
+     * @param pwd 用户密码
+     * @param subjectId 实验室id
+     * @param userId 用户id
+     * @return
+     */
+    @RequestMapping("/XxpCardInfo/pwdValidate")
+    ResultData pwdValidate(@RequestParam("cardNum") String cardNum,@RequestParam("pwd") String pwd,@RequestParam("subjectId") Long subjectId,@RequestParam("userId") Long userId);
 }

+ 12 - 6
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteStudentsService.java

@@ -4,14 +4,14 @@ import com.zd.laboratory.api.entity.LabStudentsInfo;
 import com.zd.laboratory.api.feign.fallback.RemoteStudentsFallbackFactory;
 import com.zd.model.constant.ApplicationConstants;
 import com.zd.model.domain.R;
+import com.zd.model.domain.ResultData;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 /**
  * 文件服务
  *
@@ -25,7 +25,7 @@ public interface RemoteStudentsService {
      * @return 结果
      */
     @GetMapping(value = "/studentinfo/{joinStudentsId}")
-    public R<LabStudentsInfo> getInfo(@PathVariable("joinStudentsId") Long id);
+    R<LabStudentsInfo> getInfo(@PathVariable("joinStudentsId") Long id);
 
     /**
      * 提交学生卡
@@ -33,5 +33,11 @@ public interface RemoteStudentsService {
      * @return
      */
     @PostMapping (value = "/studentinfo/commit/crad",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
-    public R commitCard(@RequestPart("file") MultipartFile file);
+    R commitCard(@RequestPart("file") MultipartFile file);
+
+    @GetMapping(value = "/studentinfo/getFaceBySecuritySubjectId")
+    ResultData<List<LabStudentsInfo>> getFaceBySecuritySubjectId(@RequestParam("subjectId") Long subjectId);
+
+    @GetMapping("/user/getUserInfoByUserId")
+    public ResultData getUserInfoByUserId(@RequestParam("userId") Long userId);
 }

+ 5 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteDutyFailback.java

@@ -110,6 +110,11 @@ public class RemoteDutyFailback implements FallbackFactory<RemoteDutyService> {
             public ResultData deleteFingerById(Long id) {
                 return ResultData.fail("删除指纹失败:" + cause.getMessage());
             }
+
+            @Override
+            public ResultData pwdValidate(String cardNum, String pwd, Long subjectId, Long userId) {
+                return ResultData.fail("密码对比失败:" + cause.getMessage());
+            }
         };
     }
 }

+ 13 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteStudentsFallbackFactory.java

@@ -3,6 +3,7 @@ package com.zd.laboratory.api.feign.fallback;
 import com.zd.laboratory.api.entity.LabStudentsInfo;
 import com.zd.laboratory.api.feign.RemoteStudentsService;
 import com.zd.model.domain.R;
+import com.zd.model.domain.ResultData;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -10,6 +11,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.util.List;
+
 /**
  * 文件服务降级处理
  *
@@ -31,6 +34,16 @@ public class RemoteStudentsFallbackFactory implements FallbackFactory<RemoteStud
             public R commitCard(MultipartFile file) {
                 return R.fail("学生卡上传调用失败:" + throwable.getMessage());
             }
+
+            @Override
+            public ResultData<List<LabStudentsInfo>> getFaceBySecuritySubjectId(Long subjectId) {
+                return ResultData.fail("根据实验室获取用户人脸信息失败"+throwable.getMessage());
+            }
+
+            @Override
+            public ResultData getUserInfoByUserId(Long userId) {
+                return ResultData.fail("获取用户基本信息失败"+throwable.getMessage());
+            }
         };
     }
 }

+ 54 - 18
zd-modules/zd-algorithm/src/main/java/com/zd/alg/face/controller/FaceApi.java

@@ -4,18 +4,18 @@ import com.arcsoft.face.FaceFeature;
 import com.arcsoft.face.FaceInfo;
 import com.arcsoft.face.toolkit.ImageInfo;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
-import com.zd.alg.face.handle.FaceEngineFactory;
 import com.zd.alg.face.service.FaceService;
 import com.zd.alg.face.utils.FileUtil;
 import com.zd.algorithm.api.face.feign.FaceCompare;
 import com.zd.common.swagger.config.Knife4jConfiguration;
 import com.zd.laboratory.api.entity.LabStudentsInfo;
 import com.zd.laboratory.api.feign.RemoteStudentsService;
+import com.zd.model.constant.HttpStatus;
 import com.zd.model.domain.R;
 import com.zd.model.domain.ResultData;
+import com.zd.model.entity.SysUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.extern.flogger.Flogger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +24,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * @Author: zhoupan
@@ -50,13 +51,12 @@ public class FaceApi {
     @PostMapping("/faceFeature")
     public ResultData faceFeature(@RequestParam("file") MultipartFile file) throws IOException {
         ImageInfo imageInfo;
-        File file1=null;
+        File file1 = null;
         try {
-            file1= FileUtil.multipartFileToFile(file);
+            file1 = FileUtil.multipartFileToFile(file);
             imageInfo = faceService.getImageInfo(file1);
         } finally {
-            if(file1!=null)
-            {
+            if (file1 != null) {
                 file1.delete();
             }
         }
@@ -64,30 +64,69 @@ public class FaceApi {
         FaceFeature faceFeature = faceService.faceFeature(imageInfo, faceInfos);
         return ResultData.success(faceFeature.getFeatureData());
     }
+
     /**
      * 人脸比较
+     *
      * @return
      */
     @ApiOperation("人脸比较")
     @PostMapping("/compare")
-    public ResultData faceDetection(@RequestBody FaceCompare faceCompare)
-    {
+    public ResultData faceDetection(@RequestBody FaceCompare faceCompare) {
         logger.info("====人脸比较====");
         R<LabStudentsInfo> info = remoteStudentsService.getInfo(faceCompare.getUserId());
-        if(info.getCode()==200&&info.getData()!=null)
-        {
+        if (info.getCode() == 200 && info.getData() != null) {
             logger.info("====人脸data组装====");
             FaceFeature target = new FaceFeature(info.getData().getFaceFeature());
             FaceFeature source = new FaceFeature(faceCompare.getData());
             Boolean compore = faceService.compore(target, source);
-            logger.info("====compore===="+compore);
-            return ResultData.result(compore,()->"人脸对比不符!");
-        }else
-        {
-            return ResultData.fail("未获取到对比数据!:"+info.getMsg());
+            logger.info("====compore====" + compore);
+            return ResultData.result(compore, () -> "人脸对比不符!");
+        } else {
+            return ResultData.fail("未获取到对比数据!:" + info.getMsg());
+        }
+    }
+
+
+    /**
+     * 人脸比较
+     *
+     * @return
+     */
+    @ApiOperation("人脸比较")
+    @PostMapping("/multiCompare")
+    public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare) {
+        logger.info("====人脸比较====");
+        Long userId=null;
+        ResultData<List<LabStudentsInfo>> infoList = remoteStudentsService.getFaceBySecuritySubjectId(faceCompare.getLabId());
+        if (infoList.getCode() == 200 && infoList.getData() != null) {
+            logger.info("====人脸data组装====");
+            for(LabStudentsInfo info:infoList.getData()){
+                FaceFeature target = new FaceFeature(info.getFaceFeature());
+                FaceFeature source = new FaceFeature(faceCompare.getData());
+                Boolean compore = faceService.compore(target, source);
+                if(compore){
+                    userId=info.getJoinStudentsId();
+                    logger.info("====compore====" +"对比成功用户ID:"+info.getJoinStudentsId());
+                    break;
+                }
+            }
+            if(null==userId){
+                return ResultData.fail("人脸识别未通过,请重新识别");
+            }else{
+               ResultData resultData=remoteStudentsService.getUserInfoByUserId(userId);
+               if(null==resultData || resultData.getCode()!= HttpStatus.SUCCESS){
+                   logger.info("查询人员数据出错");
+                   return ResultData.fail("人脸识别未通过,请重新识别");
+               }
+               return resultData;
+            }
+        } else {
+            return ResultData.fail("未获取实验室安全准入人脸数据!");
         }
     }
 
+
     //获取流文件
     private static void inputStreamToFile(InputStream ins, File file) {
         try {
@@ -105,7 +144,4 @@ public class FaceApi {
     }
 
 
-
-
-
 }

+ 57 - 5
zd-modules/zd-base/src/main/java/com/zd/base/app/controller/LabBoardApi.java

@@ -1,5 +1,7 @@
 package com.zd.base.app.controller;
 
+import com.zd.algorithm.api.face.feign.FaceCompare;
+import com.zd.algorithm.api.face.feign.RemoteFaceService;
 import com.zd.algorithm.api.xxp.feign.RemoteXxpService;
 import com.zd.base.app.domain.board.DutyPersonVo;
 import com.zd.base.app.domain.board.LabXxpSubjectVo;
@@ -19,6 +21,7 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.rmi.Remote;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -41,6 +44,8 @@ public class LabBoardApi {
     private RemoteXxpService remoteXxpService;
     @Autowired
     private FileConfigUtils fileConfigUtils;
+    @Autowired
+    private RemoteFaceService remoteFaceService;
 
     /**
      * 查询电子信息牌头部信息
@@ -394,15 +399,15 @@ public class LabBoardApi {
         Integer isOpen=0;
         ResultData resultData=remoteDutyService.securityNumList(labId);
         if(resultData==null && resultData.getCode()!=HttpStatus.SUCCESS){
-            return ResultData.fail("获取准入人员卡号失败!");
+            return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
         }
         Object resultObj=resultData.getData();
         if(null==resultObj){
-            return ResultData.fail("获取准入人员卡号失败!");
+            return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
         }
-        List<String> cardList= (List<String>)resultObj;
-        for(String str:cardList){
-             if(str.equals(cardNum)){
+        List<Map<String, Object>> cardList= (List<Map<String, Object>>) resultObj;
+        for(Map<String, Object> map:cardList){
+             if(String.valueOf(map.get("cardNum")).equals(cardNum)){
                  isOpen=1;
                  break;
              }
@@ -412,6 +417,33 @@ public class LabBoardApi {
 
 
     /**
+     * 电子信息牌获取准入人员的指纹信息列表
+     * @param labId
+     * @return
+     */
+    @ApiOperation(value = "刷卡验证")
+    @GetMapping(value = "/cardValidate")
+    public ResultData cardValidate(@RequestParam("labId") Long labId,@RequestParam("cardNum") String cardNum) {
+        ResultData resultData=remoteDutyService.securityNumList(labId);
+        if(resultData==null && resultData.getCode()!=HttpStatus.SUCCESS){
+            return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
+        }
+        Object resultObj=resultData.getData();
+        if(null==resultObj){
+            return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
+        }
+        List<Map<String, Object>> cardList= (List<Map<String, Object>>) resultObj;
+        for(Map<String, Object> map:cardList){
+            System.out.println(String.valueOf(map.get("cardNum")));
+            if(String.valueOf(map.get("cardNum")).equals(cardNum)){
+                return ResultData.success(map);
+            }
+        }
+        return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
+    }
+
+
+    /**
      * 电子信息牌指纹录入
      * @param xxpUserAuthVo
      * @return
@@ -451,4 +483,24 @@ public class LabBoardApi {
         }
         return ResultData.success();
     }
+
+    /**
+     * 密码验证
+     * @param cardNum
+     * @param pwd
+     * @param subjectId
+     * @param userId
+     * @return
+     */
+    @ApiOperation(value = "密码验证")
+    @GetMapping(value = "/pwdValidate")
+    public ResultData pwdValidate(@RequestParam("cardNum") String cardNum,@RequestParam("pwd") String pwd,@RequestParam("subjectId") Long subjectId,@RequestParam("userId") Long userId){
+        return remoteDutyService.pwdValidate(cardNum,pwd,subjectId,userId);
+    }
+
+    @ApiOperation(value = "人脸识别")
+    @GetMapping(value = "/multiFaceDetection")
+    public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare){
+        return remoteFaceService.multiFaceDetection(faceCompare);
+    }
 }

+ 8 - 7
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSecurityApplyController.java

@@ -829,14 +829,15 @@ public class LabSecurityApplyController extends BaseController
     @RequestMapping("/app/securityNumList")
     public ResultData securityNumList(Long labId)
     {
-        List cardList=new ArrayList();
-        List<String> list = labSecurityApplyService.selectSecurityCardList(labId);
-        for(String str:list){
-            if(StringUtils.isNotNull(str) && StringUtils.isNotEmpty(str)){
-                String decryptCard=DESUtils.decrypt(str);
-                cardList.add(decryptCard);
+        List<Map<String,Object>> mapList=new ArrayList<>();
+        List<Map<String,Object>> list = labSecurityApplyService.selectSecurityCardList(labId);
+        for(Map<String,Object> map:list){
+            if(StringUtils.isNotNull(map.get("cardNum"))){
+                String decryptCard=DESUtils.decrypt(String.valueOf(map.get("cardNum")));
+                map.put("cardNum",decryptCard);
+                mapList.add(map);
             }
         }
-        return ResultData.success(cardList);
+        return ResultData.success(mapList);
     }
 }

+ 10 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabStudentsInfoController.java

@@ -215,4 +215,14 @@ public class LabStudentsInfoController extends BaseController {
         return ResultData.success(labStudentsInfoService.selectLabStudentsInfoByJoinStudentsId(SecurityUtils.getUserId()));
     }
 
+
+    /**
+     * 获取学生登录用户信息
+     */
+    @ApiOperation(value = "获取安全实验室安全人员的人脸信息")
+    @RequestMapping(value = "/getFaceBySecuritySubjectId")
+    public ResultData<List<LabStudentsInfo>> getFaceBySecuritySubjectId(Long subjectId) {
+        return ResultData.success(labStudentsInfoService.selectLabStudentsInfoBySubjectId(subjectId));
+    }
+
 }

+ 46 - 31
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabXxpCardInfoController.java

@@ -6,8 +6,8 @@ import com.zd.common.core.log.BusinessType;
 import com.zd.common.core.security.TokenService;
 import com.zd.common.core.utils.ExcelUtil;
 import com.zd.common.core.web.controller.BaseController;
-import com.zd.laboratory.domain.LabWhitelist;
 import com.zd.laboratory.domain.XxpCardInfo;
+import com.zd.laboratory.service.ILabSecurityApplyService;
 import com.zd.laboratory.service.IXxpCardInfoService;
 import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerFun;
@@ -32,10 +32,11 @@ import java.util.Map;
 @RestController
 @Api(tags = "【电子信息牌】")
 @RequestMapping("/XxpCardInfo")
-public class LabXxpCardInfoController extends BaseController
-{
+public class LabXxpCardInfoController extends BaseController {
     @Autowired
     private IXxpCardInfoService xxpCardInfoService;
+    @Autowired
+    private ILabSecurityApplyService iLabSecurityApplyService;
 
     @Autowired
     private TokenService tokenService;
@@ -46,9 +47,8 @@ public class LabXxpCardInfoController extends BaseController
     @PreAuthorize(hasPermi = PerPrefix.LABORATORY_CARDINFO + PerFun.LIST)
     @GetMapping("/list")
     @ApiOperation(value = "查询电子信息牌列表")
-    public TableDataInfo<XxpCardInfo> list(XxpCardInfo xxpCardInfo)
-    {
-        startPage("create_time","descending");
+    public TableDataInfo<XxpCardInfo> list(XxpCardInfo xxpCardInfo) {
+        startPage("create_time", "descending");
         List<XxpCardInfo> list = xxpCardInfoService.selectXxpCardInfoList(xxpCardInfo);
         return getDataTable(list);
     }
@@ -58,8 +58,7 @@ public class LabXxpCardInfoController extends BaseController
      */
     @GetMapping("/getlist")
     @ApiOperation(value = "查询电子信息牌列表-无权限")
-    public TableDataInfo<XxpCardInfo> getlist(XxpCardInfo xxpCardInfo)
-    {
+    public TableDataInfo<XxpCardInfo> getlist(XxpCardInfo xxpCardInfo) {
         startPage();
         List<XxpCardInfo> list = xxpCardInfoService.selectXxpCardInfoList(xxpCardInfo);
         return getDataTable(list);
@@ -72,8 +71,7 @@ public class LabXxpCardInfoController extends BaseController
     @PreAuthorize(hasPermi = PerPrefix.LABORATORY_CARDINFO + PerFun.EXPORT)
     @Log(title = "电子信息牌", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, XxpCardInfo xxpCardInfo) throws IOException
-    {
+    public void export(HttpServletResponse response, XxpCardInfo xxpCardInfo) throws IOException {
         List<XxpCardInfo> list = xxpCardInfoService.selectXxpCardInfoList(xxpCardInfo);
         ExcelUtil<XxpCardInfo> util = new ExcelUtil<XxpCardInfo>(XxpCardInfo.class);
         util.exportExcel(response, list, "电子信息牌数据");
@@ -85,8 +83,7 @@ public class LabXxpCardInfoController extends BaseController
     @ApiOperation(value = "获取电子信息牌详细")
     @PreAuthorize(hasPermi = PerPrefix.LABORATORY_CARDINFO + PerFun.QUERY)
     @GetMapping(value = "/{id}")
-    public ResultData<XxpCardInfo> getInfo(@PathVariable("id") Long id)
-    {
+    public ResultData<XxpCardInfo> getInfo(@PathVariable("id") Long id) {
         return ResultData.success(xxpCardInfoService.selectXxpCardInfoById(id));
     }
 
@@ -98,8 +95,7 @@ public class LabXxpCardInfoController extends BaseController
     @PreAuthorize(hasPermi = PerPrefix.LABORATORY_CARDINFO + PerFun.ADD)
     @Log(title = "电子信息牌", businessType = BusinessType.INSERT)
     @PostMapping
-    public ResultData add(@RequestBody XxpCardInfo xxpCardInfo)
-    {
+    public ResultData add(@RequestBody XxpCardInfo xxpCardInfo) {
         return ResultData.result(xxpCardInfoService.insertXxpCardInfo(xxpCardInfo));
     }
 
@@ -109,8 +105,7 @@ public class LabXxpCardInfoController extends BaseController
     @ApiOperation(value = "新增电子信息牌-无权限")
     @Log(title = "电子信息牌", businessType = BusinessType.INSERT)
     @PostMapping("/addInfo")
-    public ResultData addInfo(@RequestBody XxpCardInfo xxpCardInfo)
-    {
+    public ResultData addInfo(@RequestBody XxpCardInfo xxpCardInfo) {
         return ResultData.result(xxpCardInfoService.insertXxpCardInfo(xxpCardInfo));
     }
 
@@ -121,9 +116,8 @@ public class LabXxpCardInfoController extends BaseController
     @PreAuthorize(hasPermi = PerPrefix.LABORATORY_CARDINFO + PerFun.EDIT)
     @Log(title = "电子信息牌", businessType = BusinessType.UPDATE)
     @PutMapping
-    public ResultData edit(@RequestBody XxpCardInfo xxpCardInfo)
-    {
-        return  ResultData.result(xxpCardInfoService.updateXxpCardInfo(xxpCardInfo));
+    public ResultData edit(@RequestBody XxpCardInfo xxpCardInfo) {
+        return ResultData.result(xxpCardInfoService.updateXxpCardInfo(xxpCardInfo));
     }
 
     /**
@@ -132,9 +126,8 @@ public class LabXxpCardInfoController extends BaseController
     @ApiOperation(value = "修改电子信息牌-无权限")
     @Log(title = "电子信息牌", businessType = BusinessType.UPDATE)
     @PostMapping("/edit")
-    public ResultData editCard(@RequestBody XxpCardInfo xxpCardInfo)
-    {
-        return  ResultData.result(xxpCardInfoService.updateXxpCardInfo(xxpCardInfo));
+    public ResultData editCard(@RequestBody XxpCardInfo xxpCardInfo) {
+        return ResultData.result(xxpCardInfoService.updateXxpCardInfo(xxpCardInfo));
     }
 
     /**
@@ -144,13 +137,13 @@ public class LabXxpCardInfoController extends BaseController
     @PreAuthorize(hasPermi = PerPrefix.LABORATORY_CARDINFO + PerFun.REMOVE)
     @Log(title = "电子信息牌", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public ResultData remove(@PathVariable Long[] ids)
-    {
+    public ResultData remove(@PathVariable Long[] ids) {
         return ResultData.result(xxpCardInfoService.deleteXxpCardInfoByIds(ids));
     }
 
     /**
      * 根据id删除
+     *
      * @param id
      * @return
      */
@@ -158,38 +151,60 @@ public class LabXxpCardInfoController extends BaseController
     @PreAuthorize(hasPermi = PerPrefix.LABORATORY_CARDINFO + PerFun.REMOVE)
     @Log(title = "电子信息牌", businessType = BusinessType.DELETE)
     @PostMapping("/{id}")
-    public ResultData remove(@PathVariable Long id)
-    {
+    public ResultData remove(@PathVariable Long id) {
         return ResultData.result(xxpCardInfoService.deleteXxpCardInfoById(id));
     }
 
     /**
      * 根据id删除-无权限
+     *
      * @param id
      * @return
      */
     @ApiOperation(value = "根据id删除-无权限")
     @Log(title = "电子信息牌", businessType = BusinessType.DELETE)
     @PostMapping("/del/{id}")
-    public ResultData del(@PathVariable Long id)
-    {
+    public ResultData del(@PathVariable Long id) {
         return ResultData.result(xxpCardInfoService.deleteXxpCardInfoById(id));
     }
 
 
     /**
      * 根据卡号获取电子信息牌信息
+     *
      * @param cardNum
      * @return
      */
     @RequestMapping("/XxpCardInfoByCard/{num}")
-    public ResultData XxpCardInfoByCard(@PathVariable("num") String cardNum)
-    {
+    public ResultData XxpCardInfoByCard(@PathVariable("num") String cardNum) {
         List<Map<String, Object>> list = xxpCardInfoService.selectXxpCardInfoByCard(cardNum);
-        if(list.size()>0){
+        if (list.size() > 0) {
             return ResultData.success(list.get(0));
         }
         return ResultData.success();
     }
 
+
+    /**
+     * 验证密码是否正确
+     *
+     * @param cardNum 电子班牌号码
+     * @param pwd 用户密码
+     * @param subjectId 实验室id
+     * @param userId 用户id
+     * @return
+     */
+    @RequestMapping("/pwdValidate")
+    public ResultData pwdValidate(String cardNum, String pwd,Long subjectId, Long userId) {
+        List<Map<String,Object>> mapList=iLabSecurityApplyService.selectCountLabSecurityUserId(subjectId,userId);
+        if(mapList.size()==0){
+            return ResultData.fail("未获得实验室准入资格;");
+        }
+        int count = xxpCardInfoService.selectPwdCountByPwd(cardNum, pwd);
+        if (count == 0) {
+            return ResultData.fail("密码输入错误,请重新输入;");
+        }
+        return ResultData.success(mapList.get(0));
+    }
+
 }

+ 10 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabSecurityApplyMapper.java

@@ -161,5 +161,14 @@ public interface LabSecurityApplyMapper
      * @param subjectId
      * @return
      */
-    List<String> selectSecurityCardList(Long subjectId);
+    List<Map<String,Object>> selectSecurityCardList(Long subjectId);
+
+
+    /**
+     * 判断是否获得安全准入
+     *
+     * @param userId 用户的id
+     * @return 安全准入申请
+     */
+    List<Map<String, Object>> selectCountLabSecurityUserId(@Param("subjectId") Long subjectId,@Param("userId") Long userId);
 }

+ 7 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabStudentsInfoMapper.java

@@ -67,4 +67,11 @@ public interface LabStudentsInfoMapper {
      * @return 结果
      */
     public int deleteLabStudentsInfoByJoinStudentsIds(Long[] joinStudentsIds);
+
+    /**
+     * 查询学生信息
+     * @param subjectId 实验室id
+     * @return 学生信息
+     */
+    List<LabStudentsInfo> selectLabStudentsInfoBySubjectId(Long subjectId);
 }

+ 9 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/XxpCardInfoMapper.java

@@ -1,6 +1,7 @@
 package com.zd.laboratory.mapper;
 
 import com.zd.laboratory.domain.XxpCardInfo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -76,4 +77,12 @@ public interface XxpCardInfoMapper
      * @return
      */
     XxpCardInfo selectXxpInfoByCard(String cardNum);
+
+    /**
+     * 根据卡号和密码查询是否密码是否正确
+     * @param cardNum
+     * @param pwd
+     * @return
+     */
+    int selectPwdCountByPwd(@Param("cardNum") String cardNum, @Param("pwd") String pwd);
 }

+ 9 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSecurityApplyService.java

@@ -191,5 +191,13 @@ public interface ILabSecurityApplyService
      * @param subjectId
      * @return
      */
-    List<String> selectSecurityCardList(Long subjectId);
+    List<Map<String,Object>> selectSecurityCardList(Long subjectId);
+
+    /**
+     * 判断是否获得安全准入
+     *
+     * @param userId 用户的id
+     * @return 安全准入申请
+     */
+    List<Map<String,Object>> selectCountLabSecurityUserId(Long subjectId, Long userId);
 }

+ 8 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabStudentsInfoService.java

@@ -102,4 +102,12 @@ public interface ILabStudentsInfoService {
      * @return 结果
      */
     public int deleteLabStudentsInfoByJoinStudentsId(Long joinStudentsId);
+
+
+    /**
+     * 查询学生信息
+     * @param subjectId 实验室id
+     * @return 学生信息
+     */
+    public List<LabStudentsInfo> selectLabStudentsInfoBySubjectId(Long subjectId);
 }

+ 8 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/IXxpCardInfoService.java

@@ -78,4 +78,12 @@ public interface IXxpCardInfoService
      * @return
      */
     XxpCardInfo selectXxpInfoByCard(String cardNum);
+
+    /**
+     * 根据卡号和密码查询是否密码是否正确
+     * @param cardNum
+     * @param pwd
+     * @return
+     */
+    int selectPwdCountByPwd(String cardNum, String pwd);
 }

+ 14 - 1
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSecurityApplyServiceImpl.java

@@ -28,6 +28,7 @@ import com.zd.model.domain.per.PerPrefix;
 import com.zd.model.entity.LoginUser;
 import com.zd.model.entity.SysUser;
 import com.zd.system.api.feign.RemoteUserService;
+import org.apache.ibatis.annotations.Param;
 import org.json.JSONString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -508,7 +509,19 @@ public class LabSecurityApplyServiceImpl implements ILabSecurityApplyService
      * @return
      */
     @Override
-    public List<String> selectSecurityCardList(Long subjectId) {
+    public List<Map<String,Object>> selectSecurityCardList(Long subjectId) {
         return labSecurityApplyMapper.selectSecurityCardList(subjectId);
     }
+
+    /**
+     * 判断是否获得安全准入
+     *
+     * @param userId 用户的id
+     * @return 安全准入申请
+     */
+    @Override
+    public List<Map<String, Object>> selectCountLabSecurityUserId(Long subjectId, Long userId){
+        return labSecurityApplyMapper.selectCountLabSecurityUserId(subjectId,userId);
+    }
+
 }

+ 10 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabStudentsInfoServiceImpl.java

@@ -198,4 +198,14 @@ public class LabStudentsInfoServiceImpl implements ILabStudentsInfoService {
     public int deleteLabStudentsInfoByJoinStudentsId(Long joinStudentsId) {
         return labStudentsInfoMapper.deleteLabStudentsInfoByJoinStudentsId(joinStudentsId);
     }
+
+    /**
+     * 查询学生信息
+     * @param subjectId 实验室id
+     * @return 学生信息
+     */
+    @Override
+    public List<LabStudentsInfo> selectLabStudentsInfoBySubjectId(Long subjectId) {
+        return labStudentsInfoMapper.selectLabStudentsInfoBySubjectId(subjectId);
+    }
 }

+ 11 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/XxpCardInfoServiceImpl.java

@@ -162,4 +162,15 @@ public class XxpCardInfoServiceImpl implements IXxpCardInfoService
     public XxpCardInfo selectXxpInfoByCard(String cardNum) {
         return xxpCardInfoMapper.selectXxpInfoByCard(cardNum);
     }
+
+    /**
+     * 根据卡号和密码查询是否密码是否正确
+     * @param cardNum
+     * @param pwd
+     * @return
+     */
+    @Override
+    public int selectPwdCountByPwd(String cardNum, String pwd) {
+        return xxpCardInfoMapper.selectPwdCountByPwd(cardNum,pwd);
+    }
 }

+ 7 - 2
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSecurityApplyMapper.xml

@@ -593,9 +593,14 @@
     </select>
 
     <!--获取准入人员的卡号信息-->
-    <select id="selectSecurityCardList" resultType="java.lang.String">
-            SELECT  card_num_simple  FROM  sys_user WHERE user_id IN (SELECT user_id
+    <select id="selectSecurityCardList" resultType="java.util.Map">
+            SELECT  card_num_simple cardNum,user_id userId, nick_name userName,user_type userType FROM  sys_user WHERE user_id IN (SELECT user_id
                 FROM  lab_security_apply  WHERE audit_status=2 AND subject_id=#{subjectId} and valid_end_time <![CDATA[<]]> now())
     </select>
 
+    <select id="selectCountLabSecurityUserId" resultType="java.util.Map">
+     SELECT user_id userId,user_name userName,user_type userType
+                FROM  lab_security_apply  WHERE audit_status=2 AND subject_id=#{subjectId} and valid_end_time <![CDATA[<]]> now() and user_id=#{userId}
+    </select>
+
 </mapper>

+ 5 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabStudentsInfoMapper.xml

@@ -61,6 +61,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where join_students_id = #{joinStudentsId}
     </select>
 
+    <select id="selectLabStudentsInfoBySubjectId" resultType="com.zd.system.api.entity.LabStudentsInfo">
+             SELECT  join_students_id,face_feature  FROM  `lab_students_info` WHERE join_students_id  IN ( SELECT user_id
+                FROM  lab_security_apply AS lab WHERE audit_status=2 AND subject_id=#{subjectId} AND valid_end_time >= NOW())
+    </select>
+
     <insert id="insertLabStudentsInfo" parameterType="com.zd.system.api.entity.LabStudentsInfo">
         insert into lab_students_info
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 4 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/XxpCardInfoMapper.xml

@@ -97,6 +97,10 @@
          SELECT  ls.id subject_id,ls.name subject_name,ls.dept_id college_id,ls.dept_name college,xci.id id  FROM  lab_subject ls INNER JOIN `xxp_card_info` xci ON ls.id=xci.subject_id WHERE ls.is_del=0 AND xci.card_num=#{cardNum}
     </select>
 
+    <select id="selectPwdCountByPwd" resultType="java.lang.Integer">
+         SELECT COUNT(*) FROM  `xxp_card_info` WHERE card_num=#{cardNum} AND auth_pwd=#{pwd}
+    </select>
+
     <insert id="insertXxpCardInfo" parameterType="com.zd.laboratory.domain.XxpCardInfo">
         insert into xxp_card_info
         <trim prefix="(" suffix=")" suffixOverrides=",">

+ 12 - 0
zd-modules/zd-modules-system/src/main/java/com/zd/system/controller/SysUserController.java

@@ -849,4 +849,16 @@ public class SysUserController extends BaseController {
         userService.oldCheckNewCard();
         return R.ok();
     }
+
+
+    /**
+     * 根据用户id查询用户基本信息
+     * @param userId
+     * @return
+     */
+    @ApiOperation("根据用户id查询用户基本信息")
+    @RequestMapping("/getUserInfoByUserId")
+    public ResultData getUserInfoByUserId(Long userId) {
+        return ResultData.success(userService.selectUserByUserId(userId));
+    }
 }

+ 7 - 0
zd-modules/zd-modules-system/src/main/java/com/zd/system/mapper/SysUserMapper.java

@@ -295,4 +295,11 @@ public interface SysUserMapper {
      * @return
      */
     public List<SysUser> selectUserDutyList(SysUser sysUser);
+
+    /**
+     * 根据用户id查询用户基本信息
+     * @param userId
+     * @return
+     */
+    public Map<String, Object> selectUserByUserId(Long userId);
 }

+ 7 - 0
zd-modules/zd-modules-system/src/main/java/com/zd/system/service/ISysUserService.java

@@ -364,4 +364,11 @@ public interface ISysUserService {
      * @return
      */
     public List<SysUser> selectUserDutyList(SysUser sysUser);
+
+    /**
+     * 根据用户id查询基本用户信息
+     * @param userId
+     * @return
+     */
+    public Map<String,Object> selectUserByUserId(Long userId);
 }

+ 10 - 0
zd-modules/zd-modules-system/src/main/java/com/zd/system/service/impl/SysUserServiceImpl.java

@@ -1197,4 +1197,14 @@ public class SysUserServiceImpl implements ISysUserService {
     public List<SysUser> selectUserDutyList(SysUser sysUser) {
         return userMapper.selectUserDutyList(sysUser);
     }
+
+    /**
+     * 根据用户id查询基本用户信息
+     * @param userId
+     * @return
+     */
+    @Override
+    public Map<String,Object> selectUserByUserId(Long userId) {
+        return userMapper.selectUserByUserId(userId);
+    }
 }

+ 4 - 0
zd-modules/zd-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -53,6 +53,7 @@
         <!--<collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>-->
     </resultMap>
 
+
     <resultMap id="deptResult" type="com.zd.model.entity.SysDept">
         <id property="deptId" column="dept_id"/>
         <result property="parentId" column="parent_id"/>
@@ -1059,5 +1060,8 @@
         <!-- 数据范围过滤 -->
         ${params.dataScope}
     </select>
+    <select id="selectUserByUserId" resultType="java.util.Map">
+         SELECT user_type userType,nick_name userName,user_id userId FROM  `sys_user` WHERE del_flag=0 AND user_id=#{userId}
+    </select>
 
 </mapper>