diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index 2fa649e5..b01528c1 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -1473,22 +1473,10 @@ public class LawsCommonServiceImpl implements ILawsCommonService { headerList.remove(headerList.size() - 1); headerList.add(inspectContentTag); } - // 从数据行开始遍历 - for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) { - Map 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); - } + // 获取错误信息 + errMsgList = importUtil.validExcelData(sheet, headerList, fileMap, insertDataList); } return errMsgList; - } /** diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java b/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java index 13aaf08f..8df3617e 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java @@ -10,7 +10,13 @@ import com.jero.common.system.vo.DictModel; import com.jero.common.util.CommonUtils; import com.jero.common.util.oConvertUtils; 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.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.oss.entity.OSSFile; 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 lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellReference; import org.springframework.beans.factory.annotation.Value; import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Component; @@ -65,172 +72,225 @@ public class ImportUtil { @Resource private ISysDictItemService sysDictItemService; - public List allColumnValid(Cell cell, LawsTag tag, int i, int j, Map parameterMap, Map fileMap) { + @Resource + private ILawsEnterpriseStandardService lawsEnterpriseStandardService; + + @Resource + private ILawsDomesticStandardService lawsDomeStandardService; + + @Resource + private ILawsOverseasStandardService overseasStandardService; + + + public List validExcelData(Sheet sheet, List headerList, Map fileMap, List> insertDataList) { List errMsgList = new ArrayList<>(); - // 必填验证 - if (YesOrNoEnum.YES.getValue().equals(tag.getFieldMustInput())) { - if (!this.mustInputValid(cell)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列" + tag.getDbFieldTxt() + "为必填"); - errMsgList.add("第" + (i) + "行第" + (j + 1) + "列" + tag.getDbFieldTxt() + "为必填"); - return errMsgList; - } - } - // 获取当前单元格内容 - if (cell == null) { - return errMsgList; - } - String cellValue = cell.toString().trim(); - // 企标编号校验 - if (FieldCommon.STANDARD_NUMBER.equals(tag.getDbFieldName())) { - 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}$")) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "格式不正确"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "格式不正确"); - } else { - // 拆分成两部分,前半部分和后半部分 - String[] mainParts = cellValue.split(" "); - String firstPart = mainParts[0]; - String secondPart = mainParts[1]; + // 从数据行开始遍历 + for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) { + int line = i + 1; + StringBuilder errMsg = new StringBuilder("第" + line + "行"); + Map 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); - // 拆分前半部分获取企业标准代号和企业名称代号 - String[] firstPartElements = firstPart.split("/"); - String enterpriseStandardCode = firstPartElements[0]; - String enterpriseNameCode = firstPartElements[1]; + // 必填验证 + if (YesOrNoEnum.YES.getValue().equals(tag.getFieldMustInput())) { + if (!this.mustInputValid(cell)) { + log.error("第" + row + "列" + tag.getDbFieldTxt() + "为必填 "); + errMsg.append("第").append(i).append("行第").append(row).append("列").append(tag.getDbFieldTxt()).append("为必填 "); + continue; + } + } + // 获取当前单元格内容 + if (cell == null) { + continue; + } + String cellValue = cell.toString().trim(); - // 拆分后半部分获取标准类别代号,顺序号和年代号 - String[] secondPartElements = secondPart.split("-"); - String categoryAndSequence = secondPartElements[0]; - String yearCode = secondPartElements[1]; + // 企标编号校验 + if (FieldCommon.STANDARD_NUMBER.equals(tag.getDbFieldName())) { + 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}$")) { + log.error("第" + row + "列输入的" + tag.getDbFieldTxt() + "格式不正确 "); + errMsg.append("第").append(row).append("列输入的").append(tag.getDbFieldTxt()).append("格式不正确 "); + } else { + // 拆分成两部分,前半部分和后半部分 + String[] mainParts = cellValue.split(" "); + String firstPart = mainParts[0]; + String secondPart = mainParts[1]; - // 从标准类别代号和顺序号字符串中分离出标准类别代号和顺序号 - String categoryCode = categoryAndSequence.substring(0, 1); + // 拆分前半部分获取企业标准代号和企业名称代号 + String[] firstPartElements = firstPart.split("/"); + String enterpriseStandardCode = firstPartElements[0]; + String enterpriseNameCode = firstPartElements[1]; - // 转成字典值并存入 - parameterMap.put(FieldCommon.ENTERPRISE_STANDARD_CODE, this.convertDictValue("enterprise_standard_code", enterpriseStandardCode)); - parameterMap.put(FieldCommon.ENTERPRISE_NAME_CODE, this.convertDictValue("enterprise_name_code", enterpriseNameCode)); - parameterMap.put(FieldCommon.STANDARD_CATEGORY_CODE, this.convertDictValue("standard_category_code", categoryCode)); - parameterMap.put(FieldCommon.YEAR_NUMBER, yearCode); + // 拆分后半部分获取标准类别代号,顺序号和年代号 + String[] secondPartElements = secondPart.split("-"); + String categoryAndSequence = secondPartElements[0]; + String yearCode = secondPartElements[1]; + + // 从标准类别代号和顺序号字符串中分离出标准类别代号和顺序号 + String categoryCode = categoryAndSequence.substring(0, 1); + + // 转成字典值并存入 + parameterMap.put(FieldCommon.ENTERPRISE_STANDARD_CODE, this.convertDictValue("enterprise_standard_code", enterpriseStandardCode)); + parameterMap.put(FieldCommon.ENTERPRISE_NAME_CODE, this.convertDictValue("enterprise_name_code", enterpriseNameCode)); + parameterMap.put(FieldCommon.STANDARD_CATEGORY_CODE, this.convertDictValue("standard_category_code", categoryCode)); + 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 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 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())) { + Date date = cell.getDateCellValue(); + // 创建一个SimpleDateFormat对象,并指定所需的格式 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 使用SimpleDateFormat对象的format方法将Date对象转换为字符串 + cellValue = sdf.format(date); + } + // 字段长度校验 + if (FieldShowTypeEnum.TEXT_BOX.getValue().equals(tag.getFieldShowType())) { + if (cellValue.length() > 50) { + log.error("第" + row + "列输入的" + tag.getDbFieldTxt() + "超过50字 "); + errMsg.append("第").append(row).append("列输入的").append(tag.getDbFieldTxt()).append("超过50字 "); + } + } + if (FieldShowTypeEnum.MULTI_TEXT.getValue().equals(tag.getFieldShowType())) { + if (cellValue.length() > 500) { + log.error("第" + row + "列字段" + tag.getDbFieldTxt() + "超过500字 "); + errMsg.append("第").append(row).append("列字段").append(tag.getDbFieldTxt()).append("超过500字 "); + } + } + + // 下拉单选 + if (FieldShowTypeEnum.DROPDOWN_SINGLE_SELECT.getValue().equals(tag.getFieldShowType()) || + FieldShowTypeEnum.DROPDOWN_MULTI_SELECT.getValue().equals(tag.getFieldShowType())) { + if (!this.dictValid(tag.getDictField(), cellValue)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为value + cellValue = this.convertDictValue(tag.getDictField(), cellValue); + } + } + // 单选组织机构 + if (FieldShowTypeEnum.SINGLE_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) { + if (!this.singleOrgValid(cellValue)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为id + cellValue = this.convertSingleOrgId(cellValue); + } + } + // 单选人员 + if (FieldShowTypeEnum.SINGLE_USER_DIALOG.getValue().equals(tag.getFieldShowType())) { + if (!this.singleUserValid(cellValue)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为id + cellValue = this.convertSingleUserId(cellValue); + } + } + // 多选组织机构 + if (FieldShowTypeEnum.MULTI_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) { + if (!this.multiOrgValid(cellValue)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为id + cellValue = this.convertMultiOrgId(cellValue); + } + } + // 零部件 + if (tag.getDbFieldName().equals("part_name") && StrUtil.isNotBlank(cellValue)) { + if (!this.partValid(cellValue)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为id + cellValue = this.convertPartId(cellValue); + } + } + // 体系 + if (FieldCommon.STANDARD_SYSTEM.equals(tag.getDbFieldName())) { + if (!this.standardSystemValid(cellValue)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为id + cellValue = this.convertStandardSystem(cellValue); + } + } + // 文件 + if (FieldShowTypeEnum.FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) { + if (!this.fileValid(cellValue, fileMap)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为id + cellValue = this.convertFileIds(cellValue, fileMap); + } + } + // 多选时间 + if (FieldShowTypeEnum.MULTI_DATE_PICKER.getValue().equals(tag.getFieldShowType())) { + if (!this.multiDateValid(cellValue)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为id + cellValue = this.multiDateConvert(cellValue); + } + } + + // 将转好的值加入Map + parameterMap.put(tag.getDbFieldName(), cellValue); + // 企标稽查内容文件导入 + if (FieldShowTypeEnum.INSPECT_CONTENT_FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) { + if (!this.inspectContentFileValid(cellValue, fileMap)) { + log.error("第" + row + "列选项" + tag.getDbFieldTxt() + "填写错误 "); + errMsg.append("第").append(row).append("列选项").append(tag.getDbFieldTxt()).append("填写错误 "); + } else { + // 转为List + // 将转好的值加入Map + parameterMap.put(tag.getDbFieldName(), this.convertInspectContentFile(cellValue, fileMap)); + } } } - } - // 单选时间 - if (FieldShowTypeEnum.SINGLE_DATE_PICKER.getValue().equals(tag.getFieldShowType())) { - Date date = cell.getDateCellValue(); - // 创建一个SimpleDateFormat对象,并指定所需的格式 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // 使用SimpleDateFormat对象的format方法将Date对象转换为字符串 - cellValue = sdf.format(date); - } - // 字段长度校验 - if (FieldShowTypeEnum.TEXT_BOX.getValue().equals(tag.getFieldShowType())) { - if (cellValue.length() > 50) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "超过50字"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列输入的" + tag.getDbFieldTxt() + "超过50字"); - } - } - if (FieldShowTypeEnum.MULTI_TEXT.getValue().equals(tag.getFieldShowType())) { - if (cellValue.length() > 500) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列字段" + tag.getDbFieldTxt() + "超过500字"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列字段" + tag.getDbFieldTxt() + "超过500字"); - } - } - - // 下拉单选 - if (FieldShowTypeEnum.DROPDOWN_SINGLE_SELECT.getValue().equals(tag.getFieldShowType()) || - FieldShowTypeEnum.DROPDOWN_MULTI_SELECT.getValue().equals(tag.getFieldShowType())) { - if (!this.dictValid(tag.getDictField(), cellValue)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为value - cellValue = this.convertDictValue(tag.getDictField(), cellValue); - } - } - // 单选组织机构 - if (FieldShowTypeEnum.SINGLE_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) { - if (!this.singleOrgValid(cellValue)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为id - cellValue = this.convertSingleOrgId(cellValue); - } - } - // 单选人员 - if (FieldShowTypeEnum.SINGLE_USER_DIALOG.getValue().equals(tag.getFieldShowType())) { - if (!this.singleUserValid(cellValue)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为id - cellValue = this.convertSingleUserId(cellValue); - } - } - // 多选组织机构 - if (FieldShowTypeEnum.MULTI_ORGANIZATION_DIALOG.getValue().equals(tag.getFieldShowType())) { - if (!this.multiOrgValid(cellValue)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为id - cellValue = this.convertMultiOrgId(cellValue); - } - } - // 零部件 - if (tag.getDbFieldName().equals("part_name") && StrUtil.isNotBlank(cellValue)) { - if (!this.partValid(cellValue)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为id - cellValue = this.convertPartId(cellValue); - } - } - // 体系 - if (FieldCommon.STANDARD_SYSTEM.equals(tag.getDbFieldName())) { - if (!this.standardSystemValid(cellValue)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为id - cellValue = this.convertStandardSystem(cellValue); - } - } - // 文件 - if (FieldShowTypeEnum.FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) { - if (!this.fileValid(cellValue, fileMap)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为id - cellValue = this.convertFileIds(cellValue, fileMap); - } - } - // 多选时间 - if (FieldShowTypeEnum.MULTI_DATE_PICKER.getValue().equals(tag.getFieldShowType())) { - if (!this.multiDateValid(cellValue)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为id - cellValue = this.multiDateConvert(cellValue); - } - } - - // 将转好的值加入Map - parameterMap.put(tag.getDbFieldName(), cellValue); - // 企标稽查内容文件导入 - if (FieldShowTypeEnum.INSPECT_CONTENT_FILE_UPLOAD.getValue().equals(tag.getFieldShowType())) { - if (!this.inspectContentFileValid(cellValue, fileMap)) { - log.error("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - errMsgList.add("第" + (i + 1) + "行第" + (j + 1) + "列选项" + tag.getDbFieldTxt() + "填写错误"); - } else { - // 转为List - // 将转好的值加入Map - parameterMap.put(tag.getDbFieldName(), this.convertInspectContentFile(cellValue, fileMap)); - } + errMsgList.add(errMsg.toString()); + insertDataList.add(parameterMap); } return errMsgList; }