Przeglądaj źródła

人脸特征,接口优化 2023-04-06

donggaosheng 2 lat temu
rodzic
commit
a193b1dfdb
16 zmienionych plików z 141 dodań i 40 usunięć
  1. 9 0
      zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/RemoteFaceService.java
  2. 5 0
      zd-api/zd-algorithm-api/src/main/java/com/zd/algorithm/api/face/feign/fallback/RemoteFaceFallbackFactory.java
  3. 1 1
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/RemoteDutyService.java
  4. 1 1
      zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/feign/fallback/RemoteDutyFailback.java
  5. 22 19
      zd-modules/zd-base/src/main/java/com/zd/base/app/controller/LabBoardApi.java
  6. 20 5
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSecurityApplyController.java
  7. 18 3
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabXxpCardInfoController.java
  8. 1 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabSecurityApplyMapper.java
  9. 10 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabSubjectMapper.java
  10. 1 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSecurityApplyService.java
  11. 10 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/ILabSubjectService.java
  12. 1 1
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSecurityApplyServiceImpl.java
  13. 12 0
      zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSubjectServiceImpl.java
  14. 20 6
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSecurityApplyMapper.xml
  15. 7 2
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabStudentsInfoMapper.xml
  16. 3 0
      zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSubjectMapper.xml

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

@@ -8,6 +8,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestPart;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -42,4 +43,12 @@ public interface RemoteFaceService {
      */
     @PostMapping("/faceApi/multiCompare")
     public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare);
+
+    /**
+     * 根据人脸图片获取特征值
+     * @param file
+     * @return
+     */
+    @PostMapping("/faceApi/faceFeature")
+    public ResultData faceFeature(@RequestParam("file") MultipartFile file);
 }

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

@@ -44,6 +44,11 @@ public class RemoteFaceFallbackFactory implements FallbackFactory<RemoteFaceServ
             public ResultData multiFaceDetection(FaceCompare faceCompare) {
                 return ResultData.fail("多人脸对比服务调用失败:" + throwable.getMessage());
             }
+
+            @Override
+            public ResultData faceFeature(MultipartFile file) {
+                return ResultData.fail("人脸获取特征值失败:" + throwable.getMessage());
+            }
         };
     }
 }

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

@@ -136,7 +136,7 @@ public interface RemoteDutyService {
      * @return
      */
     @RequestMapping("/apply/app/securityNumList")
-    ResultData securityNumList(@RequestParam("labId") Long labId);
+    ResultData securityNumList(@RequestParam("labId") Long labId,@RequestParam("cardNum") String cardNum);
 
 
     /**

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

@@ -92,7 +92,7 @@ public class RemoteDutyFailback implements FallbackFactory<RemoteDutyService> {
             }
 
             @Override
-            public ResultData securityNumList(Long labId) {
+            public ResultData securityNumList(Long labId,String cardNum) {
                 return ResultData.fail("电子信息牌获取准入人员的指纹信息列表:" + cause.getMessage());
             }
 

+ 22 - 19
zd-modules/zd-base/src/main/java/com/zd/base/app/controller/LabBoardApi.java

@@ -5,7 +5,6 @@ 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;
-import com.zd.common.core.security.TokenService;
 import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.utils.FileConfigUtils;
 import com.zd.common.core.utils.StringUtils;
@@ -20,8 +19,8 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.rmi.Remote;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -397,7 +396,7 @@ public class LabBoardApi {
     @GetMapping(value = "/getCardIsOpen")
     public ResultData getCardIsOpen(@RequestParam("labId") Long labId,@RequestParam("cardNum") String cardNum) {
         Integer isOpen=0;
-        ResultData resultData=remoteDutyService.securityNumList(labId);
+        ResultData resultData=remoteDutyService.securityNumList(labId,cardNum);
         if(resultData==null && resultData.getCode()!=HttpStatus.SUCCESS){
             return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
         }
@@ -405,13 +404,7 @@ public class LabBoardApi {
         if(null==resultObj){
             return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
         }
-        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;
-             }
-        }
+        isOpen=1;
         return ResultData.success(isOpen);
     }
 
@@ -424,7 +417,7 @@ public class LabBoardApi {
     @ApiOperation(value = "刷卡验证")
     @GetMapping(value = "/cardValidate")
     public ResultData cardValidate(@RequestParam("labId") Long labId,@RequestParam("cardNum") String cardNum) {
-        ResultData resultData=remoteDutyService.securityNumList(labId);
+        ResultData resultData=remoteDutyService.securityNumList(labId,cardNum);
         if(resultData==null && resultData.getCode()!=HttpStatus.SUCCESS){
             return ResultData.fail("未识别到身份信息,请联系管理人员录入卡号信息");
         }
@@ -432,14 +425,7 @@ public class LabBoardApi {
         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("未识别到身份信息,请联系管理人员录入卡号信息");
+        return resultData;
     }
 
 
@@ -498,9 +484,26 @@ public class LabBoardApi {
         return remoteDutyService.pwdValidate(cardNum,pwd,subjectId,userId);
     }
 
+    /**
+     * 大海里找鱼
+     * @param faceCompare
+     * @return
+     */
     @ApiOperation(value = "人脸识别")
     @GetMapping(value = "/multiFaceDetection")
     public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare){
         return remoteFaceService.multiFaceDetection(faceCompare);
     }
