etreschenkov 2026-01-13 13:27:32 +03:00
parent 8475bb5f37
commit 62f842ed08
2 changed files with 16 additions and 10 deletions

View file

@ -164,7 +164,7 @@ public class MonitoringService {
if (responsePath != null) { if (responsePath != null) {
Path zipFile = ZipUtils.zipFile(responsePath); Path zipFile = ZipUtils.zipFile(responsePath);
log.info("New report file by path: {}", zipFile); log.info("New report file by path: {}", zipFile);
updateSignalHits(userPackage, responsePath.toString(), zipFile.toString()); updateSignalHits(userPackage, responsePath, zipFile);
userPackageMapper.updatePackageLastDownloadedReport(userPackage.getId(), newReport); userPackageMapper.updatePackageLastDownloadedReport(userPackage.getId(), newReport);
} else { } else {
log.info("Report was not created for package"); log.info("Report was not created for package");
@ -184,9 +184,13 @@ public class MonitoringService {
// Выставляется в true, если хотя бы один субъект с мониторинга подошел под условие срабатывания сигнала. В этом случае отчет сохраняется // Выставляется в true, если хотя бы один субъект с мониторинга подошел под условие срабатывания сигнала. В этом случае отчет сохраняется
AtomicBoolean generateResponse = new AtomicBoolean(false); AtomicBoolean generateResponse = new AtomicBoolean(false);
AtomicReference<Path> responsePath = new AtomicReference<>(loadedReportPath.resolveSibling( AtomicReference<Path> responsePath = new AtomicReference<>(
userPackage.getUserId().substring(0, 6) + userPackage.getPackageName() + loadedReportPath.resolveSibling(
CTUtil.getDateFromReportFileName(reportName) + ".xml")); String.format("%s_%s_%s.xml",
userPackage.getUserId().substring(0, 6),
userPackage.getPackageName(),
CTUtil.getDateFromReportFileName(reportName))
));
MonitoringSignalResponse response = new MonitoringSignalResponse(); MonitoringSignalResponse response = new MonitoringSignalResponse();
//Имя пакета, переданного при установке //Имя пакета, переданного при установке
@ -257,22 +261,23 @@ public class MonitoringService {
return subjects; return subjects;
} }
private void updateSignalHits(UserPackage userPackage, String responsePath, String reportFileName) { private void updateSignalHits(UserPackage userPackage, Path responsePath, Path reportFileName) {
log.info("Updating signal hits for {}", userPackage.getPackageName()); log.info("Updating signal hits for {}", userPackage.getPackageName());
LocalDateTime responseSentAt = LocalDateTime.now(); LocalDateTime responseSentAt = LocalDateTime.now();
// Считываем результирующий файл пачками и обновляем таблицу hits // Считываем результирующий файл пачками и обновляем таблицу hits
try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(Path.of(responsePath)), 8 * 1024 * 1024)) { try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(responsePath), 8 * 1024 * 1024)) {
staxXmlProcessor.read(in, MonitoringSignalResponse.class, staxXmlProcessor.read(in, MonitoringSignalResponse.class,
response -> { // как только считали пачку Subjects сразу обновлям таблицу hits response -> { // как только считали пачку Subjects сразу обновляем таблицу hits
List<Hit> hits = new ArrayList<>(); List<Hit> hits = new ArrayList<>();
response.getSubjects().getSubjects().forEach(subject -> { response.getSubjects().getSubjects().forEach(subject -> {
subject.getSignals().getSignals().forEach(signal -> { subject.getSignals().getSignals().forEach(signal -> {
Hit hit = new Hit(); Hit hit = new Hit();
hit.setPackageId(userPackage.getId()); hit.setPackageId(userPackage.getId());
hit.setSubjectId(subject.getId()); hit.setSubjectId(subject.getId());
hit.setSignalType(1); hit.setPhone(Long.valueOf(subject.getClientId()));
hit.setSignalType(signal.getSignalType());
hit.setResponseSentAt(responseSentAt); hit.setResponseSentAt(responseSentAt);
hit.setReportFileName(reportFileName); hit.setReportFileName(reportFileName.getFileName().toString());
hits.add(hit); hits.add(hit);
}); });
if (!hits.isEmpty()) { if (!hits.isEmpty()) {
@ -288,7 +293,7 @@ public class MonitoringService {
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException("Error while updating hits", e); throw new RuntimeException("Error while updating hits", e);
} }
CtFileUtils.deleteQuietly(Path.of(responsePath)); // удалям результирующий xml файл с диска (Он уже заархивирован к этому моменту) CtFileUtils.deleteQuietly(responsePath); // удалям результирующий xml файл с диска (Он уже заархивирован к этому моменту)
log.info("Signal hits updated for package {}", userPackage.getPackageName()); log.info("Signal hits updated for package {}", userPackage.getPackageName());
} }

View file

@ -32,6 +32,7 @@ public class MonitoringSignalResponseStaxXmlWriter extends StaxXmlWriter<Monitor
writerWrapper.addStartDocument(charsetName); writerWrapper.addStartDocument(charsetName);
writerWrapper.addStartElement("MonitoringSignalResponse"); writerWrapper.addStartElement("MonitoringSignalResponse");
writerWrapper.addSimplelement("PackageName", obj.getPackageName());
writerWrapper.addStartElement("Subjects"); writerWrapper.addStartElement("Subjects");