Browse Source

🎈 perf: 优化人脸采集功能

Pchen. 7 months ago
parent
commit
077421bd46

+ 1 - 0
apis/Lepao/Account/Admin/GetAccountList.js

@@ -73,6 +73,7 @@ class GetAccountList extends API {
                     l.notes,
                     f.face_code,
                     f.state AS face_state,
+                    f.create_time AS face_time,
                     f.url AS face_url
                 FROM 
                     lepao_account l

+ 1 - 0
apis/Lepao/Account/GetAccount.js

@@ -62,6 +62,7 @@ class GetAccount extends API {
                     l.auto_run,
                     l.notes,
                     f.face_code,
+                    f.create_time AS face_time,
                     f.state AS face_state
                 FROM 
                     lepao_account l

+ 27 - 23
apis/Lepao/Face/BeginFaceReco.js

@@ -38,32 +38,31 @@ class BeginFaceReco extends API {
     }
 
     async onRequest(req, res) {
-        let { student_num, name, captcha, id } = req.body
+        let { face_code } = req.body
 
-        if ([student_num, name, captcha, id].some(value => value === '' || value === null || value === undefined))
+        if ([face_code].some(value => value === '' || value === null || value === undefined))
             return res.json({
                 ...BaseStdResponse.MISSING_PARAMETER
             })
 
         try {
-            const code = await Redis.get(`captcha:${id}`)
-            if (!code || code != captcha.toLowerCase())
-                return res.json({
-                    ...BaseStdResponse.ERR,
-                    msg: '验证码错误或已过期!'
-                })
-            Redis.del(`captcha:${id}`);
-        } catch (err) {
-            this.logger.error(`验证图片验证码失败!${err.stack}`)
-            return res.json({
-                ...BaseStdResponse.DATABASE_ERR,
-                msg: '验证失败!'
-            })
-        }
-
-        try {
-            let sql = 'SELECT student_num, name, user_avatar, academy_name FROM lepao_account WHERE student_num = ? AND name = ?'
-            let rows = await db.query(sql, [student_num, name])
+            let sql = `
+                SELECT
+                    f.student_num,
+                    l.name,
+                    l.user_avatar,
+                    l.academy_name,
+                    l.state
+                FROM 
+                    lepao_face f
+                JOIN
+                    lepao_account l
+                ON
+                    f.student_num = l.student_num
+                WHERE
+                    f.face_code  = ?
+            `
+            let rows = await db.query(sql, [face_code])
             if (!rows)
                 return res.json({
                     ...BaseStdResponse.DATABASE_ERR,
@@ -72,13 +71,18 @@ class BeginFaceReco extends API {
             if (rows.length !== 1)
                 return res.json({
                     ...BaseStdResponse.ERR,
-                    msg: '该用户尚未在RunForge系统中添加,请先添加账号'
+                    msg: '采集码输入错误'
+                })
+            if(rows[0].state !== 1)
+                return res.json({
+                    ...BaseStdResponse.ERR,
+                    msg: '账号状态为未登录,请用登录器更新账号状态后再进行人脸识别'
                 })
 
             const face_img = await this.getImageBase64('https://lepao-cloud.xxoo365.top/view.php/d0b85269c3683ed48da1fc5e468108c7.jpg')
             // 此时应该从乐跑获取人脸照片
-            
-             const key = uuidv4()
+
+            const key = uuidv4()
 
             await Redis.set(`faceReco:${rows[0].student_num}`, key, {
                 EX: 1800

+ 0 - 53
test.js

@@ -1,53 +0,0 @@
-const db = require("./plugin/DataBase/db");
-
-// 生成 6 位数字 + 字母混合码
-function generateCode() {
-  const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; // 全部大写,避免大小写重复
-  let code = "";
-  for (let i = 0; i < 6; i++) {
-    code += chars.charAt(Math.floor(Math.random() * chars.length));
-  }
-  return code;
-}
-
-// 生成唯一的 code
-async function generateUniqueCode(existingCodes) {
-  let code;
-  do {
-    code = generateCode();
-  } while (existingCodes.has(code)); // 查重
-  return code;
-}
-
-async function updateFaceCodes() {
-  try {
-    // 查询所有账号
-    const accounts = await db.query("SELECT student_num FROM lepao_account");
-
-    // 收集已有的 face_code
-    const usedCodes = new Set();
-
-    for (let account of accounts) {
-      // 如果已有 code,就覆盖(如果你想保留,可以加判断)
-      const code = await generateUniqueCode(usedCodes);
-      usedCodes.add(code);
-
-      // 更新数据库
-      let sql = 'INSERT INTO lepao_face (face_code, student_num ) VALUES (?, ?)'
-      await db.query(sql, [
-        code,
-        account.student_num,
-      ]);
-
-      console.log(`账号ID: ${account.student_num} 更新 face_code 为: ${code}`);
-    }
-
-    console.log("所有 face_code 更新完成!");
-  } catch (err) {
-    console.error("执行出错:", err);
-  } finally {
-    db.end && db.end();
-  }
-}
-
-updateFaceCodes();