Use signals_phone_fid_map.id instead of subjectId for nbki service mapping; Remove unique id validation

This commit is contained in:
Mikhail Trofimov 2025-07-21 10:39:42 +03:00
parent 5c824ef0cd
commit b8975cb415
14 changed files with 23 additions and 29 deletions

View file

@ -31,7 +31,7 @@ public class PersonFactoryBuilder {
private PersonService.PersonData personData; private PersonService.PersonData personData;
private String uid; private Integer uid;
public static PersonFactoryBuilder builder() { public static PersonFactoryBuilder builder() {
return new PersonFactoryBuilder(); return new PersonFactoryBuilder();
@ -42,7 +42,7 @@ public class PersonFactoryBuilder {
return this; return this;
} }
public PersonFactoryBuilder uid(String uid) { public PersonFactoryBuilder uid(Integer uid) {
this.uid = uid; this.uid = uid;
return this; return this;
} }

View file

@ -16,7 +16,7 @@ import java.util.List;
public class Person { public class Person {
@XmlAttribute(name = "uid", required = true) @XmlAttribute(name = "uid", required = true)
protected String uid; protected Integer uid;
@XmlElement(name = "Inquiry", required = true) @XmlElement(name = "Inquiry", required = true)
protected List<Inquiry> inquiries; protected List<Inquiry> inquiries;

View file

@ -15,7 +15,7 @@ public class Person {
@XmlValue @XmlValue
protected String value; protected String value;
@XmlAttribute(name = "uid", required = true) @XmlAttribute(name = "uid", required = true)
protected String uid; protected Integer uid;
@XmlAttribute(name = "oksm", required = true) @XmlAttribute(name = "oksm", required = true)
protected String oksm; protected String oksm;
@XmlAttribute(name = "s", required = true) @XmlAttribute(name = "s", required = true)

View file

@ -4,7 +4,6 @@ public enum SignalError implements IEnumKeyCode {
ERROR_001("001", "Ошибка распаковки архива"), ERROR_001("001", "Ошибка распаковки архива"),
ERROR_002("002", "Отсутствует обязательный элемент: "), ERROR_002("002", "Отсутствует обязательный элемент: "),
ERROR_003("003", "Элемент ClientId не соответствует формату XXXXXXXXX"), ERROR_003("003", "Элемент ClientId не соответствует формату XXXXXXXXX"),
ERROR_004("004", "Указан неуникальный Id в пакете: "),
ERROR_005("005", "Неверный логин или пароль"), ERROR_005("005", "Неверный логин или пароль"),
ERROR_006("006", "Доступ к услуге закрыт, обратитесь к курирующему менеджеру"), ERROR_006("006", "Доступ к услуге закрыт, обратитесь к курирующему менеджеру"),
ERROR_007("007", "В системе уже существует пакет с таким именем"), ERROR_007("007", "В системе уже существует пакет с таким именем"),

View file

@ -18,5 +18,5 @@ public interface PhoneFidMapMapper {
void updatePhoneFidMaps(@Param("subjects") List<PhoneFidMap> subjects); void updatePhoneFidMaps(@Param("subjects") List<PhoneFidMap> subjects);
PhoneFidMap findPhoneFidMap(@Param("packageId") Integer packageId, @Param("subjectId") String subjectId); PhoneFidMap findPhoneFidMapById(@Param("id") Integer packageId);
} }

View file

@ -174,7 +174,7 @@ public class MonitoringService {
// Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные // Если есть хотя бы один заполненный сигнал, значит заполняем остальные данные
if (!signals.getSignals().isEmpty()) { if (!signals.getSignals().isEmpty()) {
PhoneFidMap subjectData = signalService.findPhoneFidMapBySubjectId(userPackage.getId(), person.getUid()); PhoneFidMap subjectData = signalService.findPhoneFidMapById(person.getUid());
if (subjectData != null) { if (subjectData != null) {
Subject subject = new Subject(); Subject subject = new Subject();
subject.setId(subjectData.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга) subject.setId(subjectData.getSubjectId()); // Уникальный идентификатор субъекта (равен Id из XML-пакета при установке мониторинга)

View file

@ -231,7 +231,7 @@ public class SignalService {
PersonService.PersonData personData = personFidMap.get(data.getFid()); PersonService.PersonData personData = personFidMap.get(data.getFid());
Person person = PersonFactoryBuilder.builder() Person person = PersonFactoryBuilder.builder()
.personData(personData) .personData(personData)
.uid(data.getSubjectId()) .uid(data.getId())
.build(); .build();
if (person != null) { if (person != null) {
persons.add(person); persons.add(person);
@ -265,7 +265,7 @@ public class SignalService {
userPackageService.updatePackageLastDownloadedReport(id, fileName); userPackageService.updatePackageLastDownloadedReport(id, fileName);
} }
public PhoneFidMap findPhoneFidMapBySubjectId(Integer packageId, String subjectId) { public PhoneFidMap findPhoneFidMapById(Integer id) {
return phoneFidMapService.findPhoneFidMap(packageId, subjectId); return phoneFidMapService.findPhoneFidMapById(id);
} }
} }

View file

@ -32,7 +32,7 @@ public class PhoneFidMapService {
mapper.updatePhoneFidMaps(subjects); mapper.updatePhoneFidMaps(subjects);
} }
public PhoneFidMap findPhoneFidMap(Integer packageId, String subjectId) { public PhoneFidMap findPhoneFidMapById(Integer id) {
return mapper.findPhoneFidMap(packageId, subjectId); return mapper.findPhoneFidMapById(id);
} }
} }

View file

@ -44,8 +44,15 @@ public class OnlineDownloadReportPersonsStaxReader extends BaseStaxReader<Person
for (int i = 0; i < reader.getAttributeCount(); i++) { for (int i = 0; i < reader.getAttributeCount(); i++) {
String text = reader.getAttributeValue(i); String text = reader.getAttributeValue(i);
switch (reader.getAttributeLocalName(i)) { switch (reader.getAttributeLocalName(i)) {
case "uid" -> case "uid" -> {
obj.getCurrentPerson().setUid(text); try {
int uid = Integer.parseInt(text);
obj.getCurrentPerson().setUid(uid);
} catch (NumberFormatException e) {
log.error("Couldn't parse uid: {}", text);
throw new RuntimeException(e);
}
}
case "date" -> case "date" ->
obj.getCurrentPerson().getCurrentInquiry().setDate(text); obj.getCurrentPerson().getCurrentInquiry().setDate(text);
case "bus_category" -> case "bus_category" ->

View file

@ -76,7 +76,7 @@ public class SignalsStaxXmlWriter extends StaxXmlWriter<Signals, Person> {
return; return;
} }
writerWrapper.addStartElement(name); writerWrapper.addStartElement(name);
writerWrapper.addAttribute("uid", person.getUid()); writerWrapper.addAttribute("uid", String.valueOf(person.getUid()));
writerWrapper.addAttribute("oksm", person.getOksm()); writerWrapper.addAttribute("oksm", person.getOksm());
writerWrapper.addAttribute("s", person.getS()); writerWrapper.addAttribute("s", person.getS());
writerWrapper.addAttribute("n", person.getN()); writerWrapper.addAttribute("n", person.getN());

View file

@ -6,8 +6,6 @@ import ru.nbch.credit_tracker.enums.SignalError;
import ru.nbch.credit_tracker.enums.XmlErrorFormat; import ru.nbch.credit_tracker.enums.XmlErrorFormat;
import ru.nbch.credit_tracker.exceptions.SignalClientException; import ru.nbch.credit_tracker.exceptions.SignalClientException;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp; import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp;
@ -47,7 +45,6 @@ public class ValidationUtil {
throw clientExcp(SignalError.ERROR_008, XmlErrorFormat.MonitoringError); throw clientExcp(SignalError.ERROR_008, XmlErrorFormat.MonitoringError);
} }
Set<String> uniqueIds = new HashSet<>();
for (Subject subject : request.getSubjects().getSubject()) { for (Subject subject : request.getSubjects().getSubject()) {
if (!validatePhone(subject.getClientId())) { if (!validatePhone(subject.getClientId())) {
throw clientExcp(SignalError.ERROR_003, XmlErrorFormat.MonitoringError); throw clientExcp(SignalError.ERROR_003, XmlErrorFormat.MonitoringError);
@ -55,10 +52,6 @@ public class ValidationUtil {
if (!validateNPId(subject.getId())) { if (!validateNPId(subject.getId())) {
throw clientExcp(SignalError.ERROR_010, XmlErrorFormat.MonitoringError); throw clientExcp(SignalError.ERROR_010, XmlErrorFormat.MonitoringError);
} }
// проверка на уникальность Id внутри одного пакета
if (!uniqueIds.add(subject.getId())) {
throw clientExcp(SignalError.ERROR_004, XmlErrorFormat.MonitoringError, subject.getId());
}
} }
} }

View file

@ -63,7 +63,7 @@
LIMIT #{limit} OFFSET #{offset} LIMIT #{limit} OFFSET #{offset}
</select> </select>
<select id="findPhoneFidMap" resultMap="PhoneFidMapResultMap" resultType="ru.nbch.credit_tracker.entities.dto.PhoneFidMap"> <select id="findPhoneFidMapById" resultMap="PhoneFidMapResultMap" resultType="ru.nbch.credit_tracker.entities.dto.PhoneFidMap">
SELECT id, SELECT id,
package_id, package_id,
subject_id, subject_id,
@ -73,7 +73,7 @@
flag_debt5000, flag_debt5000,
calculated_at calculated_at
FROM signals_phone_fid_map FROM signals_phone_fid_map
WHERE package_id = #{packageId} AND subject_id = #{subjectId} WHERE id = #{id}
LIMIT 1 LIMIT 1
</select> </select>

View file

@ -119,11 +119,6 @@ public class UtilTest {
"/monitoring_request/invalid_id_request.zip", "/monitoring_request/invalid_id_request.zip",
SignalError.ERROR_010, SignalError.ERROR_010,
Collections.emptyList().toArray(new Object[0]) Collections.emptyList().toArray(new Object[0])
),
Arguments.of(
"/monitoring_request/no_unique_ids_request.zip",
SignalError.ERROR_004,
new Object[]{"abc125"}
) )
); );
} }