|
|
|
@ -3,8 +3,11 @@ package org.jeecg.modules.ocr.controller;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
|
import org.jeecg.common.api.vo.Result;
|
|
|
|
|
import org.jeecg.common.constant.OcrConstant;
|
|
|
|
|
import org.jeecg.common.constant.enums.OcrStatusEnum;
|
|
|
|
@ -19,8 +22,14 @@ import org.jeecg.modules.ocr.entity.OcrIdentify;
|
|
|
|
|
import org.jeecg.modules.ocr.entity.OcrMetadataConfig;
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrIdentifyService;
|
|
|
|
|
import org.jeecg.common.system.base.controller.JeecgController;
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrMetadataConfigService;
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrRuleCheckService;
|
|
|
|
|
import org.jeecg.modules.ocr.service.IOcrTaskTypeService;
|
|
|
|
|
import org.jeecg.modules.ocr.utils.DownloadTemplateUtil;
|
|
|
|
|
import org.jeecg.modules.ocr.utils.FileOUtils;
|
|
|
|
|
import org.jeecg.modules.ocr.vo.OcrIdentifyVo;
|
|
|
|
|
import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo;
|
|
|
|
|
import org.jeecg.modules.ocr.vo.OcrRuleCheckVo;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
|
@ -29,177 +38,197 @@ import io.swagger.annotations.ApiOperation;
|
|
|
|
|
import org.jeecg.common.aspect.annotation.AutoLog;
|
|
|
|
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
/**
|
|
|
|
|
* @Description: ocr识别
|
|
|
|
|
* @Author: jeecg-boot
|
|
|
|
|
* @Date: 2023-07-14
|
|
|
|
|
* @Date: 2023-07-14
|
|
|
|
|
* @Version: V1.0
|
|
|
|
|
*/
|
|
|
|
|
@Api(tags="ocr识别")
|
|
|
|
|
@Api(tags = "ocr识别")
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/ocrIdentify")
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class OcrIdentifyController extends JeecgController<OcrIdentify, IOcrIdentifyService> {
|
|
|
|
|
@Autowired
|
|
|
|
|
private IOcrIdentifyService ocrIdentifyService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private DownloadTemplateUtil downloadTemplateUtil;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 分页列表查询
|
|
|
|
|
*
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
* @param pageNo
|
|
|
|
|
* @param pageSize
|
|
|
|
|
* @param req
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
//@AutoLog(value = "ocr识别-分页列表查询")
|
|
|
|
|
@ApiOperation(value="ocr识别-分页列表查询", notes="ocr识别-分页列表查询")
|
|
|
|
|
@GetMapping(value = "/list")
|
|
|
|
|
public Result<IPage<OcrIdentify>> queryPageList(OcrIdentify ocrIdentify,
|
|
|
|
|
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
|
|
|
|
|
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
|
|
|
|
|
HttpServletRequest req) {
|
|
|
|
|
QueryWrapper<OcrIdentify> queryWrapper = QueryGenerator.initQueryWrapper(ocrIdentify, req.getParameterMap());
|
|
|
|
|
Page<OcrIdentify> page = new Page<OcrIdentify>(pageNo, pageSize);
|
|
|
|
|
IPage<OcrIdentify> pageList = ocrIdentifyService.page(page, queryWrapper);
|
|
|
|
|
return Result.OK(pageList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 添加
|
|
|
|
|
*
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-添加")
|
|
|
|
|
@ApiOperation(value="ocr识别-添加", notes="ocr识别-添加")
|
|
|
|
|
@Autowired
|
|
|
|
|
private IOcrIdentifyService ocrIdentifyService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private DownloadTemplateUtil downloadTemplateUtil;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IOcrTaskTypeService ocrTaskTypeService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IOcrMetadataConfigService ocrMetadataConfigService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private IOcrRuleCheckService ocrRuleCheckService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 分页列表查询
|
|
|
|
|
*
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
* @param pageNo
|
|
|
|
|
* @param pageSize
|
|
|
|
|
* @param req
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
//@AutoLog(value = "ocr识别-分页列表查询")
|
|
|
|
|
@ApiOperation(value = "ocr识别-分页列表查询", notes = "ocr识别-分页列表查询")
|
|
|
|
|
@GetMapping(value = "/list")
|
|
|
|
|
public Result<IPage<OcrIdentify>> queryPageList(OcrIdentify ocrIdentify,
|
|
|
|
|
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
|
|
|
|
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
|
|
|
|
HttpServletRequest req) {
|
|
|
|
|
QueryWrapper<OcrIdentify> queryWrapper = QueryGenerator.initQueryWrapper(ocrIdentify, req.getParameterMap());
|
|
|
|
|
Page<OcrIdentify> page = new Page<OcrIdentify>(pageNo, pageSize);
|
|
|
|
|
Map<String, OcrRuleCheckVo> ocrRuleCheckMap = ocrRuleCheckService.listToMap(null);
|
|
|
|
|
Map<String, OcrMetadataConfigVo> metadataConfigMap = ocrMetadataConfigService.listToMap(null);
|
|
|
|
|
IPage<OcrIdentify> pageList = ocrIdentifyService.page(page, queryWrapper);
|
|
|
|
|
if (pageList != null && pageList.getRecords() != null) {
|
|
|
|
|
for (OcrIdentify record : pageList.getRecords()) {
|
|
|
|
|
OcrRuleCheckVo ocrRuleCheckVo = ocrRuleCheckMap.get(record.getRuleCheck());
|
|
|
|
|
if (ocrRuleCheckVo!=null && StringUtils.isNotBlank(ocrRuleCheckVo.getMetadataConfigId())) {
|
|
|
|
|
record.setMetadataConfigId(ocrRuleCheckVo.getMetadataConfigId());
|
|
|
|
|
OcrMetadataConfigVo ocrMetadataConfigVo = metadataConfigMap.get(ocrRuleCheckVo.getMetadataConfigId());
|
|
|
|
|
record.setTaskType_dictText(ocrMetadataConfigVo!=null?ocrMetadataConfigVo.getTaskType_dictText():null);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Result.OK(pageList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 添加
|
|
|
|
|
*
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-添加")
|
|
|
|
|
@ApiOperation(value = "ocr识别-添加", notes = "ocr识别-添加")
|
|
|
|
|
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_identify:add")
|
|
|
|
|
@PostMapping(value = "/add")
|
|
|
|
|
public Result<String> add(@RequestBody OcrIdentify ocrIdentify) {
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getTaskName(),"[任务名称]-不可为空");
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getIdentifyUrl(),"[识别路径]不可为空");
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getRuleCheck(),"请选择[规则检查配置]");
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getPriority(),"请选择[优先级]");
|
|
|
|
|
//获取识别的图片
|
|
|
|
|
List<String> fileList=new ArrayList<>();
|
|
|
|
|
List<String> fileUrlList= FileOUtils.fileLists(ocrIdentify.getIdentifyUrl());
|
|
|
|
|
AssertUtils.notNull(fileUrlList,"图片地址不存在");
|
|
|
|
|
for (String fileUrl : fileUrlList) {
|
|
|
|
|
//判断附件是否是 图片格式
|
|
|
|
|
if (fileUrl.lastIndexOf(".png")!=-1 || fileUrl.lastIndexOf(".jpg")!=-1|| fileUrl.lastIndexOf(".jpeg")!=-1) {
|
|
|
|
|
fileList.add(fileUrl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AssertUtils.hasSize(fileList,"图片目录下未获取到可使用的图片格式文件");
|
|
|
|
|
ocrIdentifyService.save(ocrIdentify);
|
|
|
|
|
//3.请求python ocr识别,异步执行
|
|
|
|
|
ocrIdentifyService.postSemantic(ocrIdentify,fileList);
|
|
|
|
|
//请求ocr识别接口
|
|
|
|
|
//ocrIdentifyService.postSemantic(ocrIdentify.getId(),Arrays.asList(ocrIdentify.getIdentifyUrl()));
|
|
|
|
|
return Result.OK("添加成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 编辑
|
|
|
|
|
*
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-编辑")
|
|
|
|
|
@ApiOperation(value="ocr识别-编辑", notes="ocr识别-编辑")
|
|
|
|
|
@PostMapping(value = "/add")
|
|
|
|
|
public Result<String> add(@RequestBody OcrIdentify ocrIdentify) {
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getTaskName(), "[任务名称]-不可为空");
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getIdentifyUrl(), "[识别路径]不可为空");
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getRuleCheck(), "请选择[规则检查配置]");
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getPriority(), "请选择[优先级]");
|
|
|
|
|
//获取识别的图片
|
|
|
|
|
List<String> fileList = new ArrayList<>();
|
|
|
|
|
List<String> fileUrlList = FileOUtils.fileLists(ocrIdentify.getIdentifyUrl());
|
|
|
|
|
AssertUtils.notNull(fileUrlList, "图片地址不存在");
|
|
|
|
|
for (String fileUrl : fileUrlList) {
|
|
|
|
|
//判断附件是否是 图片格式
|
|
|
|
|
if (fileUrl.lastIndexOf(".png") != -1 || fileUrl.lastIndexOf(".jpg") != -1 || fileUrl.lastIndexOf(".jpeg") != -1) {
|
|
|
|
|
fileList.add(fileUrl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
AssertUtils.hasSize(fileList, "图片目录下未获取到可使用的图片格式文件");
|
|
|
|
|
ocrIdentify.setTaskSource("平台");
|
|
|
|
|
ocrIdentifyService.save(ocrIdentify);
|
|
|
|
|
//3.请求python ocr识别,异步执行
|
|
|
|
|
ocrIdentifyService.postSemantic(ocrIdentify, fileList);
|
|
|
|
|
//请求ocr识别接口
|
|
|
|
|
//ocrIdentifyService.postSemantic(ocrIdentify.getId(),Arrays.asList(ocrIdentify.getIdentifyUrl()));
|
|
|
|
|
return Result.OK("添加成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 编辑
|
|
|
|
|
*
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-编辑")
|
|
|
|
|
@ApiOperation(value = "ocr识别-编辑", notes = "ocr识别-编辑")
|
|
|
|
|
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_identify:edit")
|
|
|
|
|
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
|
|
|
|
|
public Result<String> edit(@RequestBody OcrIdentify ocrIdentify) {
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getId(),"[id]不可为空");
|
|
|
|
|
OcrIdentify identify = ocrIdentifyService.getById(ocrIdentify.getId());
|
|
|
|
|
if ("0".equals(identify.getStatus()) || "1".equals(identify.getStatus())) {
|
|
|
|
|
throw new JeecgBootException("当前状态不可编辑");
|
|
|
|
|
}
|
|
|
|
|
ocrIdentifyService.updateById(ocrIdentify);
|
|
|
|
|
return Result.OK("编辑成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过id删除
|
|
|
|
|
*
|
|
|
|
|
* @param id
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-通过id删除")
|
|
|
|
|
@ApiOperation(value="ocr识别-通过id删除", notes="ocr识别-通过id删除")
|
|
|
|
|
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
|
|
|
|
|
public Result<String> edit(@RequestBody OcrIdentify ocrIdentify) {
|
|
|
|
|
AssertUtils.notEmpty(ocrIdentify.getId(), "[id]不可为空");
|
|
|
|
|
OcrIdentify identify = ocrIdentifyService.getById(ocrIdentify.getId());
|
|
|
|
|
if ("0".equals(identify.getStatus()) || "1".equals(identify.getStatus())) {
|
|
|
|
|
throw new JeecgBootException("当前状态不可编辑");
|
|
|
|
|
}
|
|
|
|
|
ocrIdentifyService.updateById(ocrIdentify);
|
|
|
|
|
return Result.OK("编辑成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过id删除
|
|
|
|
|
*
|
|
|
|
|
* @param id
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-通过id删除")
|
|
|
|
|
@ApiOperation(value = "ocr识别-通过id删除", notes = "ocr识别-通过id删除")
|
|
|
|
|
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_identify:delete")
|
|
|
|
|
@DeleteMapping(value = "/delete")
|
|
|
|
|
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
|
|
|
|
|
OcrIdentify ocrIdentify = ocrIdentifyService.getById(id);
|
|
|
|
|
AssertUtils.isTrue(OcrStatusEnum.OVER.getStatus().equals(ocrIdentify.getStatus()),"当前状态不可删除");
|
|
|
|
|
ocrIdentifyService.removeById(id);
|
|
|
|
|
return Result.OK("删除成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 批量删除
|
|
|
|
|
*
|
|
|
|
|
* @param ids
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-批量删除")
|
|
|
|
|
@ApiOperation(value="ocr识别-批量删除", notes="ocr识别-批量删除")
|
|
|
|
|
@DeleteMapping(value = "/delete")
|
|
|
|
|
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
|
|
|
|
|
OcrIdentify ocrIdentify = ocrIdentifyService.getById(id);
|
|
|
|
|
AssertUtils.isTrue(OcrStatusEnum.OVER.getStatus().equals(ocrIdentify.getStatus()), "当前状态不可删除");
|
|
|
|
|
ocrIdentifyService.removeById(id);
|
|
|
|
|
return Result.OK("删除成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 批量删除
|
|
|
|
|
*
|
|
|
|
|
* @param ids
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@AutoLog(value = "ocr识别-批量删除")
|
|
|
|
|
@ApiOperation(value = "ocr识别-批量删除", notes = "ocr识别-批量删除")
|
|
|
|
|
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_identify:deleteBatch")
|
|
|
|
|
@DeleteMapping(value = "/deleteBatch")
|
|
|
|
|
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
|
|
|
|
|
List<OcrIdentify> ocrIdentifies = ocrIdentifyService.listByIds(Arrays.asList(ids.split(",")));
|
|
|
|
|
for (OcrIdentify ocrIdentify : ocrIdentifies) {
|
|
|
|
|
AssertUtils.isTrue(OcrStatusEnum.OVER.getStatus().equals(ocrIdentify.getStatus()),"当前ocr识别状态不可删除");
|
|
|
|
|
}
|
|
|
|
|
this.ocrIdentifyService.removeByIds(Arrays.asList(ids.split(",")));
|
|
|
|
|
return Result.OK("批量删除成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过id查询
|
|
|
|
|
* @param id
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
//@AutoLog(value = "ocr识别-通过id查询")
|
|
|
|
|
@ApiOperation(value="ocr识别-通过id查询", notes="ocr识别-通过id查询")
|
|
|
|
|
@GetMapping(value = "/queryById")
|
|
|
|
|
public Result<OcrIdentify> queryById(@RequestParam(name="id",required=true) String id) {
|
|
|
|
|
OcrIdentify ocrIdentify = ocrIdentifyService.getById(id);
|
|
|
|
|
if(ocrIdentify==null) {
|
|
|
|
|
return Result.error("未找到对应数据");
|
|
|
|
|
}
|
|
|
|
|
return Result.OK(ocrIdentify);
|
|
|
|
|
}
|
|
|
|
|
@DeleteMapping(value = "/deleteBatch")
|
|
|
|
|
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
|
|
|
|
|
List<OcrIdentify> ocrIdentifies = ocrIdentifyService.listByIds(Arrays.asList(ids.split(",")));
|
|
|
|
|
for (OcrIdentify ocrIdentify : ocrIdentifies) {
|
|
|
|
|
AssertUtils.isTrue(OcrStatusEnum.OVER.getStatus().equals(ocrIdentify.getStatus()), "当前ocr识别状态不可删除");
|
|
|
|
|
}
|
|
|
|
|
this.ocrIdentifyService.removeByIds(Arrays.asList(ids.split(",")));
|
|
|
|
|
return Result.OK("批量删除成功!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 导出excel
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
*/
|
|
|
|
|
* 通过id查询
|
|
|
|
|
*
|
|
|
|
|
* @param id
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
//@AutoLog(value = "ocr识别-通过id查询")
|
|
|
|
|
@ApiOperation(value = "ocr识别-通过id查询", notes = "ocr识别-通过id查询")
|
|
|
|
|
@GetMapping(value = "/queryById")
|
|
|
|
|
public Result<OcrIdentify> queryById(@RequestParam(name = "id", required = true) String id) {
|
|
|
|
|
OcrIdentify ocrIdentify = ocrIdentifyService.getById(id);
|
|
|
|
|
if (ocrIdentify == null) {
|
|
|
|
|
return Result.error("未找到对应数据");
|
|
|
|
|
}
|
|
|
|
|
return Result.OK(ocrIdentify);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 导出excel
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
* @param ocrIdentify
|
|
|
|
|
*/
|
|
|
|
|
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_identify:exportXls")
|
|
|
|
|
@RequestMapping(value = "/exportXls")
|
|
|
|
|
public ModelAndView exportXls(HttpServletRequest request, OcrIdentify ocrIdentify) {
|
|
|
|
|
return super.exportXls(request, ocrIdentify, OcrIdentify.class, "ocr识别");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 下载模板
|
|
|
|
|
*/
|
|
|
|
|
@RequestMapping(value = "/downloadTemplate")
|
|
|
|
|
public ModelAndView downloadTemplate() {
|
|
|
|
|
return downloadTemplateUtil.downloadTemplate(OcrIdentify.class,"ocr识别");
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 下载模板
|
|
|
|
|
*/
|
|
|
|
|
@RequestMapping(value = "/downloadTemplate")
|
|
|
|
|
public ModelAndView downloadTemplate() {
|
|
|
|
|
return downloadTemplateUtil.downloadTemplate(OcrIdentify.class, "ocr识别");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通过excel导入数据
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
* @param response
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
* 通过excel导入数据
|
|
|
|
|
*
|
|
|
|
|
* @param request
|
|
|
|
|
* @param response
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
// @RequiresPermissions("org.jeecg.modules.ocr:ocr_identify:importExcel")
|
|
|
|
|
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
|
|
|
|
|
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
|
|
|
|
|