qzyReal 2 éve
szülő
commit
06ee783d7c

+ 6 - 0
business-system/filing-system/src/main/java/com/pj/biz/TbPersonFilingController.java

@@ -103,6 +103,12 @@ public class TbPersonFilingController {
         tbPersonFilingService.importExcel(file);
         return AjaxJson.getSuccess();
     }
+    @RequestMapping("importFace")
+    @SaCheckPermission(TbPersonFiling.PERMISSION_CODE_IMPORT)
+    public AjaxJson importFace(@RequestPart MultipartFile file) throws Exception{
+        tbPersonFilingService.importFace(file);
+        return AjaxJson.getSuccess();
+    }
 
     @RequestMapping("judge")
     @SaCheckPermission(TbPersonFiling.PERMISSION_CODE_JUDGE)

+ 70 - 0
sp-core/src/main/java/com/pj/project/tb_person_filing/TbPersonFilingService.java

@@ -2,6 +2,8 @@ package com.pj.project.tb_person_filing;
 
 import java.io.File;
 import java.io.InputStream;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
@@ -15,6 +17,7 @@ import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.ZipUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
@@ -34,10 +37,13 @@ import com.pj.current.task.TaskService;
 import com.pj.project.tb_dept.TbDept;
 import com.pj.project.tb_dept.TbDeptService;
 import com.pj.project.tb_person_black.TbPersonBlack;
+import com.pj.project.tb_person_filing.task.DelayIsuuedList;
 import com.pj.project.tb_terminal.TbTerminal;
 import com.pj.project.tb_terminal.TbTerminalService;
 import com.pj.project4sp.spcfg.SpCfgUtil;
 import com.pj.project4sp.uploadfile.UploadConfig;
+import com.pj.project4sp.uploadfile.UploadUtil;
+import com.pj.utils.sg.AjaxError;
 import com.sun.imageio.plugins.common.ImageUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.util.ImageUtils;
@@ -76,6 +82,9 @@ public class TbPersonFilingService extends ServiceImpl<TbPersonFilingMapper, TbP
     @Resource
     private ImportPersonListener importPersonListener;
 
+    @Resource
+    private TaskService taskService;
+
 
     /**
      * 增
@@ -330,4 +339,65 @@ public class TbPersonFilingService extends ServiceImpl<TbPersonFilingMapper, TbP
         is.close();
     }
 
+    public void importFace(MultipartFile file) {
+        if (file.getSize() == 0) {
+            throw new AjaxError("上传文件不能为空");
+        }
+        String filename = file.getOriginalFilename();
+        //创建临时目录
+        String tempDir = uploadConfig.rootFolder + File.separator + RandomUtil.randomNumbers(6);
+        String fileDir = tempDir + File.separator + StrUtil.subBefore(filename,".",true);
+        File temFileDir = FileUtil.mkdir(tempDir);
+        try (InputStream is = file.getInputStream()) {
+            //解压
+            ZipUtil.unzip(is, temFileDir, Charset.forName("gbk"));
+        } catch (Exception e) {
+            throw new AjaxError("压缩包解析错误");
+        }
+        //说明是压缩的是文件夹
+        if (FileUtil.exist(fileDir)) {
+            tempDir = fileDir;
+        }
+        List<String> files = FileUtil.listFileNames(tempDir);
+        String fileFolder = new File(uploadConfig.rootFolder).getAbsolutePath() + "/" +
+                uploadConfig.httpPrefix + "/face/";
+        List<TbPersonFiling> personFilings = new ArrayList<>();
+        for (String imageName : files) {
+            String idCard = StrUtil.subBefore(imageName, ".", true);
+            if (!IdcardUtil.isValidCard(idCard)) {
+                throw new AjaxError(idCard + "身份证号码不正确");
+            }
+            TbPersonFiling tbPersonFiling = this.findByIdCard(idCard);
+            if (tbPersonFiling == null) {
+                throw new AjaxError(idCard + "人员不存在");
+            }
+            String newFilename = StrUtil.replace(imageName, idCard, RandomUtil.randomString(16));
+            FileUtil.move(new File(tempDir + File.separator + imageName), new File(fileFolder + File.separator + newFilename), true);
+            // 对外暴露的http路径
+            String httpUrl = SystemObject.config.getDomain() + uploadConfig.httpPrefix + "/face/" + newFilename;
+            tbPersonFiling.setPhoto(httpUrl);
+            personFilings.add(tbPersonFiling);
+        }
+        this.updateBatchById(personFilings);
+        FileUtil.del(temFileDir);
+        //下发新的人脸到设备
+        personFilings = personFilings.stream().filter(tbPersonFiling -> tbPersonFiling.getJudgeState() == 1).collect(Collectors.toList());
+        taskService.addTask(new DelayIsuuedList(RandomUtil.randomNumbers(10), 2000, personFilings));
+    }
+
+    /**
+     * 批量下发到设备端
+     *
+     * @param list
+     */
+    public void isuuedList(List<TbPersonFiling> list) {
+        List<TbTerminal> tbTerminalList = tbTerminalService.list();
+        tbTerminalList.stream().parallel().forEach(tbTerminal -> {
+            list.forEach(tbPersonFiling -> {
+                JSONObject params = builderParams(tbPersonFiling);
+                tbTerminalService.setCommand(CommandType.ISSUED_USER_COMMAND.getFuncId(), params, tbTerminal);
+            });
+            tbTerminalService.startHeartCommand(tbTerminal.getSn());
+        });
+    }
 }

+ 24 - 0
sp-core/src/main/java/com/pj/project/tb_person_filing/task/DelayIsuuedList.java

@@ -0,0 +1,24 @@
+package com.pj.project.tb_person_filing.task;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.pj.current.task.Task;
+import com.pj.project.tb_person_filing.TbPersonFiling;
+import com.pj.project.tb_person_filing.TbPersonFilingService;
+
+import java.util.List;
+
+public class DelayIsuuedList extends Task {
+
+    private List<TbPersonFiling>list;
+
+    public DelayIsuuedList(String id, long delayInMilliseconds, List<TbPersonFiling>list) {
+        super(id, delayInMilliseconds);
+        this.list=list;
+    }
+
+    @Override
+    public void run() {
+        TbPersonFilingService tbPersonFilingService= SpringUtil.getBean(TbPersonFilingService.class);
+        tbPersonFilingService.isuuedList(list);
+    }
+}