Use packageId to load data for counting flags and finding fids

This commit is contained in:
Mikhail Trofimov 2025-06-16 15:49:22 +03:00
parent 69dbb5ea6e
commit 933e91365d
5 changed files with 71 additions and 23 deletions

View file

@ -154,7 +154,7 @@ public class SignalFacade {
}
// в отдельном потоке запускаем поиск фидов и расчет флагов просрочек
registerFidsAndDebts(monitoringRequest, packageId);
registerFidsAndDebts(packageId);
return ResponseEntity.ok().body(new PathResource("D:\\folder_name\\legal.xml")); // TODO generate success response
}
@ -218,19 +218,19 @@ public class SignalFacade {
return null;
}
private void registerFidsAndDebts(MonitoringRequest monitoringRequest, Integer packageId) {
private void registerFidsAndDebts(Integer packageId) {
executor.execute(() -> {
try {
List<PhoneService.FidsPhoneData> phoneFidsData = signalService.registerSubjectsFidAndDebts(monitoringRequest, packageId);
List<PhoneService.FidsPhoneData> phoneFidsData = signalService.registerSubjectsFidAndDebts(packageId);
if (!phoneFidsData.isEmpty()) {
Signals signals = signalService.buildSignals(monitoringRequest, phoneFidsData);
Signals signals = signalService.buildSignals(packageId, phoneFidsData);
// TODO validate xsd?
String response = null;
// response = signalRestService.update(signals);
if (response == null) {
signalService.setPackageStatus(monitoringRequest, Status.ON_MONITORING);
signalService.setPackageStatus(packageId, Status.ON_MONITORING);
} else {
signalService.setPackageStatus(monitoringRequest, Status.ERROR);
signalService.setPackageStatus(packageId, Status.ERROR);
}
}
} catch (Exception e) {

View file

@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest;
import ru.nbch.credit_tracker.entities.monitoring_request.Subject;
import ru.nbch.credit_tracker.service.SignalService;
import java.time.LocalDateTime;
import java.util.List;
@ -19,7 +20,11 @@ public interface SignalMapper {
void insertPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status);
void registerSubjectsFidAndDebts(@Param("id") String id, @Param("fid") Integer fid, @Param("flagDebt5000") Integer flagDebt5000, @Param("flag90") Integer flag90, @Param("packageId") Integer packageId);
void registerSubjectsFidAndDebts(@Param("id") Integer id, @Param("fid") Integer fid, @Param("flagDebt5000") Integer flagDebt5000, @Param("flag90") Integer flag90);
void setPackageStatus(@Param("request") MonitoringRequest request, @Param("status") String status);
void setPackageStatus(@Param("packageId") Integer packageId, @Param("status") String status);
List<SignalService.SubjectData> findSubjectsData(@Param("packageId") Integer packageId);
SignalService.PackageData findPackageData(@Param("id") Integer id);
}

View file

@ -1,5 +1,7 @@
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.entities.monitoring_request.MonitoringRequest;
@ -50,11 +52,12 @@ public class SignalService {
return packageId;
}
public List<PhoneService.FidsPhoneData> registerSubjectsFidAndDebts(MonitoringRequest request, Integer packageId) {
List<PhoneService.FidsPhoneData> fidsPhoneDataList = phoneService.findFidsPhoneData(request.getSubjects().getSubject());
public List<PhoneService.FidsPhoneData> registerSubjectsFidAndDebts(Integer packageId) {
List<SubjectData> subjects = mapper.findSubjectsData(packageId);
List<PhoneService.FidsPhoneData> fidsPhoneDataList = phoneService.findFidsPhoneData(subjects);
fidsPhoneDataList.forEach(phoneData -> {
FlagsService.FlagsFidData flagsData = flagsService.findFlags(phoneData.getFid());
mapper.registerSubjectsFidAndDebts(phoneData.getId(), phoneData.getFid(), flagsData.getFlagDebt5000(), flagsData.getFlag90days(), packageId);
mapper.registerSubjectsFidAndDebts(phoneData.getId(), phoneData.getFid(), flagsData.getFlagDebt5000(), flagsData.getFlag90days());
});
return fidsPhoneDataList;
@ -64,19 +67,20 @@ public class SignalService {
mapper.insertPackage(request, LocalDateTime.now(), Status.REJECTED.name());
}
public void setPackageStatus(MonitoringRequest request, Status status) {
mapper.setPackageStatus(request, status.name());
public void setPackageStatus(Integer packageId, Status status) {
mapper.setPackageStatus(packageId, status.name());
}
public Signals buildSignals(MonitoringRequest request, List<PhoneService.FidsPhoneData> fids) {
public Signals buildSignals(Integer packageId, List<PhoneService.FidsPhoneData> fids) {
PackageData packageData = mapper.findPackageData(packageId);
Signals signals = new Signals();
signals.setOnline("2"); // Всегда=2 (только онлайн-сигналы)
signals.setId(request.getUserId().substring(0, 6) + "_" + request.getPackageName()); // <MEMBERCODE>_<PackageName>
signals.setId(packageData.getUserId().substring(0, 6) + "_" + packageData.getPackageName()); // <MEMBERCODE>_<PackageName>
Auth auth = new Auth();
auth.setUser("test_user"); // TODO from properties // Внутренний логин НБКИ
signals.setAuth(auth);
for (PhoneService.FidsPhoneData fidData : fids) {
Person person = findPerson(fidData.getFid(), fidData.getId());
Person person = findPerson(fidData.getFid(), fidData.getSubjectId());
if (person != null) {
signals.getConditions().getPersons().getPerson().add(person);
}
@ -145,4 +149,19 @@ public class SignalService {
}
return Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
@Getter
@Setter
public static class PackageData {
private String userId;
private String packageName;
}
@Getter
@Setter
public static class SubjectData {
private Integer id;
private String subjectId;
private String phone;
}
}

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.monitoring_request.Subject;
import ru.nbch.credit_tracker.mapper.indic.PhoneMapper;
import ru.nbch.credit_tracker.service.SignalService;
import java.util.ArrayList;
import java.util.List;
@ -19,13 +19,13 @@ public class PhoneService {
this.mapper = mapper;
}
public List<FidsPhoneData> findFidsPhoneData(List<Subject> subjects) {
public List<FidsPhoneData> findFidsPhoneData(List<SignalService.SubjectData> subjects) {
List<FidsPhoneData> fidsPhoneDataList = new ArrayList<>();
subjects.forEach(subject -> {
String phone = "9" + subject.getClientId();
String phone = "9" + subject.getPhone();
Integer fid = mapper.findFidByNumber(phone);
if (fid != null) {
fidsPhoneDataList.add(new FidsPhoneData(fid, phone, subject.getId()));
fidsPhoneDataList.add(new FidsPhoneData(subject.getId(), fid, phone, subject.getSubjectId()));
}
});
return fidsPhoneDataList;
@ -35,8 +35,9 @@ public class PhoneService {
@Setter
@AllArgsConstructor
public static class FidsPhoneData {
private Integer id;
private Integer fid;
private String phone;
private String id;
private String subjectId;
}
}

View file

@ -5,6 +5,17 @@
<mapper namespace="ru.nbch.credit_tracker.mapper.signal.SignalMapper">
<resultMap id="subjectDataResultMap" type="ru.nbch.credit_tracker.service.SignalService$SubjectData">
<result property="id" column="id" />
<result property="subjectId" column="subject_id" />
<result property="phone" column="phone" />
</resultMap>
<resultMap id="packageDataResultMap" type="ru.nbch.credit_tracker.service.SignalService$PackageData">
<result property="userId" column="membercode" />
<result property="packageName" column="package_name" />
</resultMap>
<select id="isPackageNotUnique" resultType="boolean">
SELECT COUNT(*) > 0
FROM signals_user_packages
@ -33,13 +44,25 @@
<update id="registerSubjectsFidAndDebts">
UPDATE signals_phone_fid_map
SET fid = #{fid}, flag_debt5000 = #{flagDebt5000}, flag_90_12 = #{flag90}
WHERE package_id = #{packageId} AND subject_id = #{id}
WHERE id = #{id}
</update>
<update id="setPackageStatus">
UPDATE signals_user_packages
SET status = #{status}
WHERE membercode = #{request.userId} AND package_name = #{request.packageName}
WHERE id = #{packageId}
</update>
<select id="findSubjectsData" resultMap="subjectDataResultMap" resultType="java.util.List">
SELECT id, subject_id, phone
FROM signals_phone_fid_map
WHERE package_id = #{packageId}
</select>
<select id="findPackageData" resultMap="packageDataResultMap" resultType="ru.nbch.credit_tracker.service.SignalService$PackageData">
SELECT membercode, package_name
FROM signals_user_packages
WHERE id = #{id} LIMIT 1
</select>
</mapper>