Parcourir la source

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

donggaosheng il y a 2 ans
Parent
commit
84b0fb2aa4

+ 106 - 0
zd-api/zd-laboratory-api/src/main/java/com/zd/laboratory/api/entity/LabSysUserInfo.java

@@ -0,0 +1,106 @@
+package com.zd.laboratory.api.entity;
+
+import com.zd.model.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+
+/**
+ * 学生信息对象 lab_students_info
+ *
+ * @author zhoupan
+ * @date 2021-09-10
+ */
+@ApiModel("用户信息")
+public class LabSysUserInfo {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 学生ID(userId)
+     */
+    @Excel(name = "学生ID", readConverterExp = "u=serId")
+    @ApiModelProperty(value = "学生ID")
+    private Long userId;
+
+    /**
+     * 人脸特征
+     */
+    @ApiModelProperty(value = "人脸特征")
+    private byte[]  faceFeature;
+
+    /**
+     * 用户名称
+     */
+    @ApiModelProperty(value = "用户名称")
+    private String userName;
+
+    /**
+     * 用户类型
+     */
+    @ApiModelProperty(value = "用户类型")
+    private String userType;
+
+    /**
+     * 是否白名单
+     */
+    @ApiModelProperty(value = "是否白名单")
+    private Integer isWhite;
+
+    /**
+     * 页面类型
+     */
+    @ApiModelProperty(value = "页面类型")
+    private Integer pageType;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public byte[] getFaceFeature() {
+        return faceFeature;
+    }
+
+    public void setFaceFeature(byte[] faceFeature) {
+        this.faceFeature = faceFeature;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
+
+    public Integer getIsWhite() {
+        return isWhite;
+    }
+
+    public void setIsWhite(Integer isWhite) {
+        this.isWhite = isWhite;
+    }
+
+    public Integer getPageType() {
+        return pageType;
+    }
+
+    public void setPageType(Integer pageType) {
+        this.pageType = pageType;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+}

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

@@ -19,6 +19,7 @@ import java.util.Map;
 public interface RemoteDutyService {
     /**
      * 通过实验室id当前时间查询值班人员
+     *
      * @param labId
      * @param dateTime
      * @return
@@ -28,6 +29,7 @@ public interface RemoteDutyService {
 
     /**
      * 通过实验室id查询实验室信息
+     *
      * @param id
      * @return
      */
@@ -52,6 +54,7 @@ public interface RemoteDutyService {
 
     /**
      * 根据实验室id获取实验室详情
+     *
      * @param id
      * @return
      */
@@ -60,16 +63,18 @@ public interface RemoteDutyService {
 
     /**
      * 根据实验室id获取安全准入人员列表
+     *
      * @param pageNumber
      * @param pageSize
      * @param subjectId
      * @return
      */
     @GetMapping("/apply/app/securityApplyList")
-    ResultData securityApplyList(@RequestParam("subjectId") Long subjectId,@RequestParam("pageNumber") Integer pageNumber,@RequestParam("pageSize") Integer pageSize);
+    ResultData securityApplyList(@RequestParam("subjectId") Long subjectId, @RequestParam("pageNumber") Integer pageNumber, @RequestParam("pageSize") Integer pageSize);
 
     /**
      * 根据实验室获取签到未签退人员
+     *
      * @param subjectId
      * @return
      */
@@ -78,26 +83,29 @@ public interface RemoteDutyService {
 
     /**
      * 获取实验室所有值班人员的信息
+     *
      * @param labId
      * @param startTime
      * @param endTime
      * @return
      */
     @RequestMapping("/XxpDuty/api/selectDutyUserList")
-    ResultData<List<Map<String,Object>>> selectDutyUserList(@RequestParam("labId") Long labId,@RequestParam("startTime") String startTime,@RequestParam("endTime") String endTime);
+    ResultData<List<Map<String, Object>>> selectDutyUserList(@RequestParam("labId") Long labId, @RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime);
 
     /**
      * 根据实验室id和当前时间查询签到记录
+     *
      * @param labId
      * @param startTime
      * @param endTime
      * @return
      */
     @PostMapping("/XxpInspection/app/selectUserXxpInspectionList")
-    ResultData selectUserXxpInspectionList(@RequestParam("labId") Long labId,@RequestParam("startTime") String startTime,@RequestParam("endTime") String endTime);
+    ResultData selectUserXxpInspectionList(@RequestParam("labId") Long labId, @RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime);
 
     /**
      * 根据一体机编号查询实验室编号
+     *
      * @param num
      * @return
      */
@@ -112,9 +120,9 @@ public interface RemoteDutyService {
     ResultData getSubjectName(@PathVariable("id") Long id);
 
 
-
     /**
      * 根据一体机编号查询实验室编号
+     *
      * @param num
      * @return
      */
@@ -124,6 +132,7 @@ public interface RemoteDutyService {
 
     /**
      * 电子信息牌获取准入人员的指纹信息列表
+     *
      * @param labId
      * @return
      */
@@ -132,16 +141,18 @@ public interface RemoteDutyService {
 
     /**
      * 电子信息牌获取准入人员的指纹信息列表
+     *
      * @param labId
      * @return
      */
     @RequestMapping("/apply/app/securityNumList")
-    ResultData securityNumList(@RequestParam("labId") Long labId,@RequestParam("cardNum") String cardNum);
+    ResultData securityNumList(@RequestParam("labId") Long labId, @RequestParam("cardNum") String cardNum);
 
 
     /**
      * 指纹录入
      * num 一体机编号
+     *
      * @param xxpUserAuthVo
      * @return
      */
@@ -151,6 +162,7 @@ public interface RemoteDutyService {
 
     /**
      * 根据用户id查询指纹信息
+     *
      * @param userId
      * @return
      */
@@ -159,6 +171,7 @@ public interface RemoteDutyService {
 
     /**
      * 根据用户id查询指纹信息
+     *
      * @param id
      * @return
      */
@@ -169,12 +182,22 @@ public interface RemoteDutyService {
     /**
      * 验证密码是否正确
      *
-     * @param cardNum 电子班牌号码
-     * @param pwd 用户密码
+     * @param cardNum   电子班牌号码
+     * @param pwd       用户密码
      * @param subjectId 实验室id
-     * @param userId 用户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);
+    ResultData pwdValidate(@RequestParam("cardNum") String cardNum, @RequestParam("pwd") String pwd, @RequestParam("subjectId") Long subjectId, @RequestParam("userId") Long userId);
+
+    /**
+     * 判断是不是实验室管理员或者安全责任人
+     *
+     * @param labId
+     * @param userId
+     * @return
+     */
+    @GetMapping(value = "/subject/isAdminOrSafeUser/{labId}/{userId}")
+    ResultData isAdminOrSafeUser(@PathVariable("labId") Long labId, @PathVariable("userId") Long userId);
 }

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

@@ -1,6 +1,7 @@
 package com.zd.laboratory.api.feign;
 
 import com.zd.laboratory.api.entity.LabStudentsInfo;
+import com.zd.laboratory.api.entity.LabSysUserInfo;
 import com.zd.laboratory.api.feign.fallback.RemoteStudentsFallbackFactory;
 import com.zd.model.constant.ApplicationConstants;
 import com.zd.model.domain.R;
@@ -36,7 +37,7 @@ public interface RemoteStudentsService {
     R commitCard(@RequestPart("file") MultipartFile file);
 
     @GetMapping(value = "/studentinfo/getFaceBySecuritySubjectId")
-    ResultData<List<LabStudentsInfo>> getFaceBySecuritySubjectId(@RequestParam("subjectId") Long subjectId);
+    ResultData<List<LabSysUserInfo>> 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

@@ -115,6 +115,11 @@ public class RemoteDutyFailback implements FallbackFactory<RemoteDutyService> {
             public ResultData pwdValidate(String cardNum, String pwd, Long subjectId, Long userId) {
                 return ResultData.fail("密码对比失败:" + cause.getMessage());
             }
+
+            @Override
+            public ResultData isAdminOrSafeUser(Long labId, Long userId) {
+                return ResultData.fail("判断是否是实验室安全责任人实验室负责人:" + cause.getMessage());
+            }
         };
     }
 }

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

@@ -36,7 +36,7 @@ public class RemoteStudentsFallbackFactory implements FallbackFactory<RemoteStud
             }
 
             @Override
-            public ResultData<List<LabStudentsInfo>> getFaceBySecuritySubjectId(Long subjectId) {
+            public ResultData getFaceBySecuritySubjectId(Long subjectId) {
                 return ResultData.fail("根据实验室获取用户人脸信息失败"+throwable.getMessage());
             }
 

+ 22 - 19
zd-modules/zd-algorithm/src/main/java/com/zd/alg/face/controller/FaceApi.java

@@ -9,11 +9,11 @@ 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.entity.LabSysUserInfo;
+import com.zd.laboratory.api.feign.RemoteDutyService;
 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 org.slf4j.Logger;
@@ -24,7 +24,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * @Author: zhoupan
@@ -46,6 +45,9 @@ public class FaceApi {
     @Autowired
     RemoteStudentsService remoteStudentsService;
 
+    @Autowired
+    RemoteDutyService remoteDutyService;
+
 
     @ApiOperation("根据照片文件获取特征码")
     @PostMapping("/faceFeature")
@@ -97,30 +99,31 @@ public class FaceApi {
     @PostMapping("/multiCompare")
     public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare) {
         logger.info("====人脸比较====");
-        Long userId=null;
-        ResultData<List<LabStudentsInfo>> infoList = remoteStudentsService.getFaceBySecuritySubjectId(faceCompare.getLabId());
+        ResultData<List<LabSysUserInfo>> infoList = remoteStudentsService.getFaceBySecuritySubjectId(faceCompare.getLabId());
         if (infoList.getCode() == 200 && infoList.getData() != null) {
             logger.info("====人脸data组装====");
-            for(LabStudentsInfo info:infoList.getData()){
+            for(LabSysUserInfo 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;
+                    String userType=info.getUserType();
+                    Integer isWhite=info.getIsWhite();
+                    //如果是学生 或者白名单的老师 进二类页面
+                    if(userType.equals("22") || (userType.equals("11") && isWhite==0)){
+                        info.setPageType(2);
+                    }
+                    ResultData resultData =remoteDutyService.isAdminOrSafeUser(faceCompare.getLabId(),info.getUserId());
+                    //一类首页对应身份为白名单老师、实验室负责人、安全责任人
+                    if(Integer.parseInt(String.valueOf(resultData.getData()))>0 || (userType.equals("11") && isWhite==1)){
+                        info.setPageType(2);
+                    }
+                    info.setFaceFeature(null);
+                    logger.info("====compore====" +"对比成功用户ID:"+info.getUserId());
+                    return ResultData.success(info);
                 }
             }
-            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;
-            }
+            return ResultData.fail("未获取实验室安全准入人脸数据!");
         } else {
             return ResultData.fail("未获取实验室安全准入人脸数据!");
         }

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

@@ -490,7 +490,7 @@ public class LabBoardApi {
      * @return
      */
     @ApiOperation(value = "人脸识别")
-    @GetMapping(value = "/multiFaceDetection")
+    @PostMapping(value = "/multiFaceDetection")
     public ResultData multiFaceDetection(@RequestBody FaceCompare faceCompare){
         return remoteFaceService.multiFaceDetection(faceCompare);
     }

+ 4 - 2
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabStudentsInfoController.java

@@ -6,6 +6,7 @@ import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.utils.SecurityUtils;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.common.core.web.controller.BaseController;
+import com.zd.laboratory.api.entity.LabSysUserInfo;
 import com.zd.laboratory.api.feign.RemoteMessageContentService;
 import com.zd.laboratory.domain.dto.LabStudentsInfoAuditDTO;
 import com.zd.laboratory.domain.vo.LabStudentsInfoVO;
@@ -221,8 +222,9 @@ public class LabStudentsInfoController extends BaseController {
      */
     @ApiOperation(value = "获取安全实验室安全人员的人脸信息")
     @RequestMapping(value = "/getFaceBySecuritySubjectId")
-    public ResultData<List<LabStudentsInfo>> getFaceBySecuritySubjectId(Long subjectId) {
-        return ResultData.success(labStudentsInfoService.selectLabStudentsInfoBySubjectId(subjectId));
+    public ResultData<List<LabSysUserInfo>> getFaceBySecuritySubjectId(Long subjectId) {
+        List<LabSysUserInfo> labSysUserInfoList= labStudentsInfoService.selectLabStudentsInfoBySubjectId(subjectId);
+        return ResultData.success(labSysUserInfoList);
     }
 
 }

+ 8 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabSubjectController.java

@@ -461,4 +461,12 @@ public class LabSubjectController extends BaseController {
     public ResultData getSubjectName(@PathVariable("id") Long id) {
         return ResultData.success(labSubjectService.getSubjectNameById(id));
     }
+
+    /**
+     * 获取信息牌首页实验室的信息
+     */
+    @RequestMapping(value = "/isAdminOrSafeUser/{labId}/{userId}")
+    public ResultData getSubjectName(@PathVariable("labId") Long labId,@PathVariable("userId") Long userId) {
+        return ResultData.success(labSubjectService.isAdminOrSafeUser(labId,userId));
+    }
 }

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

@@ -1,5 +1,6 @@
 package com.zd.laboratory.mapper;
 
+import com.zd.laboratory.api.entity.LabSysUserInfo;
 import com.zd.laboratory.domain.vo.LabStudentsInfoVO;
 import com.zd.system.api.entity.LabStudentsInfo;
 
@@ -73,5 +74,5 @@ public interface LabStudentsInfoMapper {
      * @param subjectId 实验室id
      * @return 学生信息
      */
-    List<LabStudentsInfo> selectLabStudentsInfoBySubjectId(Long subjectId);
+    List<LabSysUserInfo> selectLabStudentsInfoBySubjectId(Long subjectId);
 }

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

@@ -1,5 +1,6 @@
 package com.zd.laboratory.service;
 
+import com.zd.laboratory.api.entity.LabSysUserInfo;
 import com.zd.laboratory.domain.dto.LabStudentsInfoAuditDTO;
 import com.zd.laboratory.domain.vo.LabStudentsInfoVO;
 import com.zd.system.api.entity.LabStudentsInfo;
@@ -109,5 +110,5 @@ public interface ILabStudentsInfoService {
      * @param subjectId 实验室id
      * @return 学生信息
      */
-    public List<LabStudentsInfo> selectLabStudentsInfoBySubjectId(Long subjectId);
+    public List<LabSysUserInfo> selectLabStudentsInfoBySubjectId(Long subjectId);
 }

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

@@ -5,6 +5,7 @@ import com.zd.common.core.security.TokenService;
 import com.zd.common.core.utils.Assert;
 import com.zd.common.core.utils.DateUtils;
 import com.zd.common.core.utils.SecurityUtils;
+import com.zd.laboratory.api.entity.LabSysUserInfo;
 import com.zd.laboratory.domain.dto.LabStudentsInfoAuditDTO;
 import com.zd.laboratory.domain.vo.LabStudentsInfoVO;
 import com.zd.laboratory.mapper.LabStudentsInfoMapper;
@@ -205,7 +206,7 @@ public class LabStudentsInfoServiceImpl implements ILabStudentsInfoService {
      * @return 学生信息
      */
     @Override
-    public List<LabStudentsInfo> selectLabStudentsInfoBySubjectId(Long subjectId) {
+    public List<LabSysUserInfo> selectLabStudentsInfoBySubjectId(Long subjectId) {
         return labStudentsInfoMapper.selectLabStudentsInfoBySubjectId(subjectId);
     }
 }

+ 94 - 81
zd-modules/zd-modules-laboratory/src/main/resources/mapper/laboratory/LabStudentsInfoMapper.xml

@@ -24,6 +24,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="faceFeature" column="face_feature"/>
     </resultMap>
 
+    <resultMap type="com.zd.laboratory.api.entity.LabSysUserInfo" id="labSysUserInfo">
+        <result property="userId" column="user_id"/>
+        <result property="faceFeature" column="face_feature"/>
+        <result property="userName" column="user_name"/>
+        <result property="userType" column="user_type"/>
+        <result property="isWhite" column="is_white"/>
+    </resultMap>
+
     <sql id="selectLabStudentsInfoVo">
         select join_students_id,opinions,audit_time,audit_user, audit_status, card, face_img, dept_id, dept_name, user_id, remark, create_by, create_time, update_by, update_time,face_feature from lab_students_info si
     </sql>
@@ -61,89 +69,94 @@ 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
+    <select id="selectLabStudentsInfoBySubjectId" resultMap="labSysUserInfo">
+        <!--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>
+        <!-- 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  join_students_id as user_id,face_feature,(SELECT nick_name  FROM  sys_user su WHERE su.user_id=lsi.user_id) AS user_name,(SELECT user_type  FROM  sys_user su WHERE su.user_id=lsi.user_id) AS user_type,0 AS is_white 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 user_id,face_feature,(SELECT nick_name  FROM  sys_user su WHERE su.user_id=lsi.user_id) AS user_name,(SELECT user_type  FROM  sys_user su WHERE su.user_id=lsi.user_id) AS user_type,1 AS is_white  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">
-        insert into lab_students_info
-        <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="joinStudentsId != null">join_students_id,</if>
-            <if test="auditStatus != null">audit_status,</if>
-            <if test="card != null">card,</if>
-            <if test="faceImg != null">face_img,</if>
-            <if test="deptId != null">dept_id,</if>
-            <if test="deptName != null">dept_name,</if>
-            <if test="userId != null">user_id,</if>
-            <if test="remark != null">remark,</if>
-            <if test="createBy != null">create_by,</if>
-            <if test="createTime != null">create_time,</if>
-            <if test="updateBy != null">update_by,</if>
-            <if test="updateTime != null">update_time,</if>
-            <if test="opinions != null">opinions,</if>
-            <if test="auditTime != null">audit_time,</if>
-            <if test="auditUser != null">audit_user,</if>
-            <if test="commitTime != null">commit_time,</if>
-            <if test="faceFeature != null">face_feature,</if>
-        </trim>
-        <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="joinStudentsId != null">#{joinStudentsId},</if>
-            <if test="auditStatus != null">#{auditStatus},</if>
-            <if test="card != null">#{card},</if>
-            <if test="faceImg != null">#{faceImg},</if>
-            <if test="deptId != null">#{deptId},</if>
-            <if test="deptName != null">#{deptName},</if>
-            <if test="userId != null">#{userId},</if>
-            <if test="remark != null">#{remark},</if>
-            <if test="createBy != null">#{createBy},</if>
-            <if test="createTime != null">#{createTime},</if>
-            <if test="updateBy != null">#{updateBy},</if>
-            <if test="updateTime != null">#{updateTime},</if>
-            <if test="opinions != null">#{opinions},</if>
-            <if test="auditTime != null">#{auditTime},</if>
-            <if test="auditUser != null">#{auditUser},</if>
-            <if test="commitTime != null">#{commitTime},</if>
-            <if test="faceFeature != null">#{faceFeature},</if>
-        </trim>
-    </insert>
+     <insert id="insertLabStudentsInfo" parameterType="com.zd.system.api.entity.LabStudentsInfo">
+         insert into lab_students_info
+         <trim prefix="(" suffix=")" suffixOverrides=",">
+             <if test="joinStudentsId != null">join_students_id,</if>
+             <if test="auditStatus != null">audit_status,</if>
+             <if test="card != null">card,</if>
+             <if test="faceImg != null">face_img,</if>
+             <if test="deptId != null">dept_id,</if>
+             <if test="deptName != null">dept_name,</if>
+             <if test="userId != null">user_id,</if>
+             <if test="remark != null">remark,</if>
+             <if test="createBy != null">create_by,</if>
+             <if test="createTime != null">create_time,</if>
+             <if test="updateBy != null">update_by,</if>
+             <if test="updateTime != null">update_time,</if>
+             <if test="opinions != null">opinions,</if>
+             <if test="auditTime != null">audit_time,</if>
+             <if test="auditUser != null">audit_user,</if>
+             <if test="commitTime != null">commit_time,</if>
+             <if test="faceFeature != null">face_feature,</if>
+         </trim>
+         <trim prefix="values (" suffix=")" suffixOverrides=",">
+             <if test="joinStudentsId != null">#{joinStudentsId},</if>
+             <if test="auditStatus != null">#{auditStatus},</if>
+             <if test="card != null">#{card},</if>
+             <if test="faceImg != null">#{faceImg},</if>
+             <if test="deptId != null">#{deptId},</if>
+             <if test="deptName != null">#{deptName},</if>
+             <if test="userId != null">#{userId},</if>
+             <if test="remark != null">#{remark},</if>
+             <if test="createBy != null">#{createBy},</if>
+             <if test="createTime != null">#{createTime},</if>
+             <if test="updateBy != null">#{updateBy},</if>
+             <if test="updateTime != null">#{updateTime},</if>
+             <if test="opinions != null">#{opinions},</if>
+             <if test="auditTime != null">#{auditTime},</if>
+             <if test="auditUser != null">#{auditUser},</if>
+             <if test="commitTime != null">#{commitTime},</if>
+             <if test="faceFeature != null">#{faceFeature},</if>
+         </trim>
+     </insert>
 
-    <update id="updateLabStudentsInfo" parameterType="com.zd.system.api.entity.LabStudentsInfo">
-        update lab_students_info
-        <trim prefix="SET" suffixOverrides=",">
-            <if test="auditStatus != null">audit_status = #{auditStatus},</if>
-            <if test="card != null">card = #{card},</if>
-            <if test="faceImg != null">face_img = #{faceImg},</if>
-            <if test="deptId != null">dept_id = #{deptId},</if>
-            <if test="deptName != null">dept_name = #{deptName},</if>
-            <if test="userId != null">user_id = #{userId},</if>
-            <if test="remark != null">remark = #{remark},</if>
-            <if test="createBy != null">create_by = #{createBy},</if>
-            <if test="createTime != null">create_time = #{createTime},</if>
-            <if test="updateBy != null">update_by = #{updateBy},</if>
-            <if test="updateTime != null">update_time = #{updateTime},</if>
-            <if test="opinions != null">opinions = #{opinions},</if>
-            <if test="auditTime != null">audit_time = #{auditTime},</if>
-            <if test="auditUser != null">audit_user = #{auditUser},</if>
-            <if test="commitTime != null">commit_time =#{commitTime},</if>
-            <if test="faceFeature != null">face_feature =#{faceFeature},</if>
-        </trim>
-        where join_students_id = #{joinStudentsId}
-    </update>
+     <update id="updateLabStudentsInfo" parameterType="com.zd.system.api.entity.LabStudentsInfo">
+         update lab_students_info
+         <trim prefix="SET" suffixOverrides=",">
+             <if test="auditStatus != null">audit_status = #{auditStatus},</if>
+             <if test="card != null">card = #{card},</if>
+             <if test="faceImg != null">face_img = #{faceImg},</if>
+             <if test="deptId != null">dept_id = #{deptId},</if>
+             <if test="deptName != null">dept_name = #{deptName},</if>
+             <if test="userId != null">user_id = #{userId},</if>
+             <if test="remark != null">remark = #{remark},</if>
+             <if test="createBy != null">create_by = #{createBy},</if>
+             <if test="createTime != null">create_time = #{createTime},</if>
+             <if test="updateBy != null">update_by = #{updateBy},</if>
+             <if test="updateTime != null">update_time = #{updateTime},</if>
+             <if test="opinions != null">opinions = #{opinions},</if>
+             <if test="auditTime != null">audit_time = #{auditTime},</if>
+             <if test="auditUser != null">audit_user = #{auditUser},</if>
+             <if test="commitTime != null">commit_time =#{commitTime},</if>
+             <if test="faceFeature != null">face_feature =#{faceFeature},</if>
+         </trim>
+         where join_students_id = #{joinStudentsId}
+     </update>
 
-    <delete id="deleteLabStudentsInfoByJoinStudentsId" >
-        delete from lab_students_info where join_students_id = #{joinStudentsId}
-    </delete>
+     <delete id="deleteLabStudentsInfoByJoinStudentsId" >
+         delete from lab_students_info where join_students_id = #{joinStudentsId}
+     </delete>
 
-    <delete id="deleteLabStudentsInfoByJoinStudentsIds">
-        delete from lab_students_info where join_students_id in
-        <foreach item="joinStudentsId" collection="array" open="(" separator="," close=")">
-            #{joinStudentsId}
-        </foreach>
-    </delete>
-</mapper>
+     <delete id="deleteLabStudentsInfoByJoinStudentsIds">
+         delete from lab_students_info where join_students_id in
+         <foreach item="joinStudentsId" collection="array" open="(" separator="," close=")">
+             #{joinStudentsId}
+         </foreach>
+     </delete>
+ </mapper>