diff --git a/src/main/java/ru/nbch/credit_tracker/entities/dto/HitsData.java b/src/main/java/ru/nbch/credit_tracker/entities/dto/Hit.java similarity index 93% rename from src/main/java/ru/nbch/credit_tracker/entities/dto/HitsData.java rename to src/main/java/ru/nbch/credit_tracker/entities/dto/Hit.java index 4b94cc2..0b46bb8 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/dto/HitsData.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/dto/Hit.java @@ -7,7 +7,7 @@ import java.time.LocalDateTime; @Getter @Setter -public class HitsData { +public class Hit { private Integer id; private Integer packageId; private String subjectId; diff --git a/src/main/java/ru/nbch/credit_tracker/entities/dto/SubjectData.java b/src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java similarity index 70% rename from src/main/java/ru/nbch/credit_tracker/entities/dto/SubjectData.java rename to src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java index 0dca665..ea7629a 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/dto/SubjectData.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/dto/PhoneFidMap.java @@ -1,10 +1,6 @@ package ru.nbch.credit_tracker.entities.dto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.time.LocalDateTime; @@ -13,7 +9,7 @@ import java.time.LocalDateTime; @AllArgsConstructor @NoArgsConstructor @Builder -public class SubjectData { +public class PhoneFidMap { private Integer id; private Integer packageId; private String subjectId; diff --git a/src/main/java/ru/nbch/credit_tracker/entities/dto/PackageData.java b/src/main/java/ru/nbch/credit_tracker/entities/dto/UserPackage.java similarity index 84% rename from src/main/java/ru/nbch/credit_tracker/entities/dto/PackageData.java rename to src/main/java/ru/nbch/credit_tracker/entities/dto/UserPackage.java index 57e79ce..aef6bfa 100644 --- a/src/main/java/ru/nbch/credit_tracker/entities/dto/PackageData.java +++ b/src/main/java/ru/nbch/credit_tracker/entities/dto/UserPackage.java @@ -1,5 +1,6 @@ package ru.nbch.credit_tracker.entities.dto; +import lombok.Builder; import lombok.Getter; import lombok.Setter; @@ -7,7 +8,8 @@ import java.time.LocalDateTime; @Getter @Setter -public class PackageData { +@Builder +public class UserPackage { private Integer id; private String userId; private String packageName; diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index d352328..99091fa 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -1,14 +1,5 @@ package ru.nbch.credit_tracker.facade; -import java.io.File; -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.zip.ZipEntry; -import java.util.zip.ZipInputStream; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.io.FileUrlResource; @@ -21,11 +12,7 @@ import ru.nbch.credit_tracker.entities.request.active_packages.MonitoringActiveP import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest; import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject; import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse; -import ru.nbch.credit_tracker.entities.response.errors.MonitoringActivePackagesError; -import ru.nbch.credit_tracker.entities.response.errors.MonitoringDownloadError; -import ru.nbch.credit_tracker.entities.response.errors.MonitoringError; -import ru.nbch.credit_tracker.entities.response.errors.MonitoringPackageDeleteError; -import ru.nbch.credit_tracker.entities.response.errors.MonitoringReportListError; +import ru.nbch.credit_tracker.entities.response.errors.*; import ru.nbch.credit_tracker.entities.response.success.MonitoringPackageDeleteResponse; import ru.nbch.credit_tracker.entities.response.success.MonitoringReportListResponse; import ru.nbch.credit_tracker.entities.response.success.MonitoringResponse; @@ -44,6 +31,17 @@ import ru.nbch.credit_tracker.service.xml.jaxb.XmlUtilService; import ru.nbch.credit_tracker.utils.CTUtil; import ru.nbch.credit_tracker.utils.ValidationUtil; import ru.nbch.credit_tracker.utils.ZipUtils; + +import java.io.File; +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.excp; @Slf4j @@ -221,14 +219,14 @@ public class SignalFacade { // TODO validate xsd? if (signalRestService.update(signals)) { log.info("Package was successfully registered in signal service. PackageId: {} PackageName: {}", packageId, packageName); - signalService.setPackageStatus(packageId, Status.ON_MONITORING); + signalService.updatePackageStatus(packageId, Status.ON_MONITORING); } else { log.info("Package registration was rejected by signal service. PackageId: {} PackageName: {}", packageId, packageName); - signalService.setPackageStatus(packageId, Status.ERROR); + signalService.updatePackageStatus(packageId, Status.ERROR); } } } catch (Exception e) { - signalService.setPackageStatus(packageId, Status.ERROR); + signalService.updatePackageStatus(packageId, Status.ERROR); log.error("Ошибка при поиске фидов или расчете флагов просрочек. Package_id {}", packageId, e); } }); diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/HitsMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/HitsMapper.java index b5df999..7333e25 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/HitsMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/HitsMapper.java @@ -2,13 +2,13 @@ package ru.nbch.credit_tracker.mapper.signal; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import ru.nbch.credit_tracker.entities.dto.HitsData; +import ru.nbch.credit_tracker.entities.dto.Hit; import java.util.List; @Mapper public interface HitsMapper { - void setHits(@Param("hits") List hits); + void insertHits(@Param("hits") List hits); } diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java index 23495c7..5e6051a 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java @@ -2,10 +2,9 @@ package ru.nbch.credit_tracker.mapper.signal; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import ru.nbch.credit_tracker.entities.dto.SubjectData; +import ru.nbch.credit_tracker.entities.dto.PhoneFidMap; import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject; -import java.time.LocalDateTime; import java.util.List; @Mapper @@ -13,12 +12,10 @@ public interface PhoneFidMapMapper { void registerSubjects(@Param("subjects") List subjects, @Param("packageId") Integer packageId); - void registerSubjectsFidAndDebts(@Param("id") Integer id, @Param("fid") Integer fid, @Param("flagDebt5000") Integer flagDebt5000, @Param("flag90") Integer flag90, @Param("calculatedAt") LocalDateTime calculatedAt); + List findPhoneFidMaps(@Param("packageId") Integer packageId); - List findSubjectsData(@Param("packageId") Integer packageId); + List findFullPhoneFidMap(@Param("packageId") Integer packageId); - List findFullSubjectsData(@Param("packageId") Integer packageId); - - void updateSubjects(@Param("subjects") List subjects); + void updatePhoneFidMaps(@Param("subjects") List subjects); } 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 d61211a..cb8ce97 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 @@ -2,8 +2,7 @@ package ru.nbch.credit_tracker.mapper.signal; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; -import ru.nbch.credit_tracker.entities.dto.PackageData; -import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest; +import ru.nbch.credit_tracker.entities.dto.UserPackage; import java.time.LocalDateTime; import java.util.List; @@ -17,16 +16,16 @@ public interface UserPackageMapper { void deletePackage(@Param("userId") String userId, @Param("packageName") String packageName, @Param("status") String newStatus, @Param("previousStatus") String previousStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt); - Integer insertPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status); + Integer insertPackage(@Param("userPackage") UserPackage userPackage); - void setPackageStatus(@Param("packageId") Integer packageId, @Param("status") String status); + void updatePackageStatus(@Param("packageId") Integer packageId, @Param("status") String status); - void setPackageLastDownloadedReport(@Param("id") Integer id, @Param("fileName") String fileName); + void updatePackageLastDownloadedReport(@Param("id") Integer id, @Param("fileName") String fileName); - PackageData findPackageData(@Param("id") Integer id); + UserPackage findPackage(@Param("id") Integer id); - List findPackageDataList(@Param("userId") String userId, @Param("status") String status); + List findUserPackages(@Param("userId") String userId, @Param("status") String status); - List findPackagesByStatus(@Param("status") String status); + List findAllPackagesByStatus(@Param("status") String status); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java index d360548..c777b27 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java @@ -3,9 +3,9 @@ package ru.nbch.credit_tracker.service; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; -import ru.nbch.credit_tracker.entities.dto.HitsData; -import ru.nbch.credit_tracker.entities.dto.PackageData; -import ru.nbch.credit_tracker.entities.dto.SubjectData; +import ru.nbch.credit_tracker.entities.dto.Hit; +import ru.nbch.credit_tracker.entities.dto.PhoneFidMap; +import ru.nbch.credit_tracker.entities.dto.UserPackage; import ru.nbch.credit_tracker.entities.response.monitoring_signal_response.*; import ru.nbch.credit_tracker.entities.response.online_download.Inquiry; import ru.nbch.credit_tracker.entities.response.online_download.OnlineDownloadReport; @@ -57,13 +57,13 @@ public class MonitoringService { private void monitor() { log.info("Start monitoring"); - List packages = signalService.findPackagesOnMonitoring(); - for (PackageData packageData : packages) { - log.info("Processing package {}", packageData.getPackageName()); - SgnlOnlineReport onlineReports = signalRestService.getReports(packageData.getUserId().substring(0, 6) + "_" + packageData.getPackageName()); + List packages = signalService.findPackagesOnMonitoring(); + for (UserPackage userPackage : packages) { + log.info("Processing package {}", userPackage.getPackageName()); + SgnlOnlineReport onlineReports = signalRestService.getReports(userPackage.getUserId().substring(0, 6) + "_" + userPackage.getPackageName()); if (onlineReports == null) { - log.info("No reports found for package {}", packageData.getPackageName()); + log.info("No reports found for package {}", userPackage.getPackageName()); continue; } @@ -71,7 +71,7 @@ public class MonitoringService { .filter(fileName -> CTUtil.parseDateFromReportFileName(fileName) != null).toList(); // TODO оптимизировать if (fileNames.isEmpty()) { - log.info("No new report found for package {}", packageData.getPackageName()); + log.info("No new report found for package {}", userPackage.getPackageName()); continue; } @@ -79,16 +79,16 @@ public class MonitoringService { .orElseGet(Collections::emptyList) .stream().max(Comparator.comparing(CTUtil::parseDateFromReportFileName)); // отфильтровали только те имена, которые парсятся в дату, так что null тут не придет - LocalDateTime lastDownloadedReportDate = CTUtil.parseDateFromReportFileName(packageData.getLastDownloadedReport()); + LocalDateTime lastDownloadedReportDate = CTUtil.parseDateFromReportFileName(userPackage.getLastDownloadedReport()); - if (packageData.getLastDownloadedReport() != null) { - log.info("Last downloaded report found for package {}. Last Downloaded Report Name: {}", packageData.getPackageName(), packageData.getLastDownloadedReport()); + if (userPackage.getLastDownloadedReport() != null) { + log.info("Last downloaded report found for package {}. Last Downloaded Report Name: {}", userPackage.getPackageName(), userPackage.getLastDownloadedReport()); } else { log.info("Last Downloaded Report Name is empty"); } OnlineDownloadReport report = null; - if (packageData.getLastDownloadedReport() == null && newReport.isPresent()) { + if (userPackage.getLastDownloadedReport() == null && newReport.isPresent()) { report = loadReport(newReport.get()); // по этому пакету еще не было загруженных отчетов, продолжаем работу с полученным } else if (lastDownloadedReportDate != null && newReport.isPresent()) { LocalDateTime newReportDate = CTUtil.parseDateFromReportFileName(newReport.get()); @@ -97,28 +97,28 @@ public class MonitoringService { } } if (report == null) { - log.info("Report was not loaded for package {}", packageData.getPackageName()); + log.info("Report was not loaded for package {}", userPackage.getPackageName()); continue; } - MonitoringSignalResponse response = generateResponse(packageData, report.getPersons().getPersons()); - String fileName = createResponseFile(packageData, response); + MonitoringSignalResponse response = generateResponse(userPackage, report.getPersons().getPersons()); + String fileName = createResponseFile(userPackage, response); if (fileName != null) { log.info("New report fileName: {}", fileName); - updateSignalHits(packageData, response, fileName); - signalService.updateLastDownloadedReport(packageData.getId(), newReport.get()); + updateSignalHits(userPackage, response, fileName); + signalService.updateLastDownloadedReport(userPackage.getId(), newReport.get()); } else { - log.info("Report was not created for package {}", packageData.getPackageName()); + log.info("Report was not created for package {}", userPackage.getPackageName()); } } log.info("Finish monitoring"); } - private MonitoringSignalResponse generateResponse(PackageData packageData, List persons) { + private MonitoringSignalResponse generateResponse(UserPackage userPackage, List persons) { MonitoringSignalResponse response = new MonitoringSignalResponse(); - response.setPackageName(packageData.getPackageName()); // Имя пакета, переданного при установке + response.setPackageName(userPackage.getPackageName()); // Имя пакета, переданного при установке Subjects subjects = new Subjects(); - List subjectDataList = signalService.findFullSubjectsData(packageData.getId()); + List phoneFidMapList = signalService.findFullSubjectsData(userPackage.getId()); for (Person person : persons) { Signals signals = new Signals(); for (Inquiry inquiry : person.getInquiries()) { @@ -135,7 +135,7 @@ public class MonitoringService { // Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные if (!signals.getSignals().isEmpty()) { - subjectDataList.stream().filter(p -> p.getSubjectId().equals(person.getUid())).findFirst().ifPresent(subjectData -> { + phoneFidMapList.stream().filter(p -> p.getSubjectId().equals(person.getUid())).findFirst().ifPresent(subjectData -> { Subject subject = new Subject(); subject.setId(subjectData.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга) subject.setClientId(subjectData.getPhone()); @@ -150,10 +150,10 @@ public class MonitoringService { return response; } - private String createResponseFile(PackageData packageData, MonitoringSignalResponse response) { + private String createResponseFile(UserPackage userPackage, MonitoringSignalResponse response) { try { - String fileName = CTUtil.generateResponseReportFileName(packageData.getUserId(), packageData.getPackageName()); - String filePath = config.getLoadDir() + File.separator + packageData.getUserId().substring(0, 6) + File.separator; + String fileName = CTUtil.generateResponseReportFileName(userPackage.getUserId(), userPackage.getPackageName()); + String filePath = config.getLoadDir() + File.separator + userPackage.getUserId().substring(0, 6) + File.separator; File folder = new File(filePath); if (!folder.exists()) { @@ -179,23 +179,23 @@ public class MonitoringService { return null; } - private void updateSignalHits(PackageData packageData, MonitoringSignalResponse response, String reportFileName) { - log.info("Updating signal hits for {}", packageData.getPackageName()); + private void updateSignalHits(UserPackage userPackage, MonitoringSignalResponse response, String reportFileName) { + log.info("Updating signal hits for {}", userPackage.getPackageName()); LocalDateTime responseSentAt = LocalDateTime.now(); - List hits = new ArrayList<>(); + List hits = new ArrayList<>(); response.getSubjects().getSubjects().forEach(subject -> { subject.getSignals().getSignals().forEach(signal -> { - HitsData hitsData = new HitsData(); - hitsData.setPackageId(packageData.getId()); - hitsData.setSubjectId(subject.getId()); - hitsData.setSignalType(1); - hitsData.setResponseSentAt(responseSentAt); - hitsData.setReportFileName(reportFileName); - hits.add(hitsData); + Hit hit = new Hit(); + hit.setPackageId(userPackage.getId()); + hit.setSubjectId(subject.getId()); + hit.setSignalType(1); + hit.setResponseSentAt(responseSentAt); + hit.setReportFileName(reportFileName); + hits.add(hit); }); }); - signalService.setHits(hits); - log.info("Signal hits updated for package {}", packageData.getPackageName()); + signalService.insertHits(hits); + log.info("Signal hits updated for package {}", userPackage.getPackageName()); } private OnlineDownloadReport loadReport(String reportName) { diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java index 5cc0fb7..b020607 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -4,9 +4,9 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; -import ru.nbch.credit_tracker.entities.dto.HitsData; -import ru.nbch.credit_tracker.entities.dto.PackageData; -import ru.nbch.credit_tracker.entities.dto.SubjectData; +import ru.nbch.credit_tracker.entities.dto.Hit; +import ru.nbch.credit_tracker.entities.dto.PhoneFidMap; +import ru.nbch.credit_tracker.entities.dto.UserPackage; import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest; import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject; import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse; @@ -67,41 +67,46 @@ public class SignalService { } public boolean isPackageNotUnique(MonitoringRequest request) { - String userId = request.getUserId(); - return userPackageService.isPackageNotUnique(userId.substring(0, 6), request.getPackageName()); + return userPackageService.isPackageNotUnique(request.getUserId(), request.getPackageName()); } public Integer registerPackage(MonitoringRequest request) { - Integer packageId = userPackageService.insertPackage(request, LocalDateTime.now(), Status.PROCESSING); + UserPackage userPackage = UserPackage.builder() + .userId(request.getUserId()) + .packageName(request.getPackageName()) + .createdAt(LocalDateTime.now()) + .status(Status.PROCESSING.name()) + .build(); + Integer packageId = userPackageService.insertPackage(userPackage); List subjects = request.getSubjects().getSubject(); for (int i = 0; i < subjects.size(); i += batchSize) { int end = Math.min(i + batchSize, subjects.size()); - phoneFidMapService.registerSubjects(subjects.subList(i, end), packageId); + phoneFidMapService.registerSubjects(subjects.subList(i, end), packageId); // TODO преобразовывать список в List ? } return packageId; } public List registerSubjectsFidAndDebts(Integer packageId) { - List subjects = phoneFidMapService.findSubjectsData(packageId); + List subjects = phoneFidMapService.findPhoneFidMaps(packageId); return updateFlags(subjects, packageId); } - public List updateFlags(List subjects, Integer packageId) { - List fidsPhoneDataList = phoneService.findFidsPhoneData(subjects, true); + public List updateFlags(List subjects, Integer packageId) { + List fidsPhoneDataList = phoneService.findFidsPhoneData(subjects); LocalDateTime calculatedAt = LocalDateTime.now(); for (int i = 0; i < fidsPhoneDataList.size(); i += batchSize) { int end = Math.min(i + batchSize, fidsPhoneDataList.size()); List currentList = fidsPhoneDataList.subList(i, end); Map flagsDataMap = flagsService.findFlags(currentList.stream().map(PhoneService.FidsPhoneData::getFid).filter(Objects::nonNull).toList()); - List subjectToUpdate = new ArrayList<>(); + List subjectToUpdate = new ArrayList<>(); currentList.forEach(data -> { - SubjectData subject; + PhoneFidMap subject; if (data.getFid() != null) { FlagsService.FlagsData flagsData = flagsDataMap.get(data.getFid()); - subject = new SubjectData(data.getId(), packageId, data.getSubjectId(), data.getPhone(), data.getFid(), flagsData.getFlagDebt5000(), flagsData.getFlag90days(), calculatedAt); + subject = new PhoneFidMap(data.getId(), packageId, data.getSubjectId(), data.getPhone(), data.getFid(), flagsData.getFlagDebt5000(), flagsData.getFlag90days(), calculatedAt); } else { - subject = new SubjectData(data.getId(), packageId, data.getSubjectId(), data.getPhone(), null, null, null, calculatedAt); + subject = new PhoneFidMap(data.getId(), packageId, data.getSubjectId(), data.getPhone(), null, null, null, calculatedAt); } subjectToUpdate.add(subject); }); @@ -109,7 +114,7 @@ public class SignalService { int updateBatchSize = batchSize / 8; // 8 параметров на одну запись для обновления. Максимальное количество параметров ~65000 for (int j = 0; j < subjectToUpdate.size(); j += updateBatchSize) { int endIndex = Math.min(j + updateBatchSize, subjectToUpdate.size()); - phoneFidMapService.updateSubjects(subjectToUpdate.subList(j, endIndex)); + phoneFidMapService.updatePhoneFidMaps(subjectToUpdate.subList(j, endIndex)); } } @@ -117,18 +122,24 @@ public class SignalService { } public void rejectPackage(MonitoringRequest request) { - userPackageService.insertPackage(request, LocalDateTime.now(), Status.REJECTED); + UserPackage userPackage = UserPackage.builder() + .userId(request.getUserId()) + .packageName(request.getPackageName()) + .createdAt(LocalDateTime.now()) + .status(Status.REJECTED.name()) + .build(); + userPackageService.insertPackage(userPackage); } - public void setPackageStatus(Integer packageId, Status status) { - userPackageService.setPackageStatus(packageId, status); + public void updatePackageStatus(Integer packageId, Status status) { + userPackageService.updatePackageStatus(packageId, status); } public Signals buildSignals(Integer packageId, List fids) { - PackageData packageData = userPackageService.findPackageData(packageId); + UserPackage userPackage = userPackageService.findPackage(packageId); Signals signals = new Signals(); signals.setOnline("2"); // Всегда=2 (только онлайн-сигналы) - signals.setId(packageData.getUserId().substring(0, 6) + "_" + packageData.getPackageName()); // _ + signals.setId(userPackage.getUserId().substring(0, 6) + "_" + userPackage.getPackageName()); // _ Auth auth = new Auth(); auth.setUser(config.getSignalsuser()); signals.setAuth(auth); @@ -208,12 +219,11 @@ public class SignalService { public MonitoringActivePackagesResponse findActivePackages(String userId) { - String memberCode = userId.substring(0, 6); MonitoringActivePackagesResponse activePackages = new MonitoringActivePackagesResponse(); activePackages.setStatus("OK"); - activePackages.setMembercode(memberCode); + activePackages.setMembercode(userId.substring(0, 6)); Packages packages = new Packages(); - userPackageService.findPackageDataList(memberCode, Status.ON_MONITORING).forEach(data -> { + userPackageService.findUserPackages(userId, Status.ON_MONITORING).forEach(data -> { Package pack = new Package(); pack.setPackageName(data.getPackageName()); pack.setCreatedAt(data.getCreatedAt() != null ? data.getCreatedAt().toString() : null); @@ -228,12 +238,12 @@ public class SignalService { } public boolean isPackageExists(String username, String packageName) { - return userPackageService.isPackageExists(username.substring(0, 6), packageName, Status.ON_MONITORING); + return userPackageService.isPackageExists(username, packageName, Status.ON_MONITORING); } public MonitoringPackageDeleteResponse deletePackage(String username, String packageName) { LocalDateTime deactivatedAt = LocalDateTime.now(); - userPackageService.deletePackage(username.substring(0, 6), packageName, Status.DELETED, Status.ON_MONITORING, deactivatedAt); + userPackageService.deletePackage(username, packageName, Status.DELETED, Status.ON_MONITORING, deactivatedAt); MonitoringPackageDeleteResponse deleteResponse = new MonitoringPackageDeleteResponse(); deleteResponse.setStatus("Deleted"); @@ -242,19 +252,19 @@ public class SignalService { return deleteResponse; } - public List findPackagesOnMonitoring() { - return userPackageService.findPackagesByStatus(Status.ON_MONITORING); + public List findPackagesOnMonitoring() { + return userPackageService.findAllPackagesByStatus(Status.ON_MONITORING); } - public List findFullSubjectsData(Integer packageId) { - return phoneFidMapService.findFullSubjectsData(packageId); + public List findFullSubjectsData(Integer packageId) { + return phoneFidMapService.findFullPhoneFidMap(packageId); } - public void setHits(List hits) { - hitsService.setHits(hits); + public void insertHits(List hits) { + hitsService.insertHits(hits); } public void updateLastDownloadedReport(Integer id, String fileName) { - userPackageService.setPackageLastDownloadedReport(id, fileName); + userPackageService.updatePackageLastDownloadedReport(id, fileName); } } diff --git a/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java b/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java index 05cd5b5..ad2b150 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/UpdatingFlagsService.java @@ -3,8 +3,8 @@ package ru.nbch.credit_tracker.service; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; -import ru.nbch.credit_tracker.entities.dto.PackageData; -import ru.nbch.credit_tracker.entities.dto.SubjectData; +import ru.nbch.credit_tracker.entities.dto.PhoneFidMap; +import ru.nbch.credit_tracker.entities.dto.UserPackage; import ru.nbch.credit_tracker.entities.signal_package.Signals; import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.service.indic.PhoneService; @@ -42,32 +42,32 @@ public class UpdatingFlagsService { private void update() { log.info("Start updating flags"); - List packages = signalService.findPackagesOnMonitoring(); - for (PackageData packageData : packages) { - log.info("Updating flags for Package {}", packageData.getPackageName()); - List subjects = signalService.findFullSubjectsData(packageData.getId()) + List packages = signalService.findPackagesOnMonitoring(); + for (UserPackage userPackage : packages) { + log.info("Updating flags for Package {}", userPackage.getPackageName()); + List subjects = signalService.findFullSubjectsData(userPackage.getId()) .stream().filter(subject -> subject.getCalculatedAt() != null && hasDaysPassed(subject.getCalculatedAt())).toList(); - updateFlags(packageData.getId(), subjects, packageData.getPackageName()); + updateFlags(userPackage.getId(), subjects, userPackage.getPackageName()); } log.info("Finish updating flags"); } - private void updateFlags(Integer packageId, List subjects, String packageName) { + private void updateFlags(Integer packageId, List subjects, String packageName) { try { - signalService.setPackageStatus(packageId, Status.PROCESSING); + signalService.updatePackageStatus(packageId, Status.PROCESSING); List phoneFidsData = signalService.updateFlags(subjects, packageId); if (!phoneFidsData.isEmpty()) { Signals signals = signalService.buildSignals(packageId, phoneFidsData); if (signalRestService.update(signals)) { log.info("Flags were updated successfully. PackageId: {} PackageName: {}. Package status changed to ON_MONITORING", packageId, packageName); - signalService.setPackageStatus(packageId, Status.ON_MONITORING); + signalService.updatePackageStatus(packageId, Status.ON_MONITORING); } else { log.info("Updated package registration was rejected by signal service. PackageId: {} PackageName: {}", packageId, packageName); - signalService.setPackageStatus(packageId, Status.ERROR); + signalService.updatePackageStatus(packageId, Status.ERROR); } } else { log.info("No flags were updated for package id {}. Package status changed to ON_MONITORING", packageId); - signalService.setPackageStatus(packageId, Status.ON_MONITORING); + signalService.updatePackageStatus(packageId, Status.ON_MONITORING); } } catch (Exception e) { log.error("Ошибка при поиске фидов или перерасчете флагов просрочек. Package_id {}", packageId, e); diff --git a/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java b/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java index 0672f84..18c09ae 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/indic/PhoneService.java @@ -4,7 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; import org.springframework.stereotype.Service; -import ru.nbch.credit_tracker.entities.dto.SubjectData; +import ru.nbch.credit_tracker.entities.dto.PhoneFidMap; import ru.nbch.credit_tracker.mapper.indic.PhoneMapper; import java.time.LocalDate; @@ -20,16 +20,12 @@ public class PhoneService { this.mapper = mapper; } - public List findFidsPhoneData(List subjects) { - return findFidsPhoneData(subjects, false); - } - - public List findFidsPhoneData(List subjects, boolean processNullFids) { + public List findFidsPhoneData(List subjects) { List fidsPhoneDataList = new ArrayList<>(); int batchSize = 10000; for (int i = 0; i < subjects.size(); i += batchSize) { int end = Math.min(i + batchSize, subjects.size()); - List currentSubjects = subjects.subList(i, end); + List currentSubjects = subjects.subList(i, end); List phones = currentSubjects.stream().map(subject -> "9" + subject.getPhone()).toList(); List fidsData = mapper.findFids(phones); @@ -40,7 +36,7 @@ public class PhoneService { Integer fid = fidsMap.get(phone); if (fid != null) { fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), fid, subject.getPhone(), subject.getSubjectId())); - } else if (processNullFids) { + } else { fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), null, subject.getPhone(), subject.getSubjectId())); } }); diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/HitsService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/HitsService.java index 654d885..5d319d3 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/HitsService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/HitsService.java @@ -1,7 +1,7 @@ package ru.nbch.credit_tracker.service.signal; import org.springframework.stereotype.Service; -import ru.nbch.credit_tracker.entities.dto.HitsData; +import ru.nbch.credit_tracker.entities.dto.Hit; import ru.nbch.credit_tracker.mapper.signal.HitsMapper; import java.util.List; @@ -15,7 +15,7 @@ public class HitsService { this.mapper = mapper; } - public void setHits(List hits) { - mapper.setHits(hits); + public void insertHits(List hits) { + mapper.insertHits(hits); } } diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java index f0050f7..97fc8c0 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java @@ -1,11 +1,10 @@ package ru.nbch.credit_tracker.service.signal; import org.springframework.stereotype.Service; -import ru.nbch.credit_tracker.entities.dto.SubjectData; +import ru.nbch.credit_tracker.entities.dto.PhoneFidMap; import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject; import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper; -import java.time.LocalDateTime; import java.util.List; @Service @@ -21,19 +20,15 @@ public class PhoneFidMapService { mapper.registerSubjects(subjects, packageId); } - public void registerSubjectsFidAndDebts(Integer id, Integer fid, Integer flagDebt5000, Integer flag90, LocalDateTime calculatedAt) { - mapper.registerSubjectsFidAndDebts(id, fid, flagDebt5000, flag90, calculatedAt); + public List findPhoneFidMaps(Integer packageId) { + return mapper.findPhoneFidMaps(packageId); } - public List findSubjectsData(Integer packageId) { - return mapper.findSubjectsData(packageId); + public List findFullPhoneFidMap(Integer packageId) { + return mapper.findFullPhoneFidMap(packageId); } - public List findFullSubjectsData( Integer packageId) { - return mapper.findFullSubjectsData(packageId); - } - - public void updateSubjects(List subjects) { - mapper.updateSubjects(subjects); + public void updatePhoneFidMaps(List subjects) { + mapper.updatePhoneFidMaps(subjects); } } diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java index 2bb1e22..33c169e 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java @@ -1,8 +1,7 @@ package ru.nbch.credit_tracker.service.signal; import org.springframework.stereotype.Service; -import ru.nbch.credit_tracker.entities.dto.PackageData; -import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest; +import ru.nbch.credit_tracker.entities.dto.UserPackage; import ru.nbch.credit_tracker.enums.Status; import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; @@ -19,38 +18,38 @@ public class UserPackageService { } public boolean isPackageNotUnique(String userId, String packageName) { - return mapper.isPackageNotUnique(userId, packageName); + return mapper.isPackageNotUnique(userId.substring(0, 6), packageName); } public boolean isPackageExists(String userId, String packageName, Status status) { - return mapper.isPackageExists(userId, packageName, status.name()); + return mapper.isPackageExists(userId.substring(0, 6), packageName, status.name()); } public void deletePackage(String userId, String packageName, Status newStatus, Status previousStatus, LocalDateTime deactivatedAt) { - mapper.deletePackage(userId, packageName, newStatus.name(), previousStatus.name(), deactivatedAt); + mapper.deletePackage(userId.substring(0, 6), packageName, newStatus.name(), previousStatus.name(), deactivatedAt); } - public Integer insertPackage(MonitoringRequest request, LocalDateTime creadedAt, Status status) { - return mapper.insertPackage(request, creadedAt, status.name()); + public Integer insertPackage(UserPackage userPackage) { + return mapper.insertPackage(userPackage); } - public void setPackageStatus(Integer packageId, Status status) { - mapper.setPackageStatus(packageId, status.name()); + public void updatePackageStatus(Integer packageId, Status status) { + mapper.updatePackageStatus(packageId, status.name()); } - public void setPackageLastDownloadedReport(Integer id, String fileName) { - mapper.setPackageLastDownloadedReport(id, fileName); + public void updatePackageLastDownloadedReport(Integer id, String fileName) { + mapper.updatePackageLastDownloadedReport(id, fileName); } - public PackageData findPackageData(Integer id) { - return mapper.findPackageData(id); + public UserPackage findPackage(Integer id) { + return mapper.findPackage(id); } - public List findPackageDataList(String userId, Status status) { - return mapper.findPackageDataList(userId, status.name()); + public List findUserPackages(String userId, Status status) { + return mapper.findUserPackages(userId.substring(0, 6), status.name()); } - public List findPackagesByStatus(Status status) { - return mapper.findPackagesByStatus(status.name()); + public List findAllPackagesByStatus(Status status) { + return mapper.findAllPackagesByStatus(status.name()); } } diff --git a/src/main/resources/mybatis/mapper/signal/HitsMapper.xml b/src/main/resources/mybatis/mapper/signal/HitsMapper.xml index 0cda648..2a64fdb 100644 --- a/src/main/resources/mybatis/mapper/signal/HitsMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/HitsMapper.xml @@ -5,7 +5,7 @@ - + INSERT INTO signals_hits (package_id, subject_id, signal_type, response_sent_at, report_file_name) values diff --git a/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml b/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml index bb4a3b5..74aa773 100644 --- a/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/PhoneFidMapMapper.xml @@ -5,7 +5,7 @@ - + @@ -25,7 +25,7 @@ - + UPDATE signals_phone_fid_map SET @@ -40,19 +40,13 @@ - - UPDATE signals_phone_fid_map - SET fid = #{fid}, flag_debt5000 = #{flagDebt5000}, flag_90_12 = #{flag90}, calculated_at = #{calculatedAt} - WHERE id = #{id} - - - SELECT id, subject_id, phone FROM signals_phone_fid_map WHERE package_id = #{packageId} - SELECT id, package_id, subject_id, diff --git a/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml index e2dd615..d2c3ed0 100644 --- a/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml @@ -5,7 +5,7 @@ - + @@ -38,40 +38,34 @@ #{previousStatus} - - - INSERT INTO signals_user_packages (membercode, package_name, created_at, status) - values (#{request.userId}, #{request.packageName}, #{creadedAt}, #{status}) - - - + UPDATE signals_user_packages SET status = #{status} WHERE id = #{packageId} - + UPDATE signals_user_packages SET last_downloaded_report = #{fileName} WHERE id = #{id} - SELECT membercode, package_name FROM signals_user_packages WHERE id = #{id} LIMIT 1 - SELECT package_name, created_at FROM signals_user_packages WHERE membercode IS NOT NULL @@ -79,8 +73,8 @@ AND status = #{status} - SELECT id, membercode, package_name, created_at, last_downloaded_report FROM signals_user_packages WHERE status = #{status}