fix: 老法规导入BUG修正

企标使用新版正则表达式
修复重复文件数据的BUG
This commit is contained in:
2023-11-28 11:57:20 +08:00
parent 343a4ad101
commit dfbd8d6aa5
3 changed files with 65 additions and 12 deletions
@@ -157,11 +157,11 @@ public class EnterpriseStandardUtil {
public static Map<String, String> splitStandardNumber(String standardNumber) {
// 定义多个正则表达式来匹配不同的标准号格式
String[] regexPatterns = {
"([A-Za-z]{1,2})[-\\/]([A-Za-z]{1,2})\\s+([A-Za-z0-9]{1,3})[-—–]?(\\d{4,5}(?:\\.\\d+)?)[-—](\\d{4})", // 下面四种综合的正则
"([A-Za-z]{1,2})\\/([A-Za-z]{1,2}) (\\d)(\\d{4})-(\\d{4})",// 正常格式
"([A-Za-z]{1,2})\\/([A-Za-z]{1,2}) (\\d{1,3})(\\.\\d+)?-(\\d{4})", // 带小数的格式
"([A-Za-z]{1,2})\\/([A-Za-z]{1,2})\\s+([A-Za-z0-9]{1,3})-(\\d{4})", // 类别代号J11这种格式
"([A-Za-z]{1,2})[-\\/]([A-Za-z]{1,2})\\s+([A-Za-z0-9]{1,3})[-—–]\\d{4,5}(\\.\\d+)?-(\\d{4})"
"([A-Z]+)/([A-Z]+)\\s+([0-9A-Z])(\\d+(?:\\.\\d+)?)[-—](\\w+)",
// "([A-Za-z]{1,2})[-\\/]([A-Za-z]{1,2})\\s+([A-Za-z0-9]{1,3})[-—–]?(\\d{4,5}(?:\\.\\d+)?)[-—–]([A-Za-z0-9]+)", // 下面四种综合的正则
// "([A-Za-z]{1,2})\\/([A-Za-z]{1,2}) (\\d)(\\d{4})-([A-Za-z0-9]+)",// 正常格式
// "([A-Za-z]{1,2})\\/([A-Za-z]{1,2}) (\\d)(\\.\\d+)?-([A-Za-z0-9]+)", // 带小数的格式
// "([A-Za-z]{1,2})\\/([A-Za-z]{1,2})\\s+([A-Za-z0-9])-([A-Za-z0-9]+)",
};
Map<String, String> map = new HashMap<>();
@@ -173,13 +173,14 @@ public class EnterpriseStandardUtil {
String esCode = matcher.group(1);
String eNameCode = matcher.group(2);
String sCategoryCode = matcher.group(3);
String sequenceNumber = matcher.group(4);
String yearNum = matcher.group(5);
map.put(FieldCommon.ENTERPRISE_STANDARD_CODE, esCode);
map.put(FieldCommon.ENTERPRISE_NAME_CODE, eNameCode);
map.put(FieldCommon.STANDARD_CATEGORY_CODE, sCategoryCode);
map.put(FieldCommon.STANDARD_NUMBER_TEMP, sequenceNumber);
map.put(FieldCommon.YEAR_NUMBER, yearNum);
isMatched = true;
break; // 匹配成功,跳出循环
}
@@ -306,6 +306,12 @@ public class LawsEnterpriseStandard implements Serializable {
@ApiModelProperty(value = "顺序号")
private String standardNumberTemp;
/**
* 老法规系统Id
*/
@ApiModelProperty(value = "老法规系统Id")
private String oldSystemId;
@TableField(exist = false)
private static final long serialVersionUID = 1809789807789012221L;
}
@@ -17,6 +17,8 @@ import com.jero.modules.laws.common.constant.FieldCommon;
import com.jero.modules.laws.enterprise.entity.OldSystemImportDTO;
import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import com.jero.modules.laws.home.common.LawsHomeSearchCommon;
import com.jero.modules.laws.home.service.ILawsHomeSearchService;
import com.jero.modules.laws.oldSystem.entity.OldSystemDepartRelation;
import com.jero.modules.laws.oldSystem.service.OldSystemDepartRelationService;
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
@@ -32,6 +34,7 @@ import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysDepartService;
import com.jero.modules.system.service.ISysUserService;
import io.minio.errors.MinioException;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.lang3.StringUtils;
@@ -96,6 +99,9 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
@Resource
private IOSSFileService ossFileService;
@Resource
private ILawsHomeSearchService lawsHomeSearchService;
@Override
public LawsEnterpriseStandard queryByStandardNumber(String standardNumber) {
if (StringUtils.isBlank(standardNumber)) {
@@ -128,7 +134,9 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
try {
// 获取当前时间戳(毫秒)
long startTime = System.currentTimeMillis();
allDatalist = ExcelImportUtil.importExcel(file.getInputStream(), OldSystemImportDTO.class, params);
@Cleanup
InputStream inputStream = file.getInputStream();
allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params);
// 删除空行
for (int i = 0; i < allDatalist.size(); i++) {
OldSystemImportDTO oldSystemImportDTO = allDatalist.get(i);
@@ -179,6 +187,7 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
} else {
this.oldSysGBImport(gbDatalist, errImportList);
}
break;
case "3":
// 判断是否需要跳过
if (esDatalist.isEmpty()) {
@@ -188,7 +197,7 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
}
// 导入国标
// 判断是否需要跳过
if (gbDatalist.isEmpty()) {
if (gbDatalist.isEmpty()) {
log.info("国标数据为空,跳过导入");
} else {
this.oldSysGBImport(gbDatalist, errImportList);
@@ -312,6 +321,8 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
Map<String, List<OSSFile>> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo));
// 4. 遍历待保存或更新的列表,设置ID
StringBuilder oldIds = new StringBuilder();
StringBuilder newIds = new StringBuilder();
for (LawsDomesticStandard entity : gbList) {
LawsDomesticStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber());
if (existingEntity != null) {
@@ -319,6 +330,12 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
this.removeById(existingEntity.getId());
// 删除替代
lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1);
// 删除文件关联
LambdaUpdateWrapper<OSSFile> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(OSSFile::getStandardId, existingEntity.getId());
ossFileService.remove(wrapper);
// 拼接老id
oldIds.append(existingEntity.getId()).append(",");
}
String tdbzh = entity.getSubstituteStandardNumber();
String btdbzh = entity.getReplacedByStandardNumber();
@@ -341,6 +358,7 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
OSSFile ossFile = standardNumberToFileMap.get(entity.getStandardNumber()).get(0);
ossFile.setStandardId(standardId);
ossFileService.save(ossFile);
entity.setId(standardId);
}
log.info("老法规国标覆盖导入完成");
// 获取当前时间戳(毫秒)
@@ -348,6 +366,16 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
// 计算执行时间(毫秒)
long executionTime = endTime - startTime;
log.info("代码执行时间:" + executionTime + " 毫秒");
// es中删除数据
if (oldIds.length() > 0) {
oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1));
lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE);
}
// 同步es数据库
if (newIds.length() > 0) {
newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1));
lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_DOMESTIC_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD);
}
}
private void oldSysESImport(List<OldSystemImportDTO> esDatalist, List<OldSystemImportDTO> errImportList) {
@@ -361,7 +389,7 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
for (OldSystemImportDTO dto : esDatalist) {
try {
LawsEnterpriseStandard es = new LawsEnterpriseStandard();
es.setId(dto.getId());
es.setOldSystemId(dto.getId());
es.setStandardNumber(dto.getBzh());
es.setStandardName(dto.getBzmc());
es.setStandardEnglishName(dto.getBzywmc());
@@ -377,7 +405,7 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
String standardNumber = dto.getBzh();
// 如果标准号中有错误符号 则需要修正一下
// 正则表达式用于检测是否存在错误的“-”作为分隔符
String regex = "([A-Za-z]{1,2})-([A-Za-z]{1,2}) (\\d{4,5}(\\.\\d+)?)-(\\d{4})";
String regex = "([A-Za-z]{1,2})-([A-Za-z]{1,2}) (\\d{4,5}(\\.\\d+)?)-([A-Za-z0-9]+)";
// 使用Pattern和Matcher检测是否匹配
Pattern pattern = Pattern.compile(regex);
@@ -392,6 +420,7 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
es.setStandardCode(map.get(FieldCommon.ENTERPRISE_STANDARD_CODE));
es.setNameCode(map.get(FieldCommon.ENTERPRISE_NAME_CODE));
es.setCategoryCode(map.get(FieldCommon.STANDARD_CATEGORY_CODE));
es.setStandardNumberTemp(map.get(FieldCommon.STANDARD_NUMBER_TEMP));
es.setYearNumber(map.get(FieldCommon.YEAR_NUMBER));
}
@@ -443,18 +472,22 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
Map<String, List<OSSFile>> standardNumberToFileMap = ossFileList.stream().collect(Collectors.groupingBy(OSSFile::getStandardNo));
// 4. 遍历待保存或更新的列表,设置ID
StringBuilder oldIds = new StringBuilder();
StringBuilder newIds = new StringBuilder();
for (LawsEnterpriseStandard entity : esList) {
String curStandardNumber = entity.getStandardNumber();
LawsEnterpriseStandard existingEntity = standardNumberToEntityMap.get(entity.getStandardNumber());
if (existingEntity != null) {
// 如果存在,则先删后增
this.removeById(existingEntity.getId());
// 代替
lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1);
// 删除文件关联
LambdaUpdateWrapper<OSSFile> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(OSSFile::getStandardId, existingEntity.getId());
ossFileService.remove(wrapper);
// 代替
lawsReplacedStandardService.removeRelation(existingEntity.getStandardNumber(), 1);
// 拼接老id
oldIds.append(existingEntity.getId()).append(",");
}
String tdbzh = entity.getSubstituteStandardNumber();
String btdbzh = entity.getReplacedByStandardNumber();
@@ -482,6 +515,9 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
ossFile.setStandardId(standardId);
ossFileService.save(ossFile);
}
entity.setId(standardId);
// 拼接新id
newIds.append(standardId).append(",");
}
log.info("老法规企标覆盖导入完成");
// 获取当前时间戳(毫秒)
@@ -489,6 +525,16 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl<LawsEnterpris
// 计算执行时间(毫秒)
long executionTime = endTime - startTime;
log.info("代码执行时间:" + executionTime + " 毫秒");
// es中删除数据
if (oldIds.length() > 0) {
oldIds = new StringBuilder(oldIds.substring(0, oldIds.length() - 1));
lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD, oldIds.toString(), LawsHomeSearchCommon.LAWS_ES_DELETE);
}
// 同步es数据库
if (newIds.length() > 0) {
newIds = new StringBuilder(newIds.substring(0, newIds.length() - 1));
lawsHomeSearchService.updateEsData(LawsHomeSearchCommon.LAWS_ENTERPRISE_STANDARD, newIds.toString(), LawsHomeSearchCommon.LAWS_ES_ADD);
}
}
@Override