fix: 78107

测试导入-从列表上选择数据导出,在重新导入系统,导入成功了。没有校验标准编号的唯一性
This commit is contained in:
2023-11-05 15:59:04 +08:00
parent 3ccb405575
commit 0fa11447d7
2 changed files with 220 additions and 172 deletions
@@ -1473,22 +1473,10 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
headerList.remove(headerList.size() - 1); headerList.remove(headerList.size() - 1);
headerList.add(inspectContentTag); headerList.add(inspectContentTag);
} }
// 从数据行开始遍历 // 获取错误信息
for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) { errMsgList = importUtil.validExcelData(sheet, headerList, fileMap, insertDataList);
Map<String, Object> parameterMap = new HashMap<>();
for (int j = 0; j < headerList.size(); j++) {
// 获取当前单元格
Cell cell = sheet.getRow(i).getCell(j);
// 获取当前单元格内容对应的字段
LawsTag tag = headerList.get(j);
// 调用导入工具类的校验方法
errMsgList.addAll(importUtil.allColumnValid(cell, tag, i, j, parameterMap, fileMap));
}
insertDataList.add(parameterMap);
}
} }
return errMsgList; return errMsgList;
} }
/** /**
@@ -10,7 +10,13 @@ import com.jero.common.system.vo.DictModel;
import com.jero.common.util.CommonUtils; import com.jero.common.util.CommonUtils;
import com.jero.common.util.oConvertUtils; import com.jero.common.util.oConvertUtils;
import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.common.constant.FieldCommon;
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.entity.LawsOverseasStandard;
import com.jero.modules.laws.standard.entity.LawsTreeNode; import com.jero.modules.laws.standard.entity.LawsTreeNode;
import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.laws.standard.service.ILawsOverseasStandardService;
import com.jero.modules.laws.standard.service.ILawsTreeNodeService; import com.jero.modules.laws.standard.service.ILawsTreeNodeService;
import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.service.IOSSFileService; import com.jero.modules.oss.service.IOSSFileService;
@@ -25,6 +31,7 @@ import com.jero.modules.tag.enums.FieldShowTypeEnum;
import com.jero.modules.tag.enums.TableNameEnum; import com.jero.modules.tag.enums.TableNameEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellReference;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -65,19 +72,42 @@ public class ImportUtil {
@Resource @Resource
private ISysDictItemService sysDictItemService; private ISysDictItemService sysDictItemService;
public List<String> allColumnValid(Cell cell, LawsTag tag, int i, int j, Map<String, Object> parameterMap, Map<String, File> fileMap) { @Resource
private ILawsEnterpriseStandardService lawsEnterpriseStandardService;
@Resource
private ILawsDomesticStandardService lawsDomeStandardService;
@Resource
private ILawsOverseasStandardService overseasStandardService;
public List<String> validExcelData(Sheet sheet, List<LawsTag> headerList, Map<String, File> fileMap, List<Map<String, Object>> insertDataList) {
List<String> errMsgList = new ArrayList<>(); List<String> errMsgList = new ArrayList<>();
// 从数据行开始遍历
for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) {
int line = i + 1;
StringBuilder errMsg = new StringBuilder("第" + line + "行");
Map<String, Object> parameterMap = new HashMap<>();
for (int j = 0; j < headerList.size(); j++) {
String row = CellReference.convertNumToColString(j);
// 获取当前单元格
Cell cell = sheet.getRow(i).getCell(j);
// 获取当前单元格内容对应的字段
LawsTag tag = headerList.get(j);
// 必填验证 // 必填验证
if (YesOrNoEnum.YES.getValue().equals(tag.getFieldMustInput())) { if (YesOrNoEnum.YES.getValue().equals(tag.getFieldMustInput())) {
if (!this.mustInputValid(cell)) { if (!this.mustInputValid(cell)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列" + tag.getDbFieldTxt() + "为必填"); log.error("第" + row + "列" + tag.getDbFieldTxt() + "为必填 ");
errMsgList.add("第" + (i) + "行第" + (j + 1) + "列" + tag.getDbFieldTxt() + "为必填"); errMsg.append("第").append(i).append("行第").append(row).append("列").append(tag.getDbFieldTxt()).append("为必填 ");
return errMsgList; continue;
} }
} }
// 获取当前单元格内容 // 获取当前单元格内容
if (cell == null) { if (cell == null) {
return errMsgList; continue;
} }
String cellValue = cell.toString().trim(); String cellValue = cell.toString().trim();
@@ -86,8 +116,8 @@ public class ImportUtil {
if (TableNameEnum.ENTERPRISE_STANDARDS.getValue().equals(tag.getIsModel())) { if (TableNameEnum.ENTERPRISE_STANDARDS.getValue().equals(tag.getIsModel())) {
// 使用正则表达式进行基础的格式验证 // 使用正则表达式进行基础的格式验证
if (!cellValue.matches("^[A-Z]{1,2}/[A-Z]{2} [1-9A-HJ-Z]\\d{4}-\\d{4}$")) { if (!cellValue.matches("^[A-Z]{1,2}/[A-Z]{2} [1-9A-HJ-Z]\\d{4}-\\d{4}$")) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "格式不正确"); log.error("第" + row + "列输入的" + tag.getDbFieldTxt() + "格式不正确 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "格式不正确"); errMsg.append("第").append(row).append("列输入的").append(tag.getDbFieldTxt()).append("格式不正确 ");
} else { } else {
// 拆分成两部分,前半部分和后半部分 // 拆分成两部分,前半部分和后半部分
String[] mainParts = cellValue.split(" "); String[] mainParts = cellValue.split(" ");
@@ -114,6 +144,32 @@ public class ImportUtil {
parameterMap.put(FieldCommon.YEAR_NUMBER, yearCode); parameterMap.put(FieldCommon.YEAR_NUMBER, yearCode);
} }
} }
// 校验编号唯一性
if (TableNameEnum.ENTERPRISE_STANDARDS.getValue().equals(tag.getIsModel())) {
LawsEnterpriseStandard lawsEnterpriseStandard = lawsEnterpriseStandardService.queryByStandardNumber(cellValue);
if (lawsEnterpriseStandard != null) {
log.error("第" + row + "列输入的" + tag.getDbFieldTxt() + "已存在 ");
errMsg.append("第").append(row).append("列输入的").append(tag.getDbFieldTxt()).append("已存在 ");
}
}
if (TableNameEnum.DOMESTIC_REGULATIONS.getValue().equals(tag.getIsModel())) {
QueryWrapper<LawsDomesticStandard> domesticStandardQueryWrapper = new QueryWrapper<>();
domesticStandardQueryWrapper.eq(FieldCommon.STANDARD_NUMBER, cellValue);
LawsDomesticStandard lawsDomesticStandard = lawsDomeStandardService.getOne(domesticStandardQueryWrapper);
if (lawsDomesticStandard != null) {
log.error("第" + row + "列输入的" + tag.getDbFieldTxt() + "已存在 ");
errMsg.append("第").append(row).append("列输入的").append(tag.getDbFieldTxt()).append("已存在 ");
}
}
if (TableNameEnum.FOREIGN_REGULATIONS.getValue().equals(tag.getIsModel())) {
QueryWrapper<LawsOverseasStandard> foreignStandardQueryWrapper = new QueryWrapper<>();
foreignStandardQueryWrapper.eq(FieldCommon.STANDARD_NUMBER, cellValue);
LawsOverseasStandard lawsOverseasStandard = overseasStandardService.getOne(foreignStandardQueryWrapper);
if (lawsOverseasStandard != null) {
log.error("第" + row + "列输入的" + tag.getDbFieldTxt() + "已存在 ");
errMsg.append("第").append(row).append("列输入的").append(tag.getDbFieldTxt()).append("已存在 ");
}
}
} }
// 单选时间 // 单选时间
if (FieldShowTypeEnum.SINGLE_DATE_PICKER.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.SINGLE_DATE_PICKER.getValue().equals(tag.getFieldShowType())) {
@@ -126,14 +182,14 @@ public class ImportUtil {
// 字段长度校验 // 字段长度校验
if (FieldShowTypeEnum.TEXT_BOX.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.TEXT_BOX.getValue().equals(tag.getFieldShowType())) {
if (cellValue.length() > 50) { if (cellValue.length() > 50) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "超过50字"); log.error("第" + row + "列输入的" + tag.getDbFieldTxt() + "超过50字 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "超过50字"); errMsg.append("第").append(row).append("列输入的").append(tag.getDbFieldTxt()).append("超过50字 ");
} }
} }
if (FieldShowTypeEnum.MULTI_TEXT.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.MULTI_TEXT.getValue().equals(tag.getFieldShowType())) {
if (cellValue.length() > 500) { if (cellValue.length() > 500) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列字段" + tag.getDbFieldTxt() + "超过500字"); log.error("第" + row + "列字段" + tag.getDbFieldTxt() + "超过500字 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列字段" + tag.getDbFieldTxt() + "超过500字"); errMsg.append("第").append(row).append("列字段").append(tag.getDbFieldTxt()).append("超过500字 ");
} }
} }
@@ -141,8 +197,8 @@ public class ImportUtil {
if (FieldShowTypeEnum.DROPDOWN_SINGLE_SELECT.getValue().equals(tag.getFieldShowType()) || if (FieldShowTypeEnum.DROPDOWN_SINGLE_SELECT.getValue().equals(tag.getFieldShowType()) ||
FieldShowTypeEnum.DROPDOWN_MULTI_SELECT.getValue().equals(tag.getFieldShowType())) { FieldShowTypeEnum.DROPDOWN_MULTI_SELECT.getValue().equals(tag.getFieldShowType())) {
if (!this.dictValid(tag.getDictField(), cellValue)) { if (!this.dictValid(tag.getDictField(), cellValue)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为value // 转为value
cellValue = this.convertDictValue(tag.getDictField(), cellValue); cellValue = this.convertDictValue(tag.getDictField(), cellValue);
@@ -151,8 +207,8 @@ public class ImportUtil {
// 单选组织机构 // 单选组织机构
if (FieldShowTypeEnum.SINGLE_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.SINGLE_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) {
if (!this.singleOrgValid(cellValue)) { if (!this.singleOrgValid(cellValue)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为id // 转为id
cellValue = this.convertSingleOrgId(cellValue); cellValue = this.convertSingleOrgId(cellValue);
@@ -161,8 +217,8 @@ public class ImportUtil {
// 单选人员 // 单选人员
if (FieldShowTypeEnum.SINGLE_USER_DIALOG.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.SINGLE_USER_DIALOG.getValue().equals(tag.getFieldShowType())) {
if (!this.singleUserValid(cellValue)) { if (!this.singleUserValid(cellValue)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为id // 转为id
cellValue = this.convertSingleUserId(cellValue); cellValue = this.convertSingleUserId(cellValue);
@@ -171,8 +227,8 @@ public class ImportUtil {
// 多选组织机构 // 多选组织机构
if (FieldShowTypeEnum.MULTI_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.MULTI_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) {
if (!this.multiOrgValid(cellValue)) { if (!this.multiOrgValid(cellValue)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为id // 转为id
cellValue = this.convertMultiOrgId(cellValue); cellValue = this.convertMultiOrgId(cellValue);
@@ -181,8 +237,8 @@ public class ImportUtil {
// 零部件 // 零部件
if (tag.getDbFieldName().equals("part_name") && StrUtil.isNotBlank(cellValue)) { if (tag.getDbFieldName().equals("part_name") && StrUtil.isNotBlank(cellValue)) {
if (!this.partValid(cellValue)) { if (!this.partValid(cellValue)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为id // 转为id
cellValue = this.convertPartId(cellValue); cellValue = this.convertPartId(cellValue);
@@ -191,8 +247,8 @@ public class ImportUtil {
// 体系 // 体系
if (FieldCommon.STANDARD_SYSTEM.equals(tag.getDbFieldName())) { if (FieldCommon.STANDARD_SYSTEM.equals(tag.getDbFieldName())) {
if (!this.standardSystemValid(cellValue)) { if (!this.standardSystemValid(cellValue)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为id // 转为id
cellValue = this.convertStandardSystem(cellValue); cellValue = this.convertStandardSystem(cellValue);
@@ -201,8 +257,8 @@ public class ImportUtil {
// 文件 // 文件
if (FieldShowTypeEnum.FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) {
if (!this.fileValid(cellValue, fileMap)) { if (!this.fileValid(cellValue, fileMap)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为id // 转为id
cellValue = this.convertFileIds(cellValue, fileMap); cellValue = this.convertFileIds(cellValue, fileMap);
@@ -211,8 +267,8 @@ public class ImportUtil {
// 多选时间 // 多选时间
if (FieldShowTypeEnum.MULTI_DATE_PICKER.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.MULTI_DATE_PICKER.getValue().equals(tag.getFieldShowType())) {
if (!this.multiDateValid(cellValue)) { if (!this.multiDateValid(cellValue)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为id // 转为id
cellValue = this.multiDateConvert(cellValue); cellValue = this.multiDateConvert(cellValue);
@@ -224,14 +280,18 @@ public class ImportUtil {
// 企标稽查内容文件导入 // 企标稽查内容文件导入
if (FieldShowTypeEnum.INSPECT_CONTENT_FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) { if (FieldShowTypeEnum.INSPECT_CONTENT_FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) {
if (!this.inspectContentFileValid(cellValue, fileMap)) { if (!this.inspectContentFileValid(cellValue, fileMap)) {
log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 ");
errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 ");
} else { } else {
// 转为List // 转为List
// 将转好的值加入Map // 将转好的值加入Map
parameterMap.put(tag.getDbFieldName(), this.convertInspectContentFile(cellValue, fileMap)); parameterMap.put(tag.getDbFieldName(), this.convertInspectContentFile(cellValue, fileMap));
} }
} }
}
errMsgList.add(errMsg.toString());
insertDataList.add(parameterMap);
}
return errMsgList; return errMsgList;
} }