diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java index a64052f..715ebb0 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrMetadataConfigController.java @@ -270,7 +270,7 @@ public class OcrMetadataConfigController extends JeecgController countMap = list.stream().map(o->o.getConfigName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); - AssertUtils.notTrue(countMap.keySet().size()>0,"不可有重复的配置名称!"); + AssertUtils.notTrue(countMap.values().stream().filter(f->f>1).count()>0,"不可有重复的配置名称!"); List saveModelList=new ArrayList<>(); OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel=new OcrMetadataConfigSaveModel(); List ocrMetadataConfigDetailList=new ArrayList(); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrRuleCheckController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrRuleCheckController.java index 9b2b7f2..2f13a35 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrRuleCheckController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/controller/OcrRuleCheckController.java @@ -1,6 +1,12 @@ package org.jeecg.modules.ocr.controller; +import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -22,9 +28,14 @@ import org.jeecg.modules.ocr.model.OcrRuleCheckSaveModel; import org.jeecg.modules.ocr.service.IOcrRuleCheckService; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.modules.ocr.utils.DownloadTemplateUtil; +import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ImportParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -200,7 +211,60 @@ public class OcrRuleCheckController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, OcrRuleCheck.class); + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + // 获取上传文件对象 + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List list = ExcelImportUtil.importExcel(file.getInputStream(), OcrRuleCheckSaveModel.class, params); + AssertUtils.hasSize(list,"未获取到数据!"); + //判断重复字段名 + Map countMap = list.stream().map(o->o.getConfigName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); + AssertUtils.notTrue(countMap.values().stream().filter(f->f>1).count()>0,"不可有重复的配置名称!"); + List saveModelList=new ArrayList<>(); + OcrRuleCheckSaveModel ocrRuleCheckSaveModel=new OcrRuleCheckSaveModel(); + for (OcrRuleCheckSaveModel configVo : list) { + ocrRuleCheckSaveModel.setConfigName(configVo.getConfigName()); + boolean existsFlag=ocrRuleCheckService.existsByConfigName(configVo.getConfigName(),null);//true 已存在,false不存在 + AssertUtils.notTrue(existsFlag,String.format("[配置名称]-%s 已存在",configVo.getConfigName())); + String configRule = configVo.getConfigRule(); + String metadataConfigId = configVo.getMetadataConfigId(); + ocrRuleCheckSaveModel.setConfigRule(configRule); + ocrRuleCheckSaveModel.setMetadataConfigId(metadataConfigId); + saveModelList.add(ocrRuleCheckSaveModel); + } + //update-begin-author:taoyan date:20190528 for:批量插入数据 + long start = System.currentTimeMillis(); + ocrRuleCheckService.saveModelBatch(saveModelList); + //400条 saveBatch消耗时间1592毫秒 循环插入消耗时间1947毫秒 + //1200条 saveBatch消耗时间3687毫秒 循环插入消耗时间5212毫秒 + log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒"); + //update-end-author:taoyan date:20190528 for:批量插入数据 + return Result.ok("文件导入成功!数据行数:" + list.size()); + } catch (Exception e) { + //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示 + String msg = e.getMessage(); + log.error(msg, e); + if(msg!=null && msg.indexOf("Duplicate entry")>=0){ + return Result.error("文件导入失败:有重复数据!"); + }else{ + return Result.error("文件导入失败:" + e.getMessage()); + } + //update-end-author:taoyan date:20211124 for: 导入数据重复增加提示 + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrMetadataConfig.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrMetadataConfig.java index 64a6726..4cf3f17 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrMetadataConfig.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrMetadataConfig.java @@ -72,5 +72,6 @@ public class OcrMetadataConfig implements Serializable { /**任务类型*/ @ApiModelProperty(value = "任务类型") + @Excel(name = "任务类型", width = 15) private String taskType; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrRuleCheck.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrRuleCheck.java index 3dd89d7..6eb3821 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrRuleCheck.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/entity/OcrRuleCheck.java @@ -67,5 +67,6 @@ public class OcrRuleCheck implements Serializable { private String resultName;*/ @ApiModelProperty(value = "元数据配置id") + @Excel(name = "元数据配置id", width = 15) private String metadataConfigId; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrRuleCheckSaveModel.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrRuleCheckSaveModel.java index 6e22bcc..9e3a366 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrRuleCheckSaveModel.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/model/OcrRuleCheckSaveModel.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; @@ -17,20 +19,24 @@ import java.util.List; * @Date 2023/7/17 18:45 */ @Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) public class OcrRuleCheckSaveModel implements Serializable { /**主键*/ @ApiModelProperty(value = "主键") private String id; /**配置名称*/ @ApiModelProperty(value = "配置名称") + @Excel(name = "配置名称", width = 15) private String configName; /**配置规则*/ @ApiModelProperty(value = "配置规则") @TableField(exist = false) + @Excel(name = "配置规则", width = 15) private String configRule; - /**选择的元数据明细id*/ @ApiModelProperty(value = "选择的元数据id") + @Excel(name = "元数据配置id", width = 15) public String metadataConfigId; /**选择的元数据明细id*/ //@ApiModelProperty(value = "选择的元数据明细id") diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrRuleCheckService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrRuleCheckService.java index 57c2830..77111b0 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrRuleCheckService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrRuleCheckService.java @@ -7,6 +7,8 @@ import org.jeecg.modules.ocr.entity.OcrRuleCheck; import org.jeecg.modules.ocr.model.OcrRuleCheckSaveModel; import org.jeecg.modules.ocr.vo.OcrRuleCheckVo; +import java.util.List; + /** * @Description: 规则检查配置 * @Author: jeecg-boot @@ -17,7 +19,7 @@ public interface IOcrRuleCheckService extends IService { boolean existsByConfigName(String configName, String id); - OcrRuleCheck saveModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel); + void saveModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel); OcrRuleCheck updateModel(OcrRuleCheckSaveModel ocrRuleCheckSaveModel); @@ -26,4 +28,6 @@ public interface IOcrRuleCheckService extends IService { IPage pageVo(Page page, OcrRuleCheck ocrRuleCheck); OcrRuleCheckVo findById(String ruleCheck); + + void saveModelBatch(List saveModelList); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrMetadataConfigServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrMetadataConfigServiceImpl.java index 63ba6ea..6535299 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrMetadataConfigServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrMetadataConfigServiceImpl.java @@ -54,6 +54,8 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl ocrMetadataConfigDetailList = ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList(); if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){ diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrRuleCheckServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrRuleCheckServiceImpl.java index 60fc0a3..e3bb6f9 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrRuleCheckServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/impl/OcrRuleCheckServiceImpl.java @@ -21,10 +21,7 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @Description: 规则检查配置 @@ -49,28 +46,19 @@ public class OcrRuleCheckServiceImpl extends ServiceImpl ocrRuleCheckDetailList=new ArrayList<>(); - if (ocrRuleCheckSaveModel.getMetadataConfigDetailIdList()!=null) { - for (String s : ocrRuleCheckSaveModel.getMetadataConfigDetailIdList()) { - OcrRuleCheckDetail ocrRuleCheckDetail=new OcrRuleCheckDetail(); - ocrRuleCheckDetail.setRuleCheckId(ocrRuleCheck.getId()); - ocrRuleCheckDetail.setMetadataConfigDetailId(s); - ocrRuleCheckDetailList.add(ocrRuleCheckDetail); - } - if (ocrRuleCheckDetailList.size()>0) { - ocrRuleCheckDetailService.saveOrUpdateBatch(ocrRuleCheckDetailList); - } - }*/ - return ocrRuleCheck; + @Override + public void saveModelBatch(List ocrRuleCheckSaveModels) { + for (OcrRuleCheckSaveModel ocrRuleCheckSaveModel : ocrRuleCheckSaveModels) { + OcrRuleCheck ocrRuleCheck=new OcrRuleCheck(); + ocrRuleCheck.setConfigRule(ocrRuleCheckSaveModel.getConfigRule()); + ocrRuleCheck.setMetadataConfigId(ocrRuleCheckSaveModel.getMetadataConfigId()); + ocrRuleCheck.setConfigName(ocrRuleCheckSaveModel.getConfigName()); + this.save(ocrRuleCheck); + } } @Override