Merge remote-tracking branch 'origin/release/1.9.11' into develop

# Conflicts:
#	backend/src/main/java/ru/micord/ervu/account_applications/EnumColumnFormatter.java
#	backend/src/main/java/ru/micord/ervu/account_applications/service/AbstractUserDataService.java
#	backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesDaoService.java
#	resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на активацию.page
#	resources/src/main/resources/business-model/Список заявок на пользователя/Создать заявку на деактивацию.page
This commit is contained in:
adel.kalimullin 2025-04-11 09:19:06 +03:00
commit a4703b0d4a
23 changed files with 167 additions and 291 deletions

View file

@ -1,57 +0,0 @@
ARG BUILDER_IMAGE=registry.gosuslugi.local/ervu-uat/micord-deps:1.9.11
ARG RUNTIME_IMAGE=registry.gosuslugi.local/os/altlinux@sha256:fd478a99adab9e195d652f78d0c90638de83f6f605fd7254f6241e594054f0f2
FROM $BUILDER_IMAGE AS builder
ARG MVN_FLAGS="-T4C -Pprod -DexecuteNpmInstall=false --batch-mode --no-transfer-progress"
RUN apt-get update \
&& apt-get -y install git glibc-locales java-17-openjdk-devel maven node \
&& apt-get clean
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8
WORKDIR /app
COPY . .
RUN mkdir -p /root/.m2 \
&& cp config/uat/settings.xml /root/.m2/settings.xml
RUN mvn clean ${MVN_FLAGS} \
&& mvn package ${MVN_FLAGS}
FROM $RUNTIME_IMAGE
COPY --from=builder /usr/lib/locale/ru_RU /usr/lib/locale/ru_RU
COPY --from=builder /usr/lib/locale/ru_RU.utf8 /usr/lib/locale/ru_RU.utf8
COPY --from=builder /usr/share/locale/ru_RU /usr/share/locale/ru_RU
COPY config/entrypoint.sh /entrypoint.sh
RUN apt-get update \
&& apt-get -y install fonts-ttf-ms java-17-openjdk-headless tomcat tomcat-webapps tomcat-admin-webapps \
&& apt-get clean \
&& rm -f /var/cache/apt/*.bin \
&& rm -f /var/lib/apt/lists/update* \
&& chmod +x /entrypoint.sh
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG=ru_RU.UTF-8
ENV LANGUAGE=ru_RU.UTF-8
ENV LC_ALL=ru_RU.UTF-8
COPY config/tomcat /
RUN cat /etc/tomcat/webbpm.properties >> /etc/tomcat/catalina.properties \
&& chown -R tomcat:tomcat /var/lib/tomcat/webapps
COPY --from=builder /app/backend/target/account-applications.war /var/lib/tomcat/webapps/account-applications.war
USER tomcat
EXPOSE 8080
ENTRYPOINT ["/entrypoint.sh"]

View file

@ -1,63 +0,0 @@
ARG BUILDER_IMAGE=registry-dev.pgs.rtlabs.ru/ervu/micord-deps:0.0.1-shaeb3853d5
ARG RUNTIME_IMAGE=registry-dev.pgs.rtlabs.ru/basealt/altsp:c10f1
FROM $BUILDER_IMAGE AS builder
ARG MVN_FLAGS="-T4C -Pprod -DexecuteNpmInstall=false --batch-mode --no-transfer-progress"
RUN rm -f /etc/apt/sources.list.d/* \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/x86_64 classic" > /etc/apt/sources.list \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/noarch classic" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get -y install git glibc-locales java-17-openjdk-devel maven node \
&& apt-get clean
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8
WORKDIR /app
COPY . .
RUN mkdir -p /root/.m2 \
&& cp config/settings.xml /root/.m2/settings.xml
RUN mvn clean ${MVN_FLAGS} \
&& mvn package ${MVN_FLAGS}
FROM $RUNTIME_IMAGE
COPY --from=builder /usr/lib/locale/ru_RU /usr/lib/locale/ru_RU
COPY --from=builder /usr/lib/locale/ru_RU.utf8 /usr/lib/locale/ru_RU.utf8
COPY --from=builder /usr/share/locale/ru_RU /usr/share/locale/ru_RU
COPY config/entrypoint.sh /entrypoint.sh
RUN rm -f /etc/apt/sources.list.d/* \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/x86_64 classic" > /etc/apt/sources.list \
&& echo "rpm http://nexus-dev.pgs.rtlabs.ru repository/alt-c10f1-classic/noarch classic" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get -y install fonts-ttf-ms java-17-openjdk-headless tomcat tomcat-webapps \
&& apt-get clean \
&& rm -f /var/cache/apt/*.bin \
&& rm -f /var/lib/apt/lists/update* \
&& chmod +x /entrypoint.sh
ENV JAVA_HOME=/usr/lib/jvm/java
ENV LANG=ru_RU.UTF-8
ENV LANGUAGE=ru_RU.UTF-8
ENV LC_ALL=ru_RU.UTF-8
COPY config/tomcat /
RUN cat /etc/tomcat/webbpm.properties >> /etc/tomcat/catalina.properties \
&& chown -R tomcat:tomcat /var/lib/tomcat/webapps
COPY --from=builder /app/backend/target/account-applications.war /var/lib/tomcat/webapps/account-applications.war
USER tomcat
EXPOSE 8080
ENTRYPOINT ["/entrypoint.sh"]

View file

@ -0,0 +1,26 @@
package ru.micord.ervu.account_applications.component.property.grid.formatter;
import property.grid.Formatter;
/**
* @author Adel Kalimullin
*/
public class ErvuSnilsFormatter implements Formatter<String, String> {
@Override
public String format(String value) {
if (value == null) {
return null;
}
String number = value.replaceAll("\\D", "");
if (number.length() != 11) {
throw new IllegalArgumentException("Некорректный формат СНИЛС: " + number);
}
return number.substring(0, 3) + "-" +
number.substring(3, 6) + "-" +
number.substring(6, 9) + " " +
number.substring(9);
}
}

