From a8e95dfa950bce75dce1b474407d50b452381a4a Mon Sep 17 00:00:00 2001 From: hansha Date: Mon, 15 Jul 2024 15:49:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=84=E7=90=86=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=BB=93=E6=9E=9Cjson=E5=BC=82=E5=B8=B8=E3=80=81?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DangAnCollectController.java | 65 ++++++++++++------- .../java/com/da/dangan/timetask/TimeTask.java | 35 ++++++---- .../da/dangan/util/CallThirdInterface.java | 8 +-- 3 files changed, 67 insertions(+), 41 deletions(-) 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 739e9d5..d0cb587 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 @@ -1,8 +1,10 @@ package com.da.dangan.controller; +import cn.hutool.json.JSONObject; import com.da.common.config.RuoYiConfig; import com.da.common.core.controller.BaseController; import com.da.common.core.domain.AjaxResult; +import com.da.common.utils.DictUtils; import com.da.common.utils.file.FileUploadUtils; import com.da.common.utils.file.FileUtils; import com.da.dangan.domain.DaPicturesRecard; @@ -27,6 +29,7 @@ import java.util.Date; import java.util.List; import java.util.concurrent.Executor; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 档案采集Controller @@ -174,7 +177,6 @@ public class DangAnCollectController extends BaseController { /** * 创建识别任务 */ - /*@Transactional @PostMapping("/recongnize") public AjaxResult recognize(@RequestBody List picRecards) { try { @@ -208,11 +210,15 @@ public class DangAnCollectController extends BaseController { daTask.setUpdateTime(new Date());//等待队列order by 字段 daTaskService.insertDaTask(daTask); - //判断识别中的任务数量 + //获取识别中的任务 DaTask param = new DaTask(); param.setStatus("1"); //处理中 List daTasks = daTaskService.selectDaTaskListByStatus(param); - if (daTasks != null && daTasks.size() >= maxTask) {//当前识别任务超过10个 + //获取等待任务 + DaTask waitTask = new DaTask(); + waitTask.setStatus("-1"); //处理中 + List waitTasks = daTaskService.selectDaTaskListByStatus(waitTask); + if ((waitTasks != null && waitTasks.size() > 0)||(daTasks != null && daTasks.size() >= maxTask)){ return AjaxResult.success("任务进入等待队列"); } else { //识别中任务<10,调用第三方接口 @@ -222,15 +228,18 @@ public class DangAnCollectController extends BaseController { code = jsonobject.getStr("code"); msg = jsonobject.getStr("msg"); //如果code=0 任务接收失败,code=1成功 - if (code.equals("0")) { - return AjaxResult.error(msg).put("taskId", daTask.getId()); + if (code != null && code.equals("1")) { + daTask.setStatus("1"); //识别中 + daTask.setUpdateTime(new Date()); //设置updateTime 因定时任务判断任务超时使用updatetime + daTaskService.updateDaTask(daTask); } else { - daTask.setStatus("1"); - daTask.setUpdateTime(new Date());//同时设置updateTime 因定时任务判断任务超时使用updatetime + daTask.setStatus("0"); + daTask.setRemark(msg); + daTask.setResultStr(result); daTaskService.updateDaTask(daTask); + return AjaxResult.error(msg).put("taskId", daTask.getId()); } } - return AjaxResult.success("任务接收成功"); } else { return AjaxResult.error("识别图片不能为空"); } @@ -238,12 +247,13 @@ public class DangAnCollectController extends BaseController { e.printStackTrace(); return AjaxResult.error(e.getMessage()); } - }*/ + return AjaxResult.success("任务接收成功"); + } /** * 创建识别任务 */ - @PostMapping("/recongnize") + /*@PostMapping("/recongnize") public AjaxResult recognize(@RequestBody List picRecards) { //取所有id的集合 stream()有顺序 try { @@ -272,12 +282,11 @@ public class DangAnCollectController extends BaseController { return AjaxResult.error(e.getMessage()); } return AjaxResult.success("任务创建成功"); - } + }*/ /** * 任务重新识别 */ - /*@Transactional @PostMapping("/reRecongnize") public AjaxResult reRecongnize(Long taskId) { try { @@ -309,17 +318,21 @@ public class DangAnCollectController extends BaseController { File file = new File(path); files.add(file); } - - //判断第三方接口识别中的任务数量 + //获取识别中的任务数量 DaTask param = new DaTask(); param.setStatus("1"); //处理中 List daTasks = daTaskService.selectDaTaskListByStatus(param); - if (daTasks != null && daTasks.size() >= maxTask) {//当前识别任务超过10个 + + //获取等待任务 + DaTask waitTask = new DaTask(); + waitTask.setStatus("-1"); //处理中 + List waitTasks = daTaskService.selectDaTaskListByStatus(waitTask); + if ((waitTasks != null && waitTasks.size() > 0)||(daTasks != null && daTasks.size() >= maxTask)) { daTask.setStatus("-1"); //设置状态等待 - daTask.setUpdateTime(new Date());//等待队列order by 字段 + daTask.setUpdateTime(new Date()); //等待队列order by 字段 daTaskService.updateDaTask(daTask); return AjaxResult.success("任务进入等待队列"); - } else {//识别中任务<10 + }else {//识别中任务<10 //调用第三方接口 先清数据 CallThirdInterface.callThirdInterfaceClearByTaskId(url4, taskId); String result = CallThirdInterface.callThirdInterfaceUpload(url1, files, daTask.getYwType(), ids, taskId); @@ -330,14 +343,16 @@ public class DangAnCollectController extends BaseController { //记录最后一次识别的操作时间 daTask.setUpdateTime(new Date()); - if (code.equals("0")) { //code=0 任务接收失败,code=1成功 - daTask.setStatus("0"); + if (code != null && code.equals("1")) { //code=0 任务接收失败,code=1成功 + daTask.setStatus("1"); //识别中 + daTask.setLastNum(picRecards.size()); daTaskService.updateDaTask(daTask); - return AjaxResult.error(msg); } else { - daTask.setStatus("1"); - daTask.setLastNum(picRecards.size()); + daTask.setStatus("0"); + daTask.setRemark(msg); + daTask.setResultStr(result); daTaskService.updateDaTask(daTask); + return AjaxResult.error(msg); } } } catch (Exception e) { @@ -345,12 +360,12 @@ public class DangAnCollectController extends BaseController { return AjaxResult.error(e.getMessage()); } return AjaxResult.success("任务接收成功"); - }*/ + } /** * 任务重新识别 */ - @PostMapping("/reRecongnize") + /*@PostMapping("/reRecongnize") public AjaxResult reRecongnize(Long taskId) { try { DaTask daTask = daTaskService.selectDaTaskById(taskId); @@ -364,7 +379,7 @@ public class DangAnCollectController extends BaseController { return AjaxResult.error(e.getMessage()); } return AjaxResult.success("提交成功"); - } + }*/ /** * 调用ocr识别接口——上传图片为一组 (也就是上传N张图片为一组数据)-- 未使用 diff --git a/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java b/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java index b0b5817..3fc965b 100644 --- a/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java +++ b/dangan-dangan/src/main/java/com/da/dangan/timetask/TimeTask.java @@ -1,5 +1,6 @@ package com.da.dangan.timetask; +import cn.hutool.json.JSONException; import cn.hutool.json.JSONObject; import com.alibaba.fastjson2.JSONArray; import com.da.common.config.RuoYiConfig; @@ -82,17 +83,27 @@ public class TimeTask { logger.info("--------开启任务:" + datask.getId() + "结果查询"); //调用第三方接口查看识别任务状态 已结束直接取结果,处理中跳过 result = CallThirdInterface.callThirdInterfaceGetByTaskId(url2, datask.getId()); + datask.setResultStr(result); //! 解析JSON字符串,获取键对应的值 JSONObject jsonobject = null; String status = null; String msg = null; - jsonobject = new JSONObject(result); + try { + jsonobject = new JSONObject(result); + } catch (JSONException e) { + //todo 处理json异常 之前测试多次出现返回结果:Internal Server Error + datask.setStatus("4"); //任务异常 + datask.setRemark(result); + daTaskService.updateDaTask(datask); + e.printStackTrace(); + System.err.println("get_result:" + result); + continue; + } status = jsonobject.getStr("status"); msg = jsonobject.getStr("msg"); - if (status.equals("1")) { //1处理中 continue; - }else if (status.equals("2")) { //2识别任务已结束,获取并存储数据 + } else if (status.equals("2")) { //2识别任务已结束,获取并存储数据 datask.setRemark(msg); //记录返回结果的msg信息 String code = jsonobject.getStr("code"); // Integer total = jsonobject.getInt("total"); @@ -100,6 +111,7 @@ public class TimeTask { String failPicid = jsonobject.getStr("failPicid"); //获取失败的id集合 List failIds = JSONArray.parseArray(failPicid, Long.class); + //更新任务记录信息 datask.setStatus("2");//已结束 datask.setFailIds(StringUtils.join(failIds, ",")); @@ -111,7 +123,6 @@ public class TimeTask { datask.setSuccessIds(StringUtils.join(successIds, ",")); datask.setFailNum(failIds.size()); datask.setSuccessNum(allpicIds.size() - failIds.size()); - datask.setResultStr(result); daTaskService.updateDaTask(datask); // code=1 识别成功或者部分成功,如果code=0 识别全部失败 无需存储信息 @@ -340,9 +351,9 @@ public class TimeTask { //获取数据成功后,清除对应taskId的信息 clearThirdTaskResult(datask.getId()); } - } else if (status.equals("3")) { //=3第三方服务崩溃或者其他异常---任务丢失 + } else if (status.equals("3")) { //=3第三方服务崩溃或者其他异常---任务丢失 datask.setRemark(msg); //记录返回结果的msg信息 - datask.setStatus("4"); //设置状态任务丢失 + datask.setStatus("4"); //设置状态任务异常 daTaskService.updateDaTask(datask); continue; } @@ -359,8 +370,8 @@ public class TimeTask { /** * 定时任务,对等待中的任务进行提交(识别中任务