master
周文涛 2 years ago
parent c7551b3df8
commit 03bfda1495

@ -32,6 +32,10 @@ public class OcrConstant {
public static String api_test2_identify_url="http://127.0.0.1:7003/semantic"; public static String api_test2_identify_url="http://127.0.0.1:7003/semantic";
//public static String api_test2_identify_url="http://127.0.0.1:8000/semantic"; //public static String api_test2_identify_url="http://127.0.0.1:8000/semantic";
/**
*
*/
public static String FILE_REVIEW_URL_PREFIX="http://47.103.213.109:8072/files";
public static void main(String[] args) { public static void main(String[] args) {
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++) {

@ -2,18 +2,13 @@ package org.jeecg.modules.api.controller;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.*; import org.jeecg.common.util.*;
import org.jeecg.common.util.filter.FileTypeFilter;
import org.jeecg.modules.ocr.entity.OcrIdentify; import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.entity.OcrIdentifyDetail; import org.jeecg.modules.ocr.entity.OcrIdentifyDetail;
import org.jeecg.modules.ocr.entity.OcrRuleCheck; import org.jeecg.modules.ocr.entity.OcrRuleCheck;
@ -23,28 +18,19 @@ import org.jeecg.modules.ocr.service.IOcrRuleCheckService;
import org.jeecg.modules.ocr.service.impl.TaskService; import org.jeecg.modules.ocr.service.impl.TaskService;
import org.jeecg.modules.ocr.utils.FileOUtils; import org.jeecg.modules.ocr.utils.FileOUtils;
import org.jeecg.modules.ocr.utils.ImageUtils; import org.jeecg.modules.ocr.utils.ImageUtils;
import org.jeecg.modules.ocr.vo.OcrIdentifyVo; import org.jeecg.modules.ocr.dto.OcrIdentifyDTO;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import org.jeecg.modules.system.service.ISysDictService; import org.jeecg.modules.system.service.ISysDictService;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*; import java.awt.*;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @Description * @Description
@ -90,7 +76,7 @@ public class ApiController {
AssertUtils.notNull(requestId, "[requestId]-不可为空"); AssertUtils.notNull(requestId, "[requestId]-不可为空");
AssertUtils.notTrue(!"door".equals(scenes), String.format("暂不支持该场景类型[%s]", scenes)); AssertUtils.notTrue(!"door".equals(scenes), String.format("暂不支持该场景类型[%s]", scenes));
AssertUtils.notNull(ruleId, "[ruleId]-不可为空"); AssertUtils.notNull(ruleId, "[ruleId]-不可为空");
OcrRuleCheckVo ruleCheck = ocrRuleCheckService.findById(ruleId); OcrRuleCheckDTO ruleCheck = ocrRuleCheckService.findById(ruleId);
AssertUtils.notNull(ruleCheck, "[ruleId]-不存在"); AssertUtils.notNull(ruleCheck, "[ruleId]-不存在");
AssertUtils.notNull(priority, "[priority]-不可为空"); AssertUtils.notNull(priority, "[priority]-不可为空");
AssertUtils.notNull(sourceJson, "[sourceJson]-不可为空"); AssertUtils.notNull(sourceJson, "[sourceJson]-不可为空");
@ -145,10 +131,10 @@ public class ApiController {
@PostMapping(value = "/getRule") @PostMapping(value = "/getRule")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<List<JSONObject>> getRule() { public Result<List<JSONObject>> getRule() {
IPage<OcrRuleCheckVo> ocrRuleCheckVoIPage = ocrRuleCheckService.pageVo(new Page<OcrRuleCheck>(1, Integer.MAX_VALUE), new OcrRuleCheck()); IPage<OcrRuleCheckDTO> ocrRuleCheckVoIPage = ocrRuleCheckService.pageVo(new Page<OcrRuleCheck>(1, Integer.MAX_VALUE), new OcrRuleCheck());
List<JSONObject> records = new ArrayList<>(); List<JSONObject> records = new ArrayList<>();
JSONObject copyEntity = new JSONObject(); JSONObject copyEntity = new JSONObject();
for (OcrRuleCheckVo record : ocrRuleCheckVoIPage.getRecords()) { for (OcrRuleCheckDTO record : ocrRuleCheckVoIPage.getRecords()) {
copyEntity = new JSONObject(); copyEntity = new JSONObject();
copyEntity.put("ruleId", record.getId()); copyEntity.put("ruleId", record.getId());
copyEntity.put("ruleName", record.getConfigName()); copyEntity.put("ruleName", record.getConfigName());
@ -257,7 +243,7 @@ public class ApiController {
@ApiOperation(value = "调试101") @ApiOperation(value = "调试101")
@PostMapping(value = "/test_101") @PostMapping(value = "/test_101")
public Result test101(@RequestBody JSONObject jsonObject){ public Result test101(@RequestBody JSONObject jsonObject){
OcrIdentifyVo byId = ocrIdentifyService.findById("1692068694831755265"); OcrIdentifyDTO byId = ocrIdentifyService.findById("1692068694831755265");
ocrIdentifyService.updateTaskResultInfo(byId.getId()); ocrIdentifyService.updateTaskResultInfo(byId.getId());
/*OcrRuleCheckVo ocrRuleCheckVo = byId.getOcrRuleCheckVo(); /*OcrRuleCheckVo ocrRuleCheckVo = byId.getOcrRuleCheckVo();
Map<String, String> configRuleMap = ocrRuleCheckVo.getConfigRuleMap();*/ Map<String, String> configRuleMap = ocrRuleCheckVo.getConfigRuleMap();*/

@ -4,24 +4,19 @@ import java.util.Arrays;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.ocr.entity.OcrApiCallStatistics; import org.jeecg.modules.ocr.entity.OcrApiCallStatistics;
import org.jeecg.modules.ocr.entity.OcrMetadataConfig; import org.jeecg.modules.ocr.vo.CommonQueryVO;
import org.jeecg.modules.ocr.model.CommonQueryModel;
import org.jeecg.modules.ocr.service.IOcrApiCallStatisticsService; import org.jeecg.modules.ocr.service.IOcrApiCallStatisticsService;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.ocr.utils.DownloadTemplateUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/** /**
* @Description: api * @Description: api
@ -40,7 +35,7 @@ public class OcrApiCallStatisticsController extends JeecgController<OcrApiCallSt
/** /**
* *
* *
* @param commonQueryModel * @param commonQueryVO
* @param pageNo * @param pageNo
* @param pageSize * @param pageSize
* @param req * @param req
@ -49,12 +44,12 @@ public class OcrApiCallStatisticsController extends JeecgController<OcrApiCallSt
//@AutoLog(value = "api调用统计-分页列表查询") //@AutoLog(value = "api调用统计-分页列表查询")
@ApiOperation(value="api调用统计-分页列表查询", notes="api调用统计-分页列表查询") @ApiOperation(value="api调用统计-分页列表查询", notes="api调用统计-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<IPage<OcrApiCallStatistics>> queryPageList(CommonQueryModel commonQueryModel, public Result<IPage<OcrApiCallStatistics>> queryPageList(CommonQueryVO commonQueryVO,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
Page<OcrApiCallStatistics> page = new Page<OcrApiCallStatistics>(pageNo, pageSize); Page<OcrApiCallStatistics> page = new Page<OcrApiCallStatistics>(pageNo, pageSize);
IPage<OcrApiCallStatistics> pageList = ocrApiCallStatisticsService.pageList(page, commonQueryModel); IPage<OcrApiCallStatistics> pageList = ocrApiCallStatisticsService.pageList(page, commonQueryVO);
return Result.OK(pageList); return Result.OK(pageList);
} }

@ -1,34 +1,15 @@
package org.jeecg.modules.ocr.controller; package org.jeecg.modules.ocr.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.AssertUtils; import org.jeecg.common.util.AssertUtils;
import org.jeecg.common.util.RestUtil;
import org.jeecg.modules.ocr.entity.OcrApiCallStatistics;
import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.entity.OcrTaskType;
import org.jeecg.modules.ocr.service.IOcrApiCallStatisticsService; import org.jeecg.modules.ocr.service.IOcrApiCallStatisticsService;
import org.jeecg.modules.ocr.service.IOcrIdentifyService; import org.jeecg.modules.ocr.service.IOcrIdentifyService;
import org.jeecg.modules.ocr.service.IOcrRuleCheckService; import org.jeecg.modules.ocr.service.IOcrRuleCheckService;
import org.jeecg.modules.ocr.service.IOcrTaskTypeService; import org.jeecg.modules.ocr.service.IOcrTaskTypeService;
import org.jeecg.modules.ocr.utils.FileOUtils;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/** /**
* @Description * @Description

@ -11,9 +11,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.OcrConstant;
import org.jeecg.common.constant.enums.OcrStatusEnum; import org.jeecg.common.constant.enums.OcrStatusEnum;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.query.QueryGenerator;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -21,22 +19,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.system.vo.DictModel; import org.jeecg.common.system.vo.DictModel;
import org.jeecg.common.util.AssertUtils; import org.jeecg.common.util.AssertUtils;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.ocr.entity.OcrIdentify; import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.entity.OcrIdentifyDetail; import org.jeecg.modules.ocr.entity.OcrIdentifyDetail;
import org.jeecg.modules.ocr.entity.OcrMetadataConfig;
import org.jeecg.modules.ocr.entity.OcrRuleCheck; import org.jeecg.modules.ocr.entity.OcrRuleCheck;
import org.jeecg.modules.ocr.model.OcrResult2; import org.jeecg.modules.ocr.dto.OcrResultDTO;
import org.jeecg.modules.ocr.service.*; import org.jeecg.modules.ocr.service.*;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.ocr.service.impl.TaskService; import org.jeecg.modules.ocr.service.impl.TaskService;
import org.jeecg.modules.ocr.utils.DownloadTemplateUtil; import org.jeecg.modules.ocr.utils.DownloadTemplateUtil;
import org.jeecg.modules.ocr.utils.FileOUtils; import org.jeecg.modules.ocr.utils.FileOUtils;
import org.jeecg.modules.ocr.vo.OcrIdentifyExcelVo; import org.jeecg.modules.ocr.excel.OcrIdentifyExcel;
import org.jeecg.modules.ocr.vo.OcrIdentifyVo; import org.jeecg.modules.ocr.dto.OcrMetadataConfigDTO;
import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo;
import org.jeecg.modules.system.service.ISysDictItemService;
import org.jeecg.modules.system.service.ISysDictService; import org.jeecg.modules.system.service.ISysDictService;
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.ImportParams;
@ -49,7 +43,6 @@ import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/** /**
* @Description: ocr * @Description: ocr
@ -77,10 +70,6 @@ public class OcrIdentifyController extends JeecgController<OcrIdentify, IOcrIden
@Autowired @Autowired
private ISysDictService sysDictService; private ISysDictService sysDictService;
@Autowired @Autowired
private ISysDictItemService sysDictItemService;
@Autowired
private RedisUtil redisUtil;
@Autowired
private TaskService taskService; private TaskService taskService;
/** /**
* *
@ -120,8 +109,8 @@ public class OcrIdentifyController extends JeecgController<OcrIdentify, IOcrIden
queryWrapper.between("end_time",startTime,endTime); queryWrapper.between("end_time",startTime,endTime);
} }
Page<OcrIdentify> page = new Page<>(pageNo, pageSize); Page<OcrIdentify> page = new Page<>(pageNo, pageSize);
Map<String, OcrRuleCheckVo> ocrRuleCheckMap = ocrRuleCheckService.listToMap(null); Map<String, OcrRuleCheckDTO> ocrRuleCheckMap = ocrRuleCheckService.listToMap(null);
Map<String, OcrMetadataConfigVo> metadataConfigMap = ocrMetadataConfigService.listToMap(null); Map<String, OcrMetadataConfigDTO> metadataConfigMap = ocrMetadataConfigService.listToMap(null);
Map<String, String> taskNameMap = ocrTaskTypeService.listNameToMap(null); Map<String, String> taskNameMap = ocrTaskTypeService.listNameToMap(null);
IPage<OcrIdentify> pageList = ocrIdentifyService.page(page, queryWrapper); IPage<OcrIdentify> pageList = ocrIdentifyService.page(page, queryWrapper);
if (pageList != null && pageList.getRecords() != null &&pageList.getRecords().size()>0) { if (pageList != null && pageList.getRecords() != null &&pageList.getRecords().size()>0) {
@ -131,22 +120,22 @@ public class OcrIdentifyController extends JeecgController<OcrIdentify, IOcrIden
long count = identifyDetailList.stream().filter(i -> i.getIdentifyId().equals(record.getId())).count(); long count = identifyDetailList.stream().filter(i -> i.getIdentifyId().equals(record.getId())).count();
record.setImgNum(count); record.setImgNum(count);
if (StringUtils.isNotBlank(record.getTaskResultInfo())) { if (StringUtils.isNotBlank(record.getTaskResultInfo())) {
List<OcrResult2> ocrResult2s = JSONObject.parseArray(record.getTaskResultInfo()).toJavaList(OcrResult2.class); List<OcrResultDTO> ocrResultDTOS = JSONObject.parseArray(record.getTaskResultInfo()).toJavaList(OcrResultDTO.class);
int tagNum = ocrResult2s.size(); int tagNum = ocrResultDTOS.size();
int successNum = (int) ocrResult2s.stream().filter(o -> o.getRuleValidation()).count(); int successNum = (int) ocrResultDTOS.stream().filter(o -> o.getRuleValidation()).count();
record.setTagNum(tagNum); record.setTagNum(tagNum);
record.setTagSuccessNum(successNum); record.setTagSuccessNum(successNum);
record.setSuccessRate(successNum+"/"+tagNum); record.setSuccessRate(successNum+"/"+tagNum);
record.setTaskResultInfoList(ocrResult2s); record.setTaskResultInfoList(ocrResultDTOS);
} }
OcrRuleCheckVo ocrRuleCheckVo = ocrRuleCheckMap.get(record.getRuleCheck()); OcrRuleCheckDTO ocrRuleCheckVo = ocrRuleCheckMap.get(record.getRuleCheck());
if (ocrRuleCheckVo!=null && StringUtils.isNotBlank(ocrRuleCheckVo.getMetadataConfigId())) { if (ocrRuleCheckVo!=null && StringUtils.isNotBlank(ocrRuleCheckVo.getMetadataConfigId())) {
record.setOcrRuleCheckInfoConfigRule(ocrRuleCheckVo.getConfigRule()); record.setOcrRuleCheckInfoConfigRule(ocrRuleCheckVo.getConfigRule());
record.setMetadataConfigId(ocrRuleCheckVo.getMetadataConfigId()); record.setMetadataConfigId(ocrRuleCheckVo.getMetadataConfigId());
OcrMetadataConfigVo ocrMetadataConfigVo = metadataConfigMap.get(ocrRuleCheckVo.getMetadataConfigId()); OcrMetadataConfigDTO ocrMetadataConfigDTO = metadataConfigMap.get(ocrRuleCheckVo.getMetadataConfigId());
if (ocrMetadataConfigVo!=null) { if (ocrMetadataConfigDTO !=null) {
record.setTaskType(ocrMetadataConfigVo.getTaskType()); record.setTaskType(ocrMetadataConfigDTO.getTaskType());
record.setTaskType_dictText(taskNameMap.get(ocrMetadataConfigVo.getTaskType())); record.setTaskType_dictText(taskNameMap.get(ocrMetadataConfigDTO.getTaskType()));
} }
} }
} }
@ -272,31 +261,31 @@ public class OcrIdentifyController extends JeecgController<OcrIdentify, IOcrIden
if (ocrIdentify == null) { if (ocrIdentify == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
Map<String, OcrRuleCheckVo> ocrRuleCheckMap = ocrRuleCheckService.listToMap(null); Map<String, OcrRuleCheckDTO> ocrRuleCheckMap = ocrRuleCheckService.listToMap(null);
Map<String, OcrMetadataConfigVo> metadataConfigMap = ocrMetadataConfigService.listToMap(null); Map<String, OcrMetadataConfigDTO> metadataConfigMap = ocrMetadataConfigService.listToMap(null);
Map<String, String> taskNameMap = ocrTaskTypeService.listNameToMap(null); Map<String, String> taskNameMap = ocrTaskTypeService.listNameToMap(null);
List<OcrIdentifyDetail> identifyDetailList = ocrIdentifyDetailService.list(new LambdaQueryWrapper<OcrIdentifyDetail>().eq(OcrIdentifyDetail::getIdentifyId,id)); List<OcrIdentifyDetail> identifyDetailList = ocrIdentifyDetailService.list(new LambdaQueryWrapper<OcrIdentifyDetail>().eq(OcrIdentifyDetail::getIdentifyId,id));
ocrIdentify.setImgNum((long)identifyDetailList.size()); ocrIdentify.setImgNum((long)identifyDetailList.size());
if (StringUtils.isNotBlank(ocrIdentify.getTaskResultInfo())) { if (StringUtils.isNotBlank(ocrIdentify.getTaskResultInfo())) {
List<OcrResult2> ocrResult2s = JSONObject.parseArray(ocrIdentify.getTaskResultInfo()).toJavaList(OcrResult2.class); List<OcrResultDTO> ocrResultDTOList = JSONObject.parseArray(ocrIdentify.getTaskResultInfo()).toJavaList(OcrResultDTO.class);
int tagNum = ocrResult2s.size(); int tagNum = ocrResultDTOList.size();
int successNum = (int) ocrResult2s.stream().filter(o -> o.getRuleValidation()).count(); int successNum = (int) ocrResultDTOList.stream().filter(o -> o.getRuleValidation()).count();
ocrIdentify.setTagNum(tagNum); ocrIdentify.setTagNum(tagNum);
ocrIdentify.setTagSuccessNum(successNum); ocrIdentify.setTagSuccessNum(successNum);
ocrIdentify.setSuccessRate(successNum+"/"+tagNum); ocrIdentify.setSuccessRate(successNum+"/"+tagNum);
ocrIdentify.setTaskResultInfoList(ocrResult2s); ocrIdentify.setTaskResultInfoList(ocrResultDTOList);
} }
OcrRuleCheckVo ocrRuleCheckVo = ocrRuleCheckMap.get(ocrIdentify.getRuleCheck()); OcrRuleCheckDTO ocrRuleCheckVo = ocrRuleCheckMap.get(ocrIdentify.getRuleCheck());
if (ocrRuleCheckVo!=null && StringUtils.isNotBlank(ocrRuleCheckVo.getMetadataConfigId())) { if (ocrRuleCheckVo!=null && StringUtils.isNotBlank(ocrRuleCheckVo.getMetadataConfigId())) {
ocrIdentify.setOcrRuleCheckInfoConfigRule(ocrRuleCheckVo.getConfigRule()); ocrIdentify.setOcrRuleCheckInfoConfigRule(ocrRuleCheckVo.getConfigRule());
ocrIdentify.setRuleCheck_dictText(ocrRuleCheckVo.getConfigName()); ocrIdentify.setRuleCheck_dictText(ocrRuleCheckVo.getConfigName());
ocrIdentify.setMetadataConfigId(ocrRuleCheckVo.getMetadataConfigId()); ocrIdentify.setMetadataConfigId(ocrRuleCheckVo.getMetadataConfigId());
ocrIdentify.setMetadataConfigId_dictText(ocrRuleCheckVo.getMetadataConfigName()); ocrIdentify.setMetadataConfigId_dictText(ocrRuleCheckVo.getMetadataConfigName());
OcrMetadataConfigVo ocrMetadataConfigVo = metadataConfigMap.get(ocrRuleCheckVo.getMetadataConfigId()); OcrMetadataConfigDTO ocrMetadataConfigDTO = metadataConfigMap.get(ocrRuleCheckVo.getMetadataConfigId());
if (ocrMetadataConfigVo!=null) { if (ocrMetadataConfigDTO !=null) {
ocrIdentify.setTaskType(ocrMetadataConfigVo.getTaskType()); ocrIdentify.setTaskType(ocrMetadataConfigDTO.getTaskType());
ocrIdentify.setTaskType_dictText(taskNameMap.get(ocrMetadataConfigVo.getTaskType())); ocrIdentify.setTaskType_dictText(taskNameMap.get(ocrMetadataConfigDTO.getTaskType()));
} }
} }
return Result.OK(ocrIdentify); return Result.OK(ocrIdentify);
@ -335,19 +324,19 @@ public class OcrIdentifyController extends JeecgController<OcrIdentify, IOcrIden
params.setHeadRows(1); params.setHeadRows(1);
params.setNeedSave(true); params.setNeedSave(true);
try { try {
List<OcrIdentifyExcelVo> list = ExcelImportUtil.importExcel(file.getInputStream(), OcrIdentifyExcelVo.class, params); List<OcrIdentifyExcel> list = ExcelImportUtil.importExcel(file.getInputStream(), OcrIdentifyExcel.class, params);
//update-begin-author:taoyan date:20190528 for:批量插入数据 //update-begin-author:taoyan date:20190528 for:批量插入数据
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
//service.saveBatch(list); //service.saveBatch(list);
List<OcrIdentify> ocrIdentifyList=new ArrayList<>(); List<OcrIdentify> ocrIdentifyList=new ArrayList<>();
for (OcrIdentifyExcelVo ocrIdentifyExcelVo : list) { for (OcrIdentifyExcel ocrIdentifyExcel : list) {
OcrIdentify ocrIdentify=new OcrIdentify(); OcrIdentify ocrIdentify=new OcrIdentify();
BeanUtils.copyProperties(ocrIdentifyExcelVo,ocrIdentify); BeanUtils.copyProperties(ocrIdentifyExcel,ocrIdentify);
//通过规则检查配置名称 反查 规则检查配置id //通过规则检查配置名称 反查 规则检查配置id
if (StringUtils.isNotBlank(ocrIdentifyExcelVo.getRuleCheck())) { if (StringUtils.isNotBlank(ocrIdentifyExcel.getRuleCheck())) {
LambdaQueryWrapper<OcrRuleCheck> queryWrapper = new LambdaQueryWrapper<OcrRuleCheck>().eq(OcrRuleCheck::getConfigName, ocrIdentifyExcelVo.getRuleCheck()); LambdaQueryWrapper<OcrRuleCheck> queryWrapper = new LambdaQueryWrapper<OcrRuleCheck>().eq(OcrRuleCheck::getConfigName, ocrIdentifyExcel.getRuleCheck());
List<OcrRuleCheck> ruleChecklist = ocrRuleCheckService.list(queryWrapper); List<OcrRuleCheck> ruleChecklist = ocrRuleCheckService.list(queryWrapper);
if (ruleChecklist!=null&&ruleChecklist.size()>0) { if (ruleChecklist!=null&&ruleChecklist.size()>0) {
ocrIdentify.setRuleCheck(ruleChecklist.get(0).getId()); ocrIdentify.setRuleCheck(ruleChecklist.get(0).getId());
@ -355,7 +344,7 @@ public class OcrIdentifyController extends JeecgController<OcrIdentify, IOcrIden
} }
String checkDataSource = ocrIdentifyExcelVo.getCheckDataSource(); String checkDataSource = ocrIdentifyExcel.getCheckDataSource();
String[] split = checkDataSource.split("&"); String[] split = checkDataSource.split("&");
List<JSONObject> sourceJson = new ArrayList<>(); List<JSONObject> sourceJson = new ArrayList<>();

@ -13,11 +13,8 @@ import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -25,16 +22,15 @@ import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.AssertUtils; import org.jeecg.common.util.AssertUtils;
import org.jeecg.common.util.oConvertUtils; import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.JeecgBaseConfig; import org.jeecg.config.JeecgBaseConfig;
import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.entity.OcrMetadataConfig; import org.jeecg.modules.ocr.entity.OcrMetadataConfig;
import org.jeecg.modules.ocr.entity.OcrMetadataConfigDetail; import org.jeecg.modules.ocr.entity.OcrMetadataConfigDetail;
import org.jeecg.modules.ocr.entity.OcrRuleCheck; import org.jeecg.modules.ocr.entity.OcrRuleCheck;
import org.jeecg.modules.ocr.model.OcrMetadataConfigSaveModel; import org.jeecg.modules.ocr.vo.SaveOcrMetadataConfigVO;
import org.jeecg.modules.ocr.service.IOcrMetadataConfigService; import org.jeecg.modules.ocr.service.IOcrMetadataConfigService;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.ocr.service.IOcrRuleCheckService; import org.jeecg.modules.ocr.service.IOcrRuleCheckService;
import org.jeecg.modules.ocr.utils.DownloadTemplateUtil; import org.jeecg.modules.ocr.utils.DownloadTemplateUtil;
import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.jeecg.modules.ocr.dto.OcrMetadataConfigDTO;
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ExportParams;
@ -49,7 +45,6 @@ import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/** /**
* @Description: * @Description:
@ -83,26 +78,26 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
//@AutoLog(value = "元数据配置-分页列表查询") //@AutoLog(value = "元数据配置-分页列表查询")
@ApiOperation(value = "元数据配置-分页列表查询", notes = "元数据配置-分页列表查询") @ApiOperation(value = "元数据配置-分页列表查询", notes = "元数据配置-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<IPage<OcrMetadataConfigVo>> queryPageList(OcrMetadataConfig ocrMetadataConfig, public Result<IPage<OcrMetadataConfigDTO>> queryPageList(OcrMetadataConfig ocrMetadataConfig,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
Page<OcrMetadataConfig> page = new Page<OcrMetadataConfig>(pageNo, pageSize); Page<OcrMetadataConfig> page = new Page<OcrMetadataConfig>(pageNo, pageSize);
IPage<OcrMetadataConfigVo> pageList = ocrMetadataConfigService.pageVo(page, ocrMetadataConfig); IPage<OcrMetadataConfigDTO> pageList = ocrMetadataConfigService.pageVo(page, ocrMetadataConfig);
return Result.OK(pageList); return Result.OK(pageList);
} }
@ApiOperation(value = "元数据配置-下拉列表", notes = "元数据配置-下拉列表") @ApiOperation(value = "元数据配置-下拉列表", notes = "元数据配置-下拉列表")
@GetMapping(value = "/allList") @GetMapping(value = "/allList")
public Result<List<OcrMetadataConfigVo>> allList(HttpServletRequest req) { public Result<List<OcrMetadataConfigDTO>> allList(HttpServletRequest req) {
List<OcrMetadataConfigVo> allList = ocrMetadataConfigService.allList(null); List<OcrMetadataConfigDTO> allList = ocrMetadataConfigService.allList(null);
return Result.OK(allList); return Result.OK(allList);
} }
/** /**
* *
* *
* @param ocrMetadataConfigSaveModel * @param saveOcrMetadataConfigVO
* @return * @return
*/ */
@AutoLog(value = "元数据配置-添加") @AutoLog(value = "元数据配置-添加")
@ -110,24 +105,24 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_metadata_config:add") // @RequiresPermissions("org.jeecg.modules.ocr:ocr_metadata_config:add")
@PostMapping(value = "/add") @PostMapping(value = "/add")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result<String> add(@RequestBody OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel) { public Result<String> add(@RequestBody SaveOcrMetadataConfigVO saveOcrMetadataConfigVO) {
checkSaveModel(ocrMetadataConfigSaveModel); checkSaveModel(saveOcrMetadataConfigVO);
String configName = ocrMetadataConfigSaveModel.getConfigName(); String configName = saveOcrMetadataConfigVO.getConfigName();
boolean existsFlag = ocrMetadataConfigService.existsByConfigName(configName, null);//true 已存在,false不存在 boolean existsFlag = ocrMetadataConfigService.existsByConfigName(configName, null);//true 已存在,false不存在
AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName)); AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName));
ocrMetadataConfigService.saveModel(ocrMetadataConfigSaveModel); ocrMetadataConfigService.saveModel(saveOcrMetadataConfigVO);
return Result.OK("添加成功!"); return Result.OK("添加成功!");
} }
/** /**
* *
* *
* @param ocrMetadataConfigSaveModel * @param saveOcrMetadataConfigVO
*/ */
public void checkSaveModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel) { public void checkSaveModel(SaveOcrMetadataConfigVO saveOcrMetadataConfigVO) {
AssertUtils.notEmpty(ocrMetadataConfigSaveModel.getConfigName(), "[配置名称]不可为空"); AssertUtils.notEmpty(saveOcrMetadataConfigVO.getConfigName(), "[配置名称]不可为空");
if (ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList() != null) { if (saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList() != null) {
for (OcrMetadataConfigDetail detail : ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList()) { for (OcrMetadataConfigDetail detail : saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList()) {
AssertUtils.notEmpty(detail.getFieldName(), "[字段名称]不可为空"); AssertUtils.notEmpty(detail.getFieldName(), "[字段名称]不可为空");
AssertUtils.notEmpty(detail.getGetField(), "[获取字段]不可为空"); AssertUtils.notEmpty(detail.getGetField(), "[获取字段]不可为空");
} }
@ -137,20 +132,20 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
/** /**
* *
* *
* @param ocrMetadataConfigSaveModel * @param saveOcrMetadataConfigVO
* @return * @return
*/ */
@AutoLog(value = "元数据配置-编辑") @AutoLog(value = "元数据配置-编辑")
@ApiOperation(value = "元数据配置-编辑", notes = "元数据配置-编辑") @ApiOperation(value = "元数据配置-编辑", notes = "元数据配置-编辑")
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_metadata_config:edit") // @RequiresPermissions("org.jeecg.modules.ocr:ocr_metadata_config:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel) { public Result<String> edit(@RequestBody SaveOcrMetadataConfigVO saveOcrMetadataConfigVO) {
checkSaveModel(ocrMetadataConfigSaveModel); checkSaveModel(saveOcrMetadataConfigVO);
AssertUtils.notEmpty(ocrMetadataConfigSaveModel.getId(), "[id]不可为空"); AssertUtils.notEmpty(saveOcrMetadataConfigVO.getId(), "[id]不可为空");
String configName = ocrMetadataConfigSaveModel.getConfigName(); String configName = saveOcrMetadataConfigVO.getConfigName();
boolean existsFlag = ocrMetadataConfigService.existsByConfigName(configName, ocrMetadataConfigSaveModel.getId());//true 已存在,false不存在 boolean existsFlag = ocrMetadataConfigService.existsByConfigName(configName, saveOcrMetadataConfigVO.getId());//true 已存在,false不存在
AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName)); AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName));
ocrMetadataConfigService.updateModel(ocrMetadataConfigSaveModel); ocrMetadataConfigService.updateModel(saveOcrMetadataConfigVO);
return Result.OK("编辑成功!"); return Result.OK("编辑成功!");
} }
@ -197,8 +192,8 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
//@AutoLog(value = "元数据配置-通过id查询") //@AutoLog(value = "元数据配置-通过id查询")
@ApiOperation(value = "元数据配置-通过id查询", notes = "元数据配置-通过id查询") @ApiOperation(value = "元数据配置-通过id查询", notes = "元数据配置-通过id查询")
@GetMapping(value = "/queryById") @GetMapping(value = "/queryById")
public Result<OcrMetadataConfigVo> queryById(@RequestParam(name = "id", required = true) String id) { public Result<OcrMetadataConfigDTO> queryById(@RequestParam(name = "id", required = true) String id) {
OcrMetadataConfigVo ocrMetadataConfig = ocrMetadataConfigService.findById(id); OcrMetadataConfigDTO ocrMetadataConfig = ocrMetadataConfigService.findById(id);
if (ocrMetadataConfig == null) { if (ocrMetadataConfig == null) {
return Result.error("未找到对应数据"); return Result.error("未找到对应数据");
} }
@ -220,7 +215,7 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
List<OcrMetadataConfigVo> exportList = new ArrayList<>(); List<OcrMetadataConfigDTO> exportList = new ArrayList<>();
if (oConvertUtils.isNotEmpty(selections)) { if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(",")); List<String> selectionList = Arrays.asList(selections.split(","));
exportList = ocrMetadataConfigService.allList(selectionList); exportList = ocrMetadataConfigService.allList(selectionList);
@ -228,7 +223,7 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
if(true){ if(true){
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
mv.addObject(NormalExcelConstants.FILE_NAME, title); mv.addObject(NormalExcelConstants.FILE_NAME, title);
mv.addObject(NormalExcelConstants.CLASS, OcrMetadataConfigVo.class); mv.addObject(NormalExcelConstants.CLASS, OcrMetadataConfigDTO.class);
ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload()); exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
mv.addObject(NormalExcelConstants.PARAMS, exportParams); mv.addObject(NormalExcelConstants.PARAMS, exportParams);
@ -265,15 +260,15 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
params.setHeadRows(1); params.setHeadRows(1);
params.setNeedSave(true); params.setNeedSave(true);
try { try {
List<OcrMetadataConfigVo> list = ExcelImportUtil.importExcel(file.getInputStream(), OcrMetadataConfigVo.class, params); List<OcrMetadataConfigDTO> list = ExcelImportUtil.importExcel(file.getInputStream(), OcrMetadataConfigDTO.class, params);
AssertUtils.hasSize(list,"未获取到数据!"); AssertUtils.hasSize(list,"未获取到数据!");
//判断重复字段名 //判断重复字段名
Map<String, Long> countMap = list.stream().map(o->o.getConfigName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); Map<String, Long> 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,"不可有重复的配置名称!"); AssertUtils.notTrue(countMap.values().stream().filter(f->f>1).count()>0,"不可有重复的配置名称!");
//入库保存的元数据对象 //入库保存的元数据对象
List<OcrMetadataConfigSaveModel> saveModelList=new ArrayList<>(); List<SaveOcrMetadataConfigVO> saveModelList=new ArrayList<>();
//元数据循环copy add的对象 //元数据循环copy add的对象
OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel; SaveOcrMetadataConfigVO saveOcrMetadataConfigVO;
//元数据循环遍历用的对象 //元数据循环遍历用的对象
List<OcrMetadataConfigDetail> ocrMetadataConfigDetailList; List<OcrMetadataConfigDetail> ocrMetadataConfigDetailList;
OcrMetadataConfigDetail ocrMetadataConfigDetail; OcrMetadataConfigDetail ocrMetadataConfigDetail;
@ -282,12 +277,12 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
String getField;//字段描述 String getField;//字段描述
List<String> resultList; List<String> resultList;
List<String> getFieldList; List<String> getFieldList;
for (OcrMetadataConfigVo configVo : list) { for (OcrMetadataConfigDTO configVo : list) {
ocrMetadataConfigSaveModel=new OcrMetadataConfigSaveModel(); saveOcrMetadataConfigVO =new SaveOcrMetadataConfigVO();
ocrMetadataConfigSaveModel.setConfigName(configVo.getConfigName()); saveOcrMetadataConfigVO.setConfigName(configVo.getConfigName());
resultName = configVo.getResultName(); resultName = configVo.getResultName();
getField = configVo.getGetField(); getField = configVo.getGetField();
ocrMetadataConfigSaveModel.setTaskTypeName(configVo.getTaskType_dictText()); saveOcrMetadataConfigVO.setTaskTypeName(configVo.getTaskType_dictText());
resultList=new ArrayList<>(); resultList=new ArrayList<>();
getFieldList=new ArrayList<>(); getFieldList=new ArrayList<>();
if (StringUtils.isNotBlank(resultName)) { if (StringUtils.isNotBlank(resultName)) {
@ -304,8 +299,8 @@ public class OcrMetadataConfigController extends JeecgController<OcrMetadataConf
ocrMetadataConfigDetail.setGetField(getFieldList.get(i)); ocrMetadataConfigDetail.setGetField(getFieldList.get(i));
ocrMetadataConfigDetailList.add(ocrMetadataConfigDetail); ocrMetadataConfigDetailList.add(ocrMetadataConfigDetail);
} }
ocrMetadataConfigSaveModel.setOcrMetadataConfigDetailList(ocrMetadataConfigDetailList); saveOcrMetadataConfigVO.setOcrMetadataConfigDetailList(ocrMetadataConfigDetailList);
saveModelList.add(ocrMetadataConfigSaveModel); saveModelList.add(saveOcrMetadataConfigVO);
} }
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
ocrMetadataConfigService.saveModelBatch(saveModelList); ocrMetadataConfigService.saveModelBatch(saveModelList);

@ -12,11 +12,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -25,15 +22,13 @@ import org.jeecg.common.util.AssertUtils;
import org.jeecg.common.util.oConvertUtils; import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.JeecgBaseConfig; import org.jeecg.config.JeecgBaseConfig;
import org.jeecg.modules.ocr.entity.*; import org.jeecg.modules.ocr.entity.*;
import org.jeecg.modules.ocr.model.OcrMetadataConfigSaveModel; import org.jeecg.modules.ocr.vo.SaveOcrRuleCheckVO;
import org.jeecg.modules.ocr.model.OcrRuleCheckSaveModel;
import org.jeecg.modules.ocr.service.IOcrIdentifyService; import org.jeecg.modules.ocr.service.IOcrIdentifyService;
import org.jeecg.modules.ocr.service.IOcrMetadataConfigService; import org.jeecg.modules.ocr.service.IOcrMetadataConfigService;
import org.jeecg.modules.ocr.service.IOcrRuleCheckService; import org.jeecg.modules.ocr.service.IOcrRuleCheckService;
import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.base.controller.JeecgController;
import org.jeecg.modules.ocr.utils.DownloadTemplateUtil; import org.jeecg.modules.ocr.utils.DownloadTemplateUtil;
import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo;
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ExportParams;
@ -47,7 +42,6 @@ import org.springframework.web.servlet.ModelAndView;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/** /**
* @Description: * @Description:
@ -82,7 +76,7 @@ public class OcrRuleCheckController extends JeecgController<OcrRuleCheck, IOcrRu
//@AutoLog(value = "规则检查配置-分页列表查询") //@AutoLog(value = "规则检查配置-分页列表查询")
@ApiOperation(value = "规则检查配置-分页列表查询", notes = "规则检查配置-分页列表查询") @ApiOperation(value = "规则检查配置-分页列表查询", notes = "规则检查配置-分页列表查询")
@GetMapping(value = "/list") @GetMapping(value = "/list")
public Result<IPage<OcrRuleCheckVo>> queryPageList(OcrRuleCheck ocrRuleCheck, public Result<IPage<OcrRuleCheckDTO>> queryPageList(OcrRuleCheck ocrRuleCheck,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) { HttpServletRequest req) {
@ -96,55 +90,55 @@ public class OcrRuleCheckController extends JeecgController<OcrRuleCheck, IOcrRu
ocrRuleCheck.setConfigRule("*" + ocrRuleCheck.getConfigRule() + "*"); ocrRuleCheck.setConfigRule("*" + ocrRuleCheck.getConfigRule() + "*");
}*/ }*/
Page<OcrRuleCheck> page = new Page<OcrRuleCheck>(pageNo, pageSize); Page<OcrRuleCheck> page = new Page<OcrRuleCheck>(pageNo, pageSize);
IPage<OcrRuleCheckVo> pageList = ocrRuleCheckService.pageVo(page, ocrRuleCheck); IPage<OcrRuleCheckDTO> pageList = ocrRuleCheckService.pageVo(page, ocrRuleCheck);
return Result.OK(pageList); return Result.OK(pageList);
} }
/** /**
* *
* *
* @param ocrRuleCheckSaveModel * @param saveOcrRuleCheckVO
* @return * @return
*/ */
@AutoLog(value = "规则检查配置-添加") @AutoLog(value = "规则检查配置-添加")
@ApiOperation(value = "规则检查配置-添加", notes = "规则检查配置-添加") @ApiOperation(value = "规则检查配置-添加", notes = "规则检查配置-添加")
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_rule_check:add") // @RequiresPermissions("org.jeecg.modules.ocr:ocr_rule_check:add")
@PostMapping(value = "/add") @PostMapping(value = "/add")
public Result<String> add(@RequestBody OcrRuleCheckSaveModel ocrRuleCheckSaveModel) { public Result<String> add(@RequestBody SaveOcrRuleCheckVO saveOcrRuleCheckVO) {
checkSaveModel(ocrRuleCheckSaveModel); checkSaveModel(saveOcrRuleCheckVO);
String configName = ocrRuleCheckSaveModel.getConfigName(); String configName = saveOcrRuleCheckVO.getConfigName();
boolean existsFlag = ocrRuleCheckService.existsByConfigName(configName, null);//true 已存在,false不存在 boolean existsFlag = ocrRuleCheckService.existsByConfigName(configName, null);//true 已存在,false不存在
AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName)); AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName));
ocrRuleCheckService.saveModel(ocrRuleCheckSaveModel); ocrRuleCheckService.saveModel(saveOcrRuleCheckVO);
return Result.OK("添加成功!"); return Result.OK("添加成功!");
} }
/** /**
* *
* *
* @param ocrRuleCheckSaveModel * @param saveOcrRuleCheckVO
*/ */
public void checkSaveModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel) { public void checkSaveModel(SaveOcrRuleCheckVO saveOcrRuleCheckVO) {
AssertUtils.notEmpty(ocrRuleCheckSaveModel.getConfigName(), "[配置名称]不可为空"); AssertUtils.notEmpty(saveOcrRuleCheckVO.getConfigName(), "[配置名称]不可为空");
} }
/** /**
* *
* *
* @param ocrRuleCheckSaveModel * @param saveOcrRuleCheckVO
* @return * @return
*/ */
@AutoLog(value = "规则检查配置-编辑") @AutoLog(value = "规则检查配置-编辑")
@ApiOperation(value = "规则检查配置-编辑", notes = "规则检查配置-编辑") @ApiOperation(value = "规则检查配置-编辑", notes = "规则检查配置-编辑")
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_rule_check:edit") // @RequiresPermissions("org.jeecg.modules.ocr:ocr_rule_check:edit")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> edit(@RequestBody OcrRuleCheckSaveModel ocrRuleCheckSaveModel) { public Result<String> edit(@RequestBody SaveOcrRuleCheckVO saveOcrRuleCheckVO) {
checkSaveModel(ocrRuleCheckSaveModel); checkSaveModel(saveOcrRuleCheckVO);
String configName = ocrRuleCheckSaveModel.getConfigName(); String configName = saveOcrRuleCheckVO.getConfigName();
AssertUtils.notEmpty(ocrRuleCheckSaveModel.getId(), "[id]不可为空"); AssertUtils.notEmpty(saveOcrRuleCheckVO.getId(), "[id]不可为空");
boolean existsFlag = ocrRuleCheckService.existsByConfigName(configName, ocrRuleCheckSaveModel.getId());//true 已存在,false不存在 boolean existsFlag = ocrRuleCheckService.existsByConfigName(configName, saveOcrRuleCheckVO.getId());//true 已存在,false不存在
AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName)); AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configName));
ocrRuleCheckService.updateModel(ocrRuleCheckSaveModel); ocrRuleCheckService.updateModel(saveOcrRuleCheckVO);
return Result.OK("编辑成功!"); return Result.OK("编辑成功!");
} }
@ -214,7 +208,7 @@ public class OcrRuleCheckController extends JeecgController<OcrRuleCheck, IOcrRu
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
List<OcrRuleCheckVo> exportList = new ArrayList<>(); List<OcrRuleCheckDTO> exportList = new ArrayList<>();
if (oConvertUtils.isNotEmpty(selections)) { if (oConvertUtils.isNotEmpty(selections)) {
List<String> selectionList = Arrays.asList(selections.split(",")); List<String> selectionList = Arrays.asList(selections.split(","));
exportList = ocrRuleCheckService.allList(selectionList); exportList = ocrRuleCheckService.allList(selectionList);
@ -222,7 +216,7 @@ public class OcrRuleCheckController extends JeecgController<OcrRuleCheck, IOcrRu
if (true) { if (true) {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
mv.addObject(NormalExcelConstants.FILE_NAME, title); mv.addObject(NormalExcelConstants.FILE_NAME, title);
mv.addObject(NormalExcelConstants.CLASS, OcrRuleCheckVo.class); mv.addObject(NormalExcelConstants.CLASS, OcrRuleCheckDTO.class);
ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title);
exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload()); exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload());
mv.addObject(NormalExcelConstants.PARAMS, exportParams); mv.addObject(NormalExcelConstants.PARAMS, exportParams);
@ -259,20 +253,20 @@ public class OcrRuleCheckController extends JeecgController<OcrRuleCheck, IOcrRu
params.setHeadRows(1); params.setHeadRows(1);
params.setNeedSave(true); params.setNeedSave(true);
try { try {
List<OcrRuleCheckSaveModel> list = ExcelImportUtil.importExcel(file.getInputStream(), OcrRuleCheckSaveModel.class, params); List<SaveOcrRuleCheckVO> list = ExcelImportUtil.importExcel(file.getInputStream(), SaveOcrRuleCheckVO.class, params);
AssertUtils.hasSize(list, "未获取到数据!"); AssertUtils.hasSize(list, "未获取到数据!");
//判断重复字段名 //判断重复字段名
Map<String, Long> countMap = list.stream().map(o -> o.getConfigName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); Map<String, Long> 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, "不可有重复的配置名称!"); AssertUtils.notTrue(countMap.values().stream().filter(f -> f > 1).count() > 0, "不可有重复的配置名称!");
Map<String, String> metadataConfigNameMap = ocrMetadataConfigService.list(new LambdaQueryWrapper<>()).stream().collect(Collectors.toMap(OcrMetadataConfig::getConfigName, OcrMetadataConfig::getId)); Map<String, String> metadataConfigNameMap = ocrMetadataConfigService.list(new LambdaQueryWrapper<>()).stream().collect(Collectors.toMap(OcrMetadataConfig::getConfigName, OcrMetadataConfig::getId));
List<OcrRuleCheckSaveModel> saveModelList = new ArrayList<>(); List<SaveOcrRuleCheckVO> saveModelList = new ArrayList<>();
OcrRuleCheckSaveModel ocrRuleCheckSaveModel; SaveOcrRuleCheckVO saveOcrRuleCheckVO;
boolean existsFlag = false; boolean existsFlag = false;
String configRule;//规则配置 String configRule;//规则配置
String metadataConfigName;//元数据配置名称 String metadataConfigName;//元数据配置名称
String metadataConfigId;//元数据配置id String metadataConfigId;//元数据配置id
for (OcrRuleCheckSaveModel configVo : list) { for (SaveOcrRuleCheckVO configVo : list) {
ocrRuleCheckSaveModel = new OcrRuleCheckSaveModel(); saveOcrRuleCheckVO = new SaveOcrRuleCheckVO();
metadataConfigName = configVo.getMetadataConfigName(); metadataConfigName = configVo.getMetadataConfigName();
configRule = configVo.getConfigRule(); configRule = configVo.getConfigRule();
metadataConfigId = metadataConfigNameMap.get(metadataConfigName); metadataConfigId = metadataConfigNameMap.get(metadataConfigName);
@ -280,10 +274,10 @@ public class OcrRuleCheckController extends JeecgController<OcrRuleCheck, IOcrRu
existsFlag = ocrRuleCheckService.existsByConfigName(configVo.getConfigName(), null);//true 已存在,false不存在 existsFlag = ocrRuleCheckService.existsByConfigName(configVo.getConfigName(), null);//true 已存在,false不存在
AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configVo.getConfigName())); AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", configVo.getConfigName()));
AssertUtils.notEmpty(metadataConfigId, String.format("[元数据配置]-%s 不存在", metadataConfigName)); AssertUtils.notEmpty(metadataConfigId, String.format("[元数据配置]-%s 不存在", metadataConfigName));
ocrRuleCheckSaveModel.setConfigName(configVo.getConfigName()); saveOcrRuleCheckVO.setConfigName(configVo.getConfigName());
ocrRuleCheckSaveModel.setConfigRule(configRule); saveOcrRuleCheckVO.setConfigRule(configRule);
ocrRuleCheckSaveModel.setMetadataConfigId(metadataConfigId); saveOcrRuleCheckVO.setMetadataConfigId(metadataConfigId);
saveModelList.add(ocrRuleCheckSaveModel); saveModelList.add(saveOcrRuleCheckVO);
} }
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
ocrRuleCheckService.saveModelBatch(saveModelList); ocrRuleCheckService.saveModelBatch(saveModelList);

