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.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 ru.nbch.credit_tracker.service.SignalService;
import java.time.LocalDateTime;
import java.util.List;
@ -28,17 +30,17 @@ public interface SignalMapper {
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);
}

View file

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

View file

@ -1,10 +1,11 @@
package ru.nbch.credit_tracker.service;
import lombok.Getter;
import lombok.Setter;
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.request.monitoring_request.MonitoringRequest;
import ru.nbch.credit_tracker.entities.response.active_packages.MonitoringActivePackagesResponse;
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.PersonService;
import ru.nbch.credit_tracker.service.indic.PhoneService;
import ru.nbch.credit_tracker.utils.CTUtil;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
@Service
@ -109,20 +109,20 @@ public class SignalService {
person.setS(nameData.getLastName());
person.setN(nameData.getFirstName());
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.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.setIp("0");
person.setUid(id);
person.setOksm("999");
person.setConsentDate(DATE_FORMAT.format(toDate(LocalDate.now())));
person.setConsentDate(DATE_FORMAT.format(CTUtil.localDatetoDate(LocalDate.now())));
person.setConsentPurpose("16");
person.setReportUser("АО «НБКИ»");
person.setLiability("1");
person.setConsentPeriod("3");
person.setAgrDate(DATE_FORMAT.format(toDate(LocalDate.now())));
person.setAgrDate(DATE_FORMAT.format(CTUtil.localDatetoDate(LocalDate.now())));
person.setReportUserRegNum("1057746710713");
person.setReportUserTaxID("7703548386");
person.setConsentHash("hash");
@ -140,26 +140,11 @@ public class SignalService {
}
private String getPn(String serNum, String idNum) {
String normSerNum = normalize(serNum);
String normIdNum = normalize(idNum);
String normSerNum = CTUtil.normalize(serNum);
String normIdNum = CTUtil.normalize(idNum);
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) {
String memberCode = userId.substring(0, 6);
@ -212,38 +197,4 @@ public class SignalService {
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.Setter;
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.service.SignalService;
import java.util.ArrayList;
import java.util.List;
@ -19,7 +19,7 @@ public class PhoneService {
this.mapper = mapper;
}
public List<FidsPhoneData> findFidsPhoneData(List<SignalService.SubjectData> subjects) {
public List<FidsPhoneData> findFidsPhoneData(List<SubjectData> subjects) {
List<FidsPhoneData> fidsPhoneDataList = new ArrayList<>();
subjects.forEach(subject -> {
String phone = "9" + subject.getPhone();

View file

@ -2,8 +2,11 @@ package ru.nbch.credit_tracker.utils;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -49,4 +52,18 @@ public class CTUtil {
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">
<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="packageId" column="package_id" />
<result property="subjectId" column="subject_id" />
@ -16,7 +16,7 @@
<result property="calculatedAt" column="calculated_at" />
</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="userId" column="membercode" />
<result property="packageName" column="package_name" />
@ -100,19 +100,19 @@
WHERE package_id = #{packageId}
</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
FROM signals_user_packages
WHERE id = #{id} LIMIT 1
</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
FROM signals_user_packages
WHERE membercode IS NOT NULL AND LEFT(membercode, 6) = #{userId}
</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
FROM signals_user_packages
WHERE status = #{status}