diff --git a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java index 1df1b58..50cff8a 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/mode/monitoring/SignalKafkaEventWriterService.java @@ -16,12 +16,17 @@ import ru.nbch.credit_tracker.model.IUserPackageData; import ru.nbch.credit_tracker.model.SignalKafkaEvent; import ru.nbch.credit_tracker.model.UserPackageLegalData; import ru.nbch.credit_tracker.model.UserPackagePhoneData; +import ru.nbch.credit_tracker.utils.CTUtil; +import ru.nbch.credit_tracker.utils.CtFileUtils; +import ru.nbch.credit_tracker.utils.ZipUtils; import ru.nbch.credit_tracker.utils.error.ExceptionUtils; import java.io.BufferedWriter; +import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -90,10 +95,16 @@ public class SignalKafkaEventWriterService { } try { + String commonMembercode = userPackageData.getUserId().substring(0, 6); + Path folder = Path.of(config.getLoadDir(), - "tmp", userPackageData.getUserId(), userPackageData.getPackageName()); + "tmp", commonMembercode, userPackageData.getPackageName()); Files.createDirectories(folder); - Path tmpFilePathWithExt = folder.resolve(userPackageData.getUserId() + "_" + userPackageData.getPackageName() + ".xml"); + Path tmpFilePathWithExt = folder.resolve( + String.format("%s_%s.xml", + commonMembercode, + userPackageData.getPackageName()) + ); boolean exists = tmpFilePathWithExt.toFile().exists(); @@ -120,13 +131,10 @@ public class SignalKafkaEventWriterService { private void rotate() { List userPackages = userPackageMapper.findAllPackagesByStatus(Status.ON_MONITORING.name()); for (UserPackage userPackage : userPackages) { - Path tmpFilePath = Path.of(config.getLoadDir(), - "tmp", userPackage.getUserId(), userPackage.getPackageName()) - .resolve(userPackage.getUserId() + "_" + userPackage.getPackageName() + ".xml"); - - if (tmpFilePath.toFile().exists()) { - writeEnd(tmpFilePath); - // TODO дописать, переименовать с timestamp, зазиповать и выложить в папку + try { + movedAndZip(userPackage); + } catch (IOException e) { + log.error("Error while rotating user package {}", userPackage.getPackageName(), e); } } // TODO update signals_user_packages @@ -148,6 +156,38 @@ public class SignalKafkaEventWriterService { } } + private void movedAndZip(UserPackage userPackage) throws IOException { + String commonMembercode = userPackage.getUserId().substring(0, 6); + Path tmpFilePath = Path.of(config.getLoadDir(), + "tmp", commonMembercode, userPackage.getPackageName()) + .resolve(String.format("%s_%s.xml", + commonMembercode, + userPackage.getPackageName())); + + if (tmpFilePath.toFile().exists()) { + writeEnd(tmpFilePath); + + + Path rootReportPath = Path.of(config.getLoadDir(), commonMembercode); + if (!Files.exists(rootReportPath)) { + Files.createDirectories(rootReportPath); + } + LocalDateTime newReportDate = LocalDateTime.now(); + Path responsePath = rootReportPath.resolve( + String.format("%s_%s_%s.xml", + commonMembercode, + userPackage.getPackageName(), + newReportDate.format(CTUtil.responseReportDateTimeFormatter)) + ); + + Files.move(tmpFilePath, responsePath, StandardCopyOption.REPLACE_EXISTING); + + Path zipFile = ZipUtils.zipFile(responsePath); + log.info("New report file by path: {}", zipFile); + CtFileUtils.deleteQuietly(responsePath); + } + } + private void writeNpPart(Path filePath, SignalKafkaEvent event) { UserPackagePhoneData packagePhoneData = event.getUserPackagePhoneData();