Save last downloaded report name

This commit is contained in:
Mikhail Trofimov 2026-07-03 17:54:56 +03:00
parent 4bd58624ed
commit 2c0525d28d
4 changed files with 53 additions and 24 deletions

View file

@ -22,9 +22,6 @@ public interface UserPackageMapper {
void updatePackageStatus(@Param("packageId") Long packageId, void updatePackageStatus(@Param("packageId") Long packageId,
@Param("status") String status); @Param("status") String status);
void updatePackageLastDownloadedReport(@Param("id") Long id,
@Param("fileName") String fileName);
void updatePackageOnMonitoringSuccess(@Param("id") Long id, void updatePackageOnMonitoringSuccess(@Param("id") Long id,
@Param("monitoringAt") LocalDateTime monitoringAt); @Param("monitoringAt") LocalDateTime monitoringAt);
@ -51,4 +48,6 @@ public interface UserPackageMapper {
@Param("packageName") String packageName); @Param("packageName") String packageName);
void setRejectedStatus(@Param("id") Long id, @Param("status") String status); void setRejectedStatus(@Param("id") Long id, @Param("status") String status);
void updatePackageLastDownloadedReport(@Param("json") String json);
} }

View file

@ -16,6 +16,7 @@ import ru.nbch.credit_tracker.model.IUserPackageData;
import ru.nbch.credit_tracker.model.SignalKafkaEvent; import ru.nbch.credit_tracker.model.SignalKafkaEvent;
import ru.nbch.credit_tracker.model.UserPackageLegalData; import ru.nbch.credit_tracker.model.UserPackageLegalData;
import ru.nbch.credit_tracker.model.UserPackagePhoneData; 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.CTUtil;
import ru.nbch.credit_tracker.utils.CtFileUtils; import ru.nbch.credit_tracker.utils.CtFileUtils;
import ru.nbch.credit_tracker.utils.ZipUtils; import ru.nbch.credit_tracker.utils.ZipUtils;
@ -50,13 +51,16 @@ public class SignalKafkaEventWriterService {
private final BlockingQueue<SignalKafkaEvent> signalEventsQueue; private final BlockingQueue<SignalKafkaEvent> signalEventsQueue;
private final UserPackageMapper userPackageMapper; private final UserPackageMapper userPackageMapper;
private final PackageRecordsService packageRecordsService;
private final CreditTrackerSettings config; private final CreditTrackerSettings config;
public SignalKafkaEventWriterService(@Qualifier("signalKafkaEventQueue") BlockingQueue<SignalKafkaEvent> signalEventsQueue, public SignalKafkaEventWriterService(@Qualifier("signalKafkaEventQueue") BlockingQueue<SignalKafkaEvent> signalEventsQueue,
UserPackageMapper userPackageMapper, UserPackageMapper userPackageMapper,
PackageRecordsService packageRecordsService,
CreditTrackerSettings config) { CreditTrackerSettings config) {
this.signalEventsQueue = signalEventsQueue; this.signalEventsQueue = signalEventsQueue;
this.userPackageMapper = userPackageMapper; this.userPackageMapper = userPackageMapper;
this.packageRecordsService = packageRecordsService;
this.config = config; this.config = config;
} }
@ -133,15 +137,18 @@ public class SignalKafkaEventWriterService {
* Упаковывает все результирующие xml в архив * Упаковывает все результирующие xml в архив
*/ */
private void rotate() { private void rotate() {
List<UserPackage> packagesToUpdate = new ArrayList<>();
List<UserPackage> userPackages = userPackageMapper.findAllPackagesByStatus(Status.ON_MONITORING.name()); List<UserPackage> userPackages = userPackageMapper.findAllPackagesByStatus(Status.ON_MONITORING.name());
for (UserPackage userPackage : userPackages) { for (UserPackage userPackage : userPackages) {
try { try {
movedAndZip(userPackage); String reportName = movedAndZip(userPackage);
userPackage.setLastDownloadedReport(reportName);
packagesToUpdate.add(userPackage);
} catch (IOException e) { } catch (IOException e) {
log.error("Error while rotating user package {}", userPackage.getPackageName(), 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) { 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); String commonMembercode = userPackage.getUserId().substring(0, 6);
Path tmpFilePath = Path.of(config.getLoadDir(), Path tmpFilePath = Path.of(config.getLoadDir(),
"tmp", commonMembercode, userPackage.getPackageName()) "tmp", commonMembercode, userPackage.getPackageName())
@ -177,12 +185,12 @@ public class SignalKafkaEventWriterService {
Files.createDirectories(rootReportPath); Files.createDirectories(rootReportPath);
} }
LocalDateTime newReportDate = LocalDateTime.now(); LocalDateTime newReportDate = LocalDateTime.now();
Path responsePath = rootReportPath.resolve( finalName = String.format("%s_%s_%s.xml",
String.format("%s_%s_%s.xml", commonMembercode,
commonMembercode, userPackage.getPackageName(),
userPackage.getPackageName(), newReportDate.format(CTUtil.responseReportDateTimeFormatter));
newReportDate.format(CTUtil.responseReportDateTimeFormatter))
); Path responsePath = rootReportPath.resolve(finalName);
Files.move(tmpFilePath, responsePath, StandardCopyOption.REPLACE_EXISTING); Files.move(tmpFilePath, responsePath, StandardCopyOption.REPLACE_EXISTING);
@ -190,6 +198,8 @@ public class SignalKafkaEventWriterService {
log.info("New report file by path: {}", zipFile); log.info("New report file by path: {}", zipFile);
CtFileUtils.deleteQuietly(responsePath); CtFileUtils.deleteQuietly(responsePath);
} }
return finalName.replace("xml", "zip");
} }
private void writeNpPart(Path filePath, SignalKafkaEvent event) { private void writeNpPart(Path filePath, SignalKafkaEvent event) {

View file

@ -5,14 +5,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.app.LegalsMap; import ru.nbch.credit_tracker.entities.app.*;
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap; import ru.nbch.credit_tracker.mapper.signal.*;
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.model.FlagData; import ru.nbch.credit_tracker.model.FlagData;
import ru.nbch.credit_tracker.model.SubjectProfile; import ru.nbch.credit_tracker.model.SubjectProfile;
import ru.nbch.credit_tracker.model.UserPackageLegalData; import ru.nbch.credit_tracker.model.UserPackageLegalData;
@ -37,17 +31,19 @@ public class PackageRecordsService {
private final PackagesRecordsMapper packagesRecordsMapper; private final PackagesRecordsMapper packagesRecordsMapper;
private final LegalsFidMapMapper legalsFidMapMapper; private final LegalsFidMapMapper legalsFidMapMapper;
private final ObjectMapper entityToJsonMapper; private final ObjectMapper entityToJsonMapper;
private final UserPackageMapper userPackageMapper;
public PackageRecordsService(PhonesMapMapper phonesMapMapper, public PackageRecordsService(PhonesMapMapper phonesMapMapper,
LegalsMapMapper legalsMapMapper, LegalsMapMapper legalsMapMapper,
PackagesRecordsMapper packagesRecordsMapper, PackagesRecordsMapper packagesRecordsMapper,
LegalsFidMapMapper legalsFidMapMapper, LegalsFidMapMapper legalsFidMapMapper,
ObjectMapper entityToJsonMapper) { ObjectMapper entityToJsonMapper, UserPackageMapper userPackageMapper) {
this.phonesMapMapper = phonesMapMapper; this.phonesMapMapper = phonesMapMapper;
this.legalsMapMapper = legalsMapMapper; this.legalsMapMapper = legalsMapMapper;
this.packagesRecordsMapper = packagesRecordsMapper; this.packagesRecordsMapper = packagesRecordsMapper;
this.legalsFidMapMapper = legalsFidMapMapper; this.legalsFidMapMapper = legalsFidMapMapper;
this.entityToJsonMapper = entityToJsonMapper; this.entityToJsonMapper = entityToJsonMapper;
this.userPackageMapper = userPackageMapper;
} }
public Map<Long, PhonesMap> findCachedPhones(List<SubjectProfile> subjects) { public Map<Long, PhonesMap> findCachedPhones(List<SubjectProfile> subjects) {
@ -239,6 +235,20 @@ public class PackageRecordsService {
} }
} }
public void updatePackageLastDownloadedReport(List<UserPackage> packages) {
try {
String json = entityToJsonMapper.writeValueAsString(packages.stream()
.filter(Objects::nonNull)
.map(userPackage -> new HashMap<String, Object>() {{
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) { public record InnRegnumPair(Long inn, Long regNum) {
} }
} }

View file

@ -83,10 +83,20 @@
</foreach> </foreach>
</update> </update>
<update id="updatePackageLastDownloadedReport"> <update id="updatePackageLastDownloadedReport" parameterType="string">
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 UPDATE signals_user_packages
SET last_downloaded_report = #{fileName} SET last_downloaded_report = src.last_downloaded_report
WHERE id = #{id} FROM src
WHERE signals_user_packages.id = src.id
</update> </update>
<update id="updatePackageOnMonitoringSuccess"> <update id="updatePackageOnMonitoringSuccess">