Загрузка данных
AuthorizedPersonCodesFilterDto filter = AuthorizedPersonCodesFilterDto.builder()
.authorities(Set.of(question.getCommitteeCode()))
.build();
final List<AuthorizedPersonDto> membersKk = credentialsApiClient.getPersonsByCodes(filter);
log.info("update_add_members_#1 membersKk: {}", membersKk.stream()
.map(AuthorizedPersonDto::getCode)
.collect(Collectors.toList()));
String roleFilter = ".*(SCC|CHIEF|PARTICIPANT|ASSISTANT).*";
List<Member> finalNewMembers = newMembers;
List<AuthorizedPersonDto> filteredKkMembers = membersKk.stream()
.filter(m -> finalNewMembers.stream().noneMatch(newMember -> newMember.getUserName().equalsIgnoreCase(m.getCode())))
.peek(m -> {
Optional<String> determinedRole = m.getCredentials().stream()
.filter(c -> filter.getAuthorities().contains(c.getAuthority().getCode()) // Фильтрация по committeeCode
&& c.getRole().getCode().toUpperCase().matches(roleFilter)
&& (c.getEndPowersDate() == null || c.getEndPowersDate().isAfter(LocalDate.now())))
.map(c -> determineRole(c.getRole().getCode().toUpperCase()))
.filter(role -> !"NONE".equals(role))
.findFirst();
determinedRole.ifPresent(m::setDeterminedRole);
})
.filter(m -> m.getDeterminedRole() != null)
.collect(Collectors.toList());
log.info("update_add_members_#2 filteredKkMembers: {}", filteredKkMembers.stream()
.map(AuthorizedPersonDto::getCode)
.collect(Collectors.toList()));
// если вопрос isStrict810 (закрытое рассмотрение), то фильтруем ответ еще раз на тех,
// у кого в сервисе EmployeeServiceApi есть доступ к защищенным вопросам (запрос /employees_security_access)
if (question.isStrict810()) {
filteredKkMembers = filterByIsHasProhibitedInfoAccess(filteredKkMembers);
}
log.info("update_add_members_#3 filteredKkMembers: {}", filteredKkMembers.stream()
.map(AuthorizedPersonDto::getCode)
.collect(Collectors.toList()));
// Если вопрос закрытый (isClosed) то фильтруем еще раз на тех, у кого в роли есть _SA-
if (question.isClosed()) {
log.info("Closed question, filter out entries without _SA- in the role");
filteredKkMembers = filteredKkMembers.stream()
.filter(c -> c.getCredentials().stream()
.map(r -> r.getRole().getCode())
.anyMatch(r -> r.contains("_SA-")))
.collect(Collectors.toList());
}
log.debug("update_add_members_#4 filteredKkMembers: {}", filteredKkMembers.stream()
.map(AuthorizedPersonDto::getCode)
.collect(Collectors.toList()));
// Объединяем руководителей контрагентов и сотрудников КК
log.info("Merge counterparty supervisors with CC members");
List<Member> kkMembers = filteredKkMembers.stream()
.map(m -> getMemberWithRoleFromAuthorizedPersonDto(questionId, m))
.filter(m -> !m.getRole().equals("NONE"))
.toList();
newMembers.addAll(kkMembers);
log.info("Added {} members from Credentials API (AUTO_CREDENTIALS_API) for question {}", kkMembers.size(), questionId);
log.info("update_add_members_#5 newMembers: {}", newMembers.stream()
.map(Member::getUserName)
.collect(Collectors.toList()));
// Добавляем пользователей по списку, который перенесли с фронта
if (question.getType().equals(QuestionType.KKKIB_CUSTOM)) {
if (question.getCommitteeCode() != null
&& question.getCommitteeCode().equalsIgnoreCase("KKKIBG")) {
log.info("Adding hardcoded SUPERVISOR_RISK members (AUTO_HARDCODED) for KKKIBG committee, question {}", questionId);
newMembers.addAll(List.of(
Member.builder()
.questionId(questionId)
.userName("vtb50645767")
.role("SUPERVISOR_RISK")
.build(),
Member.builder()
.questionId(questionId)
.userName("vtb70147118")
.role("SUPERVISOR_RISK")
.build(),
Member.builder()
.questionId(questionId)
.userName("vtb70149835")
.role("SUPERVISOR_RISK")
.build()
));
addAdditionalMember(newMembers, questionId);
} else {
log.info("Adding hardcoded GUEST members (AUTO_HARDCODED) for KKKIB_CUSTOM, question {}", questionId);
newMembers.addAll(List.of(
Member.builder()
.questionId(questionId)
.userName("msk28514")
.role("GUEST")
.build(),
Member.builder()
.questionId(questionId)
.userName("msk25246")
.role("GUEST")
.build(),
Member.builder()
.questionId(questionId)
.userName("kmp12")
.role("GUEST")
.build()
));
}
}
log.info("update_add_members_#6 newMembers: {}", newMembers.stream()
.map(Member::getUserName)
.collect(Collectors.toList()));
if (questionTypes.contains(question.getType())) {
// Добавляем коллег инициатора
addQuestionInitiatorColleagues(questionId, newMembers);
// Добавляем руководителя
addQuestionInitiatorChief(questionId, newMembers);
}
log.info("update_add_members_#7 newMembers: {}", newMembers.stream()
.map(Member::getUserName)
.collect(Collectors.toList()));
}