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

[excel导入]修改预览BUG

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