提交 c5aed13f authored 作者: xc's avatar xc

[excel导入]修改预览BUG

上级 bb635a88
...@@ -73,6 +73,7 @@ public class ExcelData { ...@@ -73,6 +73,7 @@ public class ExcelData {
public ResponseEntity getExcelData(int id){ public ResponseEntity getExcelData(int id){
String jsonData = modelHelper.getJsonExpample(id); String jsonData = modelHelper.getJsonExpample(id);
try { try {
//{className={propertyName=""}}
Map<String, Map<String, Object>> dataMap = JSON.parseObject(jsonData, Map<String, Map<String, Object>> dataMap = JSON.parseObject(jsonData,
new TypeReference<Map<String, Map<String, Object>>>(){}); new TypeReference<Map<String, Map<String, Object>>>(){});
File file = new File(tmpPath); File file = new File(tmpPath);
...@@ -93,10 +94,11 @@ public class ExcelData { ...@@ -93,10 +94,11 @@ public class ExcelData {
String successFileNameList = ""; String successFileNameList = "";
String errorFileNameList = ""; String errorFileNameList = "";
String errorReason = ""; String errorReason = "";
int total = 0; int total = 0;//操作完成的总数量
percent =0; percent =0;//百分比数字
for (File dataFile : dataFiles){ for (File dataFile : dataFiles){
List<Map<String, Object>> mapList = new ArrayList<>(); //传给保存接口的list
List<Map<String, Object>> saveMapList = new ArrayList<>();
String fileName = dataFile.getName(); String fileName = dataFile.getName();
try { try {
//取模板,如果有模板文件传过来就解析模板文件并保存,否则就读本地模板 //取模板,如果有模板文件传过来就解析模板文件并保存,否则就读本地模板
...@@ -112,7 +114,6 @@ public class ExcelData { ...@@ -112,7 +114,6 @@ public class ExcelData {
//取数据 //取数据
FileInputStream dataFis = new FileInputStream(dataFile); FileInputStream dataFis = new FileInputStream(dataFile);
Workbook dataWb = null; Workbook dataWb = null;
if(fileName.endsWith("xls")) { if(fileName.endsWith("xls")) {
dataWb = new HSSFWorkbook(dataFis); dataWb = new HSSFWorkbook(dataFis);
} else if(fileName.endsWith("xlsx")) { } else if(fileName.endsWith("xlsx")) {
...@@ -125,22 +126,23 @@ public class ExcelData { ...@@ -125,22 +126,23 @@ public class ExcelData {
} }
for (int i = 0; i < dataWb.getNumberOfSheets(); i++){ for (int i = 0; i < dataWb.getNumberOfSheets(); i++){
Sheet sheet1 = dataWb.getSheetAt(i); Sheet sheet1 = dataWb.getSheetAt(i);
if ("引用表(请勿改动)".equals(sheet1.getSheetName())){ if (sheet1 == null || "引用表(请勿改动)".equals(sheet1.getSheetName())){
continue; continue;
} }
Map<String, Object> objectMap = new HashMap<>(); Map<String, Object> propertyNameAndData = new HashMap<>();
String className = null; String className = null;
//取模板位置数据 //取模板位置数据
for (String key : indexMap.keySet()){ for (String key : indexMap.keySet()){
int[] value = indexMap.get(key); int[] value = indexMap.get(key);
int dataRow = value[0]; int dataRow = value[0];
int dataCell = value[1]; int dataCell = value[1];
//key=className.propertyName
String[] classArray = key.split("[.]"); String[] classArray = key.split("[.]");
className = classArray[0]; className = classArray[0];
Row row = sheet1.getRow(dataRow); Row row = sheet1.getRow(dataRow);
row.getCell(dataCell).setCellType(CellType.STRING); row.getCell(dataCell).setCellType(CellType.STRING);
if (dataMap.get(className) != null && dataMap.get(className).keySet().contains(classArray[1])){ if (dataMap.get(className) != null && dataMap.get(className).keySet().contains(classArray[1])){
objectMap.put(classArray[1], row.getCell(dataCell).getStringCellValue()); propertyNameAndData.put(classArray[1], row.getCell(dataCell).getStringCellValue());
} }
if (ruleKeyList.contains(key)){ if (ruleKeyList.contains(key)){
//查询数据库是否有相同网络名称,有就更新 //查询数据库是否有相同网络名称,有就更新
...@@ -153,7 +155,7 @@ public class ExcelData { ...@@ -153,7 +155,7 @@ public class ExcelData {
List<Map<String, Object>> list = modelService.complexQuery(className, null, queryConditions); List<Map<String, Object>> list = modelService.complexQuery(className, null, queryConditions);
if (list != null && list.size() > 0){ if (list != null && list.size() > 0){
Object object = list.get(0).get("id"); Object object = list.get(0).get("id");
objectMap.put("id", object); propertyNameAndData.put("id", object);
} }
} }
} }
...@@ -165,26 +167,26 @@ public class ExcelData { ...@@ -165,26 +167,26 @@ public class ExcelData {
Row row = sheet1.getRow(dataRow); Row row = sheet1.getRow(dataRow);
row.getCell(dataCell).setCellType(CellType.STRING); row.getCell(dataCell).setCellType(CellType.STRING);
String[] classArray = remark.getClassName().split("[.]"); String[] classArray = remark.getClassName().split("[.]");
Object templateData = objectMap.get(classArray[1]); Object templateData = propertyNameAndData.get(classArray[1]);
if (String.valueOf(templateData).contains(remark.getRemark())){ if (String.valueOf(templateData).contains(remark.getRemark())){
String remarkData = row.getCell(dataCell).getStringCellValue(); String remarkData = row.getCell(dataCell).getStringCellValue();
if ("append".equals(remark.getType())){ if ("append".equals(remark.getType())){
Object temData = objectMap.get(classArray[1]) == null ? "" : objectMap.get(classArray[1]); Object temData = propertyNameAndData.get(classArray[1]) == null ? "" : propertyNameAndData.get(classArray[1]);
remarkData = temData + remark.getJointMark() + remarkData; remarkData = temData + remark.getJointMark() + remarkData;
objectMap.put(classArray[1], temData); propertyNameAndData.put(classArray[1], remarkData);
} }
objectMap.put(classArray[1], remarkData); propertyNameAndData.put(classArray[1], remarkData);
} }
} }
if (!objectMap.isEmpty()){ if (!propertyNameAndData.isEmpty()){
Map<String, Object> result = new HashMap<>(); Map<String, Object> classNameAndDataMap = new HashMap<>();
result.put(className, objectMap); classNameAndDataMap.put(className, propertyNameAndData);
System.out.println(result); System.out.println(classNameAndDataMap);
mapList.add(result); saveMapList.add(classNameAndDataMap);
} }
} }
int re = modelService.putValueByEntityNameList(mapList); int re = modelService.putValueByEntityNameList(saveMapList);
if (re == 0){ if (re == 0){
successFileNameList = successFileNameList + "[" + fileName + "]"; successFileNameList = successFileNameList + "[" + fileName + "]";
dataFile.renameTo(new File(successPath + fileName)); dataFile.renameTo(new File(successPath + fileName));
...@@ -228,13 +230,15 @@ public class ExcelData { ...@@ -228,13 +230,15 @@ public class ExcelData {
public ResponseEntity compareRule(){ public ResponseEntity compareRule(){
if (path == null){ if (path == null){
path = findPaths(); path = findPaths();
// return ResultUtil.failed("没有配置导入路径!"); if ("".equals(path)){
return ResultUtil.failed("没有配置导入路径!");
}
} }
List<ExcelErrorVo> excelVos = new ArrayList<>(); List<ExcelErrorVo> excelVos = new ArrayList<>();
List<Rule> rules = ruleService.findAll(); List<Rule> rules = ruleService.findAll();
int successNum = 0; int successNum = 0;//符合规则文件数量
int errorNum = 0; int errorNum = 0;//不符合规则文件数据
int total = 0; int total = 0;//总文件数量
boolean isSuccess = true; boolean isSuccess = true;
try { try {
Template template = new Template(); Template template = new Template();
...@@ -261,7 +265,7 @@ public class ExcelData { ...@@ -261,7 +265,7 @@ public class ExcelData {
Map<String, List<Quote>> he = modelHelper.getQuoteList(className); Map<String, List<Quote>> he = modelHelper.getQuoteList(className);
for (File dataFile : dataFiles){ for (File dataFile : dataFiles){
String fileName = dataFile.getName(); String fileName = dataFile.getName();
isSuccess = true; isSuccess = true;//判断该文件是否全部符合规则
String tel = null;//联系方式 String tel = null;//联系方式
String unitName = null;//联系方式 String unitName = null;//联系方式
String buildTel = null;//承建单位 String buildTel = null;//承建单位
...@@ -276,23 +280,21 @@ public class ExcelData { ...@@ -276,23 +280,21 @@ public class ExcelData {
} else if(fileName.endsWith("xlsx")) { } else if(fileName.endsWith("xlsx")) {
wb = new XSSFWorkbook(dataFis); wb = new XSSFWorkbook(dataFis);
} }
Map<String, List<String>> map = new HashMap<>(); //{别名=数据}
Map<String, List<String>> sheetNameMap = new HashMap<>(); Map<String, List<String>> ruleNameAndDataList = new HashMap<>();
Map<String, String> content = new HashMap<>(); Map<String, List<String>> ruleNameAndSheetNameList = new HashMap<>();
Map<String, String> networkName = new HashMap<>(); Map<String, String> sheetNameAndContent = new HashMap<>();
Map<String, String> networkNameAndSheetName = new HashMap<>();
for (int i = 0; i < wb.getNumberOfSheets(); i++){ for (int i = 0; i < wb.getNumberOfSheets(); i++){
Sheet sheet1 = wb.getSheetAt(i); Sheet sheet1 = wb.getSheetAt(i);
if ("引用表(请勿改动)".equals(sheet1.getSheetName())){ if ("引用表(请勿改动)".equals(sheet1.getSheetName()) || sheet1 ==null){
continue; continue;
} }
if (sheet1 == null){ String sameNetSheetName = null;//网络名称sheet
continue; String sameNetName = "";//网络名称别名
}
String sameNet = null;
String sanmeNetName = "";
Row row = null; Row row = null;
for (String key : indexMap.keySet()){ for (String key : indexMap.keySet()){
//key=className.property //key=className.property,从模板文件中取该字段的位置
int[] value = indexMap.get(key); int[] value = indexMap.get(key);
int dataRow = value[0]; int dataRow = value[0];
int dataCell = value[1]; int dataCell = value[1];
...@@ -300,7 +302,7 @@ public class ExcelData { ...@@ -300,7 +302,7 @@ public class ExcelData {
row.getCell(dataCell).setCellType(CellType.STRING); row.getCell(dataCell).setCellType(CellType.STRING);
String data = row.getCell(dataCell).getStringCellValue(); String data = row.getCell(dataCell).getStringCellValue();
// TODO: 21-5-21 // 取单位名字、联系方式、承建单位联系方式
if ("diaoyan.unit_contact".equals(key) && tel == null){ if ("diaoyan.unit_contact".equals(key) && tel == null){
tel = data; tel = data;
} }
...@@ -310,18 +312,16 @@ public class ExcelData { ...@@ -310,18 +312,16 @@ public class ExcelData {
if ("diaoyan.name_of_user".equals(key) && unitName == null){ if ("diaoyan.name_of_user".equals(key) && unitName == null){
unitName = data; unitName = data;
} }
//判断是否是两个相同的sheet //判断是否是两个相同的sheet,数据准备
if (content.get(sheet1.getSheetName()) == null || content.get(sheet1.getSheetName()).isEmpty()) { if (sheetNameAndContent.get(sheet1.getSheetName()) == null || sheetNameAndContent.get(sheet1.getSheetName()).isEmpty()) {
content.put(sheet1.getSheetName(), data); sheetNameAndContent.put(sheet1.getSheetName(), data);
} else { } else {
String con = content.get(sheet1.getSheetName()); String con = sheetNameAndContent.get(sheet1.getSheetName());
content.put(sheet1.getSheetName(), con + data); sheetNameAndContent.put(sheet1.getSheetName(), con + data);
} }
//判断引用 //判断引用是否符合规则
String propertyName = key.split("[.]")[1]; String propertyName = key.split("[.]")[1];
List<Quote> quotes = he.get(propertyName); List<Quote> quotes = he.get(propertyName);
// System.out.println("引用");
// System.out.println(JSON.toJSONString(quotes));
if (quotes != null && quotes.size() > 0){ if (quotes != null && quotes.size() > 0){
boolean isQuote = true; boolean isQuote = true;
for (Quote quote : quotes){ for (Quote quote : quotes){
...@@ -340,28 +340,30 @@ public class ExcelData { ...@@ -340,28 +340,30 @@ public class ExcelData {
List<Rule> ruleList = rules.stream().filter(rule1 -> rule1.getRuleKey().equals(key)).collect(Collectors.toList()); List<Rule> ruleList = rules.stream().filter(rule1 -> rule1.getRuleKey().equals(key)).collect(Collectors.toList());
if (!ruleList.isEmpty()) { if (!ruleList.isEmpty()) {
Rule rule = ruleList.get(0); Rule rule = ruleList.get(0);
//判断同一个文件里所有sheet中该字段是否相同 //判断同一个文件里所有sheet中该字段是否相同,数据准备
if (rule.getCompare() == 1) { if (rule.getCompare() == 1) {
if (map.get(rule.getName())== null || map.get(rule.getName()).isEmpty()) { if (ruleNameAndDataList.get(rule.getName())== null || ruleNameAndDataList.get(rule.getName()).isEmpty()) {
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
list.add(data); list.add(data);
List<String> list1 = new ArrayList<>(); List<String> list1 = new ArrayList<>();
list1.add(sheet1.getSheetName()); list1.add(sheet1.getSheetName());
map.put(rule.getName(), list); ruleNameAndDataList.put(rule.getName(), list);
sheetNameMap.put(rule.getName(), list1); ruleNameAndSheetNameList.put(rule.getName(), list1);
} else { } else {
if (!map.get(rule.getName()).contains(data)){ if (!ruleNameAndDataList.get(rule.getName()).contains(data)){
map.get(rule.getName()).add(data); ruleNameAndDataList.get(rule.getName()).add(data);
ruleNameAndSheetNameList.get(rule.getName()).add(sheet1.getSheetName());
} }
} }
}else if (rule.getCompare() == 2){ }else if (rule.getCompare() == 2){
//判断统一文件中该字段是否唯一 //判断统一文件中该字段是否唯一,网络名称是否唯一,数据准备
if (networkName.keySet().contains(data)) { if (networkNameAndSheetName.keySet().contains(data)) {
sameNet = networkName.get(data); sameNetSheetName = networkNameAndSheetName.get(data);//网络名称相同的sheetName
} }
sanmeNetName = rule.getName(); sameNetName = rule.getName();//别名
networkName.put(data, sheet1.getSheetName()); networkNameAndSheetName.put(data, sheet1.getSheetName());
} }
//正则判断
Pattern p = Pattern.compile(rule.getRule()); Pattern p = Pattern.compile(rule.getRule());
Matcher m = p.matcher(data); Matcher m = p.matcher(data);
if (!m.matches()) { if (!m.matches()) {
...@@ -374,30 +376,33 @@ public class ExcelData { ...@@ -374,30 +376,33 @@ public class ExcelData {
} }
} }
if (sameNet != null){ //判断网络名字是否一样
String now = content.get(sheet1.getSheetName()); if (sameNetSheetName != null){
String last = content.get(sameNet); String now = sheetNameAndContent.get(sheet1.getSheetName());
String last = sheetNameAndContent.get(sameNetSheetName);
int k = result.size() + 1; int k = result.size() + 1;
if (Objects.equals(now, last)){ if (Objects.equals(now, last)){
result.add(k + ".\"" + sameNet + "\"与\"" + sheet1.getSheetName() + "\"存在内容相同表"); result.add(k + ".\"" + sameNetSheetName + "\"与\"" + sheet1.getSheetName() + "\"存在内容相同表");
}else { }else {
result.add(k + ".\"" + sameNet + "\"与\"" + sheet1.getSheetName() + "\"的\"" + sanmeNetName + "\"重名"); result.add(k + ".\"" + sameNetSheetName + "\"与\"" + sheet1.getSheetName() + "\"的\"" + sameNetName + "\"重名");
} }
isSuccess = false; isSuccess = false;
} }
} }
if (!map.isEmpty() && map.size() > 1){ //判断所有sheet ruleName的数据是否一样
for (String key : map.keySet()){ if (!ruleNameAndDataList.isEmpty()){
List<String> list = sheetNameMap.get(key); for (String key : ruleNameAndDataList.keySet()){
String sheetName = ""; List<String> list = ruleNameAndSheetNameList.get(key);
for (String s : list){ if (ruleNameAndDataList.get(key).size() > 1){
sheetName = "\"" + s + "\""; String sheetName = "";
for (String s : list){
sheetName = sheetName + "\"" + s + "\"";
}
//不是全部相同
int k = result.size() + 1;
result.add(k + "." + sheetName + "中的\"" + key + "\"不同");
isSuccess = false;
} }
//不是全部相同
int k = result.size() + 1;
result.add(k + "." + sheetName + "中\"" + key + "\"的数据不同");
isSuccess = false;
} }
} }
if (isSuccess){ if (isSuccess){
...@@ -410,7 +415,7 @@ public class ExcelData { ...@@ -410,7 +415,7 @@ public class ExcelData {
excelVos.add(new ExcelErrorVo(fileName, unitName, tel, buildTel, result)); excelVos.add(new ExcelErrorVo(fileName, unitName, tel, buildTel, result));
} }
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); // e.printStackTrace();
errorNum = errorNum + 1; errorNum = errorNum + 1;
int k = result.size() + 1; int k = result.size() + 1;
result.add(k + "." + "不是模板文件或读文件失败"); result.add(k + "." + "不是模板文件或读文件失败");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论