Merge branch 'develop_3' into 'develop_master'
匹配文件id和文件路径 See merge request LiuChao/foton-slrs-system-rest!232
This commit is contained in:
@@ -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<String> 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("-");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, String> 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<String,String> getFileMap(MultipartFile excel) throws IOException {
|
||||
|
||||
InputStream inputStream = excel.getInputStream();
|
||||
|
||||
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
|
||||
|
||||
XSSFSheet sheet = workbook.getSheetAt(0);
|
||||
|
||||
HashMap<String, String> 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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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<String, String> 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<String,String> getMatchSet(MultipartFile excel) throws IOException {
|
||||
InputStream inputStream = excel.getInputStream();
|
||||
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
|
||||
|
||||
XSSFSheet sheet = workbook.getSheetAt(0);
|
||||
|
||||
Map<String,String> 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;
|
||||
}
|
||||
|
||||
}
|
||||
+26
-10
@@ -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<ImportDto> {
|
||||
}
|
||||
|
||||
|
||||
@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<ImportDto> {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user