@ -111,9 +111,7 @@ public class OcrSimulatorController{
List<String> identifyDetailIdList = simulateChecksVO.getIdentifyDetailIdList(); List<String> identifyDetailIdList = simulateChecksVO.getIdentifyDetailIdList();
AssertUtils.notEmpty(ruleCheckId, "请选择[规则扫描器]"); AssertUtils.notEmpty(ruleCheckId, "请选择[规则扫描器]");
AssertUtils.hasSize(identifyDetailIdList,"请先上传图片"); AssertUtils.hasSize(identifyDetailIdList,"请先上传图片");
ocrIdentifyService.simulateChecks(simulateChecksVO); return Result.OK(ocrIdentifyService.simulateChecks(simulateChecksVO));
//图片明细的id
return Result.OK();
} }
} }

@ -1,13 +1,11 @@
package org.jeecg.modules.ocr.vo; package org.jeecg.modules.ocr.dto;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import org.jeecg.modules.ocr.entity.OcrIdentify; import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.entity.OcrRuleCheck;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @Description ocr * @Description ocr
@ -15,9 +13,9 @@ import java.util.Map;
* @Date 2023/7/19 18:20 * @Date 2023/7/19 18:20
*/ */
@Data @Data
public class OcrIdentifyVo extends OcrIdentify { public class OcrIdentifyDTO extends OcrIdentify {
/**规则检查配置*/ /**规则检查配置*/
public OcrRuleCheckVo ocrRuleCheckVo; public OcrRuleCheckDTO ocrRuleCheckVo;
/**校验数据源 json对象*/ /**校验数据源 json对象*/
public List<JSONObject> sourceJsonObjects; public List<JSONObject> sourceJsonObjects;

@ -1,4 +1,4 @@
package org.jeecg.modules.ocr.vo; package org.jeecg.modules.ocr.dto;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -16,7 +16,7 @@ import java.util.List;
* @Date 2023/7/17 16:53 * @Date 2023/7/17 16:53
*/ */
@Data @Data
public class OcrMetadataConfigVo extends OcrMetadataConfig { public class OcrMetadataConfigDTO extends OcrMetadataConfig {
/**任务类型_字段中文*/ /**任务类型_字段中文*/
@Excel(name = "任务类型", width = 15) @Excel(name = "任务类型", width = 15)
private String taskType_dictText; private String taskType_dictText;

@ -1,7 +1,8 @@
package org.jeecg.modules.ocr.model; package org.jeecg.modules.ocr.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.jeecg.modules.ocr.model.SourceImage;
/** /**
* @Description ocr * @Description ocr
@ -9,7 +10,7 @@ import lombok.Data;
* @Date 2023/7/21 14:51 * @Date 2023/7/21 14:51
*/ */
@Data @Data
public class OcrResult { public class OcrResultDTO {
@ApiModelProperty(value = "检索字段") @ApiModelProperty(value = "检索字段")
private String tag; private String tag;
@ApiModelProperty(value = "检索字段名称") @ApiModelProperty(value = "检索字段名称")

@ -1,4 +1,4 @@
package org.jeecg.modules.ocr.vo; package org.jeecg.modules.ocr.dto;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@ -23,7 +23,7 @@ import java.util.*;
* @Version: V1.0 * @Version: V1.0
*/ */
@Data @Data
public class OcrRuleCheckVo extends OcrRuleCheck { public class OcrRuleCheckDTO extends OcrRuleCheck {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "元数据配置名称") @ApiModelProperty(value = "元数据配置名称")
@Excel(name = "元数据配置名称", width = 15) @Excel(name = "元数据配置名称", width = 15)

@ -5,15 +5,13 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.jeecg.modules.ocr.model.OcrResult2; import org.jeecg.modules.ocr.dto.OcrResultDTO;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.common.aspect.annotation.Dict;
@ -22,8 +20,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.persistence.Table;
/** /**
* @Description: ocr * @Description: ocr
* @Author: jeecg-boot * @Author: jeecg-boot
@ -150,7 +146,7 @@ public class OcrIdentify implements Serializable {
private String taskType_dictText; private String taskType_dictText;
@TableField(exist = false) @TableField(exist = false)
private List<OcrResult2> taskResultInfoList=new ArrayList<>(); private List<OcrResultDTO> taskResultInfoList=new ArrayList<>();
@TableField(exist = false) @TableField(exist = false)
private Integer tagNum=0; private Integer tagNum=0;
@TableField(exist = false) @TableField(exist = false)

@ -1,24 +1,11 @@
package org.jeecg.modules.ocr.vo; package org.jeecg.modules.ocr.excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecg.modules.ocr.model.OcrResult2;
import org.jeecgframework.poi.excel.annotation.Excel; import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** /**
* @author * @author
@ -27,7 +14,7 @@ import java.util.List;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class OcrIdentifyExcelVo implements Serializable { public class OcrIdentifyExcel implements Serializable {
@Excel(name = "RequestId",width = 15) @Excel(name = "RequestId",width = 15)
@ApiModelProperty(value = "请求id") @ApiModelProperty(value = "请求id")
public String requestId; public String requestId;

@ -2,7 +2,7 @@ package org.jeecg.modules.ocr.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.ocr.entity.OcrIdentify; import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.vo.OcrIdentifyVo; import org.jeecg.modules.ocr.dto.OcrIdentifyDTO;
import java.util.List; import java.util.List;
@ -14,11 +14,11 @@ import java.util.List;
*/ */
public interface OcrIdentifyMapper extends BaseMapper<OcrIdentify> { public interface OcrIdentifyMapper extends BaseMapper<OcrIdentify> {
OcrIdentifyVo findById(String id); OcrIdentifyDTO findById(String id);
/** /**
* . * .
* @return * @return
*/ */
List<OcrIdentifyVo> findListOfWlyCallBack(); List<OcrIdentifyDTO> findListOfWlyCallBack();
} }

@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.ocr.entity.OcrMetadataConfig; import org.jeecg.modules.ocr.entity.OcrMetadataConfig;
import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.jeecg.modules.ocr.dto.OcrMetadataConfigDTO;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -18,7 +18,7 @@ import java.util.Map;
*/ */
public interface OcrMetadataConfigMapper extends BaseMapper<OcrMetadataConfig> { public interface OcrMetadataConfigMapper extends BaseMapper<OcrMetadataConfig> {
IPage<OcrMetadataConfigVo> pageVo(@Param("page") Page<OcrMetadataConfig> page,@Param("o") Map<String,Object> params); IPage<OcrMetadataConfigDTO> pageVo(@Param("page") Page<OcrMetadataConfig> page, @Param("o") Map<String,Object> params);
List<OcrMetadataConfigVo> allList(@Param("idList") List<String> idList); List<OcrMetadataConfigDTO> allList(@Param("idList") List<String> idList);
} }

@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.ocr.entity.OcrRuleCheck; import org.jeecg.modules.ocr.entity.OcrRuleCheck;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -18,9 +18,9 @@ import java.util.Map;
*/ */
public interface OcrRuleCheckMapper extends BaseMapper<OcrRuleCheck> { public interface OcrRuleCheckMapper extends BaseMapper<OcrRuleCheck> {
IPage<OcrRuleCheckVo> pageVo(@Param("page")Page<OcrRuleCheck> page,@Param("p") Map<String, Object> params); IPage<OcrRuleCheckDTO> pageVo(@Param("page")Page<OcrRuleCheck> page, @Param("p") Map<String, Object> params);
OcrRuleCheckVo findById(String id); OcrRuleCheckDTO findById(String id);
List<OcrRuleCheckVo> allList(@Param("selectionList")List<String> selectionList); List<OcrRuleCheckDTO> allList(@Param("selectionList")List<String> selectionList);
} }

@ -2,11 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.ocr.mapper.OcrIdentifyMapper"> <mapper namespace="org.jeecg.modules.ocr.mapper.OcrIdentifyMapper">
<select id="findById" resultType="org.jeecg.modules.ocr.vo.OcrIdentifyVo"> <select id="findById" resultType="org.jeecg.modules.ocr.dto.OcrIdentifyDTO">
SELECT * FROM ocr_identify WHERE id = #{id} SELECT * FROM ocr_identify WHERE id = #{id}
</select> </select>
<select id="findListOfWlyCallBack" resultType="org.jeecg.modules.ocr.vo.OcrIdentifyVo"> <select id="findListOfWlyCallBack" resultType="org.jeecg.modules.ocr.dto.OcrIdentifyDTO">
SELECT identify.* FROM ocr_identify identify SELECT identify.* FROM ocr_identify identify
</select> </select>
</mapper> </mapper>

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.ocr.mapper.OcrMetadataConfigMapper"> <mapper namespace="org.jeecg.modules.ocr.mapper.OcrMetadataConfigMapper">
<select id="pageVo" resultType="org.jeecg.modules.ocr.vo.OcrMetadataConfigVo"> <select id="pageVo" resultType="org.jeecg.modules.ocr.dto.OcrMetadataConfigDTO">
SELECT oc.*, SELECT oc.*,
GROUP_CONCAT(ocd.field_name)as resultName, GROUP_CONCAT(ocd.field_name)as resultName,
GROUP_CONCAT(ocd.get_field)as getField, GROUP_CONCAT(ocd.get_field)as getField,
@ -27,7 +27,7 @@
order by oc.update_time desc order by oc.update_time desc
</select> </select>
<select id="allList" resultType="org.jeecg.modules.ocr.vo.OcrMetadataConfigVo"> <select id="allList" resultType="org.jeecg.modules.ocr.dto.OcrMetadataConfigDTO">
SELECT oc.*, SELECT oc.*,
tasktype.type_name as taskType_dictText tasktype.type_name as taskType_dictText
FROM ocr_metadata_config oc FROM ocr_metadata_config oc

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.ocr.mapper.OcrRuleCheckMapper"> <mapper namespace="org.jeecg.modules.ocr.mapper.OcrRuleCheckMapper">
<select id="pageVo" resultType="org.jeecg.modules.ocr.vo.OcrRuleCheckVo"> <select id="pageVo" resultType="org.jeecg.modules.ocr.dto.OcrRuleCheckDTO">
SELECT SELECT
ocr.*,omc.config_name as metadataConfigName ocr.*,omc.config_name as metadataConfigName
FROM ocr_rule_check ocr FROM ocr_rule_check ocr
@ -17,12 +17,12 @@
order by ocr.update_time desc order by ocr.update_time desc
</select> </select>
<select id="findById" resultType="org.jeecg.modules.ocr.vo.OcrRuleCheckVo"> <select id="findById" resultType="org.jeecg.modules.ocr.dto.OcrRuleCheckDTO">
SELECT * FROM ocr_rule_check ocr SELECT * FROM ocr_rule_check ocr
WHERE ocr.id = #{id} WHERE ocr.id = #{id}
</select> </select>
<select id="allList" resultType="org.jeecg.modules.ocr.vo.OcrRuleCheckVo"> <select id="allList" resultType="org.jeecg.modules.ocr.dto.OcrRuleCheckDTO">
SELECT SELECT
ocr.*,omc.config_name as metadataConfigName ocr.*,omc.config_name as metadataConfigName
FROM ocr_rule_check ocr FROM ocr_rule_check ocr

@ -1,29 +0,0 @@
package org.jeecg.modules.ocr.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Description ocr
* @Author ZhouWenTao
* @Date 2023/7/21 14:51
*/
@Data
public class OcrResult2 {
@ApiModelProperty(value = "字段")
private String tag;
@ApiModelProperty(value = "字段名称")
private String tagName;
/*@ApiModelProperty(value = "api输入值")
private String inputText;
@ApiModelProperty(value = "ocr识别文本")
private String ocrText;
@ApiModelProperty(value = "ocr识别置信度")
private Double ocrPrecisionRate;
@ApiModelProperty(value = "图片来源")
private SourceImage sourceImage;*/
@ApiModelProperty(value = "失败原因")
private String failureReason;
@ApiModelProperty(value = "规则验证结果")
private Boolean ruleValidation=false;
}

@ -1,5 +1,6 @@
package org.jeecg.modules.ocr.model; package org.jeecg.modules.ocr.model;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
@ -10,7 +11,12 @@ import lombok.Data;
@Data @Data
public class SourceImage { public class SourceImage {
//附件名称 //附件名称
@ApiModelProperty(value = "附件名称")
private String fileName; private String fileName;
//附件地址 //附件地址
@ApiModelProperty(value = "附件地址")
private String path; private String path;
//预览地址
@ApiModelProperty(value = "预览地址")
private String previewUrl;
} }

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.ocr.entity.OcrApiCallStatistics; import org.jeecg.modules.ocr.entity.OcrApiCallStatistics;
import org.jeecg.modules.ocr.model.CommonQueryModel; import org.jeecg.modules.ocr.vo.CommonQueryVO;
import java.util.Date; import java.util.Date;
@ -16,7 +16,7 @@ import java.util.Date;
*/ */
public interface IOcrApiCallStatisticsService extends IService<OcrApiCallStatistics> { public interface IOcrApiCallStatisticsService extends IService<OcrApiCallStatistics> {
IPage<OcrApiCallStatistics> pageList(Page<OcrApiCallStatistics> page, CommonQueryModel commonQueryModel); IPage<OcrApiCallStatistics> pageList(Page<OcrApiCallStatistics> page, CommonQueryVO commonQueryVO);
String saveLogs(String apiName, String apiUrl, int count); String saveLogs(String apiName, String apiUrl, int count);

@ -2,10 +2,9 @@ package org.jeecg.modules.ocr.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.checkerframework.checker.units.qual.A;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.ocr.entity.OcrIdentify; import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.vo.OcrIdentifyVo; import org.jeecg.modules.ocr.dto.OcrIdentifyDTO;
import org.jeecg.modules.ocr.vo.SimulateChecksVO; import org.jeecg.modules.ocr.vo.SimulateChecksVO;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
@ -19,7 +18,7 @@ import java.util.List;
*/ */
public interface IOcrIdentifyService extends IService<OcrIdentify> { public interface IOcrIdentifyService extends IService<OcrIdentify> {
//单条根据id自定义返回结果对象方法 //单条根据id自定义返回结果对象方法
public OcrIdentifyVo findById(String id); public OcrIdentifyDTO findById(String id);
/** /**
* *
@ -62,5 +61,5 @@ public interface IOcrIdentifyService extends IService<OcrIdentify> {
* *
* @param simulateChecksVO * @param simulateChecksVO
*/ */
void simulateChecks(SimulateChecksVO simulateChecksVO); JSONObject simulateChecks(SimulateChecksVO simulateChecksVO);
} }

@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.ocr.entity.OcrMetadataConfig; import org.jeecg.modules.ocr.entity.OcrMetadataConfig;
import org.jeecg.modules.ocr.model.OcrMetadataConfigSaveModel; import org.jeecg.modules.ocr.vo.SaveOcrMetadataConfigVO;
import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.jeecg.modules.ocr.dto.OcrMetadataConfigDTO;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -28,17 +28,17 @@ public interface IOcrMetadataConfigService extends IService<OcrMetadataConfig> {
/** /**
* *
* @param ocrMetadataConfigSaveModel * @param saveOcrMetadataConfigVO
* @return * @return
*/ */
void saveModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel); void saveModel(SaveOcrMetadataConfigVO saveOcrMetadataConfigVO);
/** /**
* *
* @param ocrMetadataConfigSaveModel * @param saveOcrMetadataConfigVO
* @return * @return
*/ */
OcrMetadataConfig updateModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel); OcrMetadataConfig updateModel(SaveOcrMetadataConfigVO saveOcrMetadataConfigVO);
/** /**
* *
@ -46,13 +46,13 @@ public interface IOcrMetadataConfigService extends IService<OcrMetadataConfig> {
* @param ocrMetadataConfig * @param ocrMetadataConfig
* @return * @return
*/ */
IPage<OcrMetadataConfigVo> pageVo(Page<OcrMetadataConfig> page, OcrMetadataConfig ocrMetadataConfig); IPage<OcrMetadataConfigDTO> pageVo(Page<OcrMetadataConfig> page, OcrMetadataConfig ocrMetadataConfig);
List<OcrMetadataConfigVo> allList(List<String> idList); List<OcrMetadataConfigDTO> allList(List<String> idList);
OcrMetadataConfigVo findById(String id); OcrMetadataConfigDTO findById(String id);
void saveModelBatch(List<OcrMetadataConfigSaveModel> saveModelList); void saveModelBatch(List<SaveOcrMetadataConfigVO> saveModelList);
Map<String, OcrMetadataConfigVo> listToMap(List<String> idList); Map<String, OcrMetadataConfigDTO> listToMap(List<String> idList);
} }

@ -4,8 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.ocr.entity.OcrRuleCheck; import org.jeecg.modules.ocr.entity.OcrRuleCheck;
import org.jeecg.modules.ocr.model.OcrRuleCheckSaveModel; import org.jeecg.modules.ocr.vo.SaveOcrRuleCheckVO;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -27,16 +27,16 @@ public interface IOcrRuleCheckService extends IService<OcrRuleCheck> {
/** /**
* *
* @param ocrRuleCheckSaveModel * @param saveOcrRuleCheckVO
*/ */
void saveModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel); void saveModel(SaveOcrRuleCheckVO saveOcrRuleCheckVO);
/** /**
* *
* @param ocrRuleCheckSaveModel * @param saveOcrRuleCheckVO
* @return * @return
*/ */
OcrRuleCheck updateModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel); OcrRuleCheck updateModel(SaveOcrRuleCheckVO saveOcrRuleCheckVO);
/** /**
* *
@ -50,28 +50,28 @@ public interface IOcrRuleCheckService extends IService<OcrRuleCheck> {
* @param ocrRuleCheck * @param ocrRuleCheck
* @return * @return
*/ */
IPage<OcrRuleCheckVo> pageVo(Page<OcrRuleCheck> page, OcrRuleCheck ocrRuleCheck); IPage<OcrRuleCheckDTO> pageVo(Page<OcrRuleCheck> page, OcrRuleCheck ocrRuleCheck);
/** /**
* id * id
* @param ruleCheck * @param ruleCheck
* @return * @return
*/ */
OcrRuleCheckVo findById(String ruleCheck); OcrRuleCheckDTO findById(String ruleCheck);
/** /**
* *
* @param saveModelList * @param saveModelList
*/ */
void saveModelBatch(List<OcrRuleCheckSaveModel> saveModelList); void saveModelBatch(List<SaveOcrRuleCheckVO> saveModelList);
/** /**
* id * id
* @param selectionList * @param selectionList
* @return * @return
*/ */
List<OcrRuleCheckVo> allList(List<String> selectionList); List<OcrRuleCheckDTO> allList(List<String> selectionList);
Map<String, OcrRuleCheckVo> listToMap(List<String> selectionList); Map<String, OcrRuleCheckDTO> listToMap(List<String> selectionList);
} }

@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jeecg.modules.ocr.entity.OcrApiCallStatistics; import org.jeecg.modules.ocr.entity.OcrApiCallStatistics;
import org.jeecg.modules.ocr.mapper.OcrApiCallStatisticsMapper; import org.jeecg.modules.ocr.mapper.OcrApiCallStatisticsMapper;
import org.jeecg.modules.ocr.model.CommonQueryModel; import org.jeecg.modules.ocr.vo.CommonQueryVO;
import org.jeecg.modules.ocr.service.IOcrApiCallStatisticsService; import org.jeecg.modules.ocr.service.IOcrApiCallStatisticsService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -26,14 +26,14 @@ import java.util.Map;
public class OcrApiCallStatisticsServiceImpl extends ServiceImpl<OcrApiCallStatisticsMapper, OcrApiCallStatistics> implements IOcrApiCallStatisticsService { public class OcrApiCallStatisticsServiceImpl extends ServiceImpl<OcrApiCallStatisticsMapper, OcrApiCallStatistics> implements IOcrApiCallStatisticsService {
@Override @Override
public IPage<OcrApiCallStatistics> pageList(Page<OcrApiCallStatistics> page, CommonQueryModel commonQueryModel) { public IPage<OcrApiCallStatistics> pageList(Page<OcrApiCallStatistics> page, CommonQueryVO commonQueryVO) {
Map<String,Object> map=new LinkedHashMap<>(); Map<String,Object> map=new LinkedHashMap<>();
map.put("apiUrl",commonQueryModel.getApiUrl()); map.put("apiUrl", commonQueryVO.getApiUrl());
map.put("count",commonQueryModel.getCount()); map.put("count", commonQueryVO.getCount());
if (StringUtils.isNotBlank(commonQueryModel.getStartTime())&&StringUtils.isNotBlank(commonQueryModel.getEndTime())) { if (StringUtils.isNotBlank(commonQueryVO.getStartTime())&&StringUtils.isNotBlank(commonQueryVO.getEndTime())) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
map.put("startTime",commonQueryModel.getStartTime()+" 00:00:00"); map.put("startTime", commonQueryVO.getStartTime()+" 00:00:00");
map.put("endTime",commonQueryModel.getEndTime()+" 23:59:59"); map.put("endTime", commonQueryVO.getEndTime()+" 23:59:59");
} }
IPage<OcrApiCallStatistics> pageList = this.baseMapper.pageList(page,map); IPage<OcrApiCallStatistics> pageList = this.baseMapper.pageList(page,map);
return pageList; return pageList;

@ -1,6 +1,5 @@
package org.jeecg.modules.ocr.service.impl; package org.jeecg.modules.ocr.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -9,9 +8,9 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.OcrConstant; import org.jeecg.common.constant.OcrConstant;
import org.jeecg.common.util.CommonUtils;
import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RedisUtil;
import org.jeecg.common.util.RestUtil; import org.jeecg.common.util.RestUtil;
import org.jeecg.modules.ocr.dto.OcrResultDTO;
import org.jeecg.modules.ocr.entity.OcrIdentify; import org.jeecg.modules.ocr.entity.OcrIdentify;
import org.jeecg.modules.ocr.entity.OcrIdentifyCallbackLog; import org.jeecg.modules.ocr.entity.OcrIdentifyCallbackLog;
import org.jeecg.modules.ocr.entity.OcrIdentifyDetail; import org.jeecg.modules.ocr.entity.OcrIdentifyDetail;
@ -22,8 +21,8 @@ import org.jeecg.modules.ocr.utils.ArrayOUtils;
import org.jeecg.modules.ocr.utils.FileOUtils; import org.jeecg.modules.ocr.utils.FileOUtils;
import org.jeecg.modules.ocr.utils.ImageUtils; import org.jeecg.modules.ocr.utils.ImageUtils;
import org.jeecg.modules.ocr.utils.StrCharUtil; import org.jeecg.modules.ocr.utils.StrCharUtil;
import org.jeecg.modules.ocr.vo.OcrIdentifyVo; import org.jeecg.modules.ocr.dto.OcrIdentifyDTO;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import org.jeecg.modules.ocr.vo.SimulateChecksVO; import org.jeecg.modules.ocr.vo.SimulateChecksVO;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
@ -63,20 +62,20 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
IOcrIdentifyCallbackLogService ocrIdentifyCallbackLogService; IOcrIdentifyCallbackLogService ocrIdentifyCallbackLogService;
@Override @Override
public OcrIdentifyVo findById(String id) { public OcrIdentifyDTO findById(String id) {
OcrIdentifyVo ocrIdentifyVo = baseMapper.findById(id); OcrIdentifyDTO ocrIdentifyDTO = baseMapper.findById(id);
if (StringUtils.isNotBlank(ocrIdentifyVo.getSourceJson())) { if (StringUtils.isNotBlank(ocrIdentifyDTO.getSourceJson())) {
JSONArray jsonArray = JSONObject.parseArray(ocrIdentifyVo.getSourceJson()); JSONArray jsonArray = JSONObject.parseArray(ocrIdentifyDTO.getSourceJson());
List<JSONObject> jsonObjects = jsonArray.toJavaList(JSONObject.class); List<JSONObject> jsonObjects = jsonArray.toJavaList(JSONObject.class);
ocrIdentifyVo.setSourceJsonObjects(jsonObjects); ocrIdentifyDTO.setSourceJsonObjects(jsonObjects);
} }
//规则检查配置信息 //规则检查配置信息
String ruleCheck = ocrIdentifyVo.getRuleCheck(); String ruleCheck = ocrIdentifyDTO.getRuleCheck();
if (StringUtils.isNotBlank(ruleCheck)) { if (StringUtils.isNotBlank(ruleCheck)) {
OcrRuleCheckVo ocrRuleCheck = ocrRuleCheckService.findById(ocrIdentifyVo.getRuleCheck()); OcrRuleCheckDTO ocrRuleCheck = ocrRuleCheckService.findById(ocrIdentifyDTO.getRuleCheck());
ocrIdentifyVo.setOcrRuleCheckVo(ocrRuleCheck); ocrIdentifyDTO.setOcrRuleCheckVo(ocrRuleCheck);
} }
return ocrIdentifyVo; return ocrIdentifyDTO;
} }
@ -148,13 +147,13 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
} }
//=================== //===================
if (semanticResult != null) { if (semanticResult != null) {
OcrIdentifyVo ocrIdentifyVo = this.findById(identifyId); OcrIdentifyDTO ocrIdentifyDTO = this.findById(identifyId);
OcrRuleCheckVo ocrRuleCheckVo = ocrIdentifyVo.getOcrRuleCheckVo(); OcrRuleCheckDTO ocrRuleCheckVo = ocrIdentifyDTO.getOcrRuleCheckVo();
Map<String, CheckSemanticModel> checkSemanticModelMap = getCheckSemanticModelMap(ocrRuleCheckVo.getConfigRuleMap(), ocrRuleCheckVo.getFieldMap(), ocrIdentifyVo.getSourceJsonObjects()); Map<String, CheckSemanticModel> checkSemanticModelMap = getCheckSemanticModelMap(ocrRuleCheckVo.getConfigRuleMap(), ocrRuleCheckVo.getFieldMap(), ocrIdentifyDTO.getSourceJsonObjects());
String text = null;//ocr 识别的文本 String text = null;//ocr 识别的文本
Double probability = 0d; Double probability = 0d;
//用于数据结构化的对象 //用于数据结构化的对象
List<OcrResult> ocrResultList = new ArrayList<>(); List<OcrResultDTO> ocrResultDTOList = new ArrayList<>();
StringBuffer rMessage = new StringBuffer(); StringBuffer rMessage = new StringBuffer();
Map<String, Boolean> fieldRightMap = new LinkedHashMap<>();//存放 字段判断正确map Map<String, Boolean> fieldRightMap = new LinkedHashMap<>();//存放 字段判断正确map
//========================== //==========================
@ -190,16 +189,16 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
if (StringUtils.isBlank(text) || StringUtils.isBlank(inputText)) { if (StringUtils.isBlank(text) || StringUtils.isBlank(inputText)) {
//没识别值 //没识别值
mapPutIfTrue(fieldRightMap, field, true); mapPutIfTrue(fieldRightMap, field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数不判断", true,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数不判断", true,ruleInfo);
} else { } else {
double v = StrCharUtil.similarityRatio(inputText, text); double v = StrCharUtil.similarityRatio(inputText, text);
if (text.contains(inputText)) { if (text.contains(inputText)) {
mapPutIfTrue(fieldRightMap, field, true); mapPutIfTrue(fieldRightMap, field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,"101"); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,"101");
} else { } else {
rMessage.append(value.getFieldName() + "参数不匹配<br>"); rMessage.append(value.getFieldName() + "参数不匹配<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo);
} }
} }
} else { } else {
@ -207,37 +206,37 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
//ocr识别参数为空不通过 //ocr识别参数为空不通过
rMessage.append(value.getFieldName() + "参数未获取到结果<br>"); rMessage.append(value.getFieldName() + "参数未获取到结果<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo);
} else if (StringUtils.isBlank(inputText)) { } else if (StringUtils.isBlank(inputText)) {
//没有输入值. //没有输入值.
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "没有输入值不做匹配", true,null); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "没有输入值不做匹配", true,null);
} else if ("0".equals(ruleInfo)) { } else if ("0".equals(ruleInfo)) {
//不必校验,有识别到就行,通过 //不必校验,有识别到就行,通过
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true,ruleInfo);
} else if (Double.valueOf(ruleInfo) >= 1 && Double.valueOf(ruleInfo) <= 99) { } else if (Double.valueOf(ruleInfo) >= 1 && Double.valueOf(ruleInfo) <= 99) {
//在1~99之间根据精准度匹配 //在1~99之间根据精准度匹配
double v = StrCharUtil.similarityRatio(inputText, text); double v = StrCharUtil.similarityRatio(inputText, text);
if (v >= Double.valueOf(ruleInfo)) { if (v >= Double.valueOf(ruleInfo)) {
//准确度 可靠 //准确度 可靠
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo);
} else { } else {
rMessage.append(value.getFieldName() + "参数不匹配<br>"); rMessage.append(value.getFieldName() + "参数不匹配<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo);
} }
} else if ("100".equals(ruleInfo)) { } else if ("100".equals(ruleInfo)) {
//必定验证参数,必须有值且匹配 //必定验证参数,必须有值且匹配
double v = StrCharUtil.similarityRatio(inputText, text); double v = StrCharUtil.similarityRatio(inputText, text);
if (text.equals(inputText)) { if (text.equals(inputText)) {
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo);
} else { } else {
rMessage.append(value.getFieldName() + "参数不匹配<br>"); rMessage.append(value.getFieldName() + "参数不匹配<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo);
} }
} }
} }
@ -245,11 +244,11 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
} else { } else {
rMessage.append(value.getFieldName() + "参数未获取到结果<br>"); rMessage.append(value.getFieldName() + "参数未获取到结果<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo);
} }
} else { } else {
rMessage.append(value.getFieldName() + "参数未获取到结果<br>"); rMessage.append(value.getFieldName() + "参数未获取到结果<br>");
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, 0d, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, 0d, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo);
fieldRightMap.put(field, false); fieldRightMap.put(field, false);
} }
} }
@ -268,7 +267,7 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
ocrIdentifyDetail.setStatus("0");//有失败的 ocrIdentifyDetail.setStatus("0");//有失败的
ocrIdentifyDetail.setMessage(rMessage.toString()); ocrIdentifyDetail.setMessage(rMessage.toString());
} }
ocrIdentifyDetail.setDataStructured(JSONArray.toJSONString(ocrResultList));//数据结构化 ocrIdentifyDetail.setDataStructured(JSONArray.toJSONString(ocrResultDTOList));//数据结构化
ocrIdentifyDetailService.updateById(ocrIdentifyDetail); ocrIdentifyDetailService.updateById(ocrIdentifyDetail);
} }
//========================= //=========================
@ -316,14 +315,14 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
@Async @Async
public void updateOcrIdentifyStatus(String id, String status) { public void updateOcrIdentifyStatus(String id, String status) {
//4.更新主任务状态 //4.更新主任务状态
OcrIdentifyVo ocrIdentifyVo = this.findById(id); OcrIdentifyDTO ocrIdentifyDTO = this.findById(id);
OcrRuleCheckVo ocrRuleCheckVo = ocrIdentifyVo.getOcrRuleCheckVo(); OcrRuleCheckDTO ocrRuleCheckVo = ocrIdentifyDTO.getOcrRuleCheckVo();
LambdaUpdateWrapper<OcrIdentify> updateWrapper = new LambdaUpdateWrapper<OcrIdentify>(); LambdaUpdateWrapper<OcrIdentify> updateWrapper = new LambdaUpdateWrapper<OcrIdentify>();
updateWrapper.eq(OcrIdentify::getId, id); updateWrapper.eq(OcrIdentify::getId, id);
List<OcrIdentifyDetail> identifyDetailList = ocrIdentifyDetailService.listByIdentifyId(id); List<OcrIdentifyDetail> identifyDetailList = ocrIdentifyDetailService.listByIdentifyId(id);
if (true) { if (true) {
if (identifyDetailList != null && identifyDetailList.size() > 0) { if (identifyDetailList != null && identifyDetailList.size() > 0) {
Map<String, OcrResult2> fieldRightMap = new LinkedHashMap<>(); Map<String, OcrResultDTO> fieldRightMap = new LinkedHashMap<>();
String tag = null; String tag = null;
boolean ruleValidation = false; boolean ruleValidation = false;
/////明细中,如果有字段成功的,则会覆盖其他明细的匹配失败的情况,如果全都是失败的,会获取第一次失败的. /////明细中,如果有字段成功的,则会覆盖其他明细的匹配失败的情况,如果全都是失败的,会获取第一次失败的.
@ -331,11 +330,11 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
String dataStructured = ocrIdentifyDetail.getDataStructured(); String dataStructured = ocrIdentifyDetail.getDataStructured();
if (org.apache.commons.lang.StringUtils.isNotBlank(dataStructured)) { if (org.apache.commons.lang.StringUtils.isNotBlank(dataStructured)) {
JSONArray jsonArray = JSONObject.parseArray(dataStructured); JSONArray jsonArray = JSONObject.parseArray(dataStructured);
List<OcrResult2> resultList = jsonArray.toJavaList(OcrResult2.class); List<OcrResultDTO> resultList = jsonArray.toJavaList(OcrResultDTO.class);
for (OcrResult2 result : resultList) { for (OcrResultDTO result : resultList) {
tag = result.getTag(); tag = result.getTag();
ruleValidation = result.getRuleValidation(); ruleValidation = result.getRuleValidation();
OcrResult2 lastResult = fieldRightMap.get(tag); OcrResultDTO lastResult = fieldRightMap.get(tag);
if (ruleValidation) { if (ruleValidation) {
fieldRightMap.put(tag, result); fieldRightMap.put(tag, result);
} else if (lastResult == null || !lastResult.getRuleValidation()) { } else if (lastResult == null || !lastResult.getRuleValidation()) {
@ -347,8 +346,8 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
} }
} }
//如果明细合并一起,都是成功,则主任务 匹配成功, 否则匹配失败 //如果明细合并一起,都是成功,则主任务 匹配成功, 否则匹配失败
List<OcrResult2> errorResults = fieldRightMap.values().stream().filter(f -> !f.getRuleValidation()).collect(Collectors.toList()); List<OcrResultDTO> errorResults = fieldRightMap.values().stream().filter(f -> !f.getRuleValidation()).collect(Collectors.toList());
List<OcrResult2> ocrResults = fieldRightMap.values().stream().collect(Collectors.toList()); List<OcrResultDTO> ocrResultDTOS = fieldRightMap.values().stream().collect(Collectors.toList());
//TODO 后续考虑需要修正复杂程度. 支持 & + || 一起 //TODO 后续考虑需要修正复杂程度. 支持 & + || 一起
@ -362,7 +361,7 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
//匹配成功. //匹配成功.
updateWrapper.set(OcrIdentify::getTaskResult, 1); updateWrapper.set(OcrIdentify::getTaskResult, 1);
} }
String taskResultInfo = JSONArray.toJSONString(ocrResults); String taskResultInfo = JSONArray.toJSONString(ocrResultDTOS);
updateWrapper.set(OcrIdentify::getStatus, "1"); updateWrapper.set(OcrIdentify::getStatus, "1");
updateWrapper.set(OcrIdentify::getEndTime, new Date()); updateWrapper.set(OcrIdentify::getEndTime, new Date());
updateWrapper.set(OcrIdentify::getTaskResultInfo, taskResultInfo); updateWrapper.set(OcrIdentify::getTaskResultInfo, taskResultInfo);
@ -374,8 +373,8 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
@Override @Override
@Async @Async
public void updateTaskResultInfo(String id) { public void updateTaskResultInfo(String id) {
OcrIdentifyVo ocrIdentifyVo = this.findById(id); OcrIdentifyDTO ocrIdentifyDTO = this.findById(id);
List<OcrIdentifyDetail> identifyDetails = ocrIdentifyDetailService.listByIdentifyId(ocrIdentifyVo.getId()); List<OcrIdentifyDetail> identifyDetails = ocrIdentifyDetailService.listByIdentifyId(ocrIdentifyDTO.getId());
/*for (OcrIdentifyDetail identifyDetail : identifyDetails) { /*for (OcrIdentifyDetail identifyDetail : identifyDetails) {
JSONObject semanticResult = JSONObject.parseObject(identifyDetail.getSemanticResult()); JSONObject semanticResult = JSONObject.parseObject(identifyDetail.getSemanticResult());
String imgPath = identifyDetail.getImageUrl(); String imgPath = identifyDetail.getImageUrl();
@ -507,7 +506,7 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
} }
}*/ }*/
//=======规则检查配置 //=======规则检查配置
OcrRuleCheckVo ocrRuleCheckVo = ocrIdentifyVo.getOcrRuleCheckVo(); OcrRuleCheckDTO ocrRuleCheckVo = ocrIdentifyDTO.getOcrRuleCheckVo();
Map<String, Map<String, String>> configRuleTypeMap = ocrRuleCheckVo.getConfigRuleTypeMap(); Map<String, Map<String, String>> configRuleTypeMap = ocrRuleCheckVo.getConfigRuleTypeMap();
//=================== //===================
//4.更新主任务状态 //4.更新主任务状态
@ -564,8 +563,25 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
} }
public static void main(String[] args) { public static void main(String[] args) {
int stringPercent = getStringPercent("张三", "张三脏"); List<OcrResultDTO> list=new ArrayList<>();
System.out.println(stringPercent); OcrResultDTO result = new OcrResultDTO();
result.setTextRate(10d);
list.add(result);
OcrResultDTO result2 = new OcrResultDTO();
result2.setTextRate(44d);
list.add(result2);
OcrResultDTO result3 = new OcrResultDTO();
result3.setTextRate(12d);
list.add(result3);
//获取最小
Double min = list.stream().sorted((a, b) -> a.getTextRate().compareTo(b.getTextRate())).findFirst().get().getTextRate();
//获取最大
Double max = list.stream().sorted((a, b) -> b.getTextRate().compareTo(a.getTextRate())).findFirst().get().getTextRate();
//获取最大
//ocrResultList.stream().sorted((a,b)->a.getTextRate()-b.getTextRate()).findAny().get();
//int stringPercent = getStringPercent("张三", "张三脏");
//System.out.println(stringPercent);
} }
private static int getStringPercent(String text, String inputText) { private static int getStringPercent(String text, String inputText) {
@ -685,7 +701,7 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
/** /**
* *
* @param ocrResultList * @param ocrResultDTOList
* @param fieldName * @param fieldName
* @param field * @param field
* @param inputText * @param inputText
@ -697,17 +713,17 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
* @param d * @param d
* @param ruleValidationValue * @param ruleValidationValue
*/ */
public static void ocrResultAdd(List<OcrResult> ocrResultList, String fieldName, String field, String inputText, String ocrText, Double ocrPrecisionRate, String imgPath, String failureReason, Boolean ruleValidation, Double d,String ruleValidationValue) { public static void ocrResultAdd(List<OcrResultDTO> ocrResultDTOList, String fieldName, String field, String inputText, String ocrText, Double ocrPrecisionRate, String imgPath, String failureReason, Boolean ruleValidation, Double d, String ruleValidationValue) {
OcrResult ocrResult = new OcrResult(); OcrResultDTO ocrResultDTO = new OcrResultDTO();
ocrResult.setTag(field); ocrResultDTO.setTag(field);
ocrResult.setTagName(fieldName); ocrResultDTO.setTagName(fieldName);
ocrResult.setOcrText(ocrText); ocrResultDTO.setOcrText(ocrText);
ocrResult.setInputText(inputText); ocrResultDTO.setInputText(inputText);
ocrResult.setOcrPrecisionRate(ocrPrecisionRate == null ? 0d : ocrPrecisionRate); ocrResultDTO.setOcrPrecisionRate(ocrPrecisionRate == null ? 0d : ocrPrecisionRate);
if (d == null) { if (d == null) {
ocrResult.setTextRate(0d); ocrResultDTO.setTextRate(0d);
} else { } else {
ocrResult.setTextRate(new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); ocrResultDTO.setTextRate(new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue());
} }
System.out.println("-----------------"); System.out.println("-----------------");
System.out.println(failureReason); System.out.println(failureReason);
@ -717,32 +733,33 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
sourceImage.setPath(imgPath); sourceImage.setPath(imgPath);
int i = imgPath.lastIndexOf("/"); int i = imgPath.lastIndexOf("/");
sourceImage.setFileName(imgPath.substring(i + 1, imgPath.length())); sourceImage.setFileName(imgPath.substring(i + 1, imgPath.length()));
ocrResult.setSourceImage(sourceImage); sourceImage.setPreviewUrl(OcrConstant.FILE_REVIEW_URL_PREFIX+imgPath);
ocrResultDTO.setSourceImage(sourceImage);
} }
ocrResult.setFailureReason(failureReason); ocrResultDTO.setFailureReason(failureReason);
if (ocrResultList == null) { if (ocrResultDTOList == null) {
ocrResultList = new ArrayList<>(); ocrResultDTOList = new ArrayList<>();
} }
ocrResult.setRuleValidation(ruleValidation); ocrResultDTO.setRuleValidation(ruleValidation);
if ("0".equals(ruleValidationValue)) { if ("0".equals(ruleValidationValue)) {
ocrResult.setRuleValidationText("有名称就算过"); ocrResultDTO.setRuleValidationText("有名称就算过");
}else if(Double.valueOf(ruleValidationValue)>0 &&Double.valueOf(ruleValidationValue)<=99){ }else if(Double.valueOf(ruleValidationValue)>0 &&Double.valueOf(ruleValidationValue)<=99){
ocrResult.setRuleValidationText("匹配度>="+ruleValidationValue); ocrResultDTO.setRuleValidationText("匹配度>="+ruleValidationValue);
}else if("100".equals(ruleValidation)){ }else if("100".equals(ruleValidation)){
ocrResult.setRuleValidationText("名称必须与参数完全一致"); ocrResultDTO.setRuleValidationText("名称必须与参数完全一致");
}else if("101".equals(ruleValidationValue)){ }else if("101".equals(ruleValidationValue)){
ocrResult.setRuleValidationText("有值必须匹配无值算过"); ocrResultDTO.setRuleValidationText("有值必须匹配无值算过");
}else if("isrule=1".equals(ruleValidationValue)){ }else if("isrule=1".equals(ruleValidationValue)){
ocrResult.setRuleValidationText("依据输入参数必须一致判断"); ocrResultDTO.setRuleValidationText("依据输入参数必须一致判断");
} }
ocrResultList.add(ocrResult); ocrResultDTOList.add(ocrResultDTO);
} }
/** /**
* OcrResult, ocrResultList * OcrResult, ocrResultList
* *
* @param ocrResultList * @param ocrResultDTOList
* @param field * @param field
* @param inputText * @param inputText
* @param ocrText * @param ocrText
@ -750,11 +767,11 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
* @param imgPath * @param imgPath
* @param failureReason * @param failureReason
*/ */
public static void ocrResultAdd(List<OcrResult> ocrResultList, String fieldName, String field, String inputText, String ocrText, Double ocrPrecisionRate, String imgPath, String failureReason, Boolean ruleValidation,String ruleValidationValue) { public static void ocrResultAdd(List<OcrResultDTO> ocrResultDTOList, String fieldName, String field, String inputText, String ocrText, Double ocrPrecisionRate, String imgPath, String failureReason, Boolean ruleValidation, String ruleValidationValue) {
if (ruleValidation) { if (ruleValidation) {
ocrResultAdd(ocrResultList, fieldName, field, inputText, ocrText, ocrPrecisionRate, imgPath, failureReason, ruleValidation, 100d,ruleValidationValue); ocrResultAdd(ocrResultDTOList, fieldName, field, inputText, ocrText, ocrPrecisionRate, imgPath, failureReason, ruleValidation, 100d,ruleValidationValue);
} else { } else {
ocrResultAdd(ocrResultList, fieldName, field, inputText, ocrText, ocrPrecisionRate, imgPath, failureReason, ruleValidation, 0d,ruleValidationValue); ocrResultAdd(ocrResultDTOList, fieldName, field, inputText, ocrText, ocrPrecisionRate, imgPath, failureReason, ruleValidation, 0d,ruleValidationValue);
} }
} }
@ -912,10 +929,13 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
} }
@Override @Override
public void simulateChecks(SimulateChecksVO simulateChecksVO) { public JSONObject simulateChecks(SimulateChecksVO simulateChecksVO) {
List<OcrIdentifyDetail> identifyDetailList = ocrIdentifyDetailService.listByIds(simulateChecksVO.getIdentifyDetailIdList()); List<OcrIdentifyDetail> identifyDetailList = ocrIdentifyDetailService.listByIds(simulateChecksVO.getIdentifyDetailIdList());
//遍历任务,做匹配 //遍历任务,做匹配
int i1=1; int i1=1;
//用于数据结构化的对象
List<OcrResultDTO> ocrResultDTOList = new ArrayList<>();
Date startDataCheckTime = new Date();
for (OcrIdentifyDetail ocrIdentifyDetail : identifyDetailList) { for (OcrIdentifyDetail ocrIdentifyDetail : identifyDetailList) {
if (i1==1) { if (i1==1) {
ocrIdentifyDetail.setSemanticResult("{\"ocr_res\":[[[[1282.0,1576.0],[2764.0,1594.0],[2763.0,1671.0],[1281.0,1653.0]],[\"北京市朝阳区三里屯社区卫生服务中心\",0.9670220613479614]],[[[132.0,2244.0],[1062.0,2214.0],[1069.0,2455.0],[140.0,2485.0]],[\"儿科专家门诊\",0.984556257724762]],[[[117.0,2496.0],[1036.0,2473.0],[1038.0,2577.0],[119.0,2600.0]],[\"Pediatric srecialistclinic\",0.8756008148193359]]],\"其他\":[{\"area\":[[117.0,2496.0],[1036.0,2473.0],[1038.0,2577.0],[119.0,2600.0]],\"end\":26,\"ocrText\":\"Pediatric srecialistclinic\",\"probability\":0.9925054592526585,\"start\":0,\"text\":\"Pediatric srecialistclinic\"}],\"医院名称\":[{\"area\":[[1282.0,1576.0],[2764.0,1594.0],[2763.0,1671.0],[1281.0,1653.0]],\"end\":17,\"ocrText\":\"北京市朝阳区三里屯社区卫生服务中心\",\"probability\":0.9681764264135495,\"start\":0,\"text\":\"北京市朝阳区三里屯社区卫生服务中心\"},{\"area\":[[1282.0,1576.0],[2764.0,1594.0],[2763.0,1671.0],[1281.0,1653.0]],\"end\":17,\"ocrText\":\"北京市朝阳区农光里医院\",\"probability\":0.95,\"start\":0,\"text\":\"北京市朝阳区农光里医院\"}],\"姓名\":[],\"时间\":[],\"科室\":[{\"area\":[[132.0,2244.0],[1062.0,2214.0],[1069.0,2455.0],[140.0,2485.0]],\"end\":6,\"ocrText\":\"儿科专家门诊\",\"probability\":0.9836859327676066,\"start\":0,\"text\":\"儿科专家门诊\"}]}"); ocrIdentifyDetail.setSemanticResult("{\"ocr_res\":[[[[1282.0,1576.0],[2764.0,1594.0],[2763.0,1671.0],[1281.0,1653.0]],[\"北京市朝阳区三里屯社区卫生服务中心\",0.9670220613479614]],[[[132.0,2244.0],[1062.0,2214.0],[1069.0,2455.0],[140.0,2485.0]],[\"儿科专家门诊\",0.984556257724762]],[[[117.0,2496.0],[1036.0,2473.0],[1038.0,2577.0],[119.0,2600.0]],[\"Pediatric srecialistclinic\",0.8756008148193359]]],\"其他\":[{\"area\":[[117.0,2496.0],[1036.0,2473.0],[1038.0,2577.0],[119.0,2600.0]],\"end\":26,\"ocrText\":\"Pediatric srecialistclinic\",\"probability\":0.9925054592526585,\"start\":0,\"text\":\"Pediatric srecialistclinic\"}],\"医院名称\":[{\"area\":[[1282.0,1576.0],[2764.0,1594.0],[2763.0,1671.0],[1281.0,1653.0]],\"end\":17,\"ocrText\":\"北京市朝阳区三里屯社区卫生服务中心\",\"probability\":0.9681764264135495,\"start\":0,\"text\":\"北京市朝阳区三里屯社区卫生服务中心\"},{\"area\":[[1282.0,1576.0],[2764.0,1594.0],[2763.0,1671.0],[1281.0,1653.0]],\"end\":17,\"ocrText\":\"北京市朝阳区农光里医院\",\"probability\":0.95,\"start\":0,\"text\":\"北京市朝阳区农光里医院\"}],\"姓名\":[],\"时间\":[],\"科室\":[{\"area\":[[132.0,2244.0],[1062.0,2214.0],[1069.0,2455.0],[140.0,2485.0]],\"end\":6,\"ocrText\":\"儿科专家门诊\",\"probability\":0.9836859327676066,\"start\":0,\"text\":\"儿科专家门诊\"}]}");
@ -942,12 +962,10 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
sourceJson.add(JSONObject.parseObject(String.format("{\"tag\":\"time\", \"inputText\":\"%s\"}", time))); sourceJson.add(JSONObject.parseObject(String.format("{\"tag\":\"time\", \"inputText\":\"%s\"}", time)));
} }
JSONObject semanticResult = JSONObject.parseObject(semanticResultJson); JSONObject semanticResult = JSONObject.parseObject(semanticResultJson);
OcrRuleCheckVo ocrRuleCheckVo = ocrRuleCheckService.findById(simulateChecksVO.getRuleCheckId()); OcrRuleCheckDTO ocrRuleCheckVo = ocrRuleCheckService.findById(simulateChecksVO.getRuleCheckId());
Map<String, CheckSemanticModel> checkSemanticModelMap = getCheckSemanticModelMap(ocrRuleCheckVo.getConfigRuleMap(), ocrRuleCheckVo.getFieldMap(), sourceJson); Map<String, CheckSemanticModel> checkSemanticModelMap = getCheckSemanticModelMap(ocrRuleCheckVo.getConfigRuleMap(), ocrRuleCheckVo.getFieldMap(), sourceJson);
String text = null;//ocr 识别的文本 String text = null;//ocr 识别的文本
Double probability = 0d; Double probability = 0d;
//用于数据结构化的对象
List<OcrResult> ocrResultList = new ArrayList<>();
StringBuffer rMessage = new StringBuffer(); StringBuffer rMessage = new StringBuffer();
Map<String, Boolean> fieldRightMap = new LinkedHashMap<>();//存放 字段判断正确map Map<String, Boolean> fieldRightMap = new LinkedHashMap<>();//存放 字段判断正确map
//========================== //==========================
@ -982,16 +1000,16 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
if (StringUtils.isBlank(text) || StringUtils.isBlank(inputText)) { if (StringUtils.isBlank(text) || StringUtils.isBlank(inputText)) {
//没识别值 //没识别值
mapPutIfTrue(fieldRightMap, field, true); mapPutIfTrue(fieldRightMap, field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数不判断", true,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数不判断", true,ruleInfo);
} else { } else {
double v = StrCharUtil.similarityRatio(inputText, text); double v = StrCharUtil.similarityRatio(inputText, text);
if (text.contains(inputText)) { if (text.contains(inputText)) {
mapPutIfTrue(fieldRightMap, field, true); mapPutIfTrue(fieldRightMap, field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,"101"); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,"101");
} else { } else {
rMessage.append(value.getFieldName() + "参数不匹配<br>"); rMessage.append(value.getFieldName() + "参数不匹配<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo);
} }
} }
} else { } else {
@ -999,37 +1017,37 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
//ocr识别参数为空不通过 //ocr识别参数为空不通过
rMessage.append(value.getFieldName() + "参数未获取到结果<br>"); rMessage.append(value.getFieldName() + "参数未获取到结果<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo);
} else if (StringUtils.isBlank(inputText)) { } else if (StringUtils.isBlank(inputText)) {
//没有输入值. //没有输入值.
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "没有输入值不做匹配", true,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "没有输入值不做匹配", true,ruleInfo);
} else if ("0".equals(ruleInfo)) { } else if ("0".equals(ruleInfo)) {
//不必校验,有识别到就行,通过 //不必校验,有识别到就行,通过
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true,ruleInfo);
} else if (Double.valueOf(ruleInfo) >= 1 && Double.valueOf(ruleInfo) <= 99) { } else if (Double.valueOf(ruleInfo) >= 1 && Double.valueOf(ruleInfo) <= 99) {
//在1~99之间根据精准度匹配 //在1~99之间根据精准度匹配
double v = StrCharUtil.similarityRatio(inputText, text); double v = StrCharUtil.similarityRatio(inputText, text);
if (v >= Double.valueOf(ruleInfo)) { if (v >= Double.valueOf(ruleInfo)) {
//准确度 可靠 //准确度 可靠
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo);
} else { } else {
rMessage.append(value.getFieldName() + "参数不匹配<br>"); rMessage.append(value.getFieldName() + "参数不匹配<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo);
} }
} else if ("100".equals(ruleInfo)) { } else if ("100".equals(ruleInfo)) {
//必定验证参数,必须有值且匹配 //必定验证参数,必须有值且匹配
double v = StrCharUtil.similarityRatio(inputText, text); double v = StrCharUtil.similarityRatio(inputText, text);
if (text.equals(inputText)) { if (text.equals(inputText)) {
fieldRightMap.put(field, true); fieldRightMap.put(field, true);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, "", true, v,ruleInfo);
} else { } else {
rMessage.append(value.getFieldName() + "参数不匹配<br>"); rMessage.append(value.getFieldName() + "参数不匹配<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, text, probability, imgPath, value.getFieldName() + "参数不匹配", false, v,ruleInfo);
} }
} }
} }
@ -1037,25 +1055,35 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
} else { } else {
rMessage.append(value.getFieldName() + "参数未获取到结果<br>"); rMessage.append(value.getFieldName() + "参数未获取到结果<br>");
mapPutIfTrue(fieldRightMap, field, false); mapPutIfTrue(fieldRightMap, field, false);
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, probability, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo);
} }
} else { } else {
rMessage.append(value.getFieldName() + "参数未获取到结果<br>"); rMessage.append(value.getFieldName() + "参数未获取到结果<br>");
ocrResultAdd(ocrResultList, value.getFieldName(), field, inputText, null, 0d, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo); ocrResultAdd(ocrResultDTOList, value.getFieldName(), field, inputText, null, 0d, imgPath, value.getFieldName() + "参数未获取到结果", false,ruleInfo);
fieldRightMap.put(field, false); fieldRightMap.put(field, false);
} }
} }
System.out.println("----------------------"); System.out.println("----------------------");
for (OcrResult result : ocrResultList) { for (OcrResultDTO result : ocrResultDTOList) {
System.out.println(result.toString()); System.out.println(result.toString());
} }
//获取最小 }
ocrResultList.stream().sorted((a,b)->a.getTextRate().compareTo(b.getTextRate())).findFirst().get(); Date overDataCheckTime = new Date();
JSONObject responseBody=new JSONObject();
//获取最小
Double min = ocrResultDTOList.stream().sorted((a, b) -> a.getTextRate().compareTo(b.getTextRate())).findFirst().get().getTextRate();
//获取最大 //获取最大
//ocrResultList.stream().sorted((a,b)->a.getTextRate()-b.getTextRate()).findAny().get(); Double max = ocrResultDTOList.stream().sorted((a, b) -> b.getTextRate().compareTo(a.getTextRate())).findFirst().get().getTextRate();
//.sorted(OcrResult::getTextRate).findFirst(); //OCR和NlU执行时间总和
} double ocrAndNluTimeSum = identifyDetailList.stream().mapToDouble(i -> (i.getOcrTime() == null ? 0 : i.getOcrTime()) + (i.getNluTime() == null ? 0 : i.getNluTime())).sum();
//执行时间(毫秒)
double executionTime = (ocrAndNluTimeSum * 1000) + overDataCheckTime.getTime() - startDataCheckTime.getTime();
responseBody.put("min",min);
responseBody.put("max",max);
responseBody.put("executionTime",executionTime);
responseBody.put("detailList", ocrResultDTOList);
return responseBody;
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@ -1215,4 +1243,5 @@ public class OcrIdentifyServiceImpl extends ServiceImpl<OcrIdentifyMapper, OcrId
}*/ }*/
return taskList; return taskList;
} }
} }

