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 89ebf73..b337ac0 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 @@ -1,8 +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; @@ -27,12 +31,16 @@ import org.jeecg.modules.ocr.service.IOcrMetadataConfigService; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.modules.ocr.utils.DownloadTemplateUtil; import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; +import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; 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; @@ -219,16 +227,10 @@ public class OcrMetadataConfigController extends JeecgController importExcel(HttpServletRequest request, HttpServletResponse response) { - return super.importExcel(request, response, OcrMetadataConfig.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(), OcrMetadataConfigVo.class, params); + AssertUtils.hasSize(list,"未获取到数据!"); + //判断重复字段名 + Map countMap = list.stream().map(o->o.getConfigName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); + AssertUtils.isTrue(!(countMap.keySet().size()>0),"不可有重复的配置名称!"); + List saveModelList=new ArrayList<>(); + OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel=new OcrMetadataConfigSaveModel(); + List ocrMetadataConfigDetailList=new ArrayList(); + OcrMetadataConfigDetail ocrMetadataConfigDetail=new OcrMetadataConfigDetail(); + for (OcrMetadataConfigVo configVo : list) { + ocrMetadataConfigSaveModel.setConfigName(configVo.getConfigName()); + String resultName = configVo.getResultName(); + String getField = configVo.getGetField(); + List resultList=new ArrayList<>(); + List getFieldList=new ArrayList<>(); + if (StringUtils.isNotBlank(resultName)) { + resultList=Arrays.asList(resultName.split(",")); + } + if (StringUtils.isNotBlank(getField)) { + getFieldList=Arrays.asList(getField.split(",")); + } + AssertUtils.isTrue(resultList.size()==getFieldList.size(),String.format("配置名称[%s]-的字段信息不整齐",configVo.getConfigName())); + ocrMetadataConfigDetailList=new ArrayList<>(); + for (int i = 0; i < resultList.size(); i++) { + ocrMetadataConfigDetail=new OcrMetadataConfigDetail(); + ocrMetadataConfigDetail.setFieldName(resultList.get(i)); + ocrMetadataConfigDetail.setGetField(getFieldList.get(i)); + ocrMetadataConfigDetailList.add(ocrMetadataConfigDetail); + } + ocrMetadataConfigSaveModel.setOcrMetadataConfigDetailList(ocrMetadataConfigDetailList); + saveModelList.add(ocrMetadataConfigSaveModel); + } + //update-begin-author:taoyan date:20190528 for:批量插入数据 + long start = System.currentTimeMillis(); + ocrMetadataConfigService.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/service/IOcrMetadataConfigService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrMetadataConfigService.java index a935936..2f4513a 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrMetadataConfigService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/ocr/service/IOcrMetadataConfigService.java @@ -30,7 +30,7 @@ public interface IOcrMetadataConfigService extends IService { * @param ocrMetadataConfigSaveModel * @return */ - OcrMetadataConfig saveModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel); + void saveModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel); /** * 修改元数据配置 @@ -50,4 +50,6 @@ public interface IOcrMetadataConfigService extends IService { List allList(List idList); OcrMetadataConfigVo findById(String id); + + 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 d8825c0..63ba6ea 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 @@ -15,12 +15,10 @@ import org.jeecg.modules.ocr.vo.OcrMetadataConfigVo; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -45,27 +43,36 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl ocrMetadataConfigDetailList = ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList(); - if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){ - //判断重复字段名 - Map countMap = ocrMetadataConfigDetailList.stream().map(o->o.getFieldName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); - if (countMap.keySet().size()>0) { - //有重复的字段名 - String fieldsName = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.joining(",")); - AssertUtils.isEmpty(fieldsName,String.format("字段名[%s]-重复了",fieldsName)); - } - for (OcrMetadataConfigDetail detail : ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList()) { - detail.setMetadataConfigId(ocrMetadataConfig.getId()); - ocrMetadataConfigDetailService.saveOrUpdate(detail); + public void saveModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel) { + saveModelBatch(Arrays.asList(ocrMetadataConfigSaveModel)); + /*return ocrMetadataConfig;*/ + } + + @Override + @Transactional + public void saveModelBatch(List saveModelList) { + for (OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel : saveModelList) { + OcrMetadataConfig ocrMetadataConfig=new OcrMetadataConfig(); + ocrMetadataConfig.setConfigName(ocrMetadataConfigSaveModel.getConfigName()); + this.save(ocrMetadataConfig); + List ocrMetadataConfigDetailList = ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList(); + if(ocrMetadataConfigDetailList!=null&&ocrMetadataConfigDetailList.size()>0){ + //判断重复字段名 + Map countMap = ocrMetadataConfigDetailList.stream().map(o->o.getFieldName()).collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); + if (countMap.keySet().size()>0) { + //有重复的字段名 + String fieldsName = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.joining(",")); + AssertUtils.isEmpty(fieldsName,String.format("字段名[%s]-重复了",fieldsName)); + } + for (OcrMetadataConfigDetail detail : ocrMetadataConfigSaveModel.getOcrMetadataConfigDetailList()) { + detail.setMetadataConfigId(ocrMetadataConfig.getId()); + ocrMetadataConfigDetailService.saveOrUpdate(detail); + } } } - return ocrMetadataConfig; } + @Override public OcrMetadataConfig updateModel(OcrMetadataConfigSaveModel ocrMetadataConfigSaveModel) { AssertUtils.notEmpty(ocrMetadataConfigSaveModel.getId(),"[id]不可为空"); @@ -169,4 +176,6 @@ public class OcrMetadataConfigServiceImpl extends ServiceImpl