View file

@ -13,6 +13,7 @@ import com.google.common.net.HttpHeaders;
import org.springframework.beans.factory.annotation.Value;
import ru.micord.ervu.account_applications.component.exception.ApiResponseException;
/**
* @author Adel Kalimullin
*/

View file

@ -76,7 +76,7 @@ public class AccountServiceImpl extends AbstractUserDataService {
}
if (FIELD_SNILS.equals(field.getName()) && value instanceof String snils) {
map.put(field.getName(), formatSnils(snils));
map.put(field.getName(), snils.replaceAll("\\D", ""));
continue;
}
@ -117,20 +117,4 @@ public class AccountServiceImpl extends AbstractUserDataService {
private boolean isSimple(Class<?> type) {
return ClassUtils.isPrimitiveOrWrapper(type) || type == String.class;
}
private String formatSnils(String snils) {
if (snils == null) {
return null;
}
String number = snils.replaceAll("\\D", "");
if (number.length() != 11) {
throw new IllegalArgumentException("Некорректный формат СНИЛС: " + number);
}
return number.substring(0, 3) + "-" +
number.substring(3, 6) + "-" +
number.substring(6, 9) + " " +
number.substring(9);
}
}

View file

@ -16,7 +16,6 @@ import org.springframework.stereotype.Service;
import org.springframework.web.util.UriComponentsBuilder;
import ru.micord.ervu.account_applications.component.exception.UserDataLoadException;
import ru.micord.ervu.account_applications.component.model.Role;
import ru.micord.ervu.account_applications.security.context.SecurityContext;
import ru.micord.ervu.account_applications.service.constant.PathConstant;
/**

View file

@ -1,74 +0,0 @@
name: ervu-account-applications-backend
replicaCount: 1
resources:
requests:
memory: '256Mi'
cpu: '50m'
limits:
memory: '2Gi'
cpu: '1'
env:
- name: ERVU_URL
value: 'https://{{ $.Values.ingress_base_host }}'
- name: ERVU_PWD_SIGN_SECRET_KEY
value: 'DtCAQdeKnrAMLfdJkFVdfQnyT/Z5OINK4jqX0LbavfM='
ports:
- name: http
containerPort: 8080
services:
- name: '{{ $.Values.name }}'
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8080
postgres:
database: 'ervu_account_applications'
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 8080
initialDelaySeconds: 30
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 3
httpGet:
path: /account-applications/version
port: 8080
initialDelaySeconds: 30
periodSeconds: 3
successThreshold: 1
timeoutSeconds: 5
ingress:
- name: '{{ $.Values.name }}'
annotations:
nginx.ingress.kubernetes.io/affinity: 'cookie'
nginx.ingress.kubernetes.io/session-cookie-name: 'stickysession'
nginx.ingress.kubernetes.io/session-cookie-max-age: '7200'
nginx.ingress.kubernetes.io/proxy-body-size: "75m"
nginx.ingress.kubernetes.io/rewrite-target: /account-applications/$2
labels:
app/name: ervu-account-applications
rules:
- host: '{{ $.Values.ingress_base_host }}'
http:
paths:
- path: /mfe/account-applications/account-applications(/|$)(.*)
pathType: Prefix
backend:
service:
name: '{{ $.Values.name }}'
port:
name: http

View file

@ -1,13 +0,0 @@
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>central-mirror</id>
<name>rtlabs-public</name>
<url>https://nexus-dev.pgs.rtlabs.ru/repository/maven-public</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>

View file

@ -1,13 +0,0 @@
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>central-mirror</id>
<name>rtlabs-public</name>
<url>http://nexus.gosuslugi.local/content/repositories/central</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>

View file

@ -4269,7 +4269,7 @@
},
"inputmask": {
"version": "5.0.10-beta.37",
"resolved": "https://repo.micord.ru/repository/npm-all/inputmask/-/inputmask-5.0.10-beta.37.tgz",
"resolved": "https://registry.npmjs.org/inputmask/-/inputmask-5.0.10-beta.37.tgz",
"integrity": "sha512-01fRvuo1ck4+/ttrSRFhLJ0exzFYdj2Q5x3qfBu4uJ/r0F81qFGpseHPcwK1e3YQL0531jew4Ipt3UCUCPA4CA=="
},
"inquirer": {

View file

@ -28,7 +28,6 @@ import {
import {
TreeItemRpcService
} from "../../../generated/ru/micord/ervu/account_applications/component/rpc/TreeItemRpcService";
import {AuthorizationService} from "../../../modules/app/service/authorization.service";
@Component({
@ -81,10 +80,6 @@ export class DropdownTreeViewComponent extends InputControl {
this.taskParamsProvider = this.injector.get(TaskParamsProvider);
this.localStorageService = this.injector.get(LocalStorageService);
this.pageContextHolder = this.injector.get(PageContextHolder);
let authService = this.injector.get(AuthorizationService);
if (authService.hasRole('security_administrator')) {
this.skipInitialSelection = true;
}
this.webbpmStorage =
this.getTreeValuesStorage(this.treeValuesCacheStrategy, this.treeValuesCustomName);
this.cachedValue = this.getCachedValue();

View file

@ -4,7 +4,7 @@ import {NgModuleRef} from "@angular/core";
let childEventHandlerFromContainer = null;
export type ChildEventType = 'navigate' | 'token-request'
export type ChildEventType = 'navigate' | 'token-request' | 'ws-request'
export type ParentEventType = 'navigate';
export function fireMfeEventToContainer(eventType: ChildEventType, eventData: any): Promise<any> {

View file

@ -0,0 +1,3 @@
export class SocketProvider {
public getSocket(): Promise<any> { return null }
}

View file

@ -1,6 +1,7 @@
import {Injectable} from "@angular/core";
import {Subject} from "rxjs";
import {HttpClient} from "@angular/common/http";
import {SocketProvider} from "../provider/socket.provider";
export interface UserSession {
userId: string,
@ -17,10 +18,12 @@ export class AuthorizationService {
public onSessionUpdate: Subject<UserSession> = new Subject<UserSession>();
constructor(protected httpClient: HttpClient) {}
constructor(protected httpClient: HttpClient, protected socketProvider: SocketProvider) {}
public getCurrentSession(): Promise<any> {
if (this.session) return new Promise(resolve => resolve(this.session))
if (this.session) return new Promise(resolve => resolve(this.session));
//TODO remove after test
this.listenSocket();
return this.httpClient.get('session')
.toPromise()
.then((session: UserSession) => {
@ -30,6 +33,13 @@ export class AuthorizationService {
})
}
private async listenSocket(): Promise<void> {
const webSocketPlugin = await this.socketProvider.getSocket();
webSocketPlugin.addListener((e: MessageEvent) => {
console.log('socket msg!!!', JSON.parse(e.data));
});
}
isAuthorized(): boolean {
return !!this.session;
}

View file

@ -28,6 +28,8 @@ import {TokenProvider} from "../app/provider/token.provider";
import {MfeTokenProvider} from "./provider/mfe-token.provider";
import {DEFAULT_HTTP_INTERCEPTOR_PROVIDERS} from "./interceptor/mfe-default-interceptors.prod";
import {MfeOverlayContainer} from "./overlay/mfe-overlay-container.service";
import {MfeSocketProvider} from "./provider/mfe-socket-provider";
import {SocketProvider} from "../app/provider/socket.provider";
let IMPORTS = [
@ -61,6 +63,7 @@ let IMPORTS = [
{provide: RolesGuard, useClass: MfeRolesGuard},
{provide: TokenProvider, useClass: MfeTokenProvider},
{provide: OverlayContainer, useClass: MfeOverlayContainer},
{provide: SocketProvider, useClass: MfeSocketProvider},
DEFAULT_HTTP_INTERCEPTOR_PROVIDERS
],
bootstrap: [

View file

@ -0,0 +1,8 @@
import {fireMfeEventToContainer} from "../../../mfe-app-tools";
import {SocketProvider} from "../../app/provider/socket.provider";
export class MfeSocketProvider extends SocketProvider {
getSocket(): Promise<any> {
return fireMfeEventToContainer('ws-request', {});
}
}

View file

@ -345,11 +345,6 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
<version>2.0.11</version>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>

49
release_notes.md Normal file
View file

@ -0,0 +1,49 @@
# Обновления
## 1.9.11
### Список изменений
- SUPPORT-9035: Доработка иерархии по органу "Восьмое управление Генерального штаба Вооруженных сил Российской Федерации Вооруженных сил Российской Федерации"
- SUPPORT-9090: Разрешить нижнее подчеркивание "_"
- SUPPORT-9006: Ошибки отображаются не корректно
- SUPPORT-9087: не отображается пол и снилс при "деактивации пользователя"
- SUPPORT-9080: Ошибка дубликатов в УЗ
- SUPPORT-9060: Исправление отображения ошибок
- SUPPORT-9089: Исправление всплывающего окна
- SUPPORT-9100: Добавить возможность сброса фильтра
### Сборка и запуск
1.
## 1.9.1.19
### Список изменений
### Сборка и запуск
1. Перед обновлением в БД ervu-account-applications необходимо выполнить скрипты
```sql
TRUNCATE public.recruitment CASCADE;
TRUNCATE public.user_application_role CASCADE;
update public.databasechangelog set md5sum
= '9:8795b0e00061befe614be286eeabfc30' where md5sum =
'9:39afe954412277085ff1587d63120ca3';
update public.databasechangelog set md5sum
= '9:16457e9dc1cb2016b77e63581889a56d' where md5sum = '9:8ca0742d3cdccff8efbd3ae9a8bdac4f';
```
## 1.9.1.16
### Список изменений
* Реализована возможность создавать заявки по своему ВК и ВК своего региона
### Сборка и запуск
1. В values.yaml сервиса ervu-account-applications-backend необходимо задать параметр: nginx.ingress.kubernetes.io/proxy-body-size: "75m"

View file

@ -1896,7 +1896,7 @@
<entry>
<key>unMaskValue</key>
<value>
<simple>false</simple>
<simple>true</simple>
</value>
</entry>
</properties>

View file

@ -8866,6 +8866,13 @@
<container>false</container>
<removed>true</removed>
</children>
<children id="5b8c5ac4-549d-411f-80ff-d29293638e5f">
<prototypeId>887d2044-9e34-46a5-852c-e9ce07b42f30</prototypeId>
<componentRootId>5b8c5ac4-549d-411f-80ff-d29293638e5f</componentRootId>
<name>Пол</name>
<container>false</container>
<removed>true</removed>
</children>
<children id="39040b94-4780-4067-864e-64ad3d22a2a3">
<prototypeId>4d981f15-5535-45f7-882b-3647b251ad05</prototypeId>
<componentRootId>39040b94-4780-4067-864e-64ad3d22a2a3</componentRootId>

View file

@ -8867,6 +8867,13 @@
<container>false</container>
<removed>true</removed>
</children>
<children id="5b8c5ac4-549d-411f-80ff-d29293638e5f">
<prototypeId>887d2044-9e34-46a5-852c-e9ce07b42f30</prototypeId>
<componentRootId>5b8c5ac4-549d-411f-80ff-d29293638e5f</componentRootId>
<name>Пол</name>
<container>false</container>
<removed>true</removed>
</children>
<children id="39040b94-4780-4067-864e-64ad3d22a2a3">
<prototypeId>4d981f15-5535-45f7-882b-3647b251ad05</prototypeId>
<componentRootId>39040b94-4780-4067-864e-64ad3d22a2a3</componentRootId>

View file

@ -4670,7 +4670,6 @@
<componentRootId>df951b69-a0bb-422e-b3ef-f5976671dba1</componentRootId>
<name>Grid</name>
<container>true</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="07201df9-ff33-4c71-9aae-a2cfdd028234">
<properties>
@ -5380,6 +5379,7 @@
<componentRootId>ae7272c0-e392-47c4-bacf-e7e8348f3711</componentRootId>
<name>СНИЛС</name>
<container>false</container>
<expanded>false</expanded>
<childrenReordered>false</childrenReordered>
<scripts id="9c5c7a86-dc40-4b30-a5a7-5e7b4c7ea1e1"/>
<scripts id="fd653fca-12f9-4e35-baa4-b6b5dd3f6d59">
@ -5402,6 +5402,15 @@
<simple>{"schema":"public","table":"user_application_list","entity":"user_application_list","name":"snils"}</simple>
</value>
</entry>
<entry>
<key>formatter</key>
<value>
<implRef type="JAVA">
<className>ErvuSnilsFormatter</className>
<packageName>ru.micord.ervu.account_applications.component.property.grid.formatter</packageName>
</implRef>
</value>
</entry>
</properties>
</scripts>
</children>