diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/ApiController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/ApiController.java index d22bb6b..208e7ab 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/ApiController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/api/controller/ApiController.java @@ -3,6 +3,7 @@ package org.jeecg.modules.api.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.ApiOperation; @@ -34,6 +35,7 @@ import javax.annotation.Resource; import java.awt.*; import java.io.File; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -71,6 +73,7 @@ public class ApiController { } //1.获取请求参数 String taskName = requestBody.getString("taskName"); + AssertUtils.notTrue(ocrIdentifyService.calculateTimeDifference(taskName)<=10,"[任务名称]-"+taskName+" 短时间内已存在,不可再次请求"); String requestId = requestBody.getString("requestId");//请求唯一标识 String scenes = requestBody.getString("scenes");//场景类型:door=门头照片,cases=病例,bill=票据 String ruleId = requestBody.getString("ruleId");//规则标识 @@ -133,7 +136,7 @@ public class ApiController { } Thread.sleep(1000L); //3.请求python ocr识别,异步执行 - taskService.postSemantic(ocrIdentify,fileList); + //taskService.postSemantic(ocrIdentify,fileList); //ocrIdentifyService.postSemantic(ocrIdentify, fileList); return Result.OK("请求成功"); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java index e46698d..c14aeaf 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrIdentifyController.java @@ -153,6 +153,7 @@ public class OcrIdentifyController extends JeecgController list= ocrIdentifyService.getSemanticTaskList(); + if (CollectionUtils.isEmpty(list)) { + continue; + } + + //获取相对路径 + List ocr_relative_path = sysDictService.queryDictItemsByCode("ocr_relative_path"); + String relativePath = null; + if (ocr_relative_path != null && ocr_relative_path.size() > 0) { + for (DictModel dictModel : ocr_relative_path) { + if (dictModel.getValue().equals("0")) { + relativePath = dictModel.getText(); + } + } + } + //获取识别的图片 + List fileList=null; + + //临时变量 + List fileUrlList; + String image;//图片 + //执行获取到的任务 + identifyFor: for (OcrIdentify ocrIdentify : list) { + image=null; + fileList=new ArrayList<>(); + //识别的图片路径 + String imageUrl = ocrIdentify.getIdentifyUrl(); + //判断是不是网络图片 + Boolean onlineFile = FileOUtils.isOnlineFile(ocrIdentify.getIdentifyUrl()); + + //把过去执行过的明细给删掉 + ocrIdentifyDetailService.deleteByOcrIdentifyId(ocrIdentify.getId()); + + //更新开始时间 + ocrIdentifyService.updateMasterTaskStartTime(ocrIdentify.getId()); + + //最终要请求ocr识别的图片对象 + JSONObject requestBody = new JSONObject(); + if (onlineFile) { + //如果是网络图片,则将图片下载 + image = FileOUtils.downLoadFromUrl(imageUrl, FileOUtils.getFileName(imageUrl), OcrConstant.FILE_DOWNLOAD_URL_PREFIX); + fileList.add(image); + }else{ + //路径下识别到的图片集合 + fileUrlList = FileOUtils.fileLists(relativePath, ocrIdentify.getIdentifyUrl()); + AssertUtils.notNull(fileUrlList, "图片地址不存在"); + for (String fileUrl : fileUrlList) { + //判断附件是否是 图片格式 + if (fileUrl.lastIndexOf(".png") != -1 || fileUrl.lastIndexOf(".jpg") != -1 || fileUrl.lastIndexOf(".jpeg") != -1) { + fileList.add(fileUrl); + } + } + } + + //最终要识别哪些图片 + int i=0; + for (String img : fileList) { + i++; + requestBody.put("task_id", ocrIdentify.getId()+"_"+i); + requestBody.put("img_path", img); + log.info("----------------------请求参数"); + log.info(requestBody.toJSONString()); + try { + log.info("----------------------请求参数"); + log.info(requestBody.toJSONString()); + JSONObject semanticResponseJson = RestUtil.post(OcrConstant.api_test2_identify_url, requestBody); + semanticResponseJson.put("identifyId", ocrIdentify.getId()); + log.info("ocr识别返回数据:"); + log.info(semanticResponseJson.toJSONString()); + ocrIdentifyService.getSemanticInfo(semanticResponseJson); + }catch (Exception e){ + log.error("识别图片失败:"); + SysLog sysLog=new SysLog(); + sysLog.setLogType(2); + sysLog.setLogContent(img+"_识别图片失败:"+e.getMessage()); + sysLog.setOperateType(2); + sysLogService.save(sysLog); + log.error(e.getMessage()); + log.error("正在重试..."); + continue identifyFor; + } + + } + //更改任务状态 + ocrIdentifyService.updateOcrIdentifyStatus(ocrIdentify.getId(), "1"); + } + } + } + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/init/HandleTransInit.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/init/HandleTransInit.java index 47d0b01..df4be2c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/init/HandleTransInit.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/init/HandleTransInit.java @@ -48,8 +48,9 @@ public class HandleTransInit implements ApplicationRunner { @Override @Async + @Deprecated public void run(ApplicationArguments args) throws UnknownHostException { - if (enableHandleTask) { + if (false) { try { Thread.sleep(5000L); } catch (InterruptedException e) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyDetailService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyDetailService.java index 09eb3fa..956fda9 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyDetailService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyDetailService.java @@ -18,4 +18,6 @@ public interface IOcrIdentifyDetailService extends IService { * @return */ List listByIdentifyId(String identifyId); + + boolean deleteByOcrIdentifyId(String id); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyService.java index 770adba..9c5abab 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrIdentifyService.java @@ -49,6 +49,12 @@ public interface IOcrIdentifyService extends IService { */ Result pushTask(JSONObject jsonObject); + /** + * 更新任务的开始识别时间 + */ + void updateOcrIdentifyStartTime(String id); + + @Deprecated void updateMasterTaskStartTime(String id); /** @@ -62,4 +68,17 @@ public interface IOcrIdentifyService extends IService { * @param simulateChecksVO */ JSONObject simulateChecks(SimulateChecksVO simulateChecksVO); + + /** + * 获取待执行任务 + * @return + */ + List getSemanticTaskList(); + + + /** + * 新增方法:计算最近任务创建时间差 + * @return + */ + long calculateTimeDifference(String taskName); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyDetailServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyDetailServiceImpl.java index 51e7e7a..5ae3439 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyDetailServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyDetailServiceImpl.java @@ -23,4 +23,11 @@ public class OcrIdentifyDetailServiceImpl extends ServiceImpl list = super.list(new LambdaQueryWrapper().eq(OcrIdentifyDetail::getIdentifyId, identifyId)); return list; } + + @Override + public boolean deleteByOcrIdentifyId(String identifyId) { + LambdaQueryWrapper queryWrapper=new LambdaQueryWrapper<>(); + queryWrapper.eq(OcrIdentifyDetail::getIdentifyId,identifyId); + return this.remove(queryWrapper); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java index d2140bd..736b417 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrIdentifyServiceImpl.java @@ -3,6 +3,7 @@ package org.jeecg.modules.ocr.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -10,6 +11,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.constant.OcrConstant; +import org.jeecg.common.util.AssertUtils; import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RestUtil; import org.jeecg.modules.ocr.dto.OcrIdentifyDTO; @@ -87,13 +89,8 @@ public class OcrIdentifyServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(OcrIdentify::getId, id); List identifyDetailList = ocrIdentifyDetailService.listByIdentifyId(id); @@ -420,7 +416,6 @@ public class OcrIdentifyServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper(); @@ -431,7 +426,7 @@ public class OcrIdentifyServiceImpl extends ServiceImpl identifyDetailList = ocrIdentifyDetailService.listByIdentifyId(ocrIdentifyId); ocrIdentifyCallbackLog.setStartTime(date); boolean b = CallBackWlyUtils.callbackWly(ocrIdentify, identifyDetailList); - ocrIdentifyCallbackLog.setStatus(b?1:0); + ocrIdentifyCallbackLog.setStatus(b?1:0);//0-失败,1-成功 ocrIdentifyCallbackLog.setEndTime(new Date()); ocrIdentifyCallbackLogService.save(ocrIdentifyCallbackLog); if (b) { @@ -661,6 +656,15 @@ public class OcrIdentifyServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.set(OcrIdentify::getStartTime, new Date()); + updateWrapper.set(OcrIdentify::getEndTime,null); + updateWrapper.eq(OcrIdentify::getId, id); + super.update(updateWrapper); + } + @Override public void updateMasterTaskStartTime(String id) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -899,7 +903,7 @@ public class OcrIdentifyServiceImpl extends ServiceImpl getSemanticTaskList() { + LambdaQueryWrapper queryWrapper=new LambdaQueryWrapper<>(); + queryWrapper.in(OcrIdentify::getStatus,0,2); + queryWrapper.orderByDesc(OcrIdentify::getPriority);//优先 加急 1>0 不加急 + queryWrapper.ne(OcrIdentify::getTaskSource,"模拟实验");//不获取模拟实验室的数据 + return this.list(queryWrapper); + } + // 自定义的脱敏方法,对字段进行半脱敏 private String desensitizeText(String text) { StringBuilder sb = new StringBuilder(text); @@ -1208,4 +1221,17 @@ public class OcrIdentifyServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("taskName", taskName).orderByDesc("createTime").last("LIMIT 1"); + OcrIdentify lastIdentify = this.getOne(queryWrapper); + if (lastIdentify != null) { + Date lastCreateTime = lastIdentify.getCreateTime(); + Date currentTime = new Date(); + return (currentTime.getTime() - lastCreateTime.getTime()) / 1000; + } + return 11; // 如果没有找到数据,返回默认值 + } + }