Merge branch 'feature/SUPPORT-9546_mchd_power' into develop

This commit is contained in:
Eduard Tihomiorv 2025-11-10 11:18:19 +03:00
commit 77d3ae63d0
5 changed files with 28 additions and 10 deletions

View file

@ -5,10 +5,8 @@ import java.nio.charset.StandardCharsets;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -552,7 +550,10 @@ public class EmployeeInfoFileUploadService {
private void validateMchd(MultipartFile mchdFile, String ogrn, String snils) { private void validateMchd(MultipartFile mchdFile, String ogrn, String snils) {
String mchdGuid; String mchdGuid;
try { try {
mchdGuid = getMchdGuid(mchdFile); mchdGuid = validatePowerAndGetMchdGuid(mchdFile);
}
catch (LocalizedException e) {
throw e;
} }
catch (Exception e) { catch (Exception e) {
throw new LocalizedException("mchd_cant_parse", MESSAGE_SOURCE); throw new LocalizedException("mchd_cant_parse", MESSAGE_SOURCE);
@ -611,15 +612,23 @@ public class EmployeeInfoFileUploadService {
return map; return map;
} }
private String getMchdGuid(MultipartFile mchdFile) throws Exception { private String validatePowerAndGetMchdGuid(MultipartFile mchdFile) throws Exception {
Document doc = DocumentBuilderFactory Document doc = DocumentBuilderFactory
.newInstance() .newInstance()
.newDocumentBuilder() .newDocumentBuilder()
.parse(mchdFile.getInputStream()); .parse(mchdFile.getInputStream());
doc.getDocumentElement().normalize(); doc.getDocumentElement().normalize();
Node node = doc.getElementsByTagName("СвДов").item(0); Node nodePol = doc.getElementsByTagName("МашПолн").item(0);
if (node != null && node.getAttributes().getNamedItem("НомДовер") != null) { if (nodePol == null || nodePol.getAttributes().getNamedItem("КодПолн") == null
return node.getAttributes().getNamedItem("НомДовер").getNodeValue(); || !nodePol.getAttributes()
.getNamedItem("КодПолн")
.getNodeValue()
.equals(esiaConfig.getEsiaMchdUploadAuthority())) {
throw new LocalizedException("mchd_no_sign_rights", MESSAGE_SOURCE);
}
Node nodeSvDov = doc.getElementsByTagName("СвДов").item(0);
if (nodeSvDov != null && nodeSvDov.getAttributes().getNamedItem("НомДовер") != null) {
return nodeSvDov.getAttributes().getNamedItem("НомДовер").getNodeValue();
} }
else { else {
throw new FileUploadException("Cannot parse mchd guid"); throw new FileUploadException("Cannot parse mchd guid");

View file

@ -77,6 +77,9 @@ public class EsiaConfig {
@Value("${esia.system.scope: pow_reg, pow_reg_search}") @Value("${esia.system.scope: pow_reg, pow_reg_search}")
private String esiaSystemScope; private String esiaSystemScope;
@Value("${esia.mchd.upload.authority: GISERVU_LKUL_UPLOAD}")
private String esiaMchdUploadAuthority;
public String getEsiaOrgScopes() { public String getEsiaOrgScopes() {
String[] scopeItems = esiaOrgScopes.split(","); String[] scopeItems = esiaOrgScopes.split(",");
return String.join(" ", Arrays.stream(scopeItems).map(item -> orgScopeUrl + item.trim()).toArray(String[]::new)); return String.join(" ", Arrays.stream(scopeItems).map(item -> orgScopeUrl + item.trim()).toArray(String[]::new));
@ -161,4 +164,8 @@ public class EsiaConfig {
String[] scopeItems = esiaSystemScope.split(","); String[] scopeItems = esiaSystemScope.split(",");
return String.join(" ", Arrays.stream(scopeItems).map(String::trim).toArray(String[]::new)); return String.join(" ", Arrays.stream(scopeItems).map(String::trim).toArray(String[]::new));
} }
public String getEsiaMchdUploadAuthority() {
return esiaMchdUploadAuthority;
}
} }

View file

@ -67,7 +67,7 @@ public final class DateUtils {
public static ZonedDateTime convertToZoneDateTime(String dateTime) { public static ZonedDateTime convertToZoneDateTime(String dateTime) {
return hasText(dateTime) return hasText(dateTime)
? ZonedDateTime.parse(dateTime, DATE_TIME_FORMATTER) ? LocalDateTime.parse(dateTime, DATE_TIME_FORMATTER).atZone(ZoneOffset.UTC)
: null; : null;
} }

View file

@ -19,4 +19,5 @@ mchd_tree_expired=У одной из родительских доверенно
mchd_validate_principal=Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов. mchd_validate_principal=Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
av_file_infected=Файлы заражены вирусом av_file_infected=Файлы заражены вирусом
mchd_cant_parse=Некорректный формат машиночитаемой доверенности mchd_cant_parse=Некорректный формат машиночитаемой доверенности
mchd_esia_error=Некорректная машиночитаемая доверенность. Доверенность не найдена. mchd_esia_error=Некорректная машиночитаемая доверенность. Доверенность не найдена.
mchd_no_sign_rights=В доверенности (МЧД) нет полномочия "Подписание сведений о воинском учете организации для загрузки в личный кабинет юридических лиц ГИС ЕРВУ"

View file

@ -19,4 +19,5 @@ mchd_tree_expired=У одной из родительских доверенно
mchd_validate_principal=Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов. mchd_validate_principal=Некорректная машиночитаемая доверенность. Доверенность выдана не той организацией, под которой была осуществлена загрузка файлов.
av_file_infected=Файлы заражены вирусом av_file_infected=Файлы заражены вирусом
mchd_cant_parse=Некорректный формат машиночитаемой доверенности mchd_cant_parse=Некорректный формат машиночитаемой доверенности
mchd_esia_error=Некорректная машиночитаемая доверенность. Доверенность не найдена. mchd_esia_error=Некорректная машиночитаемая доверенность. Доверенность не найдена.
mchd_no_sign_rights=В доверенности (МЧД) нет полномочия "Подписание сведений о воинском учете организации для загрузки в личный кабинет юридических лиц ГИС ЕРВУ"