+
+
+    /**
+     * 人脸识别获取特征值
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "人脸识别获取特征值")
+    @GetMapping(value = "/faceFeature")
+    public ResultData faceFeature(@RequestParam("file") MultipartFile file){
+        return remoteFaceService.faceFeature(file);
+    }
 }

+ 20 - 5
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSecurityApplyController.java

@@ -827,17 +827,32 @@ public class LabSecurityApplyController extends BaseController
      * @return
      */
     @RequestMapping("/app/securityNumList")
-    public ResultData securityNumList(Long labId)
+    public ResultData securityNumList(Long labId,String cardNum)
     {
-        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);
+                System.out.println("decryptCard:"+decryptCard);
+                if(cardNum.equals(decryptCard)){
+                    String userType=String.valueOf(map.get("userType"));
+                    Long userId=Long.parseLong(String.valueOf(map.get("userId")));
+                    String isWhite=String.valueOf(map.get("isWhite"));
+                    //如果是学生 或者白名单的老师 进二类页面
+                    if(userType.equals("22") || (userType.equals("11") && isWhite.equals("0"))){
+                        map.put("pageType",2);
+                    }
+                    int num=iLabSubjectService.isAdminOrSafeUser(labId,userId);
+                    //一类首页对应身份为白名单老师、实验室负责人、安全责任人
+                    if(num>0 || (userType.equals("11") && isWhite.equals("1"))){
+                        map.put("pageType",1);
+                    }
+                    map.remove("cardNum");
+                    map.remove("isWhite");
+                    return ResultData.success(map);
+                }
             }
         }
-        return ResultData.success(mapList);
+        return ResultData.success();
     }
 }

+ 18 - 3
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabXxpCardInfoController.java

@@ -8,6 +8,7 @@ import com.zd.common.core.utils.ExcelUtil;
 import com.zd.common.core.web.controller.BaseController;
 import com.zd.laboratory.domain.XxpCardInfo;
 import com.zd.laboratory.service.ILabSecurityApplyService;
+import com.zd.laboratory.service.ILabSubjectService;
 import com.zd.laboratory.service.IXxpCardInfoService;
 import com.zd.model.domain.ResultData;
 import com.zd.model.domain.per.PerFun;
