diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/Analysis.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/Analysis.java index 48282495..a9356585 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/Analysis.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/Analysis.java @@ -42,18 +42,18 @@ public class Analysis { //获取表1的标准号 String value = row.getCell(1).toString(); Cell sortCell = row.createCell(11); - Cell sortNumber = row.createCell(12); - Cell sortYear = row.createCell(13); + Cell numberCell = row.createCell(12); + Cell yearCell = row.createCell(13); sortCell.setCellType(CellType.STRING); - sortNumber.setCellType(CellType.STRING); - sortYear.setCellType(CellType.STRING); + numberCell.setCellType(CellType.STRING); + yearCell.setCellType(CellType.STRING); List collect = sortSet.stream() .filter(item ->{ int length = item.length(); if (value.length()>length){ - return value.substring(0, length).contains(item.trim()); + return value.substring(0, length).contains(item); }else return false; }) .collect(Collectors.toList()); @@ -68,8 +68,8 @@ public class Analysis { // pattern.matcher(standId).matches() if (value.length()>=length+5){ sortCell.setCellValue(collect.get(0)); - sortNumber.setCellValue(value.substring(length,value.length()-5)); - sortYear.setCellValue(value.substring(value.length()-4)); + numberCell.setCellValue(value.substring(length,value.length()-5)); + yearCell.setCellValue(value.substring(value.length()-4)); } }else if (collect.size()>1){ String maxLenSort=""; @@ -86,16 +86,16 @@ public class Analysis { sortCell.setCellValue(maxLenSort); - sortNumber.setCellValue(value.substring(length,value.length()-5)); - sortYear.setCellValue(value.substring(value.length()-4)); + numberCell.setCellValue(value.substring(length,value.length()-5)); + yearCell.setCellValue(value.substring(value.length()-4)); } } else { logger.info("-"); sortCell.setCellValue("-"); - sortNumber.setCellValue("-"); - sortYear.setCellValue("-"); + numberCell.setCellValue("-"); + yearCell.setCellValue("-"); } } } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/PathMatcher.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/PathMatcher.java new file mode 100644 index 00000000..a046b6f5 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/PathMatcher.java @@ -0,0 +1,100 @@ +package com.adc.da.slrs.ImportExcelDatas.comment; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; + +public class PathMatcher { + private static final Logger logger = LoggerFactory.getLogger(PathMatcher.class); + + public void run(MultipartFile target,MultipartFile attach) throws IOException { + + InputStream inputStream = target.getInputStream(); + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + + XSSFSheet sheet = workbook.getSheetAt(0); + + HashMap fileMap = getFileMap(attach); + + + for (Row row : sheet) { + + String latter = row.getCell(1).getStringCellValue().trim();//标准号 + String fileId=""; + if (row.getCell(10)!=null){ + fileId = row.getCell(10).getStringCellValue().trim();//文档id + }else { + logger.info("+"); + continue; + } + + + StringBuilder builder = new StringBuilder(); + builder.append(fileId) + .append(latter); + if (fileMap.containsKey(builder.toString())){ + Cell cell = row.createCell(9); + cell.setCellType(CellType.STRING); + cell.setCellValue(fileMap.get(builder.toString())); + logger.info("*"); + }else { + logger.info("-"); + + } + + } + + File file = new File("C:\\Users\\22501\\Desktop\\foton标准数据\\匹配带入文件路径-国内库.xlsx"); + FileOutputStream os = new FileOutputStream(file); + workbook.write(os); + + + } + + + + private HashMap getFileMap(MultipartFile excel) throws IOException { + + InputStream inputStream = excel.getInputStream(); + + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + + XSSFSheet sheet = workbook.getSheetAt(0); + + HashMap resultMap = new HashMap<>(); + for (Row row : sheet) { + + String value = row.getCell(0).getStringCellValue(); + + String[] strArray = value.split(","); + + StringBuilder builder = new StringBuilder(); + builder.append(strArray[1].trim()) //文档id + .append(strArray[2].trim()); //标准号 + + + String path = strArray[3]; + + resultMap.put(builder.toString(),path); + + } + + return resultMap; + + + } + + + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/StandMatcher.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/StandMatcher.java new file mode 100644 index 00000000..041a0c47 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/comment/StandMatcher.java @@ -0,0 +1,186 @@ +package com.adc.da.slrs.ImportExcelDatas.comment; + + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.DateUtil; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import static org.apache.poi.ss.usermodel.CellType.NUMERIC; + +public class StandMatcher { + + + private static final Logger logger = LoggerFactory.getLogger(StandMatcher.class); + + + public void run(MultipartFile target,MultipartFile attach) throws IOException { + InputStream inputStream = target.getInputStream(); + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + + XSSFSheet sheet = workbook.getSheetAt(0); + + Map matchSet = getMatchSet(attach); + + for (Row row : sheet) { + + String letter =convertCellValueToString(row.getCell(1));//标准号 + + String publish = convertCellValueToString(row.getCell(3));//发布日期 + + String impl= convertCellValueToString(row.getCell(4));//实施日期 + + String state = convertCellValueToString(row.getCell(2));//状态 + + String replace= convertCellValueToString(row.getCell(5));//代替标准号 + + + + + + StringBuilder strBuilder = new StringBuilder(); + strBuilder.append(letter) + .append(publish) + .append(impl) + .append(state) + .append(replace); + String str = strBuilder.toString(); + + if (matchSet.containsKey(str)){ + Cell cell = row.createCell(10); //再第10列存放文件id + cell.setCellType(CellType.STRING); + cell.setCellValue(matchSet.get(str)); + logger.info("*"); + }else { + logger.info("-"); + + } + + } + + File result = new File("C:\\Users\\22501\\Desktop\\foton标准数据\\匹配带入文件id-国内库.xlsx"); + FileOutputStream os = new FileOutputStream(result); + workbook.write(os); + } + + + + + private Map getMatchSet(MultipartFile excel) throws IOException { + InputStream inputStream = excel.getInputStream(); + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + + XSSFSheet sheet = workbook.getSheetAt(0); + + Map resultSet = new HashMap<>(); + + + for (Row row : sheet) { + + String letter =convertCellValueToString(row.getCell(0));//标准号 + + String publish = convertCellValueToString(row.getCell(3));//发布日期 + + String impl= convertCellValueToString(row.getCell(4));//实施日期 + + String state = convertCellValueToString(row.getCell(5));//状态 + + String replace= convertCellValueToString(row.getCell(6));//代替标准号 + + + + StringBuilder strBuilder = new StringBuilder(); + strBuilder.append(letter) + .append(publish) + .append(impl) + .append(state) + .append(replace); + + + + if (row.getCell(7).getCellType()== NUMERIC){ + String s = row.getCell(7).toString(); + String fileId =s.substring(0,s.length()-2);//文件id + resultSet.put(strBuilder.toString(),fileId); + + } + + } + + + return resultSet; + } + + + + + + + /** + * 将单元格内容转化为字符串 + */ + private static String convertCellValueToString(Cell cell) { + if (null == cell) { + return ""; + } + String returnValue = ""; + switch (cell.getCellType()) { + case STRING: //字符串 + returnValue = cell.getStringCellValue().trim(); + break; + case NUMERIC: //数字 + + + + if (DateUtil.isCellDateFormatted(cell)) { + Date tempValue = cell.getDateCellValue(); + SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + returnValue = simpleFormat.format(tempValue); + }else { + returnValue = String.valueOf(cell.getNumericCellValue()); + } + + + returnValue=cell.toString().trim(); + + + break; + case BOOLEAN: //布尔 + boolean booleanCellValue = cell.getBooleanCellValue(); + returnValue = Boolean.toString(booleanCellValue).trim(); + break; + case BLANK: //空值 + break; + case FORMULA: //公式 + cell.getCellFormula(); + break; + case ERROR: //故障 + break; + default: + break; + } + return returnValue; + } + /** + * 判断是否为整数,是返回true,否则返回false. + */ + public static boolean isIntegerForDouble(Double num) { + double eqs = 1e-10; //精度范围 + return num - Math.floor(num) < eqs; + } + +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java index 407751ae..ab6ad83d 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/ImportExcelDatas/controller/ImportExcelController.java @@ -2,10 +2,7 @@ package com.adc.da.slrs.ImportExcelDatas.controller; import com.adc.da.base.web.BaseController; import com.adc.da.common.ReadExcel; -import com.adc.da.slrs.ImportExcelDatas.comment.Analysis; -import com.adc.da.slrs.ImportExcelDatas.comment.Contrast; -import com.adc.da.slrs.ImportExcelDatas.comment.ExclErrorOut; -import com.adc.da.slrs.ImportExcelDatas.comment.ExclExport; +import com.adc.da.slrs.ImportExcelDatas.comment.*; import com.adc.da.slrs.ImportExcelDatas.entity.ImportDto; import com.adc.da.slrs.ImportExcelDatas.service.ImportExcelService; import com.adc.da.util.exception.AdcDaBaseException; @@ -90,7 +87,7 @@ public class ImportExcelController extends BaseController { } - @ApiOperation("从excl分解") + @ApiOperation("从excl分解出标准号") @PostMapping("/analysisExcl") public void analysisExcl(MultipartFile exclFile,MultipartFile standSort, HttpServletResponse response, HttpServletRequest request) throws IOException { /** @@ -139,20 +136,39 @@ public class ImportExcelController extends BaseController { return importExcelService.isExist(exclFile); } - @ApiOperation("对比") + @ApiOperation("对比两个excel表中的标准名称") @PostMapping("/contrast") - public void contrast(MultipartFile all,MultipartFile excel) throws IOException { + public void contrast(MultipartFile targetExcel,MultipartFile excel) throws IOException { Contrast contrast = new Contrast(); - contrast.run(all,excel); + contrast.run(targetExcel,excel); } @ApiOperation("根据标准从excl中分解出标准号,类别,年份") @PostMapping("/analysis") - public void analysis(MultipartFile exclFile,MultipartFile standSort) throws IOException { + public void analysis(MultipartFile targetExcel,MultipartFile attachExcel) throws IOException { Analysis analysis = new Analysis(); analysis.setSortColumn(1); - analysis.run(exclFile,standSort); + analysis.run(targetExcel,attachExcel); } + + + + @ApiOperation("匹配文件id") + @PostMapping("/matching") + public void matching(MultipartFile targetExcel,MultipartFile attachExcel) throws IOException { + StandMatcher standMatcher = new StandMatcher(); + standMatcher.run(targetExcel, attachExcel); + } + + + @ApiOperation("根据文件id和标准匹配文件路径") + @PostMapping("/matchingPath") + public void matchingPath(MultipartFile targetExcel,MultipartFile attachExcel) throws IOException { + + PathMatcher pathMatcher = new PathMatcher(); + pathMatcher.run(targetExcel,attachExcel); + } + }