diff --git a/backend/src/main/java/ervu_business_metrics/controller/DataDateController.java b/backend/src/main/java/ervu_business_metrics/controller/DataDateController.java
new file mode 100644
index 0000000..f8110ce
--- /dev/null
+++ b/backend/src/main/java/ervu_business_metrics/controller/DataDateController.java
@@ -0,0 +1,24 @@
+package ervu_business_metrics.controller;
+
+import ervu_business_metrics.service.DataDateService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author Adel Kalimullin
+ */
+@RestController
+public class DataDateController {
+
+ private final DataDateService dataDateService;
+
+ public DataDateController(DataDateService dataDateService) {
+ this.dataDateService = dataDateService;
+ }
+
+ @GetMapping("/data-date")
+ public String getDataDate(@RequestHeader("Client-Time-Zone") String clientTimeZone) {
+ return dataDateService.getDataDate(clientTimeZone);
+ }
+}
diff --git a/backend/src/main/java/ervu_business_metrics/dao/DataDateDao.java b/backend/src/main/java/ervu_business_metrics/dao/DataDateDao.java
new file mode 100644
index 0000000..053f730
--- /dev/null
+++ b/backend/src/main/java/ervu_business_metrics/dao/DataDateDao.java
@@ -0,0 +1,31 @@
+package ervu_business_metrics.dao;
+
+
+
+import java.sql.Timestamp;
+
+import org.jooq.DSLContext;
+import org.springframework.stereotype.Repository;
+
+import static ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.LastRecordingDate.LAST_RECORDING_DATE;;
+
+/**
+ * @author Adel Kalimullin
+ */
+@Repository
+public class DataDateDao {
+
+ private final DSLContext dslContext;
+
+ public DataDateDao(DSLContext dslContext) {
+ this.dslContext = dslContext;
+ }
+
+ public Timestamp getDataDate() {
+ return dslContext.select(LAST_RECORDING_DATE.LAST_RECORDING_DATE_)
+ .from(LAST_RECORDING_DATE)
+ .orderBy(LAST_RECORDING_DATE.LAST_RECORDING_DATE_.desc())
+ .limit(1)
+ .fetchOne(LAST_RECORDING_DATE.LAST_RECORDING_DATE_);
+ }
+}
diff --git a/backend/src/main/java/ervu_business_metrics/service/DataDateService.java b/backend/src/main/java/ervu_business_metrics/service/DataDateService.java
new file mode 100644
index 0000000..e4cff99
--- /dev/null
+++ b/backend/src/main/java/ervu_business_metrics/service/DataDateService.java
@@ -0,0 +1,26 @@
+package ervu_business_metrics.service;
+
+import java.sql.Timestamp;
+
+import ervu_business_metrics.dao.DataDateDao;
+import ervu_business_metrics.util.DateUtils;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Adel Kalimullin
+ */
+@Service
+public class DataDateService {
+
+ private final DataDateDao dataDateDao;
+
+ public DataDateService(DataDateDao dataDateDao) {
+ this.dataDateDao = dataDateDao;
+ }
+
+ public String getDataDate(String clientTimeZone) {
+ Timestamp dataDate = dataDateDao.getDataDate();
+ String formattedClientDate = DateUtils.getFormattedClientDate(dataDate, clientTimeZone);
+ return "Данные на " + formattedClientDate + " г.";
+ }
+}
diff --git a/backend/src/main/java/ervu_business_metrics/util/DateUtils.java b/backend/src/main/java/ervu_business_metrics/util/DateUtils.java
new file mode 100644
index 0000000..a8d13d1
--- /dev/null
+++ b/backend/src/main/java/ervu_business_metrics/util/DateUtils.java
@@ -0,0 +1,35 @@
+package ervu_business_metrics.util;
+
+import java.sql.Timestamp;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.Locale;
+
+/**
+ * @author Adel Kalimullin
+ */
+public final class DateUtils {
+ private static final DateTimeFormatter DATE_FORMATTER_RU = DateTimeFormatter.ofPattern(
+ "d MMMM yyyy", new Locale("ru", "RU")
+ );
+
+ private DateUtils() {
+ }
+
+ public static String getFormattedClientDate(Timestamp timestamp, String clientTimeZone) {
+ if (timestamp == null) {
+ return "";
+ }
+
+ ZoneId zoneId;
+ try {
+ zoneId = ZoneId.of(clientTimeZone);
+ }
+ catch (Exception e) {
+ zoneId = ZoneId.systemDefault();
+ }
+ return timestamp.toInstant()
+ .atZone(zoneId)
+ .format(DATE_FORMATTER_RU);
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/ErvuBusinessMetrics.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/ErvuBusinessMetrics.java
new file mode 100644
index 0000000..5f7c642
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/ErvuBusinessMetrics.java
@@ -0,0 +1,76 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics;
+
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.jooq.Catalog;
+import org.jooq.Table;
+import org.jooq.impl.SchemaImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.DefaultCatalog;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Databasechangelog;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Databasechangeloglock;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.LastRecordingDate;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Shedlock;
+
+
+/**
+ * This class is generated by jOOQ.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class ErvuBusinessMetrics extends SchemaImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * The reference instance of ervu_business_metrics
+ */
+ public static final ErvuBusinessMetrics ERVU_BUSINESS_METRICS = new ErvuBusinessMetrics();
+
+ /**
+ * The table ervu_business_metrics.databasechangelog.
+ */
+ public final Databasechangelog DATABASECHANGELOG = Databasechangelog.DATABASECHANGELOG;
+
+ /**
+ * The table ervu_business_metrics.databasechangeloglock.
+ */
+ public final Databasechangeloglock DATABASECHANGELOGLOCK = Databasechangeloglock.DATABASECHANGELOGLOCK;
+
+ /**
+ * Таблица для хранения даты и времени последней записи
+ */
+ public final LastRecordingDate LAST_RECORDING_DATE = LastRecordingDate.LAST_RECORDING_DATE;
+
+ /**
+ * Таблица для хранения блокировок ShedLock
+ */
+ public final Shedlock SHEDLOCK = Shedlock.SHEDLOCK;
+
+ /**
+ * No further instances allowed
+ */
+ private ErvuBusinessMetrics() {
+ super("ervu_business_metrics", null);
+ }
+
+
+ @Override
+ public Catalog getCatalog() {
+ return DefaultCatalog.DEFAULT_CATALOG;
+ }
+
+ @Override
+ public final List
> getTables() {
+ return Arrays.asList(
+ Databasechangelog.DATABASECHANGELOG,
+ Databasechangeloglock.DATABASECHANGELOGLOCK,
+ LastRecordingDate.LAST_RECORDING_DATE,
+ Shedlock.SHEDLOCK
+ );
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/Keys.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/Keys.java
new file mode 100644
index 0000000..97ce47b
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/Keys.java
@@ -0,0 +1,31 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics;
+
+
+import org.jooq.TableField;
+import org.jooq.UniqueKey;
+import org.jooq.impl.DSL;
+import org.jooq.impl.Internal;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Databasechangeloglock;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Shedlock;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records.DatabasechangeloglockRecord;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records.ShedlockRecord;
+
+
+/**
+ * A class modelling foreign key relationships and constraints of tables in
+ * ervu_business_metrics.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class Keys {
+
+ // -------------------------------------------------------------------------
+ // UNIQUE and PRIMARY KEY definitions
+ // -------------------------------------------------------------------------
+
+ public static final UniqueKey DATABASECHANGELOGLOCK_PKEY = Internal.createUniqueKey(Databasechangeloglock.DATABASECHANGELOGLOCK, DSL.name("databasechangeloglock_pkey"), new TableField[] { Databasechangeloglock.DATABASECHANGELOGLOCK.ID }, true);
+ public static final UniqueKey SHEDLOCK_PK = Internal.createUniqueKey(Shedlock.SHEDLOCK, DSL.name("shedlock_pk"), new TableField[] { Shedlock.SHEDLOCK.NAME }, true);
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/Tables.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/Tables.java
new file mode 100644
index 0000000..ea87b70
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/Tables.java
@@ -0,0 +1,38 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics;
+
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Databasechangelog;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Databasechangeloglock;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.LastRecordingDate;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Shedlock;
+
+
+/**
+ * Convenience access to all tables in ervu_business_metrics.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class Tables {
+
+ /**
+ * The table ervu_business_metrics.databasechangelog.
+ */
+ public static final Databasechangelog DATABASECHANGELOG = Databasechangelog.DATABASECHANGELOG;
+
+ /**
+ * The table ervu_business_metrics.databasechangeloglock.
+ */
+ public static final Databasechangeloglock DATABASECHANGELOGLOCK = Databasechangeloglock.DATABASECHANGELOGLOCK;
+
+ /**
+ * Таблица для хранения даты и времени последней записи
+ */
+ public static final LastRecordingDate LAST_RECORDING_DATE = LastRecordingDate.LAST_RECORDING_DATE;
+
+ /**
+ * Таблица для хранения блокировок ShedLock
+ */
+ public static final Shedlock SHEDLOCK = Shedlock.SHEDLOCK;
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Databasechangelog.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Databasechangelog.java
new file mode 100644
index 0000000..9a24326
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Databasechangelog.java
@@ -0,0 +1,286 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables;
+
+
+import java.sql.Timestamp;
+import java.util.Collection;
+
+import org.jooq.Condition;
+import org.jooq.Field;
+import org.jooq.Name;
+import org.jooq.PlainSQL;
+import org.jooq.QueryPart;
+import org.jooq.SQL;
+import org.jooq.Schema;
+import org.jooq.Select;
+import org.jooq.Stringly;
+import org.jooq.Table;
+import org.jooq.TableField;
+import org.jooq.TableOptions;
+import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
+import org.jooq.impl.TableImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.ErvuBusinessMetrics;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records.DatabasechangelogRecord;
+
+
+/**
+ * This class is generated by jOOQ.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class Databasechangelog extends TableImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * The reference instance of
+ * ervu_business_metrics.databasechangelog
+ */
+ public static final Databasechangelog DATABASECHANGELOG = new Databasechangelog();
+
+ /**
+ * The class holding records for this type
+ */
+ @Override
+ public Class getRecordType() {
+ return DatabasechangelogRecord.class;
+ }
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.id.
+ */
+ public final TableField ID = createField(DSL.name("id"), SQLDataType.VARCHAR(255).nullable(false), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.author.
+ */
+ public final TableField AUTHOR = createField(DSL.name("author"), SQLDataType.VARCHAR(255).nullable(false), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.filename.
+ */
+ public final TableField FILENAME = createField(DSL.name("filename"), SQLDataType.VARCHAR(255).nullable(false), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangelog.dateexecuted.
+ */
+ public final TableField DATEEXECUTED = createField(DSL.name("dateexecuted"), SQLDataType.TIMESTAMP(0).nullable(false), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangelog.orderexecuted.
+ */
+ public final TableField ORDEREXECUTED = createField(DSL.name("orderexecuted"), SQLDataType.INTEGER.nullable(false), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.exectype.
+ */
+ public final TableField EXECTYPE = createField(DSL.name("exectype"), SQLDataType.VARCHAR(10).nullable(false), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.md5sum.
+ */
+ public final TableField MD5SUM = createField(DSL.name("md5sum"), SQLDataType.VARCHAR(35), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangelog.description.
+ */
+ public final TableField DESCRIPTION = createField(DSL.name("description"), SQLDataType.VARCHAR(255), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.comments.
+ */
+ public final TableField COMMENTS = createField(DSL.name("comments"), SQLDataType.VARCHAR(255), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.tag.
+ */
+ public final TableField TAG = createField(DSL.name("tag"), SQLDataType.VARCHAR(255), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangelog.liquibase.
+ */
+ public final TableField LIQUIBASE = createField(DSL.name("liquibase"), SQLDataType.VARCHAR(20), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.contexts.
+ */
+ public final TableField CONTEXTS = createField(DSL.name("contexts"), SQLDataType.VARCHAR(255), this, "");
+
+ /**
+ * The column ervu_business_metrics.databasechangelog.labels.
+ */
+ public final TableField LABELS = createField(DSL.name("labels"), SQLDataType.VARCHAR(255), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangelog.deployment_id.
+ */
+ public final TableField DEPLOYMENT_ID = createField(DSL.name("deployment_id"), SQLDataType.VARCHAR(10), this, "");
+
+ private Databasechangelog(Name alias, Table aliased) {
+ this(alias, aliased, (Field>[]) null, null);
+ }
+
+ private Databasechangelog(Name alias, Table aliased, Field>[] parameters, Condition where) {
+ super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table(), where);
+ }
+
+ /**
+ * Create an aliased ervu_business_metrics.databasechangelog
+ * table reference
+ */
+ public Databasechangelog(String alias) {
+ this(DSL.name(alias), DATABASECHANGELOG);
+ }
+
+ /**
+ * Create an aliased ervu_business_metrics.databasechangelog
+ * table reference
+ */
+ public Databasechangelog(Name alias) {
+ this(alias, DATABASECHANGELOG);
+ }
+
+ /**
+ * Create a ervu_business_metrics.databasechangelog table
+ * reference
+ */
+ public Databasechangelog() {
+ this(DSL.name("databasechangelog"), null);
+ }
+
+ @Override
+ public Schema getSchema() {
+ return aliased() ? null : ErvuBusinessMetrics.ERVU_BUSINESS_METRICS;
+ }
+
+ @Override
+ public Databasechangelog as(String alias) {
+ return new Databasechangelog(DSL.name(alias), this);
+ }
+
+ @Override
+ public Databasechangelog as(Name alias) {
+ return new Databasechangelog(alias, this);
+ }
+
+ @Override
+ public Databasechangelog as(Table> alias) {
+ return new Databasechangelog(alias.getQualifiedName(), this);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Databasechangelog rename(String name) {
+ return new Databasechangelog(DSL.name(name), null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Databasechangelog rename(Name name) {
+ return new Databasechangelog(name, null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Databasechangelog rename(Table> name) {
+ return new Databasechangelog(name.getQualifiedName(), null);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangelog where(Condition condition) {
+ return new Databasechangelog(getQualifiedName(), aliased() ? this : null, null, condition);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangelog where(Collection extends Condition> conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangelog where(Condition... conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangelog where(Field condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangelog where(SQL condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangelog where(@Stringly.SQL String condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangelog where(@Stringly.SQL String condition, Object... binds) {
+ return where(DSL.condition(condition, binds));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangelog where(@Stringly.SQL String condition, QueryPart... parts) {
+ return where(DSL.condition(condition, parts));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangelog whereExists(Select> select) {
+ return where(DSL.exists(select));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangelog whereNotExists(Select> select) {
+ return where(DSL.notExists(select));
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Databasechangeloglock.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Databasechangeloglock.java
new file mode 100644
index 0000000..6b9b6ab
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Databasechangeloglock.java
@@ -0,0 +1,241 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables;
+
+
+import java.sql.Timestamp;
+import java.util.Collection;
+
+import org.jooq.Condition;
+import org.jooq.Field;
+import org.jooq.Name;
+import org.jooq.PlainSQL;
+import org.jooq.QueryPart;
+import org.jooq.SQL;
+import org.jooq.Schema;
+import org.jooq.Select;
+import org.jooq.Stringly;
+import org.jooq.Table;
+import org.jooq.TableField;
+import org.jooq.TableOptions;
+import org.jooq.UniqueKey;
+import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
+import org.jooq.impl.TableImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.ErvuBusinessMetrics;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.Keys;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records.DatabasechangeloglockRecord;
+
+
+/**
+ * This class is generated by jOOQ.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class Databasechangeloglock extends TableImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * The reference instance of
+ * ervu_business_metrics.databasechangeloglock
+ */
+ public static final Databasechangeloglock DATABASECHANGELOGLOCK = new Databasechangeloglock();
+
+ /**
+ * The class holding records for this type
+ */
+ @Override
+ public Class getRecordType() {
+ return DatabasechangeloglockRecord.class;
+ }
+
+ /**
+ * The column ervu_business_metrics.databasechangeloglock.id.
+ */
+ public final TableField ID = createField(DSL.name("id"), SQLDataType.INTEGER.nullable(false), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangeloglock.locked.
+ */
+ public final TableField LOCKED = createField(DSL.name("locked"), SQLDataType.BOOLEAN.nullable(false), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangeloglock.lockgranted.
+ */
+ public final TableField LOCKGRANTED = createField(DSL.name("lockgranted"), SQLDataType.TIMESTAMP(0), this, "");
+
+ /**
+ * The column
+ * ervu_business_metrics.databasechangeloglock.lockedby.
+ */
+ public final TableField LOCKEDBY = createField(DSL.name("lockedby"), SQLDataType.VARCHAR(255), this, "");
+
+ private Databasechangeloglock(Name alias, Table aliased) {
+ this(alias, aliased, (Field>[]) null, null);
+ }
+
+ private Databasechangeloglock(Name alias, Table aliased, Field>[] parameters, Condition where) {
+ super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table(), where);
+ }
+
+ /**
+ * Create an aliased
+ * ervu_business_metrics.databasechangeloglock table reference
+ */
+ public Databasechangeloglock(String alias) {
+ this(DSL.name(alias), DATABASECHANGELOGLOCK);
+ }
+
+ /**
+ * Create an aliased
+ * ervu_business_metrics.databasechangeloglock table reference
+ */
+ public Databasechangeloglock(Name alias) {
+ this(alias, DATABASECHANGELOGLOCK);
+ }
+
+ /**
+ * Create a ervu_business_metrics.databasechangeloglock table
+ * reference
+ */
+ public Databasechangeloglock() {
+ this(DSL.name("databasechangeloglock"), null);
+ }
+
+ @Override
+ public Schema getSchema() {
+ return aliased() ? null : ErvuBusinessMetrics.ERVU_BUSINESS_METRICS;
+ }
+
+ @Override
+ public UniqueKey getPrimaryKey() {
+ return Keys.DATABASECHANGELOGLOCK_PKEY;
+ }
+
+ @Override
+ public Databasechangeloglock as(String alias) {
+ return new Databasechangeloglock(DSL.name(alias), this);
+ }
+
+ @Override
+ public Databasechangeloglock as(Name alias) {
+ return new Databasechangeloglock(alias, this);
+ }
+
+ @Override
+ public Databasechangeloglock as(Table> alias) {
+ return new Databasechangeloglock(alias.getQualifiedName(), this);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Databasechangeloglock rename(String name) {
+ return new Databasechangeloglock(DSL.name(name), null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Databasechangeloglock rename(Name name) {
+ return new Databasechangeloglock(name, null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Databasechangeloglock rename(Table> name) {
+ return new Databasechangeloglock(name.getQualifiedName(), null);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangeloglock where(Condition condition) {
+ return new Databasechangeloglock(getQualifiedName(), aliased() ? this : null, null, condition);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangeloglock where(Collection extends Condition> conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangeloglock where(Condition... conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangeloglock where(Field condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangeloglock where(SQL condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangeloglock where(@Stringly.SQL String condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangeloglock where(@Stringly.SQL String condition, Object... binds) {
+ return where(DSL.condition(condition, binds));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Databasechangeloglock where(@Stringly.SQL String condition, QueryPart... parts) {
+ return where(DSL.condition(condition, parts));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangeloglock whereExists(Select> select) {
+ return where(DSL.exists(select));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Databasechangeloglock whereNotExists(Select> select) {
+ return where(DSL.notExists(select));
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/LastRecordingDate.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/LastRecordingDate.java
new file mode 100644
index 0000000..4356c79
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/LastRecordingDate.java
@@ -0,0 +1,222 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables;
+
+
+import java.sql.Timestamp;
+import java.util.Collection;
+
+import org.jooq.Condition;
+import org.jooq.Field;
+import org.jooq.Name;
+import org.jooq.PlainSQL;
+import org.jooq.QueryPart;
+import org.jooq.SQL;
+import org.jooq.Schema;
+import org.jooq.Select;
+import org.jooq.Stringly;
+import org.jooq.Table;
+import org.jooq.TableField;
+import org.jooq.TableOptions;
+import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
+import org.jooq.impl.TableImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.ErvuBusinessMetrics;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records.LastRecordingDateRecord;
+
+
+/**
+ * Таблица для хранения даты и времени последней записи
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class LastRecordingDate extends TableImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * The reference instance of
+ * ervu_business_metrics.last_recording_date
+ */
+ public static final LastRecordingDate LAST_RECORDING_DATE = new LastRecordingDate();
+
+ /**
+ * The class holding records for this type
+ */
+ @Override
+ public Class getRecordType() {
+ return LastRecordingDateRecord.class;
+ }
+
+ /**
+ * The column
+ * ervu_business_metrics.last_recording_date.last_recording_date.
+ */
+ public final TableField LAST_RECORDING_DATE_ = createField(DSL.name("last_recording_date"), SQLDataType.TIMESTAMP(0).defaultValue(DSL.field(DSL.raw("now()"), SQLDataType.TIMESTAMP)), this, "");
+
+ /**
+ * The column ervu_business_metrics.last_recording_date.entry.
+ */
+ public final TableField ENTRY = createField(DSL.name("entry"), SQLDataType.CLOB, this, "");
+
+ private LastRecordingDate(Name alias, Table aliased) {
+ this(alias, aliased, (Field>[]) null, null);
+ }
+
+ private LastRecordingDate(Name alias, Table aliased, Field>[] parameters, Condition where) {
+ super(alias, null, aliased, parameters, DSL.comment("Таблица для хранения даты и времени последней записи"), TableOptions.table(), where);
+ }
+
+ /**
+ * Create an aliased ervu_business_metrics.last_recording_date
+ * table reference
+ */
+ public LastRecordingDate(String alias) {
+ this(DSL.name(alias), LAST_RECORDING_DATE);
+ }
+
+ /**
+ * Create an aliased ervu_business_metrics.last_recording_date
+ * table reference
+ */
+ public LastRecordingDate(Name alias) {
+ this(alias, LAST_RECORDING_DATE);
+ }
+
+ /**
+ * Create a ervu_business_metrics.last_recording_date table
+ * reference
+ */
+ public LastRecordingDate() {
+ this(DSL.name("last_recording_date"), null);
+ }
+
+ @Override
+ public Schema getSchema() {
+ return aliased() ? null : ErvuBusinessMetrics.ERVU_BUSINESS_METRICS;
+ }
+
+ @Override
+ public LastRecordingDate as(String alias) {
+ return new LastRecordingDate(DSL.name(alias), this);
+ }
+
+ @Override
+ public LastRecordingDate as(Name alias) {
+ return new LastRecordingDate(alias, this);
+ }
+
+ @Override
+ public LastRecordingDate as(Table> alias) {
+ return new LastRecordingDate(alias.getQualifiedName(), this);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public LastRecordingDate rename(String name) {
+ return new LastRecordingDate(DSL.name(name), null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public LastRecordingDate rename(Name name) {
+ return new LastRecordingDate(name, null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public LastRecordingDate rename(Table> name) {
+ return new LastRecordingDate(name.getQualifiedName(), null);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public LastRecordingDate where(Condition condition) {
+ return new LastRecordingDate(getQualifiedName(), aliased() ? this : null, null, condition);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public LastRecordingDate where(Collection extends Condition> conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public LastRecordingDate where(Condition... conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public LastRecordingDate where(Field condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public LastRecordingDate where(SQL condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public LastRecordingDate where(@Stringly.SQL String condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public LastRecordingDate where(@Stringly.SQL String condition, Object... binds) {
+ return where(DSL.condition(condition, binds));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public LastRecordingDate where(@Stringly.SQL String condition, QueryPart... parts) {
+ return where(DSL.condition(condition, parts));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public LastRecordingDate whereExists(Select> select) {
+ return where(DSL.exists(select));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public LastRecordingDate whereNotExists(Select> select) {
+ return where(DSL.notExists(select));
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Shedlock.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Shedlock.java
new file mode 100644
index 0000000..aa927b8
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/Shedlock.java
@@ -0,0 +1,240 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables;
+
+
+import java.sql.Timestamp;
+import java.util.Collection;
+
+import org.jooq.Condition;
+import org.jooq.Field;
+import org.jooq.Name;
+import org.jooq.PlainSQL;
+import org.jooq.QueryPart;
+import org.jooq.SQL;
+import org.jooq.Schema;
+import org.jooq.Select;
+import org.jooq.Stringly;
+import org.jooq.Table;
+import org.jooq.TableField;
+import org.jooq.TableOptions;
+import org.jooq.UniqueKey;
+import org.jooq.impl.DSL;
+import org.jooq.impl.SQLDataType;
+import org.jooq.impl.TableImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.ErvuBusinessMetrics;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.Keys;
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records.ShedlockRecord;
+
+
+/**
+ * Таблица для хранения блокировок ShedLock
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class Shedlock extends TableImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * The reference instance of ervu_business_metrics.shedlock
+ */
+ public static final Shedlock SHEDLOCK = new Shedlock();
+
+ /**
+ * The class holding records for this type
+ */
+ @Override
+ public Class getRecordType() {
+ return ShedlockRecord.class;
+ }
+
+ /**
+ * The column ervu_business_metrics.shedlock.name. Имя ресурса
+ * блокировки
+ */
+ public final TableField NAME = createField(DSL.name("name"), SQLDataType.VARCHAR(255).nullable(false), this, "Имя ресурса блокировки");
+
+ /**
+ * The column ervu_business_metrics.shedlock.lock_until. Время,
+ * до которого действует блокировка
+ */
+ public final TableField LOCK_UNTIL = createField(DSL.name("lock_until"), SQLDataType.TIMESTAMP(0), this, "Время, до которого действует блокировка");
+
+ /**
+ * The column ervu_business_metrics.shedlock.locked_at. Время
+ * создания блокировки
+ */
+ public final TableField LOCKED_AT = createField(DSL.name("locked_at"), SQLDataType.TIMESTAMP(0), this, "Время создания блокировки");
+
+ /**
+ * The column ervu_business_metrics.shedlock.locked_by.
+ * Идентификатор узла, установившего блокировку
+ */
+ public final TableField LOCKED_BY = createField(DSL.name("locked_by"), SQLDataType.VARCHAR(255), this, "Идентификатор узла, установившего блокировку");
+
+ private Shedlock(Name alias, Table aliased) {
+ this(alias, aliased, (Field>[]) null, null);
+ }
+
+ private Shedlock(Name alias, Table aliased, Field>[] parameters, Condition where) {
+ super(alias, null, aliased, parameters, DSL.comment("Таблица для хранения блокировок ShedLock"), TableOptions.table(), where);
+ }
+
+ /**
+ * Create an aliased ervu_business_metrics.shedlock table
+ * reference
+ */
+ public Shedlock(String alias) {
+ this(DSL.name(alias), SHEDLOCK);
+ }
+
+ /**
+ * Create an aliased ervu_business_metrics.shedlock table
+ * reference
+ */
+ public Shedlock(Name alias) {
+ this(alias, SHEDLOCK);
+ }
+
+ /**
+ * Create a ervu_business_metrics.shedlock table reference
+ */
+ public Shedlock() {
+ this(DSL.name("shedlock"), null);
+ }
+
+ @Override
+ public Schema getSchema() {
+ return aliased() ? null : ErvuBusinessMetrics.ERVU_BUSINESS_METRICS;
+ }
+
+ @Override
+ public UniqueKey getPrimaryKey() {
+ return Keys.SHEDLOCK_PK;
+ }
+
+ @Override
+ public Shedlock as(String alias) {
+ return new Shedlock(DSL.name(alias), this);
+ }
+
+ @Override
+ public Shedlock as(Name alias) {
+ return new Shedlock(alias, this);
+ }
+
+ @Override
+ public Shedlock as(Table> alias) {
+ return new Shedlock(alias.getQualifiedName(), this);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Shedlock rename(String name) {
+ return new Shedlock(DSL.name(name), null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Shedlock rename(Name name) {
+ return new Shedlock(name, null);
+ }
+
+ /**
+ * Rename this table
+ */
+ @Override
+ public Shedlock rename(Table> name) {
+ return new Shedlock(name.getQualifiedName(), null);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Shedlock where(Condition condition) {
+ return new Shedlock(getQualifiedName(), aliased() ? this : null, null, condition);
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Shedlock where(Collection extends Condition> conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Shedlock where(Condition... conditions) {
+ return where(DSL.and(conditions));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Shedlock where(Field condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Shedlock where(SQL condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Shedlock where(@Stringly.SQL String condition) {
+ return where(DSL.condition(condition));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Shedlock where(@Stringly.SQL String condition, Object... binds) {
+ return where(DSL.condition(condition, binds));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ @PlainSQL
+ public Shedlock where(@Stringly.SQL String condition, QueryPart... parts) {
+ return where(DSL.condition(condition, parts));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Shedlock whereExists(Select> select) {
+ return where(DSL.exists(select));
+ }
+
+ /**
+ * Create an inline derived table from this table
+ */
+ @Override
+ public Shedlock whereNotExists(Select> select) {
+ return where(DSL.notExists(select));
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/DatabasechangelogRecord.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/DatabasechangelogRecord.java
new file mode 100644
index 0000000..fb5885e
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/DatabasechangelogRecord.java
@@ -0,0 +1,261 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records;
+
+
+import java.sql.Timestamp;
+
+import org.jooq.impl.TableRecordImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Databasechangelog;
+
+
+/**
+ * This class is generated by jOOQ.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class DatabasechangelogRecord extends TableRecordImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.id.
+ */
+ public void setId(String value) {
+ set(0, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.id.
+ */
+ public String getId() {
+ return (String) get(0);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.author.
+ */
+ public void setAuthor(String value) {
+ set(1, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.author.
+ */
+ public String getAuthor() {
+ return (String) get(1);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.filename.
+ */
+ public void setFilename(String value) {
+ set(2, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.filename.
+ */
+ public String getFilename() {
+ return (String) get(2);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangelog.dateexecuted.
+ */
+ public void setDateexecuted(Timestamp value) {
+ set(3, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangelog.dateexecuted.
+ */
+ public Timestamp getDateexecuted() {
+ return (Timestamp) get(3);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangelog.orderexecuted.
+ */
+ public void setOrderexecuted(Integer value) {
+ set(4, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangelog.orderexecuted.
+ */
+ public Integer getOrderexecuted() {
+ return (Integer) get(4);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.exectype.
+ */
+ public void setExectype(String value) {
+ set(5, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.exectype.
+ */
+ public String getExectype() {
+ return (String) get(5);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.md5sum.
+ */
+ public void setMd5sum(String value) {
+ set(6, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.md5sum.
+ */
+ public String getMd5sum() {
+ return (String) get(6);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangelog.description.
+ */
+ public void setDescription(String value) {
+ set(7, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangelog.description.
+ */
+ public String getDescription() {
+ return (String) get(7);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.comments.
+ */
+ public void setComments(String value) {
+ set(8, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.comments.
+ */
+ public String getComments() {
+ return (String) get(8);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.tag.
+ */
+ public void setTag(String value) {
+ set(9, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.tag.
+ */
+ public String getTag() {
+ return (String) get(9);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangelog.liquibase.
+ */
+ public void setLiquibase(String value) {
+ set(10, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangelog.liquibase.
+ */
+ public String getLiquibase() {
+ return (String) get(10);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.contexts.
+ */
+ public void setContexts(String value) {
+ set(11, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.contexts.
+ */
+ public String getContexts() {
+ return (String) get(11);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.databasechangelog.labels.
+ */
+ public void setLabels(String value) {
+ set(12, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangelog.labels.
+ */
+ public String getLabels() {
+ return (String) get(12);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangelog.deployment_id.
+ */
+ public void setDeploymentId(String value) {
+ set(13, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangelog.deployment_id.
+ */
+ public String getDeploymentId() {
+ return (String) get(13);
+ }
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ // -------------------------------------------------------------------------
+
+ /**
+ * Create a detached DatabasechangelogRecord
+ */
+ public DatabasechangelogRecord() {
+ super(Databasechangelog.DATABASECHANGELOG);
+ }
+
+ /**
+ * Create a detached, initialised DatabasechangelogRecord
+ */
+ public DatabasechangelogRecord(String id, String author, String filename, Timestamp dateexecuted, Integer orderexecuted, String exectype, String md5sum, String description, String comments, String tag, String liquibase, String contexts, String labels, String deploymentId) {
+ super(Databasechangelog.DATABASECHANGELOG);
+
+ setId(id);
+ setAuthor(author);
+ setFilename(filename);
+ setDateexecuted(dateexecuted);
+ setOrderexecuted(orderexecuted);
+ setExectype(exectype);
+ setMd5sum(md5sum);
+ setDescription(description);
+ setComments(comments);
+ setTag(tag);
+ setLiquibase(liquibase);
+ setContexts(contexts);
+ setLabels(labels);
+ setDeploymentId(deploymentId);
+ resetChangedOnNotNull();
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/DatabasechangeloglockRecord.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/DatabasechangeloglockRecord.java
new file mode 100644
index 0000000..a7075d9
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/DatabasechangeloglockRecord.java
@@ -0,0 +1,117 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records;
+
+
+import java.sql.Timestamp;
+
+import org.jooq.Record1;
+import org.jooq.impl.UpdatableRecordImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Databasechangeloglock;
+
+
+/**
+ * This class is generated by jOOQ.
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class DatabasechangeloglockRecord extends UpdatableRecordImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Setter for ervu_business_metrics.databasechangeloglock.id.
+ */
+ public void setId(Integer value) {
+ set(0, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.databasechangeloglock.id.
+ */
+ public Integer getId() {
+ return (Integer) get(0);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangeloglock.locked.
+ */
+ public void setLocked(Boolean value) {
+ set(1, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangeloglock.locked.
+ */
+ public Boolean getLocked() {
+ return (Boolean) get(1);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangeloglock.lockgranted.
+ */
+ public void setLockgranted(Timestamp value) {
+ set(2, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangeloglock.lockgranted.
+ */
+ public Timestamp getLockgranted() {
+ return (Timestamp) get(2);
+ }
+
+ /**
+ * Setter for
+ * ervu_business_metrics.databasechangeloglock.lockedby.
+ */
+ public void setLockedby(String value) {
+ set(3, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.databasechangeloglock.lockedby.
+ */
+ public String getLockedby() {
+ return (String) get(3);
+ }
+
+ // -------------------------------------------------------------------------
+ // Primary key information
+ // -------------------------------------------------------------------------
+
+ @Override
+ public Record1 key() {
+ return (Record1) super.key();
+ }
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ // -------------------------------------------------------------------------
+
+ /**
+ * Create a detached DatabasechangeloglockRecord
+ */
+ public DatabasechangeloglockRecord() {
+ super(Databasechangeloglock.DATABASECHANGELOGLOCK);
+ }
+
+ /**
+ * Create a detached, initialised DatabasechangeloglockRecord
+ */
+ public DatabasechangeloglockRecord(Integer id, Boolean locked, Timestamp lockgranted, String lockedby) {
+ super(Databasechangeloglock.DATABASECHANGELOGLOCK);
+
+ setId(id);
+ setLocked(locked);
+ setLockgranted(lockgranted);
+ setLockedby(lockedby);
+ resetChangedOnNotNull();
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/LastRecordingDateRecord.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/LastRecordingDateRecord.java
new file mode 100644
index 0000000..25478a8
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/LastRecordingDateRecord.java
@@ -0,0 +1,73 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records;
+
+
+import java.sql.Timestamp;
+
+import org.jooq.impl.TableRecordImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.LastRecordingDate;
+
+
+/**
+ * Таблица для хранения даты и времени последней записи
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class LastRecordingDateRecord extends TableRecordImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Setter for
+ * ervu_business_metrics.last_recording_date.last_recording_date.
+ */
+ public void setLastRecordingDate(Timestamp value) {
+ set(0, value);
+ }
+
+ /**
+ * Getter for
+ * ervu_business_metrics.last_recording_date.last_recording_date.
+ */
+ public Timestamp getLastRecordingDate() {
+ return (Timestamp) get(0);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.last_recording_date.entry.
+ */
+ public void setEntry(String value) {
+ set(1, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.last_recording_date.entry.
+ */
+ public String getEntry() {
+ return (String) get(1);
+ }
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ // -------------------------------------------------------------------------
+
+ /**
+ * Create a detached LastRecordingDateRecord
+ */
+ public LastRecordingDateRecord() {
+ super(LastRecordingDate.LAST_RECORDING_DATE);
+ }
+
+ /**
+ * Create a detached, initialised LastRecordingDateRecord
+ */
+ public LastRecordingDateRecord(Timestamp lastRecordingDate, String entry) {
+ super(LastRecordingDate.LAST_RECORDING_DATE);
+
+ setLastRecordingDate(lastRecordingDate);
+ setEntry(entry);
+ resetChangedOnNotNull();
+ }
+}
diff --git a/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/ShedlockRecord.java b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/ShedlockRecord.java
new file mode 100644
index 0000000..629d90a
--- /dev/null
+++ b/backend/src/main/java/ru/micord/webbpm/ervu/business_metrics/db_beans/ervu_business_metrics/tables/records/ShedlockRecord.java
@@ -0,0 +1,119 @@
+/*
+ * This file is generated by jOOQ.
+ */
+package ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.records;
+
+
+import java.sql.Timestamp;
+
+import org.jooq.Record1;
+import org.jooq.impl.UpdatableRecordImpl;
+
+import ru.micord.webbpm.ervu.business_metrics.db_beans.ervu_business_metrics.tables.Shedlock;
+
+
+/**
+ * Таблица для хранения блокировок ShedLock
+ */
+@SuppressWarnings({ "all", "unchecked", "rawtypes" })
+public class ShedlockRecord extends UpdatableRecordImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Setter for ervu_business_metrics.shedlock.name. Имя ресурса
+ * блокировки
+ */
+ public void setName(String value) {
+ set(0, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.shedlock.name. Имя ресурса
+ * блокировки
+ */
+ public String getName() {
+ return (String) get(0);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.shedlock.lock_until. Время,
+ * до которого действует блокировка
+ */
+ public void setLockUntil(Timestamp value) {
+ set(1, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.shedlock.lock_until. Время,
+ * до которого действует блокировка
+ */
+ public Timestamp getLockUntil() {
+ return (Timestamp) get(1);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.shedlock.locked_at. Время
+ * создания блокировки
+ */
+ public void setLockedAt(Timestamp value) {
+ set(2, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.shedlock.locked_at. Время
+ * создания блокировки
+ */
+ public Timestamp getLockedAt() {
+ return (Timestamp) get(2);
+ }
+
+ /**
+ * Setter for ervu_business_metrics.shedlock.locked_by.
+ * Идентификатор узла, установившего блокировку
+ */
+ public void setLockedBy(String value) {
+ set(3, value);
+ }
+
+ /**
+ * Getter for ervu_business_metrics.shedlock.locked_by.
+ * Идентификатор узла, установившего блокировку
+ */
+ public String getLockedBy() {
+ return (String) get(3);
+ }
+
+ // -------------------------------------------------------------------------
+ // Primary key information
+ // -------------------------------------------------------------------------
+
+ @Override
+ public Record1 key() {
+ return (Record1) super.key();
+ }
+
+ // -------------------------------------------------------------------------
+ // Constructors
+ // -------------------------------------------------------------------------
+
+ /**
+ * Create a detached ShedlockRecord
+ */
+ public ShedlockRecord() {
+ super(Shedlock.SHEDLOCK);
+ }
+
+ /**
+ * Create a detached, initialised ShedlockRecord
+ */
+ public ShedlockRecord(String name, Timestamp lockUntil, Timestamp lockedAt, String lockedBy) {
+ super(Shedlock.SHEDLOCK);
+
+ setName(name);
+ setLockUntil(lockUntil);
+ setLockedAt(lockedAt);
+ setLockedBy(lockedBy);
+ resetChangedOnNotNull();
+ }
+}
diff --git a/backend/src/main/resources/config/v_1.0/20250821-last_recording_date.xml b/backend/src/main/resources/config/v_1.0/20250821-last_recording_date.xml
new file mode 100644
index 0000000..2b53ee9
--- /dev/null
+++ b/backend/src/main/resources/config/v_1.0/20250821-last_recording_date.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+ fix view deregistration.view_generated_solutions
+
+ CREATE TABLE IF NOT EXISTS ervu_business_metrics.last_recording_date(
+ last_recording_date TIMESTAMP DEFAULT now(),
+ entry text
+ );
+
+ COMMENT ON TABLE ervu_business_metrics.last_recording_date IS 'Таблица для хранения даты и времени последней записи';
+
+
+
+
+
\ No newline at end of file
diff --git a/backend/src/main/resources/config/v_1.0/changelog-1.0.xml b/backend/src/main/resources/config/v_1.0/changelog-1.0.xml
index 42e6583..81dbecd 100644
--- a/backend/src/main/resources/config/v_1.0/changelog-1.0.xml
+++ b/backend/src/main/resources/config/v_1.0/changelog-1.0.xml
@@ -38,4 +38,5 @@
+
\ No newline at end of file
diff --git a/frontend/src/resources/template/app/component/app_header.html b/frontend/src/resources/template/app/component/app_header.html
index 3e6682a..f763198 100644
--- a/frontend/src/resources/template/app/component/app_header.html
+++ b/frontend/src/resources/template/app/component/app_header.html
@@ -1,5 +1,10 @@
diff --git a/frontend/src/resources/template/app/component/data-date.html b/frontend/src/resources/template/app/component/data-date.html
new file mode 100644
index 0000000..ecf0607
--- /dev/null
+++ b/frontend/src/resources/template/app/component/data-date.html
@@ -0,0 +1 @@
+{{dataDate}}
\ No newline at end of file
diff --git a/frontend/src/ts/modules/app/app.module.ts b/frontend/src/ts/modules/app/app.module.ts
index e82cc22..8013678 100644
--- a/frontend/src/ts/modules/app/app.module.ts
+++ b/frontend/src/ts/modules/app/app.module.ts
@@ -25,6 +25,7 @@ import {DropdownTreeViewComponent} from "../../component/field/DropdownTreeViewC
import {DropdownTreeviewSelectComponent} from "../../component/external/ngx-treeview/dropdown-treeview-select/dropdown-treeview-select.component";
import {TreeviewModule} from "ngx-treeview";
import {ErvuChartTooltip} from "../../ervu_business_metrics/component/chart/ErvuChartTooltip";
+import {DataDateComponent} from "./component/data-date.component";
registerLocaleData(localeRu);
export const DIRECTIVES = [
@@ -36,7 +37,8 @@ export const DIRECTIVES = [
forwardRef(() => FilterContainer),
forwardRef(() => DropdownTreeViewComponent),
forwardRef(() => DropdownTreeviewSelectComponent),
- forwardRef(() => ErvuChartTooltip)
+ forwardRef(() => ErvuChartTooltip),
+ forwardRef(() => DataDateComponent)
];
@NgModule({
diff --git a/frontend/src/ts/modules/app/component/data-date.component.ts b/frontend/src/ts/modules/app/component/data-date.component.ts
new file mode 100644
index 0000000..b45086c
--- /dev/null
+++ b/frontend/src/ts/modules/app/component/data-date.component.ts
@@ -0,0 +1,31 @@
+import {ChangeDetectionStrategy, ChangeDetectorRef, Component} from "@angular/core";
+import {HttpClient} from "@angular/common/http";
+
+@Component({
+ moduleId: module.id,
+ selector: 'data-date',
+ templateUrl: '../../../../../src/resources/template/app/component/data-date.html',
+ changeDetection: ChangeDetectionStrategy.OnPush
+})
+export class DataDateComponent {
+ public dataDate: string;
+
+ constructor(private httpClient: HttpClient, private cd: ChangeDetectorRef) {
+ this.getLastRecordDate();
+ }
+
+ private getLastRecordDate(): void {
+ const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
+ this.httpClient.get("data-date",
+ {
+ headers: {
+ "Client-Time-Zone": timeZone,
+ }
+ }
+ ).toPromise()
+ .then((dataDate: string) => {
+ this.dataDate = dataDate;
+ this.cd.markForCheck();
+ });
+ }
+}
\ No newline at end of file
diff --git a/resources/src/main/resources/database/datasource.xml b/resources/src/main/resources/database/datasource.xml
index af41d21..263d6e0 100644
--- a/resources/src/main/resources/database/datasource.xml
+++ b/resources/src/main/resources/database/datasource.xml
@@ -11,6 +11,7 @@
admin_indicators
auth
deregistration
+ ervu_business_metrics
idm_reconcile
init_registration_info
journal_log