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 new file mode 100644 index 0000000..b5df999 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/HitsMapper.java @@ -0,0 +1,14 @@ +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 java.util.List; + +@Mapper +public interface HitsMapper { + + void setHits(@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 new file mode 100644 index 0000000..23495c7 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/PhoneFidMapMapper.java @@ -0,0 +1,24 @@ +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.request.monitoring_request.Subject; + +import java.time.LocalDateTime; +import java.util.List; + +@Mapper +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 findSubjectsData(@Param("packageId") Integer packageId); + + List findFullSubjectsData(@Param("packageId") Integer packageId); + + void updateSubjects(@Param("subjects") List subjects); + +} diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java similarity index 52% rename from src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java rename to src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java index a61ccf8..d61211a 100644 --- a/src/main/java/ru/nbch/credit_tracker/mapper/signal/SignalMapper.java +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/UserPackageMapper.java @@ -2,17 +2,14 @@ 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.PackageData; -import ru.nbch.credit_tracker.entities.dto.SubjectData; import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest; -import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject; import java.time.LocalDateTime; import java.util.List; @Mapper -public interface SignalMapper { +public interface UserPackageMapper { boolean isPackageNotUnique(@Param("userId") String userId, @Param("packageName") String packageName); @@ -20,19 +17,11 @@ public interface SignalMapper { void deletePackage(@Param("userId") String userId, @Param("packageName") String packageName, @Param("status") String newStatus, @Param("previousStatus") String previousStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt); - Integer registerPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status); - - void registerSubjects(@Param("subjects") List subjects, @Param("packageId") Integer packageId); - - void insertPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status); - - void registerSubjectsFidAndDebts(@Param("id") Integer id, @Param("fid") Integer fid, @Param("flagDebt5000") Integer flagDebt5000, @Param("flag90") Integer flag90, @Param("calculatedAt") LocalDateTime calculatedAt); + Integer insertPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status); void setPackageStatus(@Param("packageId") Integer packageId, @Param("status") String status); - List findSubjectsData(@Param("packageId") Integer packageId); - - List findFullSubjectsData(@Param("packageId") Integer packageId); + void setPackageLastDownloadedReport(@Param("id") Integer id, @Param("fileName") String fileName); PackageData findPackageData(@Param("id") Integer id); @@ -40,9 +29,4 @@ public interface SignalMapper { List findPackagesByStatus(@Param("status") String status); - void setHits(@Param("hits") List hits); - - void updateSubjects(@Param("subjects") List subjects); - - void setPackageLastDownloadedReport(@Param("id") Integer id, @Param("fileName") String fileName); } 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 a8768ca..5cc0fb7 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -17,10 +17,12 @@ import ru.nbch.credit_tracker.entities.signal_package.Auth; import ru.nbch.credit_tracker.entities.signal_package.Person; import ru.nbch.credit_tracker.entities.signal_package.Signals; import ru.nbch.credit_tracker.enums.Status; -import ru.nbch.credit_tracker.mapper.signal.SignalMapper; import ru.nbch.credit_tracker.service.indic.FlagsService; import ru.nbch.credit_tracker.service.indic.PersonService; import ru.nbch.credit_tracker.service.indic.PhoneService; +import ru.nbch.credit_tracker.service.signal.HitsService; +import ru.nbch.credit_tracker.service.signal.PhoneFidMapService; +import ru.nbch.credit_tracker.service.signal.UserPackageService; import ru.nbch.credit_tracker.utils.CTUtil; import java.text.DateFormat; @@ -39,7 +41,9 @@ public class SignalService { private final static DateFormat DATE_FORMAT = new SimpleDateFormat("dd.MM.yyyy"); private final CreditTrackerSettings config; - private final SignalMapper mapper; + private final HitsService hitsService; + private final UserPackageService userPackageService; + private final PhoneFidMapService phoneFidMapService; private final PhoneService phoneService; private final FlagsService flagsService; private final PersonService personService; @@ -47,12 +51,16 @@ public class SignalService { private final int batchSize = 10000; public SignalService(CreditTrackerSettings config, - SignalMapper mapper, + HitsService hitsService, + UserPackageService userPackageService, + PhoneFidMapService phoneFidMapService, PhoneService phoneService, FlagsService flagsService, PersonService personService) { this.config = config; - this.mapper = mapper; + this.hitsService = hitsService; + this.userPackageService = userPackageService; + this.phoneFidMapService = phoneFidMapService; this.phoneService = phoneService; this.flagsService = flagsService; this.personService = personService; @@ -60,21 +68,21 @@ public class SignalService { public boolean isPackageNotUnique(MonitoringRequest request) { String userId = request.getUserId(); - return mapper.isPackageNotUnique(userId.substring(0, 6), request.getPackageName()); + return userPackageService.isPackageNotUnique(userId.substring(0, 6), request.getPackageName()); } public Integer registerPackage(MonitoringRequest request) { - Integer packageId = mapper.registerPackage(request, LocalDateTime.now(), Status.PROCESSING.name()); + Integer packageId = userPackageService.insertPackage(request, LocalDateTime.now(), Status.PROCESSING); List subjects = request.getSubjects().getSubject(); for (int i = 0; i < subjects.size(); i += batchSize) { int end = Math.min(i + batchSize, subjects.size()); - mapper.registerSubjects(subjects.subList(i, end), packageId); + phoneFidMapService.registerSubjects(subjects.subList(i, end), packageId); } return packageId; } public List registerSubjectsFidAndDebts(Integer packageId) { - List subjects = mapper.findSubjectsData(packageId); + List subjects = phoneFidMapService.findSubjectsData(packageId); return updateFlags(subjects, packageId); } @@ -101,7 +109,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()); - mapper.updateSubjects(subjectToUpdate.subList(j, endIndex)); + phoneFidMapService.updateSubjects(subjectToUpdate.subList(j, endIndex)); } } @@ -109,15 +117,15 @@ public class SignalService { } public void rejectPackage(MonitoringRequest request) { - mapper.insertPackage(request, LocalDateTime.now(), Status.REJECTED.name()); + userPackageService.insertPackage(request, LocalDateTime.now(), Status.REJECTED); } public void setPackageStatus(Integer packageId, Status status) { - mapper.setPackageStatus(packageId, status.name()); + userPackageService.setPackageStatus(packageId, status); } public Signals buildSignals(Integer packageId, List fids) { - PackageData packageData = mapper.findPackageData(packageId); + PackageData packageData = userPackageService.findPackageData(packageId); Signals signals = new Signals(); signals.setOnline("2"); // Всегда=2 (только онлайн-сигналы) signals.setId(packageData.getUserId().substring(0, 6) + "_" + packageData.getPackageName()); // _ @@ -205,7 +213,7 @@ public class SignalService { activePackages.setStatus("OK"); activePackages.setMembercode(memberCode); Packages packages = new Packages(); - mapper.findPackageDataList(memberCode, Status.ON_MONITORING.name()).forEach(data -> { + userPackageService.findPackageDataList(memberCode, Status.ON_MONITORING).forEach(data -> { Package pack = new Package(); pack.setPackageName(data.getPackageName()); pack.setCreatedAt(data.getCreatedAt() != null ? data.getCreatedAt().toString() : null); @@ -220,12 +228,12 @@ public class SignalService { } public boolean isPackageExists(String username, String packageName) { - return mapper.isPackageExists(username.substring(0, 6), packageName, Status.ON_MONITORING.name()); + return userPackageService.isPackageExists(username.substring(0, 6), packageName, Status.ON_MONITORING); } public MonitoringPackageDeleteResponse deletePackage(String username, String packageName) { LocalDateTime deactivatedAt = LocalDateTime.now(); - mapper.deletePackage(username.substring(0, 6), packageName, Status.DELETED.name(), Status.ON_MONITORING.name(), deactivatedAt); + userPackageService.deletePackage(username.substring(0, 6), packageName, Status.DELETED, Status.ON_MONITORING, deactivatedAt); MonitoringPackageDeleteResponse deleteResponse = new MonitoringPackageDeleteResponse(); deleteResponse.setStatus("Deleted"); @@ -235,18 +243,18 @@ public class SignalService { } public List findPackagesOnMonitoring() { - return mapper.findPackagesByStatus(Status.ON_MONITORING.name()); + return userPackageService.findPackagesByStatus(Status.ON_MONITORING); } public List findFullSubjectsData(Integer packageId) { - return mapper.findFullSubjectsData(packageId); + return phoneFidMapService.findFullSubjectsData(packageId); } public void setHits(List hits) { - mapper.setHits(hits); + hitsService.setHits(hits); } public void updateLastDownloadedReport(Integer id, String fileName) { - mapper.setPackageLastDownloadedReport(id, fileName); + userPackageService.setPackageLastDownloadedReport(id, fileName); } } 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 new file mode 100644 index 0000000..654d885 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/HitsService.java @@ -0,0 +1,21 @@ +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.mapper.signal.HitsMapper; + +import java.util.List; + +@Service +public class HitsService { + + private final HitsMapper mapper; + + public HitsService(HitsMapper mapper) { + this.mapper = mapper; + } + + public void setHits(List hits) { + mapper.setHits(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 new file mode 100644 index 0000000..f0050f7 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/PhoneFidMapService.java @@ -0,0 +1,39 @@ +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.request.monitoring_request.Subject; +import ru.nbch.credit_tracker.mapper.signal.PhoneFidMapMapper; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +public class PhoneFidMapService { + + private final PhoneFidMapMapper mapper; + + public PhoneFidMapService(PhoneFidMapMapper mapper) { + this.mapper = mapper; + } + + public void registerSubjects(List subjects, Integer packageId) { + 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 findSubjectsData(Integer packageId) { + return mapper.findSubjectsData(packageId); + } + + public List findFullSubjectsData( Integer packageId) { + return mapper.findFullSubjectsData(packageId); + } + + public void updateSubjects(List subjects) { + mapper.updateSubjects(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 new file mode 100644 index 0000000..2bb1e22 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/UserPackageService.java @@ -0,0 +1,56 @@ +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.enums.Status; +import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper; + +import java.time.LocalDateTime; +import java.util.List; + +@Service +public class UserPackageService { + + private final UserPackageMapper mapper; + + public UserPackageService(UserPackageMapper mapper) { + this.mapper = mapper; + } + + public boolean isPackageNotUnique(String userId, String packageName) { + return mapper.isPackageNotUnique(userId, packageName); + } + + public boolean isPackageExists(String userId, String packageName, Status status) { + return mapper.isPackageExists(userId, 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); + } + + public Integer insertPackage(MonitoringRequest request, LocalDateTime creadedAt, Status status) { + return mapper.insertPackage(request, creadedAt, status.name()); + } + + public void setPackageStatus(Integer packageId, Status status) { + mapper.setPackageStatus(packageId, status.name()); + } + + public void setPackageLastDownloadedReport(Integer id, String fileName) { + mapper.setPackageLastDownloadedReport(id, fileName); + } + + public PackageData findPackageData(Integer id) { + return mapper.findPackageData(id); + } + + public List findPackageDataList(String userId, Status status) { + return mapper.findPackageDataList(userId, status.name()); + } + + public List findPackagesByStatus(Status status) { + return mapper.findPackagesByStatus(status.name()); + } +} diff --git a/src/main/resources/mybatis/mapper/signal/HitsMapper.xml b/src/main/resources/mybatis/mapper/signal/HitsMapper.xml new file mode 100644 index 0000000..0cda648 --- /dev/null +++ b/src/main/resources/mybatis/mapper/signal/HitsMapper.xml @@ -0,0 +1,16 @@ + + + + + + + INSERT INTO signals_hits (package_id, subject_id, signal_type, response_sent_at, report_file_name) + values + + (#{hit.packageId}, #{hit.subjectId}, #{hit.signalType}, #{hit.responseSentAt}, #{hit.reportFileName}) + + + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/signal/PhoneFidMapper.xml b/src/main/resources/mybatis/mapper/signal/PhoneFidMapper.xml new file mode 100644 index 0000000..07c498c --- /dev/null +++ b/src/main/resources/mybatis/mapper/signal/PhoneFidMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + INSERT INTO signals_phone_fid_map (subject_id, phone, fid, package_id) + values + + (#{subject.id}, #{subject.clientId}, NULL, #{packageId}) + + + + + + + UPDATE signals_phone_fid_map + SET + package_id = #{subject.packageId}, + subject_id = #{subject.subjectId}, + phone = #{subject.phone}, + fid = #{subject.fid}, + flag_debt5000 = #{subject.flagDebt5000}, + flag_90_12 = #{subject.flag90days}, + calculated_at = #{subject.calculatedAt} + WHERE id = #{subject.id} + + + + + UPDATE signals_phone_fid_map + SET fid = #{fid}, flag_debt5000 = #{flagDebt5000}, flag_90_12 = #{flag90}, calculated_at = #{calculatedAt} + WHERE id = #{id} + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/signal/SignalMapper.xml b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml similarity index 55% rename from src/main/resources/mybatis/mapper/signal/SignalMapper.xml rename to src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml index cfd25c2..e2dd615 100644 --- a/src/main/resources/mybatis/mapper/signal/SignalMapper.xml +++ b/src/main/resources/mybatis/mapper/signal/UserPackageMapper.xml @@ -3,18 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - + @@ -61,43 +50,6 @@ values (#{request.userId}, #{request.packageName}, #{creadedAt}, #{status}) - - INSERT INTO signals_phone_fid_map (subject_id, phone, fid, package_id) - values - - (#{subject.id}, #{subject.clientId}, NULL, #{packageId}) - - - - - INSERT INTO signals_hits (package_id, subject_id, signal_type, response_sent_at, report_file_name) - values - - (#{hit.packageId}, #{hit.subjectId}, #{hit.signalType}, #{hit.responseSentAt}, #{hit.reportFileName}) - - - - - - UPDATE signals_phone_fid_map - SET - package_id = #{subject.packageId}, - subject_id = #{subject.subjectId}, - phone = #{subject.phone}, - fid = #{subject.fid}, - flag_debt5000 = #{subject.flagDebt5000}, - flag_90_12 = #{subject.flag90days}, - calculated_at = #{subject.calculatedAt} - WHERE id = #{subject.id} - - - - - UPDATE signals_phone_fid_map - SET fid = #{fid}, flag_debt5000 = #{flagDebt5000}, flag_90_12 = #{flag90}, calculated_at = #{calculatedAt} - WHERE id = #{id} - - UPDATE signals_user_packages SET status = #{status} @@ -110,25 +62,6 @@ WHERE id = #{id} - - - -