Added updating fids and flags
This commit is contained in:
parent
7f9d682ece
commit
d85f97a025
6 changed files with 107 additions and 3 deletions
|
|
@ -33,4 +33,8 @@ ct.signals-token=gttcHxwcGojoAvZK
|
||||||
ct.signals-user=0001ZZ000001
|
ct.signals-user=0001ZZ000001
|
||||||
|
|
||||||
ct.load-dir=D:\\folder_name\\signals
|
ct.load-dir=D:\\folder_name\\signals
|
||||||
|
# min
|
||||||
ct.monitoring-interval=15
|
ct.monitoring-interval=15
|
||||||
|
# days
|
||||||
|
ct.update-flags-interval=1
|
||||||
|
ct.days-to-update-flags=30
|
||||||
|
|
@ -3,14 +3,18 @@ package ru.nbch.credit_tracker;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
import org.springframework.context.ConfigurableApplicationContext;
|
||||||
|
import ru.nbch.credit_tracker.service.MonitoringService;
|
||||||
|
import ru.nbch.credit_tracker.service.UpdatingFlagsService;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class CreditTrackerApplication {
|
public class CreditTrackerApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
ConfigurableApplicationContext ctx = SpringApplication.run(CreditTrackerApplication.class, args);
|
ConfigurableApplicationContext ctx = SpringApplication.run(CreditTrackerApplication.class, args);
|
||||||
// MonitoringService monitoringService = ctx.getBean(MonitoringService.class);
|
MonitoringService monitoringService = ctx.getBean(MonitoringService.class);
|
||||||
// monitoringService.run(); // TODO uncomment
|
UpdatingFlagsService updatingFlagsService = ctx.getBean(UpdatingFlagsService.class);
|
||||||
|
monitoringService.run();
|
||||||
|
updatingFlagsService.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,5 +28,7 @@ public class CreditTrackerSettings {
|
||||||
|
|
||||||
private String loadDir;
|
private String loadDir;
|
||||||
private Long monitoringInterval;
|
private Long monitoringInterval;
|
||||||
|
private Long updateFlagsInterval;
|
||||||
|
private Long daysToUpdateFlags;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -198,4 +198,18 @@ public class SignalService {
|
||||||
mapper.setPackageLastDownloadedReport(id, fileName);
|
mapper.setPackageLastDownloadedReport(id, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<PhoneService.FidsPhoneData> updateFlags(List<SubjectData> subjects) {
|
||||||
|
List<PhoneService.FidsPhoneData> fidsPhoneDataList = phoneService.findFidsPhoneData(subjects, true);
|
||||||
|
LocalDateTime calculatedAt = LocalDateTime.now();
|
||||||
|
fidsPhoneDataList.forEach(phoneData -> {
|
||||||
|
if (phoneData.getFid() != null) {
|
||||||
|
FlagsService.FlagsFidData flagsData = flagsService.findFlags(phoneData.getFid());
|
||||||
|
mapper.registerSubjectsFidAndDebts(phoneData.getId(), phoneData.getFid(), flagsData.getFlagDebt5000(), flagsData.getFlag90days(), calculatedAt);
|
||||||
|
} else {
|
||||||
|
mapper.registerSubjectsFidAndDebts(phoneData.getId(), null, null, null, calculatedAt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return fidsPhoneDataList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
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.signal_package.Signals;
|
||||||
|
import ru.nbch.credit_tracker.enums.Status;
|
||||||
|
import ru.nbch.credit_tracker.service.indic.PhoneService;
|
||||||
|
import ru.nbch.credit_tracker.service.signal.SignalRestService;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class UpdatingFlagsService {
|
||||||
|
|
||||||
|
private final SignalService signalService;
|
||||||
|
private final SignalRestService signalRestService;
|
||||||
|
private final Long daysToUpdateFlags;
|
||||||
|
private final Long updateFlagsInterval;
|
||||||
|
|
||||||
|
public UpdatingFlagsService(SignalService signalService,
|
||||||
|
SignalRestService signalRestService,
|
||||||
|
CreditTrackerSettings config) {
|
||||||
|
this.signalService = signalService;
|
||||||
|
this.signalRestService = signalRestService;
|
||||||
|
this.daysToUpdateFlags = config.getDaysToUpdateFlags() != null ? config.getDaysToUpdateFlags() : 1;
|
||||||
|
this.updateFlagsInterval = config.getUpdateFlagsInterval() != null ? config.getUpdateFlagsInterval() : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
|
||||||
|
scheduler.scheduleAtFixedRate(this::update, 0, updateFlagsInterval, TimeUnit.DAYS);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update() {
|
||||||
|
List<PackageData> packages = signalService.findPackagesOnMonitoring();
|
||||||
|
for (PackageData packageData : packages) {
|
||||||
|
List<SubjectData> subjects = signalService.findFullSubjectsData(packageData.getId())
|
||||||
|
.stream().filter(subject -> subject.getCalculatedAt() != null && hasDaysPassed(subject.getCalculatedAt())).toList();
|
||||||
|
updateFlags(packageData.getId(), subjects);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateFlags(Integer packageId, List<SubjectData> subjects) {
|
||||||
|
try {
|
||||||
|
signalService.setPackageStatus(packageId, Status.PROCESSING);
|
||||||
|
List<PhoneService.FidsPhoneData> phoneFidsData = signalService.updateFlags(subjects);
|
||||||
|
if (!phoneFidsData.isEmpty()) {
|
||||||
|
Signals signals = signalService.buildSignals(packageId, phoneFidsData);
|
||||||
|
if (signalRestService.update(signals)) {
|
||||||
|
signalService.setPackageStatus(packageId, Status.ON_MONITORING);
|
||||||
|
} else {
|
||||||
|
signalService.setPackageStatus(packageId, Status.ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("Ошибка при поиске фидов или перерасчете флагов просрочек. Package_id {}", packageId, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasDaysPassed(LocalDateTime pastDateTime) {
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
long daysPassed = ChronoUnit.DAYS.between(pastDateTime, now);
|
||||||
|
return daysPassed >= daysToUpdateFlags;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -20,12 +20,18 @@ public class PhoneService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<FidsPhoneData> findFidsPhoneData(List<SubjectData> subjects) {
|
public List<FidsPhoneData> findFidsPhoneData(List<SubjectData> subjects) {
|
||||||
|
return findFidsPhoneData(subjects, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FidsPhoneData> findFidsPhoneData(List<SubjectData> subjects, boolean processNullFids) {
|
||||||
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();
|
||||||
Integer fid = mapper.findFidByNumber(phone);
|
Integer fid = mapper.findFidByNumber(phone);
|
||||||
if (fid != null) {
|
if (fid != null) {
|
||||||
fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), fid, phone, subject.getSubjectId()));
|
fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), fid, phone, subject.getSubjectId()));
|
||||||
|
} else if (processNullFids) {
|
||||||
|
fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), null, phone, subject.getSubjectId()));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return fidsPhoneDataList;
|
return fidsPhoneDataList;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue