From ddc5f403622d49755d60279dafad1b403022bf82 Mon Sep 17 00:00:00 2001 From: gulnaz Date: Fri, 1 Aug 2025 15:26:42 +0300 Subject: [PATCH] SUPPORT-9296: fix unblocking --- .../service/AccountGridLoadService.java | 3 +- .../enums/BlockedRegion.java | 13 + .../service/AccountFetchService.java | 19 +- .../component/button/UserManagementService.ts | 24 +- .../Обработка заявки на добавление пользователя.page | 134 ++++++++++ .../Создать заявку на активацию.page | 252 +++++++++++++++++- 6 files changed, 434 insertions(+), 11 deletions(-) create mode 100644 backend/src/main/java/ru/micord/ervu/account_applications/enums/BlockedRegion.java diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AccountGridLoadService.java b/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AccountGridLoadService.java index 7b2aee8b..b9e71887 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AccountGridLoadService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/component/service/AccountGridLoadService.java @@ -83,11 +83,12 @@ public class AccountGridLoadService extends Behavior implements GridService { for (Account account : accounts) { GridRow gridRow = new GridRow(); gridRow.put("row_uid", account.getId() != null ? account.getId() : ""); - gridRow.put("enabled", !account.isBlocked()); + gridRow.put("accountEnabled", !account.isBlocked()); Person person = account.getPerson(); if (person != null) { gridRow.put("login", person.getLogin()); gridRow.put("snils", person.getSnils()); + gridRow.put("personEnabled", !person.isBlocked()); String fullName = person.getFullName(); if (fullName != null) { diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/enums/BlockedRegion.java b/backend/src/main/java/ru/micord/ervu/account_applications/enums/BlockedRegion.java new file mode 100644 index 00000000..f61cf4c6 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/enums/BlockedRegion.java @@ -0,0 +1,13 @@ +package ru.micord.ervu.account_applications.enums; + +import ru.cg.webbpm.modules.webkit.annotations.Model; + +/** + * @author gulnaz + */ +@Model +public enum BlockedRegion { + ACCOUNT, + PERSON, + BOTH +} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/AccountFetchService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/AccountFetchService.java index 55f4afe0..905f2b00 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/AccountFetchService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/AccountFetchService.java @@ -33,6 +33,8 @@ import ru.micord.ervu.account_applications.service.constant.PathConstant; import ru.cg.webbpm.modules.standard_annotations.editor.ObjectRef; +import static ru.micord.ervu.account_applications.enums.BlockedRegion.*; + /** * @author Adel Kalimullin */ @@ -42,6 +44,9 @@ public class AccountFetchService implements EntityFetchService { private static final String FIELD_IP_ADDRESSES = "ipAddresses"; private static final String FIELD_SNILS = "snils"; private static final String FIELD_ROLES = "roles"; + private static final String FIELD_ACCOUNT_BLOCKED = "blocked"; + private static final String FIELD_PERSON_BLOCKED = "person.blocked"; + private static final String FIELD_BLOCKED_REGION = "blockedRegion"; private final RestTemplate restTemplate; private final ObjectMapper mapper; private final SecurityContext securityContext; @@ -140,7 +145,9 @@ public class AccountFetchService implements EntityFetchService { } private Map objectToFlatMap(Object obj) { - return objectToFlatMapInternal(obj, ""); + Map result = objectToFlatMapInternal(obj, ""); + putBlockedValue(result); + return result; } private Map objectToFlatMapInternal(Object obj, String prefix) { @@ -224,4 +231,14 @@ public class AccountFetchService implements EntityFetchService { private boolean isSimple(Class type) { return ClassUtils.isPrimitiveOrWrapper(type) || type == String.class; } + + private void putBlockedValue(Map result) { + boolean accountBlocked = Boolean.parseBoolean(String.valueOf(result.get(FIELD_ACCOUNT_BLOCKED))); + boolean personBlocked = Boolean.parseBoolean(String.valueOf(result.get(FIELD_PERSON_BLOCKED))); + String value = accountBlocked && personBlocked + ? BOTH.toString() : accountBlocked + ? ACCOUNT.toString() : personBlocked + ? PERSON.toString() : null; + result.put(FIELD_BLOCKED_REGION, value); + } } diff --git a/frontend/src/ts/account_applications/component/button/UserManagementService.ts b/frontend/src/ts/account_applications/component/button/UserManagementService.ts index 2f3c9ef7..95c98ea9 100644 --- a/frontend/src/ts/account_applications/component/button/UserManagementService.ts +++ b/frontend/src/ts/account_applications/component/button/UserManagementService.ts @@ -27,12 +27,14 @@ import {ResetPasswordAccount} from "./dto/password/ResetPasswordAccount"; import {ResetPasswordData} from "./dto/password/ResetPasswordData"; import {ProcessRequest} from "./dto/ProcessRequest"; import {StatusUpdateService} from "../../../modules/app/service/status-update.service"; +import {BlockedRegion} from "../../../generated/ru/micord/ervu/account_applications/enums/BlockedRegion"; @AnalyticalScope(SaveButton) export class UserManagementService extends Behavior { private static PROCESS_START_PATH = '/service/wf/service/start'; - private static USER_BLOCK_PATH = "/service/idm/accounts/blocked/v1"; + private static ACCOUNT_BLOCK_PATH = "/service/idm/accounts/blocked/v1"; + private static PERSON_BLOCK_PATH = "/service/idm/persons/blocked/v1"; @NotNull() @ObjectRef() @@ -127,7 +129,7 @@ export class UserManagementService extends Behavior { this.doBlockingRequest([accountId], appNumber, true); break; case ApplicationKind.UNBLOCK_USER: - this.doBlockingRequest([accountId], appNumber, false); + this.doBlockingRequest([accountId], appNumber, false, formJson['blockedRegion']); break; case ApplicationKind.RESET_PASSWORD: let resetPasswordAccount = new ResetPasswordAccount(); @@ -188,15 +190,23 @@ export class UserManagementService extends Behavior { }); } - private doBlockingRequest(ids: string[], appNumber: number, block: boolean): void { - const url = window.location.origin + UserManagementService.USER_BLOCK_PATH; + private doBlockingRequest(ids: string[], appNumber: number, block: boolean, blockedRegion?: string): void { + let path = !block && blockedRegion != BlockedRegion.ACCOUNT + ? UserManagementService.PERSON_BLOCK_PATH + : UserManagementService.ACCOUNT_BLOCK_PATH; + const url = window.location.origin + path; let method = block ? 'delete' : 'post'; this.httpClient.request(method, url, { body: ids, observe: 'response' }).toPromise() .then((response: any) => { if (response.ok) { - this.rpc.saveAcceptedStatus(appNumber) - .then(() => this.statusUpdateService.publishStatus(appNumber, true)) - .catch(err => console.log('failed to update application status', err)); + if (blockedRegion == BlockedRegion.BOTH) { + this.doBlockingRequest(ids, appNumber, block, BlockedRegion.ACCOUNT); + } + else { + this.rpc.saveAcceptedStatus(appNumber) + .then(() => this.statusUpdateService.publishStatus(appNumber, true)) + .catch(err => console.log('failed to update application status', err)); + } } else { let reason = response.body ? 'Reason: ' + response.body.toString() : ''; diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page index d1dc8828..e3d8c130 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Обработка заявки на добавление пользователя.page @@ -2495,6 +2495,7 @@ b838c4d9-b8f2-4142-96fe-240540a4802e Номер false + false false @@ -2557,6 +2558,7 @@ a410163c-e804-4bff-9d0a-28e4853f4a58 Фамилия false + false false @@ -3205,6 +3207,138 @@ "snils" + + + + + 133ca212-09a6-413a-ac66-e2f6ce188f1f + 3fb4a21f-d13c-4854-a837-df07f5f3090e + Блокировка + false + false + false + + + + collectible + + false + + + + cssClasses + + + + "width-full" + + + + + + disabled + + true + + + + label + + "Блокировка" + + + + mask + + null + + + + unMaskValue + + false + + + + visible + + false + + + + + + + + + defaultValueColumn + + {"schema":"public","table":"user_list","entity":"user_list","name":"phone"} + + + + loadType + + null + + + + + + + + + columnForSave + + {"schema":"public","table":"user_application_list","entity":"user_application_list","name":"blocked_region"} + + + + + + + + textFieldService + + + + displayColumn + + {"schema":"public","table":"user_application_list","entity":"user_application_list","name":"blocked_region"} + + + + loadDao + + + +graph + + {"conditionGroup":{"operator":"AND","conditions":[],"groups":[]},"nodeByIndex":{"0":{"tableName":"user_application_list","schemaName":"public","x":370.0,"y":295.0,"alias":"user_application_list","conditionGroup":{"operator":"AND","conditions":[],"groups":[]},"emptyEntityAction":"IGNORE_OR_DELETE"}},"nodes":[{"tableName":"user_application_list","schemaName":"public","x":370.0,"y":295.0,"alias":"user_application_list","conditionGroup":{"operator":"AND","conditions":[],"groups":[]},"emptyEntityAction":"IGNORE_OR_DELETE"}],"nodeByEntityName":{"user_application_list":{"tableName":"user_application_list","schemaName":"public","x":370.0,"y":295.0,"alias":"user_application_list","conditionGroup":{"operator":"AND","conditions":[],"groups":[]},"emptyEntityAction":"IGNORE_OR_DELETE"}},"matrix":[[null]],"mainNodeIndex":0} + + + + + + + + + + + + + FormField + account_applications.component.field + +true +true + + + name + + "blockedRegion" + + diff --git a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page index 347a6d41..d5fd91bb 100644 --- a/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page +++ b/resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page @@ -2280,6 +2280,56 @@ + + + + + + + + + +behavior + + {"objectId":"2ad7edcd-a3d0-4ac8-aab2-72ad28e20d7e","packageName":"component.field","className":"TextField","type":"TS"} + + + +method + + "setValue" + + + +value + + + + objectValue + + + + argument + + null + + + + behavior + + {"objectId":"d8984d37-f505-4c23-a805-44a44213a4ca","packageName":"component.field","className":"TextField","type":"TS"} + + + + method + + "getValue" + + + + + + @@ -2360,6 +2410,52 @@ + + + +133ca212-09a6-413a-ac66-e2f6ce188f1f +d8984d37-f505-4c23-a805-44a44213a4ca +Блокировка load_1 +false +false + + + + label + + "Блокировка load_1" + + + + visible + + false + + + + + + + + + false + + + + + ErvuFormLoadComponent + ru.micord.ervu.account_applications.component.field.persist + + true + true + + + fieldName + + "blockedRegion" + + + @@ -4059,6 +4155,13 @@ true + + 133ca212-09a6-413a-ac66-e2f6ce188f1f + 2ad7edcd-a3d0-4ac8-aab2-72ad28e20d7e + person_id + false + true + b310f98a-69c6-4e7b-8cdb-f1ab9f9c0d94 @@ -4484,6 +4587,84 @@ fieldName "personId" + + + + + + + 133ca212-09a6-413a-ac66-e2f6ce188f1f + 2ad7edcd-a3d0-4ac8-aab2-72ad28e20d7e + blocked_region + false + false + + + +cssClasses + + + + "width-full" + + + + + +label + + "blocked_region" + + + +visible + + false + + + + + + + + +defaultValueColumn + + {"schema":"public","table":"user_list","entity":"user_list","name":"middlename"} + + + +loadType + + null + + + + + + + + +columnForSave + + {"schema":"public","table":"user_application_list","entity":"user_application_list","name":"blocked_region"} + + + + + + + + ErvuFormLoadComponent + ru.micord.ervu.account_applications.component.field.persist + + true + true + + +fieldName + + "blockedRegion" @@ -7497,7 +7678,7 @@ displayName -"Активен" +"Персона активна" @@ -7507,7 +7688,74 @@ column - "enabled" + "personEnabled" + + + + filterType + + "TEXT" + + + + type + + "java.lang.String" + + + + + + + hidden + +true + + + + sortable + +false + + + + + + + d4f69cb0-864e-4895-b6fd-152072774909 + 0385b14c-91ef-4f02-8ebf-5d064d3f65ea + StaticColumn + false + false + + + + valueFormatter + + + DefaultValueFormatter + component.grid.formatters + + + + + + + + + displayName + +"Аккаунт активен" + + + + field + + + + column + + "accountEnabled"