From 2b7c4a0f04facc909655db82e07e051ae56a5ca9 Mon Sep 17 00:00:00 2001 From: zhouwentao <1577701412@qq.com> Date: Mon, 24 Jul 2023 16:13:31 +0800 Subject: [PATCH] updates --- .../jeecg/common/constant/OcrConstant.java | 7 ++++ .../ocr/controller/OcrApiController.java | 38 ++++++++++--------- .../OcrMetadataConfigController.java | 9 +++-- .../jeecg/modules/ocr/entity/OcrIdentify.java | 6 +-- .../ocr/model/OcrMetadataConfigSaveModel.java | 8 +++- .../ocr/service/IOcrTaskTypeService.java | 2 + .../service/impl/OcrIdentifyServiceImpl.java | 33 +++++++++++++--- .../impl/OcrMetadataConfigServiceImpl.java | 15 ++++++++ .../service/impl/OcrTaskTypeServiceImpl.java | 13 +++++++ 9 files changed, 102 insertions(+), 29 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/OcrConstant.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/OcrConstant.java index 7ff8deb..30074a1 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/OcrConstant.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/constant/OcrConstant.java @@ -10,4 +10,11 @@ public class OcrConstant { * 规则检查配置 分隔符 */ public static String ruleCheckSplitChar="&"; + + /** + * OCR任务状态 0 执行中,1执行 + */ + public static String task_Executing_STATUS="0"; + + public static String task_OVER_STATUS="1"; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrApiController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrApiController.java index 3990aa4..edcf410 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrApiController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrApiController.java @@ -81,7 +81,7 @@ public class OcrApiController { * message: "成功" */ - public static String semanticResponse="{\"execution_time\":69.1751720905304,\"img_path\":\"./static/ocrData/custom_2_44.jpg\",\"message\":\"成功\",\"semantic_result\":{\"医院名称\":[{\"area\":[[227,382],[441,388],[440,422],[226,416]],\"end\":7,\"ocrText\":\"开封市眼病医院\",\"probability\":0.9677108957485778,\"start\":0,\"text\":\"开封市眼病医院\"}],\"姓名\":[{\"area\":[[566,668],[691,668],[691,712],[566,712]],\"end\":3,\"ocrText\":\"闫利霞\",\"probability\":0.884488371938783,\"start\":0,\"text\":\"闫利霞\"}],\"时间\":[{\"area\":[[701,400],[874,400],[874,456],[701,456]],\"end\":5,\"ocrText\":\"10:40\",\"probability\":0.9626484940814066,\"start\":0,\"text\":\"10:40\"},{\"area\":[[502,422],[667,424],[667,452],[502,450]],\"end\":11,\"ocrText\":\"2023年05月17日\",\"probability\":0.815085233546764,\"start\":0,\"text\":\"2023年05月17日\"}],\"科室\":[]},\"task_id\":1}"; + @ApiOperation(value = "通用识别") @RequestMapping("/identify") @Transactional @@ -99,37 +99,41 @@ public class OcrApiController { }*/ //1.获取请求参数 String requestId = requestBody.getString("requestId");//请求唯一标识 + AssertUtils.notNull(requestId,"[requestId]-不可为空"); String scenes = requestBody.getString("scenes");//场景类型:door=门头照片,cases=病例,bill=票据 AssertUtils.notTrue(!"door".equals(scenes),String.format("暂不支持该场景类型[%s]",scenes)); String ruleId = requestBody.getString("ruleId");//规则标识 + AssertUtils.notNull(ruleId,"[ruleId]-不可为空"); OcrRuleCheckVo ruleCheck = ruleCheckService.findById(ruleId); - AssertUtils.notNull(ruleCheck,"[ruleId]-不存在"); Integer priority = requestBody.getInteger("priority");//任务优先级:1=加急,0=不加急 JSONArray sourceJson = requestBody.getJSONArray("sourceJson"); + + AssertUtils.notNull(ruleCheck,"[ruleId]-不存在"); + AssertUtils.notNull(priority,"[priority]-不可为空"); + AssertUtils.notNull(sourceJson,"[sourceJson]-不可为空"); + List sourceJsonList = sourceJson.toJavaList(JSONObject.class);//校验数据源 String sourceImages = requestBody.getString("sourceImages");//ocr图片集 + + OcrIdentify ocrIdentify=new OcrIdentify(); //2.创建识别任务 if(true){ ocrIdentify.setTaskName(requestId); - ocrIdentify.setStatus("0"); - ocrIdentify.setRuleCheck(ruleId); - ocrIdentify.setStartTime(new Date()); - ocrIdentify.setTaskType("1681508355389231105"); - ocrIdentify.setIdentifyUrl("https://h5.mcnetmart.com/tmp/images/dc_demo1.png"); - ocrIdentify.setCreateBy("公共接口"); - ocrIdentify.setSourceJson(requestBody.getJSONArray("sourceJson").toJSONString()); + ocrIdentify.setStatus("0");//任务进行中 + ocrIdentify.setRuleCheck(ruleId);//配置规则检查id + ocrIdentify.setStartTime(new Date());//开始时间 + ocrIdentify.setTaskType("1681508355389231105");//任务类型 + ocrIdentify.setMetadataConfigId(ruleCheck.getMetadataConfigId());//规则配置的元数据id + ocrIdentify.setTaskSource("API");//任务来源 + ocrIdentify.setIdentifyUrl("https://h5.mcnetmart.com/tmp/images/dc_demo1.png");//识别图片地址 + ocrIdentify.setCreateBy("API请求");//创建人 + ocrIdentify.setSourceJson(requestBody.getJSONArray("sourceJson").toJSONString());//校验数据源 ocrIdentifyService.save(ocrIdentify); } - //3.请求python ocr识别 - JSONObject semanticResponseJson = JSONObject.parseObject(semanticResponse); - semanticResponseJson.put("task_id",ocrIdentify.getId()); - ocrIdentifyService.getSemanticInfo(semanticResponseJson); - //4.更新主任务状态 - ocrIdentify.setStatus("1"); - ocrIdentify.setEndTime(new Date()); - ocrIdentifyService.updateById(ocrIdentify); + //3.请求python ocr识别,异步执行 + ocrIdentifyService.postSemantic(ocrIdentify.getId(),"https://h5.mcnetmart.com/tmp/images/dc_demo1.png"); return Result.OK("请求成功"); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java index 715ebb0..486f49a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java @@ -272,13 +272,16 @@ public class OcrMetadataConfigController extends JeecgController countMap = list.stream().map(o->o.getConfigName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); AssertUtils.notTrue(countMap.values().stream().filter(f->f>1).count()>0,"不可有重复的配置名称!"); List saveModelList=new ArrayList<>(); - OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel=new OcrMetadataConfigSaveModel(); - List ocrMetadataConfigDetailList=new ArrayList(); - OcrMetadataConfigDetail ocrMetadataConfigDetail=new OcrMetadataConfigDetail(); + OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel=null; + List ocrMetadataConfigDetailList=null; + OcrMetadataConfigDetail ocrMetadataConfigDetail=null; for (OcrMetadataConfigVo configVo : list) { + ocrMetadataConfigSaveModel=new OcrMetadataConfigSaveModel(); ocrMetadataConfigSaveModel.setConfigName(configVo.getConfigName()); String resultName = configVo.getResultName(); String getField = configVo.getGetField(); + ocrMetadataConfigSaveModel.setTaskTypeName(configVo.getTaskType()); + List resultList=new ArrayList<>(); List getFieldList=new ArrayList<>(); if (StringUtils.isNotBlank(resultName)) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrIdentify.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrIdentify.java index 4fc7c57..a7eb138 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrIdentify.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrIdentify.java @@ -70,9 +70,9 @@ public class OcrIdentify implements Serializable { @ApiModelProperty(value = "任务开始时间") private Date startTime; /**任务结束时间*/ - @Excel(name = "任务结束时间", width = 15, format = "yyyy-MM-dd") - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") - @DateTimeFormat(pattern="yyyy-MM-dd") + @Excel(name = "任务结束时间", width = 15, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "任务结束时间") private Date endTime; /**元数据配置*/ diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrMetadataConfigSaveModel.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrMetadataConfigSaveModel.java index 31639e3..3f6b6bf 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrMetadataConfigSaveModel.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrMetadataConfigSaveModel.java @@ -1,8 +1,10 @@ package org.jeecg.modules.ocr.model; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.jeecg.modules.ocr.entity.OcrMetadataConfigDetail; +import org.jeecgframework.poi.excel.annotation.Excel; import java.util.ArrayList; import java.util.List; @@ -19,7 +21,11 @@ public class OcrMetadataConfigSaveModel { /**配置名称*/ @ApiModelProperty(value = "配置名称") private String configName; - + /**任务类型*/ + @ApiModelProperty(value = "任务类型") + private String taskType; + @ApiModelProperty(value = "任务类型名称") + private String taskTypeName; /**元数据字段列表*/ public List ocrMetadataConfigDetailList=new ArrayList<>(); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrTaskTypeService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrTaskTypeService.java index 6352769..031ddbe 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrTaskTypeService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrTaskTypeService.java @@ -25,4 +25,6 @@ public interface IOcrTaskTypeService extends IService { * @return true:被使用中,false:没被使用 */ boolean checkMetadataConfigUse(List taskTypeIdList); + + OcrTaskType saveTaskType(String taskTypeName); } 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 4897e2c..1280e74 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 cn.hutool.core.util.ArrayUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.checkerframework.checker.units.qual.C; @@ -22,6 +23,7 @@ import org.jeecg.modules.ocr.vo.OcrIdentifyVo; import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; import org.springframework.beans.BeanUtils; import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -36,6 +38,7 @@ import java.util.stream.Collectors; * @Version: V1.0 */ @Service +@EnableAsync public class OcrIdentifyServiceImpl extends ServiceImpl implements IOcrIdentifyService { @Resource IOcrRuleCheckService ocrRuleCheckService; @@ -64,6 +67,11 @@ public class OcrIdentifyServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper(); + updateWrapper.eq(OcrIdentify::getId, id); + updateWrapper.set(OcrIdentify::getEndTime, new Date()); + updateWrapper.set(OcrIdentify::getStatus,"1"); + this.update(updateWrapper); } public static void mapPutIfTrue(Map map,String key,Boolean flag){ @@ -199,7 +222,7 @@ public class OcrIdentifyServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); @@ -56,6 +61,15 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl ocrMetadataConfigDetailList = ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList(); if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){ @@ -152,6 +166,7 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl0) { arrayTestList = metadataConfigDetails.stream().filter(m -> m.getMetadataConfigId().equals(ocrMetadataConfig.getId())).collect(Collectors.toList()); fieldName = arrayTestList.stream().map(o -> o.getFieldName()).collect(Collectors.joining(",")); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrTaskTypeServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrTaskTypeServiceImpl.java index b7579e4..d70d17f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrTaskTypeServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrTaskTypeServiceImpl.java @@ -62,4 +62,17 @@ public class OcrTaskTypeServiceImpl extends ServiceImpl list = super.list(new LambdaQueryWrapper().eq(OcrTaskType::getTypeName, taskTypeName)); + if (list.size()>0) { + return list.get(0); + } + + OcrTaskType ocrTaskType=new OcrTaskType(); + ocrTaskType.setTypeName(taskTypeName); + super.save(ocrTaskType); + return ocrTaskType; + } }