fix: 国标导入报错

This commit is contained in:
2023-11-06 11:59:05 +08:00
parent 2cb8f49b8b
commit af4368c6b1
3 changed files with 112 additions and 39 deletions
@@ -5,7 +5,7 @@
<!-- 通过字典code获取字典数据 -->
<select id="queryDictItemsByCode" parameterType="String" resultType="com.jero.common.system.vo.DictModel">
select s.item_value as "value",s.item_text as "text" from sys_dict_item s
where dict_id = (select id from sys_dict where dict_code = #{code})
where dict_id = (select id from sys_dict where dict_code = #{code}) and del_flag = 0
order by s.sort_order asc
</select>
@@ -1324,22 +1324,6 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
.collect(Collectors.toList());
}
// 去除国标导入逻辑不需要显示的字段
if (TableNameEnum.DOMESTIC_REGULATIONS.getTableName().equals(tableName)) {
fieldList = fieldList.stream()
.filter(lawsTag -> !lawsTag.getDbFieldName().equals(FieldCommon.STANDARD_CLASS))
.filter(lawsTag -> !lawsTag.getDbFieldName().equals(FieldCommon.YEAR_NUMBER))
.collect(Collectors.toList());
}
// 去除外标导入逻辑不需要显示的字段
if (TableNameEnum.FOREIGN_REGULATIONS.getTableName().equals(tableName)) {
fieldList = fieldList.stream()
.filter(lawsTag -> !lawsTag.getDbFieldName().equals(FieldCommon.STANDARD_CLASS))
.filter(lawsTag -> !lawsTag.getDbFieldName().equals(FieldCommon.YEAR_NUMBER))
.collect(Collectors.toList());
}
// 创建一个Excel工作簿
Workbook workbook = this.createWorkBookWithLawsTags(fieldList);
@@ -2093,6 +2077,14 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
// 创建一个工作表
Sheet sheet = workbook.createSheet("导入模板");
// 创建数据格式
DataFormat fmt = workbook.createDataFormat();
// 创建一个单元格样式并设置数据格式为文本
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(fmt.getFormat("@"));
// 设置列宽
for (int i = 0; i < fieldList.size(); i++) {
sheet.setColumnWidth(i, 15 * 256);
@@ -2134,6 +2126,12 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
}
}
// 确保所有新建的单元格都应用这个文本格式
for (int i = 0; i < fieldList.size(); i++) {
// 在后续创建单元格时应用文本样式
sheet.setDefaultColumnStyle(i, textStyle);
}
// 创建第二行并合并单元格
Row row2 = sheet.createRow(1);
row2.setHeightInPoints(95);
@@ -90,8 +90,12 @@ public class ImportUtil {
for (int i = 3; i < sheet.getPhysicalNumberOfRows(); i++) {
Map<String, Integer> keyMap = new HashMap<>();
int line = i + 1;
String standardNumber = "";
String standardClass = "";
String yearNumber = "";
StringBuilder errMsg = new StringBuilder("" + line + "");
Map<String, Object> parameterMap = new HashMap<>();
boolean standardValidFlag = false;
for (int j = 0; j < headerList.size(); j++) {
String row = CellReference.convertNumToColString(j);
// 获取当前单元格
@@ -99,6 +103,93 @@ public class ImportUtil {
// 获取当前单元格内容对应的字段
LawsTag tag = headerList.get(j);
// 将国标和外标的三个标准号组成元素取出
if (!standardValidFlag) {
if ((TableNameEnum.DOMESTIC_REGULATIONS.getValue().equals(tag.getIsModel()) ||
TableNameEnum.FOREIGN_REGULATIONS.getValue().equals(tag.getIsModel())) &&
FieldCommon.STANDARD_NUMBER_TEMP.equals(tag.getDbFieldName()) ||
FieldCommon.STANDARD_CLASS.equals(tag.getDbFieldName()) ||
FieldCommon.YEAR_NUMBER.equals(tag.getDbFieldName())
) {
if (FieldCommon.STANDARD_NUMBER_TEMP.equals(tag.getDbFieldName())) {
if (cell == null) {
log.error("" + row + "" + tag.getDbFieldTxt() + "为必填 ");
errMsg.append("").append(row).append("").append(tag.getDbFieldTxt()).append("为必填 ");
break;
}
try {
standardNumber = cell.toString().trim();
} catch (Exception e) {
log.error("" + row + "" + tag.getDbFieldTxt() + "填写错误 ");
errMsg.append("").append(row).append("").append(tag.getDbFieldTxt()).append("填写错误 ");
break;
}
}
if (FieldCommon.STANDARD_CLASS.equals(tag.getDbFieldName())) {
if (cell == null) {
log.error("" + row + "" + tag.getDbFieldTxt() + "为必填 ");
errMsg.append("").append(row).append("").append(tag.getDbFieldTxt()).append("为必填 ");
break;
}
standardClass = cell.toString().trim();
}
if (FieldCommon.YEAR_NUMBER.equals(tag.getDbFieldName())) {
if (cell == null) {
// 当前年
Calendar date = Calendar.getInstance();
yearNumber = String.valueOf(date.get(Calendar.YEAR));
} else {
yearNumber = String.valueOf(Integer.parseInt(cell.toString().trim()));
}
}
// 如果三个都不为空则校验标准号
if (StrUtil.isNotBlank(standardNumber) && StrUtil.isNotBlank(standardClass) && StrUtil.isNotBlank(yearNumber)) {
if ((TableNameEnum.DOMESTIC_REGULATIONS.getValue().equals(tag.getIsModel()))) {
// 校验standardClass
if (!this.dictValid("standard_type", standardClass)) {
log.error("" + row + "" + tag.getDbFieldTxt() + "填写错误 ");
errMsg.append("").append(row).append("").append(tag.getDbFieldTxt()).append("填写错误 ");
} else {
String domesticStandardNumber = standardNumber + " " + standardClass + "-" + yearNumber;
QueryWrapper<LawsDomesticStandard> domesticStandardQueryWrapper = new QueryWrapper<>();
domesticStandardQueryWrapper.eq(FieldCommon.STANDARD_NUMBER, domesticStandardNumber);
LawsDomesticStandard lawsDomesticStandard = lawsDomeStandardService.getOne(domesticStandardQueryWrapper);
standardValidFlag = true;
if (lawsDomesticStandard != null) {
log.error("" + line + "行的标准编号已存在 ");
errMsg.append("").append(line).append("行的标准编号已存在");
break;
}
standardClass = this.convertDictValue("standard_type" , standardClass);
}
}
if ((TableNameEnum.FOREIGN_REGULATIONS.getValue().equals(tag.getIsModel()))) {
// 校验standardClass
if (!this.dictValid("standard_type_overseas", standardClass)) {
log.error("" + row + "" + tag.getDbFieldTxt() + "填写错误 ");
errMsg.append("").append(row).append("").append(tag.getDbFieldTxt()).append("填写错误 ");
} else {
String foreignStandardNumber = standardNumber + " " + standardClass + "-" + yearNumber;
QueryWrapper<LawsOverseasStandard> domesticStandardQueryWrapper = new QueryWrapper<>();
domesticStandardQueryWrapper.eq(FieldCommon.STANDARD_NUMBER, foreignStandardNumber);
LawsOverseasStandard lawsOverseasStandard = overseasStandardService.getOne(domesticStandardQueryWrapper);
standardValidFlag = true;
if (lawsOverseasStandard != null) {
log.error("" + line + "行的标准编号已存在 ");
errMsg.append("").append(line).append("行的标准编号已存在");
break;
}
standardClass = this.convertDictValue("standard_type_overseas" , standardClass);
}
}
// 将转好的值加入Map
parameterMap.put(FieldCommon.STANDARD_NUMBER_TEMP, standardNumber);
parameterMap.put(FieldCommon.STANDARD_CLASS, standardClass);
parameterMap.put(FieldCommon.YEAR_NUMBER, yearNumber);
}
}
}
// 必填验证
if (YesOrNoEnum.YES.getValue().equals(tag.getFieldMustInput())) {
if (!this.mustInputValid(cell)) {
@@ -112,6 +203,9 @@ public class ImportUtil {
continue;
}
String cellValue = cell.toString().trim();
if (StrUtil.isBlank(cellValue)) {
continue;
}
// 企标编号校验
if (FieldCommon.STANDARD_NUMBER.equals(tag.getDbFieldName())) {
@@ -154,9 +248,8 @@ public class ImportUtil {
}
}
}
// TODO 国标编号校验
// TODO 外标编号校验
// 校验编号唯一性
// 标编号校验
if (TableNameEnum.ENTERPRISE_STANDARDS.getValue().equals(tag.getIsModel())) {
LawsEnterpriseStandard lawsEnterpriseStandard = lawsEnterpriseStandardService.queryByStandardNumber(cellValue);
if (lawsEnterpriseStandard != null) {
@@ -164,24 +257,6 @@ public class ImportUtil {
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.TEXT_BOX.getValue().equals(tag.getFieldShowType())) {
@@ -304,7 +379,7 @@ public class ImportUtil {
}
}
}
if (errMsg.toString().contains("")) {
if (errMsg.toString().contains("") || errMsg.toString().contains("重复") || errMsg.toString().contains("已存在")) {
errMsgList.add(errMsg.toString());
} else {
insertDataList.add(parameterMap);