@@ -37,6 +38,8 @@ public class LabXxpCardInfoController extends BaseController {
     private IXxpCardInfoService xxpCardInfoService;
     @Autowired
     private ILabSecurityApplyService iLabSecurityApplyService;
+    @Autowired
+    private ILabSubjectService iLabSubjectService;
 
     @Autowired
     private TokenService tokenService;
@@ -196,15 +199,27 @@ public class LabXxpCardInfoController extends BaseController {
      */
     @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){
+        Map<String,Object> map=iLabSecurityApplyService.selectCountLabSecurityUserId(subjectId,userId);
+        if(null==map){
             return ResultData.fail("未获得实验室准入资格;");
         }
         int count = xxpCardInfoService.selectPwdCountByPwd(cardNum, pwd);
         if (count == 0) {
             return ResultData.fail("密码输入错误,请重新输入;");
         }
-        return ResultData.success(mapList.get(0));
+        String userType=String.valueOf(map.get("userType"));
+        String isWhite=String.valueOf(map.get("isWhite"));
+        //如果是学生 或者白名单的老师 进二类页面
+        if(userType.equals("22") || (userType.equals("11") && isWhite.equals("0"))){
+            map.put("pageType",2);
+        }
+        int num=iLabSubjectService.isAdminOrSafeUser(subjectId,userId);
+        //一类首页对应身份为白名单老师、实验室负责人、安全责任人
+        if(num>0 || (userType.equals("11") && isWhite.equals("1"))){
+            map.put("pageType",1);
+        }
+        map.remove("isWhite");
+        return ResultData.success(map);
     }
 
 }

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

@@ -170,5 +170,5 @@ public interface LabSecurityApplyMapper
      * @param userId 用户的id
      * @return 安全准入申请
      */
-    List<Map<String, Object>> selectCountLabSecurityUserId(@Param("subjectId") Long subjectId,@Param("userId") Long userId);
+    Map<String, Object> selectCountLabSecurityUserId(@Param("subjectId") Long subjectId,@Param("userId") Long userId);
 }

+ 10 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mapper/LabSubjectMapper.java

@@ -327,4 +327,14 @@ public interface LabSubjectMapper {
      * @return
      */
     LabSubject selectLabSubjectByNum(String number);
+
+
+    /**
+     * 根据实验室id用户id查询是否是实验室管理员和安全管理员
+     * @param subjectId
+     * @param userId
+     * @return
+     */
+    Integer isAdminOrSafeUser(@Param("subjectId") Long subjectId,@Param("userId") Long userId);
+
 }

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

@@ -199,5 +199,5 @@ public interface ILabSecurityApplyService
      * @param userId 用户的id
      * @return 安全准入申请
      */
-    List<Map<String,Object>> selectCountLabSecurityUserId(Long subjectId, Long userId);
+    Map<String,Object> selectCountLabSecurityUserId(Long subjectId, Long userId);
 }

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

@@ -6,6 +6,7 @@ import com.zd.laboratory.domain.vo.LabClassifiedVo;
 import com.zd.laboratory.domain.vo.LabClasstypeVo;
 import com.zd.laboratory.domain.vo.LabSubjectVO;
 import com.zd.model.entity.TotalByID;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -307,4 +308,13 @@ public interface ILabSubjectService {
      */
     public LabSubject selectLabSubjectByNum(String number);
 
+
+    /**
+     * 根据实验室id用户id查询是否是实验室管理员和安全管理员
+     * @param subjectId
+     * @param userId
+     * @return
+     */
+    Integer isAdminOrSafeUser(Long subjectId,Long userId);
+
 }

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

@@ -520,7 +520,7 @@ public class LabSecurityApplyServiceImpl implements ILabSecurityApplyService
      * @return 安全准入申请
      */
     @Override
