浏览代码

人脸识别批量上传

wukai 1 年之前
父节点
当前提交
fd7e56c4e3

+ 4 - 1
doc-admin/src/main/java/com/doc/web/controller/system/SysLoginController.java

@@ -163,10 +163,13 @@ public class SysLoginController {
     private AjaxResult faceLogin(File file) {
         long uid = faceService.faceLogin(file);
         if (uid != 0) {
+            AjaxResult result = AjaxResult.success("人脸识别成功!");
             SysUser user = userService.selectUserById(uid);
             // 生成令牌
             String token = loginService.faceLogin(user.getUserName());
-            return AjaxResult.success("人脸识别成功!").put(Constants.TOKEN, token);
+            result.put(Constants.TOKEN, token);
+            result.put("name", user.getNickName());
+            return result;
         }
         return AjaxResult.error("未找到对应用户");
     }

+ 36 - 0
doc-admin/src/main/java/com/doc/web/controller/system/SysUserController.java

@@ -6,6 +6,8 @@ import com.doc.biz.service.IDocDirService;
 import com.doc.biz.service.IDocDirUserService;
 import com.doc.biz.service.IDocSpaceService;
 import com.doc.common.annotation.Log;
+import com.doc.common.config.RuoYiConfig;
+import com.doc.common.constant.Constants;
 import com.doc.common.core.controller.BaseController;
 import com.doc.common.core.domain.AjaxResult;
 import com.doc.common.core.domain.entity.SysDept;
@@ -18,7 +20,10 @@ import com.doc.common.utils.SecurityUtils;
 import com.doc.common.utils.StringUtils;
 import com.doc.common.utils.bean.BeanUtils;
 import com.doc.common.utils.encrypt.Sm2Util;
+import com.doc.common.utils.file.FileUploadUtils;
+import com.doc.common.utils.file.MimeTypeUtils;
 import com.doc.common.utils.poi.ExcelUtil;
+import com.doc.face.service.IFaceService;
 import com.doc.system.service.ISysDeptService;
 import com.doc.system.service.ISysPostService;
 import com.doc.system.service.ISysRoleService;
@@ -35,6 +40,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -65,6 +71,8 @@ public class SysUserController extends BaseController {
     private IDocDirUserService dirUserService;
     @Resource
     private IDocDirService dirService;
+    @Resource
+    private IFaceService faceService;
 
     /**
      * 获取用户列表
@@ -273,6 +281,34 @@ public class SysUserController extends BaseController {
         return success(message);
     }
 
+    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
+    @PreAuthorize("@ss.hasPermi('system:user:face')")
+    @PostMapping("/importFace")
+    public AjaxResult importFace(MultipartFile file) throws Exception {
+        AjaxResult ajax = AjaxResult.success();
+        if (!file.isEmpty()) {
+            String fileName = file.getOriginalFilename();
+            String[] tmp = fileName.split("\\.");
+            tmp = tmp[0].split("-");
+            if (tmp.length > 1) {
+                Long userId = Long.parseLong(tmp[1]);
+                SysUser user = userService.selectUserById(userId);
+                String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
+                if (userService.updateUserAvatar(user.getUserName(), avatar)) {
+                    // 本地资源路径
+                    String localPath = RuoYiConfig.getProfile();
+                    // 数据库资源地址
+                    String path = localPath + StringUtils.substringAfter(avatar, Constants.RESOURCE_PREFIX);
+                    boolean flag = faceService.detectFaces(userId, new File(path));
+                    ajax.put("face", flag);
+                    ajax.put("name", user.getNickName());
+                    return ajax;
+                }
+            }
+        }
+        return error();
+    }
+
     @PostMapping("/importTemplate")
     public void importTemplate(HttpServletResponse response) {
         ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);

+ 3 - 0
doc-biz/src/main/java/com/doc/face/service/impl/FaceServiceImpl.java

@@ -12,6 +12,7 @@ import com.doc.face.service.IFaceService;
 import com.doc.face.util.FaceEngineUtil;
 import com.doc.system.service.ISysUserExpandService;
 import javafx.util.Pair;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -26,6 +27,7 @@ import java.util.List;
  * @date 2023-08-24
  */
 @Service
+@Slf4j
 public class FaceServiceImpl implements IFaceService {
     @Resource
     private FaceEngineInit faceEngineInit;
@@ -154,6 +156,7 @@ public class FaceServiceImpl implements IFaceService {
     public Long faceLogin(File upFile) {
         Pair<Long, Float> pair = searchFaces(upFile);
         if (pair != null && pair.getValue() > score()) {
+            log.info("相似度:{}", pair.getValue());
             return pair.getKey();
         } else {
             return 0L;

+ 1 - 1
doc-framework/src/main/java/com/doc/framework/config/SecurityConfig.java

@@ -112,7 +112,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage", "/face-login", "/face-login-base64").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage", "/face-login-file", "/face-login-base64").permitAll()
                 // 增加API接口允许匿名访问
                 .antMatchers("/api/**").permitAll()
                 // 增加API接口允许匿名访问

+ 9 - 8
doc-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -24,15 +24,16 @@
         <result property="updateTime" column="update_time"/>
         <result property="remark" column="remark"/>
         <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
-        <association property="expand" javaType="SysUserExpand" resultMap="expandResult"/>
+        <association property="expand" column="user_id" javaType="SysUserExpand" resultMap="expandResult"/>
         <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
     </resultMap>
 
     <resultMap id="expandResult" type="SysUserExpand">
-        <result property="userId" column="uid"/>
+        <id property="userId" column="user_id"/>
         <result property="lastUpdateTime" column="last_update_time"/>
         <result property="loginIp" column="login_ip_limit"/>
         <result property="loginTime" column="login_time_limit"/>
+        <result property="faceFeature" column="FACE_FEATURE"/>
     </resultMap>
 
     <resultMap id="deptResult" type="SysDept">
@@ -87,7 +88,8 @@
                e.user_id    as uid,
                e.last_update_time,
                e.login_ip   as login_ip_limit,
-               e.login_time as login_time_limit
+               e.login_time as login_time_limit,
+               e.FACE_FEATURE
         from sys_user u
                  left join sys_dept d on u.dept_id = d.dept_id
                  left join sys_user_role ur on u.user_id = ur.user_id
@@ -96,9 +98,8 @@
     </sql>
 
     <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
-        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
-        left join sys_dept d on u.dept_id = d.dept_id
-        where u.del_flag = '0'
+        <include refid="selectUserVo"/>
+        where u.del_flag = '0' and u.user_id>1
         <if test="userId != null and userId != 0">
             AND u.user_id = #{userId}
         </if>
@@ -130,7 +131,7 @@
 
     <select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
         select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
-        from sys_user u
+        from (select * from sys_user where user_id>1) u
         left join sys_dept d on u.dept_id = d.dept_id
         left join sys_user_role ur on u.user_id = ur.user_id
         left join sys_role r on r.role_id = ur.role_id
@@ -147,7 +148,7 @@
 
     <select id="selectUnallocatedList" parameterType="SysUser" resultMap="SysUserResult">
         select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
-        from sys_user u
+        from (select * from sys_user where user_id>1) u
         left join sys_dept d on u.dept_id = d.dept_id
         left join sys_user_role ur on u.user_id = ur.user_id
         left join sys_role r on r.role_id = ur.role_id