Browse Source

人脸推送

dzx 1 year ago
parent
commit
909bde34bb

+ 69 - 12
src/main/java/com/xjrsoft/module/hikvision/util/FaceImportUtil.java

@@ -1,6 +1,8 @@
 package com.xjrsoft.module.hikvision.util;
 
+import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.module.personnel.entity.TeacherFaceProcess;
 import com.xjrsoft.module.teacher.mapper.FaceImportMapper;
 
@@ -18,29 +20,84 @@ public class FaceImportUtil {
     private static ApiUtil apiUtil = new ApiUtil();
 
     public static String ImportTeacherFace(String personId, String fileUrl) {
+        JsonParser parser = new JsonParser();
+
+        String apiUrl = "/api/resource/v1/person/condition/personInfo";
+        JsonObject paramsJson = new JsonObject();
+        paramsJson.addProperty("paramName", "personId");
+        JsonArray array = new JsonArray();
+        array.add(personId);
+        paramsJson.add("paramValue", array);
+        String personInfoRes = apiUtil.doPost(apiUrl, paramsJson.toString(), null);
+        JsonObject personInfoData = parser.parse(personInfoRes).getAsJsonObject();
+        String faceId = null;
+        if("0".equals(personInfoData.get("code").getAsString()) && "success".equals(personInfoData.get("msg").getAsString())){
+            JsonObject dataJson = personInfoData.get("data").getAsJsonObject();
+            if(dataJson.get("total").getAsInt() > 0){
+                faceId = dataJson.get("list").getAsJsonArray().get(0)
+                        .getAsJsonObject().get("personPhoto").getAsJsonObject().get("personPhotoIndexCode").getAsString();
+            }
+        }
+        String response = null;
+        String base64String = ImageToBase64(fileUrl);
         JsonObject paramJson = new JsonObject();
-        paramJson.addProperty("personId", personId);
-        paramJson.addProperty("faceData", ImageToBase64(fileUrl));
+        if(faceId == null){
+            paramJson.addProperty("personId", personId);
+            paramJson.addProperty("faceData", base64String);
 
-        Map<String, String> querys = new HashMap<>();
-        querys.put("tagId", "frs");
+            Map<String, String> querys = new HashMap<>();
+            querys.put("tagId", "frs");
 
-        String apiPath = "/api/resource/v1/face/single/add";
-        String response = apiUtil.doPost(apiPath, String.valueOf(paramJson), querys);
+            String apiPath = "/api/resource/v1/face/single/add";
+            response = apiUtil.doPost(apiPath, String.valueOf(paramJson), querys);
+        }else{
+            String apiPath = "/api/resource/v1/face/single/update";
+            paramJson.addProperty("faceId", faceId);
+            paramJson.addProperty("faceData", base64String);
+            response = apiUtil.doPost(apiPath, paramJson.toString(), null);
+        }
 
         return response;
     }
 
     public static String ImportStudentFace(String personId, String fileUrl) {
+
+        JsonParser parser = new JsonParser();
+
+        String apiUrl = "/api/resource/v1/person/condition/personInfo";
+        JsonObject paramsJson = new JsonObject();
+        paramsJson.addProperty("paramName", "personId");
+        JsonArray array = new JsonArray();
+        array.add(personId);
+        paramsJson.add("paramValue", array);
+        String personInfoRes = apiUtil.doPost(apiUrl, paramsJson.toString(), null);
+        JsonObject personInfoData = parser.parse(personInfoRes).getAsJsonObject();
+        String faceId = null;
+        if("0".equals(personInfoData.get("code").getAsString()) && "success".equals(personInfoData.get("msg").getAsString())){
+            JsonObject dataJson = personInfoData.get("data").getAsJsonObject();
+            if(dataJson.get("total").getAsInt() > 0){
+                faceId = dataJson.get("list").getAsJsonArray().get(0)
+                        .getAsJsonObject().get("personPhoto").getAsJsonObject().get("personPhotoIndexCode").getAsString();
+            }
+        }
+        String response = null;
+        String base64String = ImageToBase64(fileUrl);
         JsonObject paramJson = new JsonObject();
-        paramJson.addProperty("personId", personId);
-        paramJson.addProperty("faceData", ImageToBase64(fileUrl));
+        if(faceId == null){
+            paramJson.addProperty("personId", personId);
+            paramJson.addProperty("faceData", base64String);
 
-        Map<String, String> querys = new HashMap<>();
-        querys.put("tagId", "frs");
+            Map<String, String> querys = new HashMap<>();
+            querys.put("tagId", "frs");
 
-        String apiPath = "/api/resource/v1/face/single/add";
-        String response = apiUtil.doPost(apiPath, String.valueOf(paramJson), querys);
+            String apiPath = "/api/resource/v1/face/single/add";
+            response = apiUtil.doPost(apiPath, String.valueOf(paramJson), querys);
+        }else{
+            String apiPath = "/api/resource/v1/face/single/update";
+            paramJson.addProperty("faceId", faceId);
+            paramJson.addProperty("faceData", base64String);
+            response = apiUtil.doPost(apiPath, paramJson.toString(), null);
+        }
 
         return response;
     }

+ 35 - 20
src/main/java/com/xjrsoft/module/personnel/controller/StundentFaceProcessController.java

@@ -166,9 +166,13 @@ public class StundentFaceProcessController {
     @ApiOperation(value = "批量新增学生人脸")
     @SaCheckPermission("stundentfaceprocess:batch-upload")
     public RT<Boolean> batchUpload(@RequestParam("file") MultipartFile file) throws Exception {
+
+
+
         List<BaseStudentUser> list = studentManagerService.list(
             new MPJLambdaWrapper<BaseStudentUser>().distinct()
             .select(BaseStudentUser::getId)
+            .select(BaseStudentUser.class, user -> !user.getColumn().equals("avatar"))
             .select(BaseStudentUser.class, x -> VoToColumnUtil.fieldsToColumns(BaseStudentUser.class).contains(x.getProperty()))
             .leftJoin(BaseStudent.class, BaseStudent::getUserId, BaseStudentUser::getId)
             .eq(BaseStudent::getDeleteMark, DeleteMark.NODELETE.getCode())
@@ -196,6 +200,8 @@ public class StundentFaceProcessController {
 
         List<FaceManagement> faceManagementList = faceManagementService.list(
             new QueryWrapper<FaceManagement>().lambda()
+            .select(FaceManagement.class, face -> !face.getColumn().equals("registerBase64"))
+            .select(FaceManagement.class, face -> !face.getColumn().equals("register_base64"))
             .eq(FaceManagement::getDeleteMark, DeleteMark.NODELETE.getCode())
             .eq(FaceManagement::getUserType, 2)
         );
@@ -311,26 +317,31 @@ public class StundentFaceProcessController {
                 process.setFacePhoto(folderId);
 
                 String faceId = null;
-                if(process.getHikvisionResult() != null){
+                if(process.getHikvisionResult() != null && process.getHikvisionResult().startsWith("{") && process.getHikvisionResult().endsWith("}")){
                     JsonObject object = parser.parse(process.getHikvisionResult()).getAsJsonObject();
                     if("0".equals(object.get("code").getAsString()) && "success".equals(object.get("msg").getAsString())){
                         faceId = object.get("data").getAsJsonObject().get("faceId").getAsString();
-                    }else{//查询
-                        String apiUrl = "/api/resource/v1/person/condition/personInfo";
-                        JsonObject paramsJson = new JsonObject();
-                        paramsJson.addProperty("paramName", "personId");
-                        JsonArray array = new JsonArray();
-                        array.add(studentUser.getId());
-                        paramsJson.add("paramValue", array);
-                        String personInfoRes = apiUtil.doPost(apiUrl, paramsJson.toString(), null);
-
-                        JsonObject personInfoData = parser.parse(process.getHikvisionResult()).getAsJsonObject();
-                        if("0".equals(personInfoData.get("code").getAsString()) && "success".equals(personInfoData.get("msg").getAsString())){
-                            JsonObject dataJson = personInfoData.get("data").getAsJsonObject();
-                            if(dataJson.get("total").getAsInt() > 0){
-                                faceId = dataJson.get("list").getAsJsonArray().get(0)
-                                        .getAsJsonObject().get("personPhoto").getAsJsonObject().get("personPhotoIndexCode").getAsString();
+                    }
+                }
+                if(faceId == null){
+                    String apiUrl = "/api/resource/v1/person/condition/personInfo";
+                    JsonObject paramsJson = new JsonObject();
+                    paramsJson.addProperty("paramName", "personId");
+                    JsonArray array = new JsonArray();
+                    array.add(studentUser.getId());
+                    paramsJson.add("paramValue", array);
+                    String personInfoRes = apiUtil.doPost(apiUrl, paramsJson.toString(), null);
+
+                    JsonObject personInfoData = parser.parse(personInfoRes).getAsJsonObject();
+                    if("0".equals(personInfoData.get("code").getAsString()) && "success".equals(personInfoData.get("msg").getAsString())){
+                        JsonObject dataJson = personInfoData.get("data").getAsJsonObject();
+                        if(dataJson.get("total").getAsInt() > 0){
+                            JsonArray personPhoto = dataJson.get("list").getAsJsonArray().get(0)
+                                    .getAsJsonObject().get("personPhoto").getAsJsonArray();
+                            if(personPhoto.size() > 0){
+                                faceId = personPhoto.get(0).getAsJsonObject().get("personPhotoIndexCode").getAsString();
                             }
+
                         }
                     }
                 }
@@ -339,19 +350,23 @@ public class StundentFaceProcessController {
                 JsonObject paramJson = new JsonObject();
                 String apiPath;
                 if(faceId != null){
-                    apiPath = "api/resource/v1/face/single/update";
+                    apiPath = "/api/resource/v1/face/single/update";
                     paramJson.addProperty("faceId", faceId);
                     paramJson.addProperty("faceData", base64String);
 
                 }else{
-                    apiPath = "api/resource/v1/face/single/add";
+                    apiPath = "/api/resource/v1/face/single/add";
                     paramJson.addProperty("personId", studentUser.getId());
                     paramJson.addProperty("faceData", base64String);
                 }
                 String result = apiUtil.doPost(apiPath, paramJson.toString(), null);
+                if(result.startsWith("{") && result.endsWith("}")){
+                    JsonObject object = parser.parse(result).getAsJsonObject();
+                    if("0".equals(object.get("code").getAsString()) && "success".equals(object.get("msg").getAsString())){
+                        process.setHikvisionResult(result);
+                    }
+                }
 
-
-                process.setHikvisionResult(result);
                 stundentFaceProcessService.updateById(process);
 
                 FaceManagement faceManagement = faceManagementMap.get(studentUser.getId());

+ 51 - 16
src/test/java/com/xjrsoft/module/personnel/controller/StundentFaceProcessControllerTest.java

@@ -1,9 +1,16 @@
 package com.xjrsoft.module.personnel.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.xjrsoft.XjrSoftApplication;
+import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.utils.UploadUtil;
+import com.xjrsoft.module.personnel.entity.StundentFaceProcess;
+import com.xjrsoft.module.personnel.service.IStundentFaceProcessService;
+import com.xjrsoft.module.student.service.IStudentManagerService;
+import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.Test;
 import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -14,8 +21,15 @@ import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
 import java.util.zip.ZipInputStream;
 
 import static org.junit.jupiter.api.Assertions.*;
@@ -28,28 +42,49 @@ import static org.junit.jupiter.api.Assertions.*;
 @SpringBootTest(classes = XjrSoftApplication.class)
 class StundentFaceProcessControllerTest {
 
+    @Autowired
+    private IStundentFaceProcessService stundentFaceProcessService;
+    @Autowired
+    private IStudentManagerService studentManagerService;
+
     @Test
     void test() throws Exception {
-        String filePath = "C:\\Users\\14263\\Downloads\\face.rar";
+        String filePath = "C:\\Users\\14263\\Downloads\\2023级全部学籍照.zip";
         File file = new File(filePath);
-        FileInputStream input = new FileInputStream(file);
-        MultipartFile multipartFile = new MockMultipartFile("file",
-                file.getName(), "text/plain", input);
-        String uploadedFile = UploadUtil.uploadFile(multipartFile);
-
-        InputStream download = UploadUtil.download(uploadedFile);
+        ZipFile zipFile = new ZipFile(file, Charset.forName("GBK"));
 
-        readZipEntries(download);
-    }
+        List<StundentFaceProcess> faceList = stundentFaceProcessService.list(
+                new QueryWrapper<StundentFaceProcess>().lambda()
+                        .eq(StundentFaceProcess::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        Set<String> idNumberSet = new HashSet<>();
+        for (StundentFaceProcess faceProcess : faceList) {
+            if(faceProcess.getHikvisionResult() != null && faceProcess.getHikvisionResult().contains("{\"code\":\"0\",\"msg\":\"success\",")){
+                idNumberSet.add(faceProcess.getIdentityCard());
+            }
+        }
 
-    public static void readZipEntries(InputStream inputStream) throws IOException {
-        try (ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {
-            ZipEntry zipEntry;
-            while ((zipEntry = zipInputStream.getNextEntry()) != null) {
-                // 处理每个zip条目
-                System.out.println("Zip Entry: " + zipEntry.getName());
-                zipInputStream.closeEntry();
+        Set<String> notIntSet = new HashSet<>();
+        Enumeration<? extends ZipEntry> entries = zipFile.entries();
+        while (entries.hasMoreElements()){
+            ZipEntry entry = entries.nextElement();
+            String filename = entry.getName();
+            String[] split = filename.split("\\.");
+            String idNumber = split[0].substring(split[0].length() - 18);
+            if(!idNumberSet.contains(idNumber)){
+                notIntSet.add(filename);
+                System.out.println(filename);
             }
         }
+
+        for (String fileName : notIntSet) {
+            String newFilePath = "C:\\Users\\14263\\Downloads\\2023级全部学籍照\\" + fileName;
+            File sourceFile = new File(newFilePath);
+            File destinationDir = new File("C:\\Users\\14263\\Downloads\\2023级全部学籍照2");
+            FileUtils.moveFileToDirectory(sourceFile, destinationDir, true);
+
+        }
+
     }
+
 }

+ 1 - 1
src/test/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImplTest.java

@@ -18,7 +18,7 @@ class TextbookServiceImplTest {
 
     @Test
     void dataHandleAddTextbookNode() {
-        textbookService.dataHandleAddTextbookNode(1743294003445559296L);
+//        textbookService.dataHandleAddTextbookNode(1743294003445559296L);
     }
 
     @Test