-    public List<Map<String, Object>> selectCountLabSecurityUserId(Long subjectId, Long userId){
+    public Map<String, Object> selectCountLabSecurityUserId(Long subjectId, Long userId){
         return labSecurityApplyMapper.selectCountLabSecurityUserId(subjectId,userId);
     }
 

+ 12 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabSubjectServiceImpl.java

@@ -574,4 +574,16 @@ public class LabSubjectServiceImpl implements ILabSubjectService {
     public LabSubject selectLabSubjectByNum(String number) {
         return labSubjectMapper.selectLabSubjectByNum(number);
     }
+
+
+    /**
+     * 根据实验室id用户id查询是否是实验室管理员和安全管理员
+     * @param subjectId
+     * @param userId
+     * @return
+     */
+    @Override
+    public Integer isAdminOrSafeUser(Long subjectId, Long userId) {
+        return labSubjectMapper.isAdminOrSafeUser(subjectId,userId);
+    }
 }

+ 20 - 6
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSecurityApplyMapper.xml

@@ -588,19 +588,33 @@
 
     <!--获取准入人员的手指信息-->
     <select id="selectSecurityFingerList" resultType="java.util.Map">
-            SELECT  finger,user_id userId,user_name userName,user_type userType FROM  xxp_user_auth WHERE user_id IN (SELECT user_id
-                FROM  lab_security_apply AS lab WHERE audit_status=2 AND subject_id=#{subjectId} and valid_end_time <![CDATA[<]]> now())
+            <!--SELECT  finger,user_id userId,user_name userName,user_type userType FROM  xxp_user_auth WHERE user_id IN (SELECT user_id
+                FROM  lab_security_apply AS lab WHERE audit_status=2 AND subject_id=#{subjectId} and valid_end_time <![CDATA[<]]> now())-->
+        SELECT  xxp.finger,xxp.user_id userId,xxp.user_name userName,xxp.user_type userType FROM  xxp_user_auth xxp WHERE (SELECT user_id
+        FROM  lab_security_apply AS lab WHERE audit_status=2 AND subject_id=#{subjectId} AND valid_end_time <![CDATA[<]]> NOW() AND xxp.user_id=lab.user_id)>0
+        UNION
+        SELECT  xxp.finger,xxp.user_id userId,xxp.user_name userName,xxp.user_type userType FROM  xxp_user_auth xxp WHERE (SELECT user_id
+        FROM  lab_whitelist AS lw WHERE  xxp.user_id=lw.user_id)>0
+
     </select>
 
     <!--获取准入人员的卡号信息-->
     <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  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  card_num_simple cardNum,user_id userId, nick_name userName,user_type userType,0 AS isWhite 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())
+        UNION
+        SELECT (SELECT card_num_simple FROM sys_user su WHERE su.user_id=lw.user_id) cardNum, user_id userId,user_name userName,(SELECT user_type FROM sys_user su WHERE su.user_id=lw.user_id) AS userType,1 AS isWhite  FROM  lab_whitelist lw
     </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 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 user_id userId,user_name userName,user_type userType,0 AS isWhite
+        FROM  lab_security_apply lsp WHERE (lsp.audit_status=2 AND lsp.subject_id=#{subjectId} AND lsp.valid_end_time <![CDATA[<]]> NOW() AND lsp.user_id=#{userId})
+        UNION
+        SELECT  user_id userId,user_name userName,(SELECT user_type FROM sys_user su WHERE su.user_id=lw.user_id) AS userType,1 AS isWhite  FROM  lab_whitelist lw WHERE lw.user_id=#{userId}
     </select>
 
 </mapper>

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

@@ -62,8 +62,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </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  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  join_students_id,face_feature  FROM  `lab_students_info` lsi WHERE (SELECT COUNT(*)
+        FROM  lab_security_apply AS lab WHERE audit_status=2 AND subject_id=#{subjectId} AND valid_end_time <![CDATA[<]]> NOW() AND lab.user_id=lsi.user_id )>0
+        UNION
+        SELECT  join_students_id,face_feature  FROM  `lab_students_info` lsi  WHERE (SELECT COUNT(*)
+        FROM  lab_whitelist AS lw WHERE  lsi.user_id=lw.user_id)>0
     </select>
 
     <insert id="insertLabStudentsInfo" parameterType="com.zd.system.api.entity.LabStudentsInfo">

+ 3 - 0
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabSubjectMapper.xml

@@ -1243,4 +1243,7 @@
     <select id="selectLabSubjectByNum" resultMap="LabSubjectResult">
            SELECT  ls.id,ls.name,ls.dept_id,ls.dept_name  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=#{number}
     </select>
+    <select id="isAdminOrSafeUser" resultType="java.lang.Integer">
+            SELECT  COUNT(*)  FROM  lab_subject WHERE id=#{subjectId} AND (admin_id=#{userId} OR LOCATE(#{userId},safe_user_id)>0)
+    </select>
 </mapper>