diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java index 21df118..9c783d1 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java @@ -22,9 +22,6 @@ public interface UserPackageMapper { void updatePackageStatus(@Param("packageId") Long packageId, @Param("status") String status); - void updatePackageLastDownloadedReport(@Param("id") Long id, - @Param("fileName") String fileName); - void updatePackageOnMonitoringSuccess(@Param("id") Long id, @Param("monitoringAt") LocalDateTime monitoringAt); @@ -51,4 +48,6 @@ public interface UserPackageMapper { @Param("packageName") String packageName); void setRejectedStatus(@Param("id") Long id, @Param("status") String status); + + void updatePackageLastDownloadedReport(@Param("json") String json); } 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 2fc15c5..e63fdbf 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,6 +16,7 @@ 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.service.signal.PackageRecordsService; import ru.nbch.credit_tracker.utils.CTUtil; import ru.nbch.credit_tracker.utils.CtFileUtils; import ru.nbch.credit_tracker.utils.ZipUtils; @@ -50,13 +51,16 @@ public class SignalKafkaEventWriterService { private final BlockingQueue signalEventsQueue; private final UserPackageMapper userPackageMapper; + private final PackageRecordsService packageRecordsService; private final CreditTrackerSettings config; public SignalKafkaEventWriterService(@Qualifier("signalKafkaEventQueue") BlockingQueue signalEventsQueue, UserPackageMapper userPackageMapper, + PackageRecordsService packageRecordsService, CreditTrackerSettings config) { this.signalEventsQueue = signalEventsQueue; this.userPackageMapper = userPackageMapper; + this.packageRecordsService = packageRecordsService; this.config = config; } @@ -133,15 +137,18 @@ public class SignalKafkaEventWriterService { * Упаковывает все результирующие xml в архив */ private void rotate() { + List packagesToUpdate = new ArrayList<>(); List userPackages = userPackageMapper.findAllPackagesByStatus(Status.ON_MONITORING.name()); for (UserPackage userPackage : userPackages) { try { - movedAndZip(userPackage); + String reportName = movedAndZip(userPackage); + userPackage.setLastDownloadedReport(reportName); + packagesToUpdate.add(userPackage); } catch (IOException e) { log.error("Error while rotating user package {}", userPackage.getPackageName(), e); } } - // TODO update signals_user_packages + packageRecordsService.updatePackageLastDownloadedReport(packagesToUpdate); } private void writeStart(Path filePath, IUserPackageData userPackageData) { @@ -160,7 +167,8 @@ public class SignalKafkaEventWriterService { } } - private void movedAndZip(UserPackage userPackage) throws IOException { + private String movedAndZip(UserPackage userPackage) throws IOException { + String finalName = ""; String commonMembercode = userPackage.getUserId().substring(0, 6); Path tmpFilePath = Path.of(config.getLoadDir(), "tmp", commonMembercode, userPackage.getPackageName()) @@ -177,12 +185,12 @@ public class SignalKafkaEventWriterService { Files.createDirectories(rootReportPath); } LocalDateTime newReportDate = LocalDateTime.now(); - Path responsePath = rootReportPath.resolve( - String.format("%s_%s_%s.xml", - commonMembercode, - userPackage.getPackageName(), - newReportDate.format(CTUtil.responseReportDateTimeFormatter)) - ); + finalName = String.format("%s_%s_%s.xml", + commonMembercode, + userPackage.getPackageName(), + newReportDate.format(CTUtil.responseReportDateTimeFormatter)); + + Path responsePath = rootReportPath.resolve(finalName); Files.move(tmpFilePath, responsePath, StandardCopyOption.REPLACE_EXISTING); @@ -190,6 +198,8 @@ public class SignalKafkaEventWriterService { log.info("New report file by path: {}", zipFile); CtFileUtils.deleteQuietly(responsePath); } + + return finalName.replace("xml", "zip"); } private void writeNpPart(Path filePath, SignalKafkaEvent event) { diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/PackageRecordsService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/PackageRecordsService.java index ca91930..f69b96d 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/PackageRecordsService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/PackageRecordsService.java @@ -5,14 +5,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.Pair; import org.springframework.stereotype.Service; -import ru.nbch.credit_tracker.entities.app.LegalsMap; -import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap; -import ru.nbch.credit_tracker.entities.app.PhonesMap; -import ru.nbch.credit_tracker.entities.app.SignalLegalFidMap; -import ru.nbch.credit_tracker.mapper.signal.LegalsFidMapMapper; -import ru.nbch.credit_tracker.mapper.signal.LegalsMapMapper; -import ru.nbch.credit_tracker.mapper.signal.PackagesRecordsMapper; -import ru.nbch.credit_tracker.mapper.signal.PhonesMapMapper; +import ru.nbch.credit_tracker.entities.app.*; +import ru.nbch.credit_tracker.mapper.signal.*; import ru.nbch.credit_tracker.model.FlagData; import ru.nbch.credit_tracker.model.SubjectProfile; import ru.nbch.credit_tracker.model.UserPackageLegalData; @@ -37,17 +31,19 @@ public class PackageRecordsService { private final PackagesRecordsMapper packagesRecordsMapper; private final LegalsFidMapMapper legalsFidMapMapper; private final ObjectMapper entityToJsonMapper; + private final UserPackageMapper userPackageMapper; public PackageRecordsService(PhonesMapMapper phonesMapMapper, LegalsMapMapper legalsMapMapper, PackagesRecordsMapper packagesRecordsMapper, LegalsFidMapMapper legalsFidMapMapper, - ObjectMapper entityToJsonMapper) { + ObjectMapper entityToJsonMapper, UserPackageMapper userPackageMapper) { this.phonesMapMapper = phonesMapMapper; this.legalsMapMapper = legalsMapMapper; this.packagesRecordsMapper = packagesRecordsMapper; this.legalsFidMapMapper = legalsFidMapMapper; this.entityToJsonMapper = entityToJsonMapper; + this.userPackageMapper = userPackageMapper; } public Map findCachedPhones(List subjects) { @@ -239,6 +235,20 @@ public class PackageRecordsService { } } + public void updatePackageLastDownloadedReport(List packages) { + try { + String json = entityToJsonMapper.writeValueAsString(packages.stream() + .filter(Objects::nonNull) + .map(userPackage -> new HashMap() {{ + put("id", userPackage.getId()); + put("last_downloaded_report", userPackage.getLastDownloadedReport()); + }}).toList()); + userPackageMapper.updatePackageLastDownloadedReport(json); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + public record InnRegnumPair(Long inn, Long regNum) { } } diff --git a/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml index 6418049..87968d0 100644 --- a/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml @@ -83,10 +83,20 @@ - + + WITH src AS ( + SELECT + id, + last_downloaded_report + FROM json_to_recordset(#{json}::json) AS t( + id bigint, + last_downloaded_report text + ) + ) UPDATE signals_user_packages - SET last_downloaded_report = #{fileName} - WHERE id = #{id} + SET last_downloaded_report = src.last_downloaded_report + FROM src + WHERE signals_user_packages.id = src.id