Refactoring

This commit is contained in:
Mikhail Trofimov 2025-06-25 12:09:55 +03:00
parent 3e983985a4
commit 389eeb4356
9 changed files with 107 additions and 81 deletions

View file

@ -0,0 +1,17 @@
package ru.nbch.credit_tracker.entities.dto;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
public class HitsData {
private Integer id;
private Integer packageId;
private String subjectId;
private Integer signalType;
private LocalDateTime responseSentAt;
private String reportFileName;
}

View file

@ -0,0 +1,17 @@
package ru.nbch.credit_tracker.entities.dto;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
public class PackageData {
private Integer id;
private String userId;
private String packageName;
private LocalDateTime createdAt;
private String status;
private String lastDownloadedReport;
}

View file

@ -0,0 +1,19 @@
package ru.nbch.credit_tracker.entities.dto;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
public class SubjectData {
private Integer id;
private Integer packageId;
private String subjectId;
private String phone;
private Integer fid;
private Integer flagDebt5000;
private Integer flag90days;
private LocalDateTime calculatedAt;
}

View file

@ -2,9 +2,11 @@ package ru.nbch.credit_tracker.mapper.signal;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; 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.MonitoringRequest;
import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject; import ru.nbch.credit_tracker.entities.request.monitoring_request.Subject;
import ru.nbch.credit_tracker.service.SignalService;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@ -28,17 +30,17 @@ public interface SignalMapper {
void setPackageStatus(@Param("packageId") Integer packageId, @Param("status") String status); void setPackageStatus(@Param("packageId") Integer packageId, @Param("status") String status);
List<SignalService.SubjectData> findSubjectsData(@Param("packageId") Integer packageId); List<SubjectData> findSubjectsData(@Param("packageId") Integer packageId);
List<SignalService.SubjectData> findFullSubjectsData(@Param("packageId") Integer packageId); List<SubjectData> findFullSubjectsData(@Param("packageId") Integer packageId);
SignalService.PackageData findPackageData(@Param("id") Integer id); PackageData findPackageData(@Param("id") Integer id);
List<SignalService.PackageData> findPackageDataList(@Param("userId") String userId); List<PackageData> findPackageDataList(@Param("userId") String userId);
List<SignalService.PackageData> findPackagesByStatus(@Param("status") String status); List<PackageData> findPackagesByStatus(@Param("status") String status);
void setHits(@Param("hits") List<SignalService.HitsData> hits); void setHits(@Param("hits") List<HitsData> hits);
void setPackageLastDownloadedReport(@Param("id") Integer id, @Param("fileName") String fileName); void setPackageLastDownloadedReport(@Param("id") Integer id, @Param("fileName") String fileName);
} }

View file

