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,
@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);
}

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.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<SignalKafkaEvent> signalEventsQueue;
private final UserPackageMapper userPackageMapper;
private final PackageRecordsService packageRecordsService;
private final CreditTrackerSettings config;
public SignalKafkaEventWriterService(@Qualifier("signalKafkaEventQueue") BlockingQueue<SignalKafkaEvent> 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<UserPackage> packagesToUpdate = new ArrayList<>();
List<UserPackage> 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",
finalName = String.format("%s_%s_%s.xml",
commonMembercode,
userPackage.getPackageName(),
newReportDate.format(CTUtil.responseReportDateTimeFormatter))
);
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) {

View file

@ -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<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) {
}
}

View file

@ -83,10 +83,20 @@
</foreach>
</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
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
</update>
<update id="updatePackageOnMonitoringSuccess">