From ae07d1a409c575bfadf06a536c11043e37657a3f Mon Sep 17 00:00:00 2001 From: hansha Date: Sat, 1 Jun 2024 15:16:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=AE=E5=BD=95=E6=B7=BB=E5=8A=A0=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=A8=A1=E6=9D=BF=E3=80=81=E7=9B=AE=E5=BD=95=E6=A0=91?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=9A=E5=8A=A1=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/da/common/core/domain/TreeSelect.java | 12 ++ .../common/core/domain/entity/DaCatalog.java | 16 +- .../controller/DangAnCollectController.java | 175 ++++++++++++++---- .../mapper/dangan/DaCatalogMapper.xml | 8 +- 4 files changed, 173 insertions(+), 38 deletions(-) diff --git a/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java b/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java index f4e8076..91f3456 100644 --- a/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java +++ b/dangan-common/src/main/java/com/da/common/core/domain/TreeSelect.java @@ -24,6 +24,9 @@ public class TreeSelect implements Serializable /** 节点名称 */ private String label; + /** 业务类型 */ + private String ywType; + /** 子节点 */ @JsonInclude(JsonInclude.Include.NON_EMPTY) private List children; @@ -51,9 +54,18 @@ public class TreeSelect implements Serializable { this.id = catalog.getId(); this.label = catalog.getMuName(); + this.ywType=catalog.getYwType(); this.children = catalog.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); } + public String getYwType() { + return ywType; + } + + public void setYwType(String ywType) { + this.ywType = ywType; + } + public Long getId() { return id; diff --git a/dangan-common/src/main/java/com/da/common/core/domain/entity/DaCatalog.java b/dangan-common/src/main/java/com/da/common/core/domain/entity/DaCatalog.java index da26fd2..93fe534 100644 --- a/dangan-common/src/main/java/com/da/common/core/domain/entity/DaCatalog.java +++ b/dangan-common/src/main/java/com/da/common/core/domain/entity/DaCatalog.java @@ -41,9 +41,14 @@ public class DaCatalog extends BaseEntity @Excel(name = "业务类型(字典)") private String ywType; + /** 业务类型(字典) */ + @Excel(name = "图片模板") + private String picPath; + /** 菜单状态(0正常 1停用) */ @Excel(name = "菜单状态", readConverterExp = "0=正常,1=停用") private String status; + /** 子目录 */ private List children = new ArrayList(); public void setId(Long id) @@ -68,7 +73,15 @@ public class DaCatalog extends BaseEntity this.muName = muName; } - public String getMuName() + public String getPicPath() { + return picPath; + } + + public void setPicPath(String picPath) { + this.picPath = picPath; + } + + public String getMuName() { return muName; } @@ -127,6 +140,7 @@ public class DaCatalog extends BaseEntity .append("ancestors", getAncestors()) .append("orderNum", getOrderNum()) .append("ywType", getYwType()) + .append("picPath", getPicPath()) .append("status", getStatus()) .append("remark", getRemark()) .append("createBy", getCreateBy()) diff --git a/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java b/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java index cde90c1..4878541 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java +++ b/dangan-dangan/src/main/java/com/da/dangan/controller/DangAnCollectController.java @@ -23,6 +23,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.Executor; /** * 档案采集Controller @@ -33,6 +34,8 @@ import java.util.List; @RestController @RequestMapping("/dangan/collect") public class DangAnCollectController extends BaseController { + @Autowired + private Executor threadPoolTaskExecutor; @Autowired private ServerConfig serverConfig; @Autowired @@ -45,35 +48,7 @@ public class DangAnCollectController extends BaseController { private String url; /** - * 上传(单个) - */ - @PostMapping("/save") - public AjaxResult save(@RequestPart("file") MultipartFile file, @RequestPart("picRecard") DaPicturesRecard picRecard) { - try { - // 上传文件路径 - String filePath = RuoYiConfig.getUploadPath(); - // 上传并返回新文件名称 - String fileName = FileUploadUtils.upload(filePath, file); - String url = serverConfig.getUrl() + fileName; - //保存图片对应信息 - picRecard.setPicName(file.getOriginalFilename()); - picRecard.setPicUrl(url); - picRecard.setCreateBy(getUsername()); - AjaxResult ajax = AjaxResult.success(); - daPicturesRecardService.insertDaPicturesRecard(picRecard); - ajax.put("data", picRecard); - /*ajax.put("url", url); - ajax.put("fileName", fileName); - ajax.put("newFileName", FileUtils.getName(fileName)); - ajax.put("originalFilename", file.getOriginalFilename());*/ - return ajax; - } catch (Exception e) { - return AjaxResult.error(e.getMessage()); - } - } - - /** - * 通用上传(单个/多个) + * 通用上传(单个/多个)保存图片 */ @PostMapping("/saves") public AjaxResult saves(@RequestPart("files") MultipartFile[] files, @RequestPart("picRecard") DaPicturesRecard picRecard) throws Exception { @@ -130,8 +105,8 @@ public class DangAnCollectController extends BaseController { */ @PostMapping("/recongnize") public AjaxResult recognize(@RequestBody DaPicturesRecard[] picRecards) { - try { + String ywType = picRecards[0].getYwType(); //获取所有的文件 List files = new ArrayList<>(); for (DaPicturesRecard picRecard : picRecards) { @@ -139,18 +114,123 @@ public class DangAnCollectController extends BaseController { File file = new File(path); files.add(file); } - // TODO 调用第三方接口识别信息 - //String result= CallThirdInterface.callThirdInterface1(); - String result = CallThirdInterface.callThirdInterface(url, files, "option1"); + // TODO————————多线程循环调用第三方接口 + long start =System.currentTimeMillis(); + /*List> futures = new ArrayList<>(); + List results = new ArrayList<>(); + for(File file :files){ + System.out.println("线程执行前----------------"+file.getName()); + futures.add(CompletableFuture.supplyAsync(() ->testAsync(file,picRecards[0].getYwType()) , threadPoolTaskExecutor)); // 用自定义线程池 + } + // 所有请求完成后处理逻辑 + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).thenRun(() -> { + //join控制线程顺序 + results = futures.stream().map(CompletableFuture::join).collect(Collectors.toList()); + logger.info("线程执行完毕:{}", JSON.toJSONString(results)); + }); + long end =System.currentTimeMillis(); + logger.info("CompletableFuture耗时--——————————————————》"+ (end-start)+"ms");*/ + + //不使用循环调用接口 直接传递数组 + String result = CallThirdInterface.callThirdInterface(url, files, ywType); System.out.println(result); + long end =System.currentTimeMillis(); + logger.info("CompletableFuture耗时--——————————————————》"+ (end-start)+"ms"); + // TODO 根据业务类型存储识别后的信息 - //daCzrkdjService.insertDaCzrkdj(); - //识别成功的图片 ,修改图片信息记录表为已识别 - for (DaPicturesRecard picRecard : picRecards) { + switch(ywType){ + case "0" : + + break; + case "1" : + + break; + case "2" : + //daCzrkdjService.insertDaCzrkdj(); + break; + case "3" : + + break; + case "4" : + + break; + case "5" : + + break; + case "6" : + + break; + } + + + + //识别成功的图片 ,修改图片信息记录表为已识别 可以用多线程 + /*for (DaPicturesRecard picRecard : picRecards) { picRecard.setRecognize("1"); daPicturesRecardService.updateDaPicturesRecard(picRecard); + }*/ + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + return AjaxResult.success(); + } + + /** + * 调用ocr识别接口——上传图片为一组 (也就是上传N张图片为一个人的数据,仅需要识别一张图片) + */ + @PostMapping("/recongnize2") + public AjaxResult recognize2(@RequestBody DaPicturesRecard chekedRecard[],@RequestBody DaPicturesRecard[] unchekedRecards) { + try { + String ywType = chekedRecard[0].getYwType(); + //获取所有的文件 + List files = new ArrayList<>(); + for (DaPicturesRecard picRecard : chekedRecard) { + String path = getPath(picRecard.getPicUrl()); + File file = new File(path); + files.add(file); } + // TODO————————多线程循环调用第三方接口 + long start =System.currentTimeMillis(); + String result = CallThirdInterface.callThirdInterface(url, files, ywType); + System.out.println(result); + long end =System.currentTimeMillis(); + logger.info("CompletableFuture耗时--——————————————————》"+ (end-start)+"ms"); + + // TODO 根据业务类型存储识别后的信息 + + switch(ywType){ + case "0" : + + break; + case "1" : + + break; + case "2" : + //daCzrkdjService.insertDaCzrkdj(); + break; + case "3" : + + break; + case "4" : + + break; + case "5" : + + break; + case "6" : + + break; + } + + + + //识别成功的图片 ,修改图片信息记录表为已识别 可以用多线程 + /*for (DaPicturesRecard picRecard : picRecards) { + picRecard.setRecognize("1"); + daPicturesRecardService.updateDaPicturesRecard(picRecard); + }*/ } catch (Exception e) { e.printStackTrace(); return AjaxResult.error(e.getMessage()); @@ -158,6 +238,29 @@ public class DangAnCollectController extends BaseController { return AjaxResult.success(); } + /** + * 线程池调用第三方接口 + */ + public String testAsync(File file,String ywType){ + String result = null; + try { + Thread.sleep(10); + logger.info("开始执行异步线程-————————————————————————————————————>>" ); + //调用接口 + //根据接口返回值判断list中的值 是否匹配 + //返回处理后的结果 + List files = new ArrayList<>(); + files.add(file); + result = CallThirdInterface.callThirdInterface(url, files, ywType); + System.out.println(result); + } catch (InterruptedException e) { + logger.error(e.getMessage(),e); + e.printStackTrace(); + } + return result; + } + + /** * 图片批量识别处理进度 */ diff --git a/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml b/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml index e834472..36a9442 100644 --- a/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml +++ b/dangan-dangan/src/main/resources/mapper/dangan/DaCatalogMapper.xml @@ -11,6 +11,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -20,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, mu_name, pid, ancestors, order_num, yw_type, status, remark, create_by, create_time, update_by, update_time from da_catalog + select id, mu_name, pid, ancestors, order_num, yw_type, pic_path, status, remark, create_by, create_time, update_by, update_time from da_catalog