@ -3,6 +3,9 @@ package ru.nbch.credit_tracker.service;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; 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.response.monitoring_signal_response.*; 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.Inquiry;
import ru.nbch.credit_tracker.entities.response.online_download.OnlineDownloadReport; import ru.nbch.credit_tracker.entities.response.online_download.OnlineDownloadReport;
@ -53,8 +56,8 @@ public class MonitoringService {
} }
private void monitor() { private void monitor() {
List<SignalService.PackageData> packages = signalService.findPackagesOnMonitoring(); List<PackageData> packages = signalService.findPackagesOnMonitoring();
for (SignalService.PackageData packageData : packages) { for (PackageData packageData : packages) {
SgnlOnlineReport onlineReports = signalRestService.getReports(packageData.getUserId().substring(0, 6) + "_" + packageData.getPackageName()); SgnlOnlineReport onlineReports = signalRestService.getReports(packageData.getUserId().substring(0, 6) + "_" + packageData.getPackageName());
List<String> fileNames = onlineReports.getOperationReport().getReports().getReports().stream().map(Report::getFilename) List<String> fileNames = onlineReports.getOperationReport().getReports().getReports().stream().map(Report::getFilename)
@ -88,11 +91,11 @@ public class MonitoringService {
} }
} }
private MonitoringSignalResponse generateResponse(SignalService.PackageData packageData, List<Person> persons) { private MonitoringSignalResponse generateResponse(PackageData packageData, List<Person> persons) {
MonitoringSignalResponse response = new MonitoringSignalResponse(); MonitoringSignalResponse response = new MonitoringSignalResponse();
response.setPackageName(packageData.getPackageName()); // Имя пакета, переданного при установке response.setPackageName(packageData.getPackageName()); // Имя пакета, переданного при установке
Subjects subjects = new Subjects(); Subjects subjects = new Subjects();
List<SignalService.SubjectData> subjectDataList = signalService.findFullSubjectsData(packageData.getId()); List<SubjectData> subjectDataList = signalService.findFullSubjectsData(packageData.getId());
for (Person person : persons) { for (Person person : persons) {
Signals signals = new Signals(); Signals signals = new Signals();
for (Inquiry inquiry : person.getInquiries()) { for (Inquiry inquiry : person.getInquiries()) {
@ -124,7 +127,7 @@ public class MonitoringService {
return response; return response;
} }
private String createResponseFile(SignalService.PackageData packageData, MonitoringSignalResponse response) { private String createResponseFile(PackageData packageData, MonitoringSignalResponse response) {
try { try {
String fileName = CTUtil.generateResponseReportFileName(packageData.getUserId(), packageData.getPackageName()); String fileName = CTUtil.generateResponseReportFileName(packageData.getUserId(), packageData.getPackageName());
String filePath = config.getLoadDir() + File.separator + packageData.getUserId().substring(0, 6) + File.separator; String filePath = config.getLoadDir() + File.separator + packageData.getUserId().substring(0, 6) + File.separator;
@ -153,12 +156,12 @@ public class MonitoringService {
return null; return null;
} }
private void updateSignalHits(SignalService.PackageData packageData, MonitoringSignalResponse response, String reportFileName) { private void updateSignalHits(PackageData packageData, MonitoringSignalResponse response, String reportFileName) {
LocalDateTime responseSentAt = LocalDateTime.now(); LocalDateTime responseSentAt = LocalDateTime.now();
List<SignalService.HitsData> hits = new ArrayList<>(); List<HitsData> hits = new ArrayList<>();
response.getSubjects().getSubjects().forEach(subject -> { response.getSubjects().getSubjects().forEach(subject -> {
subject.getSignals().getSignals().forEach(signal -> { subject.getSignals().getSignals().forEach(signal -> {
SignalService.HitsData hitsData = new SignalService.HitsData(); HitsData hitsData = new HitsData();
hitsData.setPackageId(packageData.getId()); hitsData.setPackageId(packageData.getId());
hitsData.setSubjectId(subject.getId()); hitsData.setSubjectId(subject.getId());
hitsData.setSignalType(1); hitsData.setSignalType(1);

View file

@ -1,10 +1,11 @@
package ru.nbch.credit_tracker.service; package ru.nbch.credit_tracker.service;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; 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.request.monitoring_request.MonitoringRequest; import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest;
import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse; import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse;
import ru.nbch.credit_tracker.entities.response.active_packages.Package; import ru.nbch.credit_tracker.entities.response.active_packages.Package;
@ -18,13 +19,12 @@ import ru.nbch.credit_tracker.mapper.signal.SignalMapper;
import ru.nbch.credit_tracker.service.indic.FlagsService; import ru.nbch.credit_tracker.service.indic.FlagsService;
import ru.nbch.credit_tracker.service.indic.PersonService; import ru.nbch.credit_tracker.service.indic.PersonService;
import ru.nbch.credit_tracker.service.indic.PhoneService; import ru.nbch.credit_tracker.service.indic.PhoneService;
import ru.nbch.credit_tracker.utils.CTUtil;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List; import java.util.List;
@Service @Service
@ -109,20 +109,20 @@ public class SignalService {
person.setS(nameData.getLastName()); person.setS(nameData.getLastName());
person.setN(nameData.getFirstName()); person.setN(nameData.getFirstName());
person.setM(StringUtils.isNotBlank(nameData.getMiddleName()) ? nameData.getMiddleName() : null); person.setM(StringUtils.isNotBlank(nameData.getMiddleName()) ? nameData.getMiddleName() : null);
person.setD(DATE_FORMAT.format(toDate(nameData.getBirthDate()))); person.setD(DATE_FORMAT.format(CTUtil.localDatetoDate(nameData.getBirthDate())));
person.setPn(getPn(passportData.getSerNum(), passportData.getIdNum())); person.setPn(getPn(passportData.getSerNum(), passportData.getIdNum()));
person.setPd(passportData.getIssDate() != null ? DATE_FORMAT.format(toDate(passportData.getIssDate())) : "01.01.2000"); person.setPd(passportData.getIssDate() != null ? DATE_FORMAT.format(CTUtil.localDatetoDate(passportData.getIssDate())) : "01.01.2000");
person.setDt(StringUtils.isNotBlank(passportData.getIdType2()) ? passportData.getIdType2() : passportData.getIdType()); person.setDt(StringUtils.isNotBlank(passportData.getIdType2()) ? passportData.getIdType2() : passportData.getIdType());
person.setIp("0"); person.setIp("0");
person.setUid(id); person.setUid(id);
person.setOksm("999"); person.setOksm("999");
person.setConsentDate(DATE_FORMAT.format(toDate(LocalDate.now()))); person.setConsentDate(DATE_FORMAT.format(CTUtil.localDatetoDate(LocalDate.now())));
person.setConsentPurpose("16"); person.setConsentPurpose("16");
person.setReportUser("АО «НБКИ»"); person.setReportUser("АО «НБКИ»");
person.setLiability("1"); person.setLiability("1");
person.setConsentPeriod("3"); person.setConsentPeriod("3");
person.setAgrDate(DATE_FORMAT.format(toDate(LocalDate.now()))); person.setAgrDate(DATE_FORMAT.format(CTUtil.localDatetoDate(LocalDate.now())));
person.setReportUserRegNum("1057746710713"); person.setReportUserRegNum("1057746710713");
person.setReportUserTaxID("7703548386"); person.setReportUserTaxID("7703548386");
person.setConsentHash("hash"); person.setConsentHash("hash");
@ -140,26 +140,11 @@ public class SignalService {
} }
private String getPn(String serNum, String idNum) { private String getPn(String serNum, String idNum) {
String normSerNum = normalize(serNum); String normSerNum = CTUtil.normalize(serNum);
String normIdNum = normalize(idNum); String normIdNum = CTUtil.normalize(idNum);
return StringUtils.isNotBlank(normSerNum) ? normSerNum + normIdNum : normIdNum; return StringUtils.isNotBlank(normSerNum) ? normSerNum + normIdNum : normIdNum;
} }
// TODO move to utility service
private String normalize(String value) {
if (value == null)
return null;
value = value.replaceAll("[^А-Яа-яA-Za-z0-9]", "");
return value.replaceFirst("^0+", "");
}
// TODO move to utility service
private Date toDate(LocalDate date) {
if (date == null) {
return null;
}
return Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
public MonitoringActivePackagesResponse findActivePackages(String userId) { public MonitoringActivePackagesResponse findActivePackages(String userId) {
String memberCode = userId.substring(0, 6); String memberCode = userId.substring(0, 6);
@ -212,38 +197,4 @@ public class SignalService {
mapper.setPackageLastDownloadedReport(id, fileName); mapper.setPackageLastDownloadedReport(id, fileName);
} }
@Getter
@Setter
public static class PackageData {
private Integer id;
private String userId;
private String packageName;
private LocalDateTime createdAt;
private String status;
private String lastDownloadedReport;
}
@Getter
@Setter
public static class SubjectData {
private Integer id;
private Integer packageId;
private String subjectId;
private String phone;
private Integer fid;
private Integer flagDebt5000;
private Integer flag90days;
private LocalDateTime calculatedAt;
}
@Getter
@Setter
public static class HitsData {
private Integer id;
private Integer packageId;
private String subjectId;
private Integer signalType;
private LocalDateTime responseSentAt;
private String reportFileName;
}
} }

View file

@ -4,8 +4,8 @@ import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.entities.dto.SubjectData;
import ru.nbch.credit_tracker.mapper.indic.PhoneMapper; import ru.nbch.credit_tracker.mapper.indic.PhoneMapper;
import ru.nbch.credit_tracker.service.SignalService;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -19,7 +19,7 @@ public class PhoneService {
this.mapper = mapper; this.mapper = mapper;
} }
public List<FidsPhoneData> findFidsPhoneData(List<SignalService.SubjectData> subjects) { public List<FidsPhoneData> findFidsPhoneData(List<SubjectData> subjects) {
List<FidsPhoneData> fidsPhoneDataList = new ArrayList<>(); List<FidsPhoneData> fidsPhoneDataList = new ArrayList<>();
subjects.forEach(subject -> { subjects.forEach(subject -> {
String phone = "9" + subject.getPhone(); String phone = "9" + subject.getPhone();

View file

@ -2,8 +2,11 @@ package ru.nbch.credit_tracker.utils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -49,4 +52,18 @@ public class CTUtil {
return null; return null;
} }
} }
public static String normalize(String value) {
if (value == null)
return null;
value = value.replaceAll("[^А-Яа-яA-Za-z0-9]", "");
return value.replaceFirst("^0+", "");
}
public static Date localDatetoDate(LocalDate date) {
if (date == null) {
return null;
}
return Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
} }

View file

@ -5,7 +5,7 @@
<mapper namespace="ru.nbch.credit_tracker.mapper.signal.SignalMapper"> <mapper namespace="ru.nbch.credit_tracker.mapper.signal.SignalMapper">
<resultMap id="subjectDataResultMap" type="ru.nbch.credit_tracker.service.SignalService$SubjectData"> <resultMap id="subjectDataResultMap" type="ru.nbch.credit_tracker.entities.dto.SubjectData">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="packageId" column="package_id" /> <result property="packageId" column="package_id" />
<result property="subjectId" column="subject_id" /> <result property="subjectId" column="subject_id" />
@ -16,7 +16,7 @@
<result property="calculatedAt" column="calculated_at" /> <result property="calculatedAt" column="calculated_at" />
</resultMap> </resultMap>
<resultMap id="packageDataResultMap" type="ru.nbch.credit_tracker.service.SignalService$PackageData"> <resultMap id="packageDataResultMap" type="ru.nbch.credit_tracker.entities.dto.PackageData">
<result property="id" column="id" /> <result property="id" column="id" />
<result property="userId" column="membercode" /> <result property="userId" column="membercode" />
<result property="packageName" column="package_name" /> <result property="packageName" column="package_name" />
@ -100,19 +100,19 @@
WHERE package_id = #{packageId} WHERE package_id = #{packageId}
</select> </select>
<select id="findPackageData" resultMap="packageDataResultMap" resultType="ru.nbch.credit_tracker.service.SignalService$PackageData"> <select id="findPackageData" resultMap="packageDataResultMap" resultType="ru.nbch.credit_tracker.entities.dto.PackageData">
SELECT membercode, package_name SELECT membercode, package_name
FROM signals_user_packages FROM signals_user_packages
WHERE id = #{id} LIMIT 1 WHERE id = #{id} LIMIT 1
</select> </select>
<select id="findPackageDataList" resultMap="packageDataResultMap" resultType="ru.nbch.credit_tracker.service.SignalService$PackageData"> <select id="findPackageDataList" resultMap="packageDataResultMap" resultType="ru.nbch.credit_tracker.entities.dto.PackageData">
SELECT package_name, created_at SELECT package_name, created_at
FROM signals_user_packages FROM signals_user_packages
WHERE membercode IS NOT NULL AND LEFT(membercode, 6) = #{userId} WHERE membercode IS NOT NULL AND LEFT(membercode, 6) = #{userId}
</select> </select>
<select id="findPackagesByStatus" resultMap="packageDataResultMap" resultType="ru.nbch.credit_tracker.service.SignalService$PackageData"> <select id="findPackagesByStatus" resultMap="packageDataResultMap" resultType="ru.nbch.credit_tracker.entities.dto.PackageData">
SELECT id, membercode, package_name, created_at, last_downloaded_report SELECT id, membercode, package_name, created_at, last_downloaded_report
FROM signals_user_packages FROM signals_user_packages
WHERE status = #{status} WHERE status = #{status}