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.load-dir=D:\\folder_name\\signals
|
||||
ct.monitoring-interval=15
|
||||
# min
|
||||
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.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import ru.nbch.credit_tracker.service.MonitoringService;
|
||||
import ru.nbch.credit_tracker.service.UpdatingFlagsService;
|
||||
|
||||
@SpringBootApplication
|
||||
public class CreditTrackerApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
ConfigurableApplicationContext ctx = SpringApplication.run(CreditTrackerApplication.class, args);
|
||||
// MonitoringService monitoringService = ctx.getBean(MonitoringService.class);
|
||||
// monitoringService.run(); // TODO uncomment
|
||||
MonitoringService monitoringService = ctx.getBean(MonitoringService.class);
|
||||
UpdatingFlagsService updatingFlagsService = ctx.getBean(UpdatingFlagsService.class);
|
||||
monitoringService.run();
|
||||
updatingFlagsService.run();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,5 +28,7 @@ public class CreditTrackerSettings {
|
|||
|
||||
private String loadDir;
|
||||
private Long monitoringInterval;
|
||||
private Long updateFlagsInterval;
|
||||
private Long daysToUpdateFlags;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,4 +198,18 @@ public class SignalService {
|
|||
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) {
|
||||
return findFidsPhoneData(subjects, false);
|
||||
}
|
||||
|
||||
public List<FidsPhoneData> findFidsPhoneData(List<SubjectData> subjects, boolean processNullFids) {
|
||||
List<FidsPhoneData> fidsPhoneDataList = new ArrayList<>();
|
||||
subjects.forEach(subject -> {
|
||||
String phone = "9" + subject.getPhone();
|
||||
Integer fid = mapper.findFidByNumber(phone);
|
||||
if (fid != null) {
|
||||
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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue