From d2fd93450e040cf2787f345f79021050a3a6a894 Mon Sep 17 00:00:00 2001 From: yuezhihang Date: Wed, 2 Mar 2022 16:41:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=AC=E7=94=A8=E5=AF=BC=E5=87=BA=E5=A5=A5?= =?UTF-8?q?=E5=88=A9=E7=BB=99=20=E5=8F=AA=E8=B4=9F=E8=B4=A3=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=95=B0=E6=8D=AE=E4=B8=8D=E8=B4=9F=E8=B4=A3=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../processModel/entity/importExcelDTO.java | 14 +- .../service/impl/IExportServiceImpl.java | 34 ++- .../utils/ExcelImportUtilByWk.java | 277 ++++-------------- 3 files changed, 83 insertions(+), 242 deletions(-) diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/entity/importExcelDTO.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/entity/importExcelDTO.java index ddfd02b4..1eb26d04 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/entity/importExcelDTO.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/entity/importExcelDTO.java @@ -9,36 +9,34 @@ public class importExcelDTO { @Excel(name = "企标类别" ,orderNum = "0" , width = 20.0 ) private String bussSort; - private String bussSortId; @Excel(name = "企标名称",orderNum = "1", width = 20.0) private String esName; - private String esNameId; @Excel(name = "制修订类型",orderNum = "2", width = 20.0) private String reviseStatus; - private String reviseStatusId; - - @Excel(name = "起草责任单位" , orderNum = "3", width = 20.0) private String unitName; + @Excel(name = "起草责任单位" , orderNum = "3", width = 20.0) private String unit; - @Excel(name = "起草人" , orderNum = "4", width = 20.0) private String drafterName; + @Excel(name = "起草人" , orderNum = "4", width = 20.0) private String drafter; - @Excel(name = "评审责任人" , orderNum = "5", width = 20.0) + private String resPersonName; + @Excel(name = "评审责任人" , orderNum = "5", width = 20.0) private String resPerson; - @Excel(name = "工作组组长" , orderNum = "6", width = 20.0) + private String wgLeaderName; + @Excel(name = "工作组组长" , orderNum = "6", width = 20.0) private String wgLeader; @Excel(name = "计划初稿完成日期" , orderNum = "7", width = 20.0) diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/service/impl/IExportServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/service/impl/IExportServiceImpl.java index eb731907..4d6c44fb 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/service/impl/IExportServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/service/impl/IExportServiceImpl.java @@ -60,25 +60,33 @@ public class IExportServiceImpl implements IExportService { tsUsers.forEach(tsUser -> { tsUserMap.put(tsUser.getUserId(),tsUser.getUname()); }); - List res= ExcelImportUtilByWk.readExcel(file); + List res= ExcelImportUtilByWk.readExcelpublic(importExcelDTO.class,file); DateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); int i=1; for (importExcelDTO importExcelDTO: res) { - importExcelDTO.setWgLeaderName(tsUserMap.get(importExcelDTO.getWgLeader())); - if (null!=importExcelDTO.getWgLeader() && null==tsUserMap.get(importExcelDTO.getWgLeader())){ - stringBuilder.append("第"+i+"行第7列工作组组长填写不符合格式要求请检查;"); + if (null!=importExcelDTO.getWgLeader()) { + importExcelDTO.setWgLeaderName(tsUserMap.get(importExcelDTO.getWgLeader())); + if (null == tsUserMap.get(importExcelDTO.getWgLeader())) { + stringBuilder.append("第" + i + "行第7列工作组组长填写不符合格式要求请检查;"); + } } - importExcelDTO.setUnitName(tsInstitutionMap.get(importExcelDTO.getUnit())); - if (null!=importExcelDTO.getUnit() && null==tsInstitutionMap.get(importExcelDTO.getUnit())){ - stringBuilder.append("第"+i+"行第4列起草责任单位填写不符合格式要求请检查;"); + if (null!=importExcelDTO.getUnit()){ + importExcelDTO.setUnitName(tsInstitutionMap.get(importExcelDTO.getUnit())); + if (null==tsInstitutionMap.get(importExcelDTO.getUnit())){ + stringBuilder.append("第"+i+"行第4列起草责任单位填写不符合格式要求请检查;"); + } } - importExcelDTO.setDrafterName(tsUserMap.get(importExcelDTO.getDrafter())); - if (null!=importExcelDTO.getDrafter() && null==tsUserMap.get(importExcelDTO.getDrafter())){ - stringBuilder.append("第"+i+"行第5列起草人填写不符合格式要求请检查;"); + if (null!=importExcelDTO.getDrafter()){ + importExcelDTO.setDrafterName(tsUserMap.get(importExcelDTO.getDrafter())); + if ( null==tsUserMap.get(importExcelDTO.getDrafter())){ + stringBuilder.append("第"+i+"行第5列起草人填写不符合格式要求请检查;"); + } } - importExcelDTO.setResPersonName(tsUserMap.get(importExcelDTO.getResPerson())); - if (null!=importExcelDTO.getResPerson() && null==tsUserMap.get(importExcelDTO.getResPerson())){ - stringBuilder.append("第"+i+"行第6列评审责任人填写不符合格式要求请检查;"); + if (null!=importExcelDTO.getResPerson()){ + importExcelDTO.setResPersonName(tsUserMap.get(importExcelDTO.getResPerson())); + if ( null==tsUserMap.get(importExcelDTO.getResPerson())){ + stringBuilder.append("第"+i+"行第6列评审责任人填写不符合格式要求请检查;"); + } } try { if (null!=importExcelDTO.getEndTime()) { diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/utils/ExcelImportUtilByWk.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/utils/ExcelImportUtilByWk.java index 27332a83..8533554f 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/utils/ExcelImportUtilByWk.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/processModel/utils/ExcelImportUtilByWk.java @@ -1,9 +1,11 @@ package com.adc.da.slrs.processModel.utils; +import cn.afterturn.easypoi.excel.annotation.Excel; import com.adc.da.slrs.processModel.entity.importExcelDTO; import lombok.extern.slf4j.Slf4j; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.formula.functions.T; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -13,9 +15,12 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Field; import java.text.DecimalFormat; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Slf4j public class ExcelImportUtilByWk { @@ -30,7 +35,7 @@ public class ExcelImportUtilByWk { * @param file 上传的Excel文件 * @return 读取结果列表,读取失败时返回null */ - public static List> readExcelPbulic(MultipartFile file) { + public static List readExcelpublic(Class tClass,MultipartFile file) { Workbook workbook = null; @@ -46,9 +51,57 @@ public class ExcelImportUtilByWk { // 获取Excel工作簿 workbook = getWorkbook(file.getInputStream(), fileType); - // 读取excel中的数据 //不同需求条件下可以 在此处修改 来获取不同的对象 - List> resultDataList = parseExcelPublic(workbook); + List resultDataList = new ArrayList<>(); + + // 解析sheet + for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { + Sheet sheet = workbook.getSheetAt(sheetNum); + if(!"hidden".equals(sheet.getSheetName())) { + // 校验sheet是否合法 + if (sheet == null) { + continue; + } + + // 获取第一行数据 + int firstRowNum = sheet.getFirstRowNum(); + Row firstRow = sheet.getRow(firstRowNum); + if (null == firstRow) { + log.warn("解析Excel失败,在第一行没有读取到任何数据!"); + } + + // 解析每一行的数据,构造数据对象 + int rowStart = firstRowNum + 1; + int rowEnd = sheet.getPhysicalNumberOfRows(); + + Map map=new HashMap<>(); + Field[] fields=tClass.getDeclaredFields(); + for (Field field:fields) { + field.setAccessible(true); + Excel excel=field.getAnnotation(Excel.class); + if (null!=excel) { + map.put(Integer.valueOf(excel.orderNum()), field); + } + } + T o = tClass.getConstructor(new Class[]{}).newInstance(new Object[]{}); + for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) { + Row row = sheet.getRow(rowNum); + if (null == row) { + continue; + } + for (Integer a:map.keySet()) { + Cell cell=null; + cell = row.getCell(a); + String value = convertCellValueToString(cell); + map.get(a).set(o,value); + } + resultDataList.add(o); + } + } + } + + + return resultDataList; } catch (Exception e) { @@ -84,224 +137,6 @@ public class ExcelImportUtilByWk { } - /** - * 解析Excel数据 - * @param workbook Excel工作簿对象 - * @return 解析结果 - */ - private static List> parseExcelPublic(Workbook workbook) { - List> resultDataList = new ArrayList<>(); - // 解析sheet - for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { - Sheet sheet = workbook.getSheetAt(sheetNum); - if(!"hidden".equals(sheet.getSheetName())) { - // 校验sheet是否合法 - if (sheet == null) { - continue; - } - - // 获取第一行数据 - int firstRowNum = sheet.getFirstRowNum(); - Row firstRow = sheet.getRow(firstRowNum); - if (null == firstRow) { - log.warn("解析Excel失败,在第一行没有读取到任何数据!"); - } - - // 解析每一行的数据,构造数据对象 - int rowStart = firstRowNum + 1; - int rowEnd = sheet.getPhysicalNumberOfRows(); - for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) { - Row row = sheet.getRow(rowNum); - if (null == row) { - continue; - } - Class resultData = convertRowToDataPublic(row); - if (null == resultData) { - log.warn("第 " + row.getRowNum() + "行数据不合法,已忽略!"); - continue; - } - resultDataList.add(resultData); - } - } - } - - return resultDataList; - } - - - /** - * 提取每一行中需要的数据,构造成为一个结果数据对象 - * - * 当该行中有单元格的数据为空或不合法时,忽略该行的数据 - * - * @param row 行数据 - * @return 解析后的行数据对象,行数据错误时返回null - */ - private static Class convertRowToDataPublic(Row row) { - Class resultData = null; - - Cell cell; - int cellNum = 0; - // 获取企标类型 - cell = row.getCell(cellNum++); - String bussSort = convertCellValueToString(cell); -// resultData.setBussSort(bussSort); - - return resultData; - } - - - - - /** - * 读取Excel文件内容 - * @param file 上传的Excel文件 - * @return 读取结果列表,读取失败时返回null - */ - public static List readExcel(MultipartFile file) { - - Workbook workbook = null; - - try { - // 获取Excel后缀名 - String fileName = file.getOriginalFilename(); - if (fileName == null || fileName.isEmpty() || fileName.lastIndexOf(".") < 0) { - log.warn("解析Excel失败,因为获取到的Excel文件名非法!"); - return null; - } - String fileType = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); - - // 获取Excel工作簿 - workbook = getWorkbook(file.getInputStream(), fileType); - - // 读取excel中的数据 - //不同需求条件下可以 在此处修改 来获取不同的对象 - List resultDataList = parseExcel(workbook); - - return resultDataList; - } catch (Exception e) { - log.warn("解析Excel失败,文件名:" + file.getOriginalFilename() + " 错误信息:" + e.getMessage()); - return null; - } finally { - try { - if (null != workbook) { - workbook.close(); - } - } catch (Exception e) { - log.warn("关闭数据流出错!错误信息:" + e.getMessage()); - return null; - } - } - } - - - - - - /** - * 解析Excel数据 - * @param workbook Excel工作簿对象 - * @return 解析结果 - */ - private static List parseExcel(Workbook workbook) { - List resultDataList = new ArrayList<>(); - // 解析sheet - for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { - Sheet sheet = workbook.getSheetAt(sheetNum); - if(!"hidden".equals(sheet.getSheetName())) { - // 校验sheet是否合法 - if (sheet == null) { - continue; - } - - // 获取第一行数据 - int firstRowNum = sheet.getFirstRowNum(); - Row firstRow = sheet.getRow(firstRowNum); - if (null == firstRow) { - log.warn("解析Excel失败,在第一行没有读取到任何数据!"); - } - - // 解析每一行的数据,构造数据对象 - int rowStart = firstRowNum + 1; - int rowEnd = sheet.getPhysicalNumberOfRows(); - for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) { - Row row = sheet.getRow(rowNum); - - if (null == row) { - continue; - } - - importExcelDTO resultData = convertRowToData(row); - if (null == resultData) { - log.warn("第 " + row.getRowNum() + "行数据不合法,已忽略!"); - continue; - } - resultDataList.add(resultData); - } - } - } - - return resultDataList; - } - - - /** - * 提取每一行中需要的数据,构造成为一个结果数据对象 - * - * 当该行中有单元格的数据为空或不合法时,忽略该行的数据 - * - * @param row 行数据 - * @return 解析后的行数据对象,行数据错误时返回null - */ - private static importExcelDTO convertRowToData(Row row) { - importExcelDTO resultData = new importExcelDTO(); - - Cell cell; - int cellNum = 0; - // 获取企标类型 - cell = row.getCell(cellNum++); - String bussSort = convertCellValueToString(cell); - resultData.setBussSort(bussSort); - // 获取企标名称 - cell = row.getCell(cellNum++); - String esName = convertCellValueToString(cell); - resultData.setEsName(esName); - //获取制修订类型 - cell = row.getCell(cellNum++); - String reviseStatus = convertCellValueToString(cell); - resultData.setReviseStatus(reviseStatus); - //获取起草责任单位 - cell = row.getCell(cellNum++); - String unitName = convertCellValueToString(cell); - resultData.setUnit(unitName); - //获取起草人 - cell = row.getCell(cellNum++); - String drafterName = convertCellValueToString(cell); - resultData.setDrafter(drafterName); - //获取评审责任人 - cell = row.getCell(cellNum++); - String resPersonName = convertCellValueToString(cell); - resultData.setResPerson(resPersonName); - //获取工作组组长 - cell = row.getCell(cellNum++); - String wgLeaderName = convertCellValueToString(cell); - resultData.setWgLeader(wgLeaderName); - //获取计划初稿完成日期 - cell = row.getCell(cellNum++); - String draftTime = convertCellValueToString(cell); - resultData.setDraftTime(draftTime); - //获取计划标准发布时间 - cell = row.getCell(cellNum++); - String releaseTime = convertCellValueToString(cell); - resultData.setReleaseTime(releaseTime); - //获取立项完成时间 - cell = row.getCell(cellNum++); - String endTime = convertCellValueToString(cell); - resultData.setEndTime(endTime); - - return resultData; - } - /** * 将单元格内容转换为字符串 * @param cell