@ -9,12 +9,11 @@ import org.jeecg.modules.ocr.entity.OcrMetadataConfig;
import org.jeecg.modules.ocr.entity.OcrMetadataConfigDetail; import org.jeecg.modules.ocr.entity.OcrMetadataConfigDetail;
import org.jeecg.modules.ocr.entity.OcrTaskType; import org.jeecg.modules.ocr.entity.OcrTaskType;
import org.jeecg.modules.ocr.mapper.OcrMetadataConfigMapper; import org.jeecg.modules.ocr.mapper.OcrMetadataConfigMapper;
import org.jeecg.modules.ocr.mapper.OcrTaskTypeMapper; import org.jeecg.modules.ocr.vo.SaveOcrMetadataConfigVO;
import org.jeecg.modules.ocr.model.OcrMetadataConfigSaveModel;
import org.jeecg.modules.ocr.service.IOcrMetadataConfigDetailService; import org.jeecg.modules.ocr.service.IOcrMetadataConfigDetailService;
import org.jeecg.modules.ocr.service.IOcrMetadataConfigService; import org.jeecg.modules.ocr.service.IOcrMetadataConfigService;
import org.jeecg.modules.ocr.service.IOcrTaskTypeService; import org.jeecg.modules.ocr.service.IOcrTaskTypeService;
import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.jeecg.modules.ocr.dto.OcrMetadataConfigDTO;
import org.jeecg.modules.system.service.ISysDictItemService; import org.jeecg.modules.system.service.ISysDictItemService;
import org.jeecg.modules.system.service.ISysDictService; import org.jeecg.modules.system.service.ISysDictService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -54,30 +53,30 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
} }
@Override @Override
public void saveModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel) { public void saveModel(SaveOcrMetadataConfigVO saveOcrMetadataConfigVO) {
saveModelBatch(Arrays.asList(ocrMetadataConfigSaveModel)); saveModelBatch(Arrays.asList(saveOcrMetadataConfigVO));
/*return ocrMetadataConfig;*/ /*return ocrMetadataConfig;*/
} }
@Override @Override
@Transactional @Transactional
public void saveModelBatch(List<OcrMetadataConfigSaveModel> saveModelList) { public void saveModelBatch(List<SaveOcrMetadataConfigVO> saveModelList) {
for (OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel : saveModelList) { for (SaveOcrMetadataConfigVO saveOcrMetadataConfigVO : saveModelList) {
OcrMetadataConfig ocrMetadataConfig=new OcrMetadataConfig(); OcrMetadataConfig ocrMetadataConfig=new OcrMetadataConfig();
ocrMetadataConfig.setConfigName(ocrMetadataConfigSaveModel.getConfigName()); ocrMetadataConfig.setConfigName(saveOcrMetadataConfigVO.getConfigName());
Boolean existsFlag=existsByConfigName(ocrMetadataConfigSaveModel.getConfigName(),ocrMetadataConfigSaveModel.getId()); Boolean existsFlag=existsByConfigName(saveOcrMetadataConfigVO.getConfigName(), saveOcrMetadataConfigVO.getId());
AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", ocrMetadataConfigSaveModel.getConfigName())); AssertUtils.notTrue(existsFlag, String.format("[配置名称]-%s 已存在", saveOcrMetadataConfigVO.getConfigName()));
//判断 元数据 所选的 任务类型 是否存在 //判断 元数据 所选的 任务类型 是否存在
if (StringUtils.isBlank(ocrMetadataConfigSaveModel.getTaskType())&& StringUtils.isNotBlank(ocrMetadataConfigSaveModel.getTaskTypeName())) { if (StringUtils.isBlank(saveOcrMetadataConfigVO.getTaskType())&& StringUtils.isNotBlank(saveOcrMetadataConfigVO.getTaskTypeName())) {
OcrTaskType ocrTaskType = ocrTaskTypeService.saveTaskType(ocrMetadataConfigSaveModel.getTaskTypeName()); OcrTaskType ocrTaskType = ocrTaskTypeService.saveTaskType(saveOcrMetadataConfigVO.getTaskTypeName());
ocrMetadataConfig.setTaskType(ocrTaskType.getId()); ocrMetadataConfig.setTaskType(ocrTaskType.getId());
}else{ }else{
ocrMetadataConfig.setTaskType(ocrMetadataConfigSaveModel.getTaskType()); ocrMetadataConfig.setTaskType(saveOcrMetadataConfigVO.getTaskType());
} }
this.save(ocrMetadataConfig); this.save(ocrMetadataConfig);
List<OcrMetadataConfigDetail> ocrMetadataConfigDetailList = ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList(); List<OcrMetadataConfigDetail> ocrMetadataConfigDetailList = saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList();
if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){ if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){
//判断重复字段名 //判断重复字段名
Map<String, Long> countMap = ocrMetadataConfigDetailList.stream().map(o->o.getFieldName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); Map<String, Long> countMap = ocrMetadataConfigDetailList.stream().map(o->o.getFieldName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
@ -86,7 +85,7 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
String fieldsName = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.joining(",")); String fieldsName = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.joining(","));
AssertUtils.isEmpty(fieldsName,String.format("字段名[%s]-重复了",fieldsName)); AssertUtils.isEmpty(fieldsName,String.format("字段名[%s]-重复了",fieldsName));
} }
for (OcrMetadataConfigDetail detail : ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList()) { for (OcrMetadataConfigDetail detail : saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList()) {
detail.setMetadataConfigId(ocrMetadataConfig.getId()); detail.setMetadataConfigId(ocrMetadataConfig.getId());
ocrMetadataConfigDetailService.saveOrUpdate(detail); ocrMetadataConfigDetailService.saveOrUpdate(detail);
} }
@ -95,20 +94,20 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
} }
@Override @Override
public Map<String, OcrMetadataConfigVo> listToMap(List<String> idList) { public Map<String, OcrMetadataConfigDTO> listToMap(List<String> idList) {
List<OcrMetadataConfigVo> metadataConfigVoList =baseMapper.allList(idList!=null&&idList.size()>0?idList:null); List<OcrMetadataConfigDTO> metadataConfigVoList =baseMapper.allList(idList!=null&&idList.size()>0?idList:null);
Map<String, OcrMetadataConfigVo> metadataConfigVoMap = metadataConfigVoList.stream().collect(Collectors.toMap(OcrMetadataConfigVo::getId, o -> o)); Map<String, OcrMetadataConfigDTO> metadataConfigVoMap = metadataConfigVoList.stream().collect(Collectors.toMap(OcrMetadataConfigDTO::getId, o -> o));
return metadataConfigVoMap; return metadataConfigVoMap;
} }
@Override @Override
public OcrMetadataConfig updateModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel) { public OcrMetadataConfig updateModel(SaveOcrMetadataConfigVO saveOcrMetadataConfigVO) {
AssertUtils.notEmpty(ocrMetadataConfigSaveModel.getId(),"[id]不可为空"); AssertUtils.notEmpty(saveOcrMetadataConfigVO.getId(),"[id]不可为空");
OcrMetadataConfig ocrMetadataConfig = this.getById(ocrMetadataConfigSaveModel.getId()); OcrMetadataConfig ocrMetadataConfig = this.getById(saveOcrMetadataConfigVO.getId());
ocrMetadataConfig.setConfigName(ocrMetadataConfigSaveModel.getConfigName()); ocrMetadataConfig.setConfigName(saveOcrMetadataConfigVO.getConfigName());
this.updateById(ocrMetadataConfig); this.updateById(ocrMetadataConfig);
List<OcrMetadataConfigDetail> ocrMetadataConfigDetailList = ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList(); List<OcrMetadataConfigDetail> ocrMetadataConfigDetailList = saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList();
if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){ if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){
//判断重复字段名 //判断重复字段名
@ -118,7 +117,7 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
String fieldsName = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.joining(",")); String fieldsName = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.joining(","));
AssertUtils.isEmpty(fieldsName,String.format("字段名[%s]-重复了",fieldsName)); AssertUtils.isEmpty(fieldsName,String.format("字段名[%s]-重复了",fieldsName));
} }
for (OcrMetadataConfigDetail detail : ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList()) { for (OcrMetadataConfigDetail detail : saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList()) {
detail.setMetadataConfigId(ocrMetadataConfig.getId()); detail.setMetadataConfigId(ocrMetadataConfig.getId());
ocrMetadataConfigDetailService.saveOrUpdate(detail); ocrMetadataConfigDetailService.saveOrUpdate(detail);
} }
@ -126,11 +125,11 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
//删除旧明细 //删除旧明细
List<String> notRemoveIdList = new ArrayList<>(); List<String> notRemoveIdList = new ArrayList<>();
if (ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList().size()>0) { if (saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList().size()>0) {
notRemoveIdList = ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList().stream().map(o -> o.getId()).collect(Collectors.toList()); notRemoveIdList = saveOcrMetadataConfigVO.getOcrMetadataConfigDetailList().stream().map(o -> o.getId()).collect(Collectors.toList());
} }
LambdaQueryWrapper<OcrMetadataConfigDetail> removeQueryWrapper = new LambdaQueryWrapper<OcrMetadataConfigDetail>(); LambdaQueryWrapper<OcrMetadataConfigDetail> removeQueryWrapper = new LambdaQueryWrapper<OcrMetadataConfigDetail>();
removeQueryWrapper.eq(OcrMetadataConfigDetail::getMetadataConfigId, ocrMetadataConfigSaveModel.getId()); removeQueryWrapper.eq(OcrMetadataConfigDetail::getMetadataConfigId, saveOcrMetadataConfigVO.getId());
removeQueryWrapper.notIn(notRemoveIdList!=null&&notRemoveIdList.size()>0, OcrMetadataConfigDetail::getId,notRemoveIdList); removeQueryWrapper.notIn(notRemoveIdList!=null&&notRemoveIdList.size()>0, OcrMetadataConfigDetail::getId,notRemoveIdList);
//TODO zwt先检测这些删除的有没有被规则检查配置 绑定(删除元数据配置明细时,需不需要先检查该元数据配置明细有没有被规则检查配置绑定,如果被绑定是否需要提示 不可删除) //TODO zwt先检测这些删除的有没有被规则检查配置 绑定(删除元数据配置明细时,需不需要先检查该元数据配置明细有没有被规则检查配置绑定,如果被绑定是否需要提示 不可删除)
ocrMetadataConfigDetailService.remove(removeQueryWrapper); ocrMetadataConfigDetailService.remove(removeQueryWrapper);
@ -138,14 +137,14 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
} }
@Override @Override
public IPage<OcrMetadataConfigVo> pageVo(Page<OcrMetadataConfig> page, OcrMetadataConfig ocrMetadataConfig) { public IPage<OcrMetadataConfigDTO> pageVo(Page<OcrMetadataConfig> page, OcrMetadataConfig ocrMetadataConfig) {
Map<String,Object> params=new LinkedHashMap<>(); Map<String,Object> params=new LinkedHashMap<>();
params.put("getField",ocrMetadataConfig.getGetField()); params.put("getField",ocrMetadataConfig.getGetField());
params.put("configName",ocrMetadataConfig.getConfigName()); params.put("configName",ocrMetadataConfig.getConfigName());
params.put("resultName",ocrMetadataConfig.getResultName()); params.put("resultName",ocrMetadataConfig.getResultName());
/*params.put("column","createTime"); /*params.put("column","createTime");
params.put("order","desc");*/ params.put("order","desc");*/
IPage<OcrMetadataConfigVo> pageList=baseMapper.pageVo(page,params); IPage<OcrMetadataConfigDTO> pageList=baseMapper.pageVo(page,params);
List<OcrMetadataConfigDetail> metadataConfigDetails = ocrMetadataConfigDetailService.list(); List<OcrMetadataConfigDetail> metadataConfigDetails = ocrMetadataConfigDetailService.list();
List<OcrMetadataConfigDetail> arrayTestList=new ArrayList<>(); List<OcrMetadataConfigDetail> arrayTestList=new ArrayList<>();
@ -157,7 +156,7 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
} }
String fieldName=null,getField=null; String fieldName=null,getField=null;
for (OcrMetadataConfigVo record : pageList.getRecords()) { for (OcrMetadataConfigDTO record : pageList.getRecords()) {
if (StringUtils.isNotBlank(record.getTaskType())) { if (StringUtils.isNotBlank(record.getTaskType())) {
String taskTypeName = ocrTaskTypeList.stream().filter(o -> o.getId().equals(record.getTaskType())).map(o -> o.getTypeName()).collect(Collectors.joining("")); String taskTypeName = ocrTaskTypeList.stream().filter(o -> o.getId().equals(record.getTaskType())).map(o -> o.getTypeName()).collect(Collectors.joining(""));
record.setTaskType_dictText(taskTypeName); record.setTaskType_dictText(taskTypeName);
@ -176,8 +175,8 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
} }
@Override @Override
public List<OcrMetadataConfigVo> allList(List<String> idList) { public List<OcrMetadataConfigDTO> allList(List<String> idList) {
List<OcrMetadataConfigVo> allList=new ArrayList<>(); List<OcrMetadataConfigDTO> allList=new ArrayList<>();
if (idList!=null && idList.size()>0) { if (idList!=null && idList.size()>0) {
allList=baseMapper.allList(idList); allList=baseMapper.allList(idList);
}else{ }else{
@ -193,7 +192,7 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
List<OcrMetadataConfigDetail> metadataConfigDetails = ocrMetadataConfigDetailService.list(); List<OcrMetadataConfigDetail> metadataConfigDetails = ocrMetadataConfigDetailService.list();
List<OcrMetadataConfigDetail> arrayTestList=new ArrayList<>(); List<OcrMetadataConfigDetail> arrayTestList=new ArrayList<>();
String fieldName=null,getField=null; String fieldName=null,getField=null;
for (OcrMetadataConfigVo ocrMetadataConfig : allList) { for (OcrMetadataConfigDTO ocrMetadataConfig : allList) {
ocrMetadataConfig.setId(ocrMetadataConfig.getId()); ocrMetadataConfig.setId(ocrMetadataConfig.getId());
ocrMetadataConfig.setConfigName(ocrMetadataConfig.getConfigName()); ocrMetadataConfig.setConfigName(ocrMetadataConfig.getConfigName());
if (StringUtils.isNotBlank(ocrMetadataConfig.getTaskType())) { if (StringUtils.isNotBlank(ocrMetadataConfig.getTaskType())) {
@ -214,8 +213,8 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl<OcrMetadataConfigM
} }
@Override @Override
public OcrMetadataConfigVo findById(String id) { public OcrMetadataConfigDTO findById(String id) {
OcrMetadataConfigVo copyEntityVo=new OcrMetadataConfigVo(); OcrMetadataConfigDTO copyEntityVo=new OcrMetadataConfigDTO();
OcrMetadataConfig ocrMetadataConfig = this.getById(id); OcrMetadataConfig ocrMetadataConfig = this.getById(id);
BeanUtils.copyProperties(ocrMetadataConfig,copyEntityVo); BeanUtils.copyProperties(ocrMetadataConfig,copyEntityVo);
List<OcrMetadataConfigDetail> list = ocrMetadataConfigDetailService.list(new LambdaQueryWrapper<OcrMetadataConfigDetail>().eq(OcrMetadataConfigDetail::getMetadataConfigId, id)); List<OcrMetadataConfigDetail> list = ocrMetadataConfigDetailService.list(new LambdaQueryWrapper<OcrMetadataConfigDetail>().eq(OcrMetadataConfigDetail::getMetadataConfigId, id));

@ -6,18 +6,15 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jeecg.common.constant.OcrConstant; import org.jeecg.common.constant.OcrConstant;
import org.jeecg.common.util.AssertUtils; import org.jeecg.common.util.AssertUtils;
import org.jeecg.modules.ocr.entity.OcrMetadataConfig;
import org.jeecg.modules.ocr.entity.OcrMetadataConfigDetail; import org.jeecg.modules.ocr.entity.OcrMetadataConfigDetail;
import org.jeecg.modules.ocr.entity.OcrRuleCheck; import org.jeecg.modules.ocr.entity.OcrRuleCheck;
import org.jeecg.modules.ocr.entity.OcrRuleCheckDetail;
import org.jeecg.modules.ocr.mapper.OcrMetadataConfigDetailMapper; import org.jeecg.modules.ocr.mapper.OcrMetadataConfigDetailMapper;
import org.jeecg.modules.ocr.mapper.OcrMetadataConfigMapper; import org.jeecg.modules.ocr.mapper.OcrMetadataConfigMapper;
import org.jeecg.modules.ocr.mapper.OcrRuleCheckMapper; import org.jeecg.modules.ocr.mapper.OcrRuleCheckMapper;
import org.jeecg.modules.ocr.model.OcrMetadataConfigSaveModel; import org.jeecg.modules.ocr.vo.SaveOcrRuleCheckVO;
import org.jeecg.modules.ocr.model.OcrRuleCheckSaveModel;
import org.jeecg.modules.ocr.service.IOcrRuleCheckDetailService; import org.jeecg.modules.ocr.service.IOcrRuleCheckDetailService;
import org.jeecg.modules.ocr.service.IOcrRuleCheckService; import org.jeecg.modules.ocr.service.IOcrRuleCheckService;
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; import org.jeecg.modules.ocr.dto.OcrRuleCheckDTO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -48,39 +45,39 @@ public class OcrRuleCheckServiceImpl extends ServiceImpl<OcrRuleCheckMapper, Ocr
} }
@Override @Override
public void saveModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel) { public void saveModel(SaveOcrRuleCheckVO saveOcrRuleCheckVO) {
saveModelBatch(Arrays.asList(ocrRuleCheckSaveModel)); saveModelBatch(Arrays.asList(saveOcrRuleCheckVO));
} }
@Override @Override
public void saveModelBatch(List<OcrRuleCheckSaveModel> ocrRuleCheckSaveModels) { public void saveModelBatch(List<SaveOcrRuleCheckVO> saveOcrRuleCheckVOS) {
for (OcrRuleCheckSaveModel ocrRuleCheckSaveModel : ocrRuleCheckSaveModels) { for (SaveOcrRuleCheckVO saveOcrRuleCheckVO : saveOcrRuleCheckVOS) {
OcrRuleCheck ocrRuleCheck=new OcrRuleCheck(); OcrRuleCheck ocrRuleCheck=new OcrRuleCheck();
ocrRuleCheck.setConfigRule(ocrRuleCheckSaveModel.getConfigRule()); ocrRuleCheck.setConfigRule(saveOcrRuleCheckVO.getConfigRule());
ocrRuleCheck.setMetadataConfigId(ocrRuleCheckSaveModel.getMetadataConfigId()); ocrRuleCheck.setMetadataConfigId(saveOcrRuleCheckVO.getMetadataConfigId());
ocrRuleCheck.setConfigName(ocrRuleCheckSaveModel.getConfigName()); ocrRuleCheck.setConfigName(saveOcrRuleCheckVO.getConfigName());
this.save(ocrRuleCheck); this.save(ocrRuleCheck);
} }
} }
@Override @Override
public List<OcrRuleCheckVo> allList(List<String> selectionList) { public List<OcrRuleCheckDTO> allList(List<String> selectionList) {
return baseMapper.allList(selectionList!=null && selectionList.size()>0?selectionList:null); return baseMapper.allList(selectionList!=null && selectionList.size()>0?selectionList:null);
} }
@Override @Override
public Map<String, OcrRuleCheckVo> listToMap(List<String> selectionList) { public Map<String, OcrRuleCheckDTO> listToMap(List<String> selectionList) {
List<OcrRuleCheckVo> ocrRuleCheckVoList = allList(selectionList); List<OcrRuleCheckDTO> ocrRuleCheckVoList = allList(selectionList);
Map<String, OcrRuleCheckVo> collect = ocrRuleCheckVoList.stream().collect(Collectors.toMap(OcrRuleCheckVo::getId, o -> o)); Map<String, OcrRuleCheckDTO> collect = ocrRuleCheckVoList.stream().collect(Collectors.toMap(OcrRuleCheckDTO::getId, o -> o));
return collect; return collect;
} }
@Override @Override
public OcrRuleCheck updateModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel) { public OcrRuleCheck updateModel(SaveOcrRuleCheckVO saveOcrRuleCheckVO) {
OcrRuleCheck ocrRuleCheck=this.getById(ocrRuleCheckSaveModel.getId()); OcrRuleCheck ocrRuleCheck=this.getById(saveOcrRuleCheckVO.getId());
ocrRuleCheck.setConfigRule(ocrRuleCheckSaveModel.getConfigRule()); ocrRuleCheck.setConfigRule(saveOcrRuleCheckVO.getConfigRule());
ocrRuleCheck.setMetadataConfigId(ocrRuleCheckSaveModel.getMetadataConfigId()); ocrRuleCheck.setMetadataConfigId(saveOcrRuleCheckVO.getMetadataConfigId());
ocrRuleCheck.setConfigName(ocrRuleCheckSaveModel.getConfigName()); ocrRuleCheck.setConfigName(saveOcrRuleCheckVO.getConfigName());
this.updateById(ocrRuleCheck); this.updateById(ocrRuleCheck);
//明细 //明细
@ -116,7 +113,7 @@ public class OcrRuleCheckServiceImpl extends ServiceImpl<OcrRuleCheckMapper, Ocr
} }
@Override @Override
public IPage<OcrRuleCheckVo> pageVo(Page<OcrRuleCheck> page, OcrRuleCheck ocrRuleCheck) { public IPage<OcrRuleCheckDTO> pageVo(Page<OcrRuleCheck> page, OcrRuleCheck ocrRuleCheck) {
Map<String,Object> params=new LinkedHashMap<>(); Map<String,Object> params=new LinkedHashMap<>();
params.put("configName",ocrRuleCheck.getConfigName()); params.put("configName",ocrRuleCheck.getConfigName());
params.put("configRule",ocrRuleCheck.getConfigRule()); params.put("configRule",ocrRuleCheck.getConfigRule());
@ -124,8 +121,8 @@ public class OcrRuleCheckServiceImpl extends ServiceImpl<OcrRuleCheckMapper, Ocr
} }
@Override @Override
public OcrRuleCheckVo findById(String id) { public OcrRuleCheckDTO findById(String id) {
OcrRuleCheckVo ocrRuleCheckVo = baseMapper.findById(id); OcrRuleCheckDTO ocrRuleCheckVo = baseMapper.findById(id);
AssertUtils.notNull(ocrRuleCheckVo,id+"-规则检查配置不存在"); AssertUtils.notNull(ocrRuleCheckVo,id+"-规则检查配置不存在");
if (StringUtils.isNotBlank(ocrRuleCheckVo.getConfigRule())) { if (StringUtils.isNotBlank(ocrRuleCheckVo.getConfigRule())) {
String configRule = ocrRuleCheckVo.getConfigRule(); String configRule = ocrRuleCheckVo.getConfigRule();

@ -1,4 +1,4 @@
package org.jeecg.modules.ocr.model; package org.jeecg.modules.ocr.vo;
import lombok.Data; import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @Date 2023/8/3 10:34 * @Date 2023/8/3 10:34
*/ */
@Data @Data
public class CommonQueryModel implements Serializable { public class CommonQueryVO implements Serializable {
private String id; private String id;
private String configName; private String configName;

@ -1,4 +1,4 @@
package org.jeecg.modules.ocr.model; package org.jeecg.modules.ocr.vo;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -15,7 +15,7 @@ import java.util.List;
* @Date 2023/7/17 14:06 * @Date 2023/7/17 14:06
*/ */
@Data @Data
public class OcrMetadataConfigSaveModel { public class SaveOcrMetadataConfigVO {
/**主键*/ /**主键*/
public String id; public String id;
/**配置名称*/ /**配置名称*/

@ -1,4 +1,4 @@
package org.jeecg.modules.ocr.model; package org.jeecg.modules.ocr.vo;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
@ -21,7 +21,7 @@ import java.util.List;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class OcrRuleCheckSaveModel implements Serializable { public class SaveOcrRuleCheckVO implements Serializable {
/**主键*/ /**主键*/
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
private String id; private String id;

@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.OcrConstant;
import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.CommonUtils; import org.jeecg.common.util.CommonUtils;
@ -119,7 +120,7 @@ public class CommonController {
if(oConvertUtils.isNotEmpty(savePath)){ if(oConvertUtils.isNotEmpty(savePath)){
/*result.setMessage(savePath); /*result.setMessage(savePath);
result.setSuccess(true);*/ result.setSuccess(true);*/
return Result.OK(savePath,"http://47.103.213.109:8072/files"+uploadpath+"/"+savePath); return Result.OK(savePath, OcrConstant.FILE_REVIEW_URL_PREFIX+uploadpath+"/"+savePath);
}else { }else {
result.setMessage("上传失败!"); result.setMessage("上传失败!");
result.setSuccess(false); result.setSuccess(false);

Loading…
Cancel
Save