diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java index 76df6d21..af837d5e 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java @@ -179,5 +179,6 @@ public class FieldCommon { public static final String TRY_FLAG = "try_flag"; public static final String RELEASE_DATE = "release_date"; public static final String TRIAL_PERIOD = "trial_period"; - + // 关联文件 + public static final String ASSOCIATED_FILE = "associated_file"; } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java index 18eb330c..e2ac933a 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/oldSystem/controller/OldSystemController.java @@ -98,4 +98,13 @@ public class OldSystemController { enterpriseStandardService.filterChineseStandardNo(file, response); } + @PostMapping("/importFileRelationExcel") + @AutoLog(value = "老法规系统-导入文件附件等关联关系") + @ApiOperation(value="老法规系统-导入文件附件等关联关系", notes="老法规系统-导入文件附件等关联关系", produces = "application/octet-stream") + @ApiOperationSupport(order = 7) + public void importFileRelationExcel(@RequestParam("file") MultipartFile file, + HttpServletResponse response) throws IOException { + enterpriseStandardService.importFileRelationExcel(file, response); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java index 893069e8..db914a91 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/service/ILawsEnterpriseStandardService.java @@ -56,9 +56,16 @@ public interface ILawsEnterpriseStandardService extends IService new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); + log.info("根据标准号去重后的外标相关数据条数:{}", fbDatalist.size()); + // 找到所有人 并且用 姓名加工号做key Map allUserMap = sysUserService.list().stream().collect(Collectors.toMap(o -> o.getRealname() + o.getUsername(), o -> o)); @@ -691,6 +697,114 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl errImportList = new ArrayList<>(); + + // 验证文件是否为压缩格式 + if (!Objects.requireNonNull(file.getOriginalFilename()).contains("xls")) { + throw new JeroBootException("文件格式不正确,请上传Excel。"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + // 获取数据 + List allDatalist = null; + + try { + // 获取当前时间戳(毫秒) + long startTime = System.currentTimeMillis(); + @Cleanup + InputStream inputStream = file.getInputStream(); + allDatalist = ExcelImportUtil.importExcel(inputStream, OldSystemImportDTO.class, params); + // 删除空行 + allDatalist.removeIf(OldSystemImportDTO::isEmptyRow); + log.info("获取数据成功,数据条数:{}", allDatalist.size()); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("数据转换执行时间:" + executionTime + " 毫秒"); + } catch (Exception e) { + log.error("导入失败;{}", e.getMessage()); + } + if (allDatalist == null) { + throw new JeroBootException("导入失败,数据为空"); + } + + // 查询所有企标 + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + esWrapper.eq(LawsEnterpriseStandard::getDelFlag, YesOrNoEnum.NO.getValue()); + List esList = this.list(esWrapper); + // 查询所有外标 + LambdaQueryWrapper fbWrapper = new LambdaQueryWrapper<>(); + fbWrapper.eq(LawsOverseasStandard::getDelFlag, YesOrNoEnum.NO.getValue()); + List fbList = overseasStandardService.list(fbWrapper); + // 查询所有国标 + LambdaQueryWrapper gbWrapper = new LambdaQueryWrapper<>(); + gbWrapper.eq(LawsDomesticStandard::getDelFlag, YesOrNoEnum.NO.getValue()); + List gbList = domesticStandardService.list(gbWrapper); + + Map standardMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, LawsEnterpriseStandard::getId)); + standardMap.putAll(fbList.stream().collect(Collectors.toMap(LawsOverseasStandard::getStandardNumber, LawsOverseasStandard::getId))); + standardMap.putAll(gbList.stream().collect(Collectors.toMap(LawsDomesticStandard::getStandardNumber, LawsDomesticStandard::getId))); + // 文件关联 + List ossFileList = new ArrayList<>(); + long startTime = System.currentTimeMillis(); + // 转换数据 + for (OldSystemImportDTO dto : allDatalist) { + try { + // 将标准号中的括号删除 + String standardFileType = StandardSplitUtils.getStandardFileTypeByBZH(dto.getBzh()); + String standardNo = StandardSplitUtils.extractStandardNumber(dto.getBzh()); + String standardId = null; + for (String s : standardMap.keySet()) { + if (s.contains(standardNo)) { + standardId = standardMap.get(s); + break; + } + } + if (StrUtil.isBlank(standardId)) { + throw new JeroBootException("未找到该标准,标准编号:" + dto.getBzh()); + } + // 根据文件路径获取文件Id + String originPath = dto.getSclj(); + if (StrUtil.isNotBlank(originPath)) { + String filePath = this.getFilePath(originPath); + if (MinioUtil.doesObjectExist(filePath)) { + // 存入关系表 + OSSFile ossFile = new OSSFile(); + ossFile.setUrl(filePath); + ossFile.setStandardNo(standardNo); + ossFile.setFileName(FileUtil.getName(filePath)); + ossFile.setStandardFileType(standardFileType); + ossFile.setStandardId(standardId); + ossFileList.add(ossFile); + } + } + } catch (Exception e) { + log.error("导入转换外标数据时发生错误:{}", e.getMessage()); + log.error("错误数据:{}", dto.toString()); + dto.setErrorInfo(e.getMessage()); + errImportList.add(dto); + } + } + + for (OSSFile ossfile : ossFileList) { + // 保存文件关联 + ossFileService.save(ossfile); + } + log.info("文件关系覆盖导入完成"); + // 获取当前时间戳(毫秒) + long endTime = System.currentTimeMillis(); + // 计算执行时间(毫秒) + long executionTime = endTime - startTime; + log.info("代码执行时间:" + executionTime + " 毫秒"); + if (!errImportList.isEmpty()) { + this.exportWithExcel(response, errImportList, "OldSystemStandardErrorData.xls"); + } + } + public boolean containsChinese(String text) { Pattern pattern = Pattern.compile("[\u4E00-\u9FA5]"); Matcher matcher = pattern.matcher(text); @@ -724,6 +838,11 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); + log.info("根据标准号去重后的国标相关数据条数:{}", gbDatalist.size()); + // 找到所有人 并且用 姓名加工号做key Map allUserMap = sysUserService.list().stream().collect(Collectors.toMap(o -> o.getRealname() + o.getUsername(), o -> o)); @@ -954,6 +1073,12 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl esDatalist, List errImportList) { + log.info("企标相关数据条数:{}", esDatalist.size()); + // 过滤字段 根据标准号字段去重 + esDatalist = esDatalist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() + -> new TreeSet<>(Comparator.comparing(OldSystemImportDTO::getBzh))), ArrayList::new)); + log.info("根据标准号去重后的企标相关数据条数:{}", esDatalist.size()); + long startTime = System.currentTimeMillis(); // 转换数据 List esList = new ArrayList<>(); @@ -969,11 +1094,12 @@ public class LawsEnterpriseStandardServiceImpl extends ServiceImpl