diff --git a/clearing-parent/backend-api/src/main/resources/meta/data.xml b/clearing-parent/backend-api/src/main/resources/meta/data.xml index 03c5582c9..364fd6847 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/data.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/data.xml @@ -58,11 +58,11 @@ - - - - - + + + + + @@ -153,7 +153,7 @@ - + @@ -164,7 +164,7 @@ - + @@ -177,6 +177,9 @@ + + + @@ -311,6 +314,8 @@ + + @@ -397,6 +402,7 @@ + diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.json b/clearing-parent/backend-api/src/main/resources/meta/meta.json index 25f5458ae..4d6f6f1f0 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.json +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.json @@ -1387,6 +1387,29 @@ {"code": "name", "name": "Тип события","shortname": "Событие","type": 2,"length": 50 } + ] + } + , + "priority": { + + "name": "Справочник приоритетов отображения", + + "class": "ru.clearing.platform.dictionary.PriorityDictionary", + + "table": "priority_dictionary", + + "fields": [ + {"code": "id", + "name": "Идентификатор","shortname": "ID","type": 1 + } + , + {"code": "code", + "name": "Код","shortname": "Код","type": 12 + } + , + {"code": "name", + "name": "Приоритет отображения","shortname": "Приоритет","type": 2,"length": 50 + } ] } @@ -1394,6 +1417,28 @@ ,"objects": { + "dbVersion": { + + "name": "Версия базы данных", + + "destination": "db-versions", + + "class": "", + + "table": "db_version", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true,"visible": true + } + , + {"code": "version", + "type": 2,"length": 50,"name": "Версия базы данных, привязанная к релизу","shortname": "Версия БД","searchable": true,"sortable": true,"visible": true + } + ] + + } + , "userCls": { "name": "Пользователь", @@ -4399,7 +4444,7 @@ , "informationAccount": { - "name": "Регистры", + "name": "Регистр КС", "destination": "accounting/information-accounts", @@ -6689,6 +6734,14 @@ {"code": "notificationStatus", "type": 12,"dbname": "Код статуса сообщения","name": "Наименование статуса сообщения","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "notificationStatus" } + , + {"code": "comment", + "type": 2,"length": 255,"name": "Текст сообщения","shortname": "Сообщение","searchable": true,"sortable": true,"visible": true + } + , + {"code": "priority", + "type": 12,"dbname": "Код приоритета отображения","name": "Наименование приоритета отображения","shortname": "Приоритет отображения","searchable": true,"sortable": true,"link": "priority" + } ] ,"actions":[ {"method":"put", @@ -7732,6 +7785,86 @@ } ] + } + , + "sDf21": { + + "name": "ДФ-21 Отчет об операциях", + + "class": "ru.clearing.classes.statics.data.sdf.SDf21", + + "table": "s_df_21", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true + } + , + {"code": "outDocument", + "type": 2,"name": "Уникальный исходящий номер сообщения","shortname": "Исходящий номер сообщения","searchable": true,"sortable": true + } + , + {"code": "inDocument", + "type": 2,"name": "Исходящий номер входящего сообщения","shortname": "Сформировано","searchable": true,"sortable": true + } + , + {"code": "securityCode", + "type": 2,"name": "Код ценной бумаги","shortname": "Ценная бумага","searchable": true,"sortable": true + } + , + {"code": "securityName", + "type": 2,"name": "Наименование ценной бумаги","shortname": "Ценная бумага","searchable": true,"sortable": true + } + , + {"code": "securityType", + "type": 2,"name": "Тип ценной бумаги","shortname": "Ценная бумага","searchable": true,"sortable": true + } + , + {"code": "openBalance", + "type": 2,"name": "Входящий остаток","shortname": "Входящий остаток","searchable": true,"sortable": true + } + , + {"code": "depoCodeCl", + "type": 2,"name": "Код раздела тех.счета/счета депо","shortname": "Код раздела тех.счета/счета депо","searchable": true,"sortable": true + } + , + {"code": "nameCl", + "type": 2,"name": "Наименование клиента","shortname": "Клиент","searchable": true,"sortable": true + } + , + {"code": "quantity", + "type": 2,"name": "Количество ценных бумаг","shortname": "Количество","searchable": true,"sortable": true + } + , + {"code": "operationCode", + "type": 2,"name": "Код операции","shortname": "Код операции","searchable": true,"sortable": true + } + , + {"code": "depoCodeCorr", + "type": 2,"name": "Код раздела субсчета/счета депо корреспондента","shortname": "Код счета депо","searchable": true,"sortable": true + } + , + {"code": "operationDate", + "type": 2,"name": "Дата операции","shortname": "Дата операции","searchable": true,"sortable": true + } + , + {"code": "closeBalance", + "type": 2,"name": "Исходящий остаток","shortname": "Исходящий остаток","searchable": true,"sortable": true + } + , + {"code": "fileName", + "type": 2,"name": "Наименование входящего файла","shortname": "Наименование файла","searchable": true,"sortable": true + } + , + {"code": "generationTime", + "type": 4,"name": "Дата и время создания записи","shortname": "Дата и время создания","searchable": true,"sortable": true + } + , + {"code": "generationId", + "type": 1,"name": "Идентификатор взаимодействия","shortname": "ID взаимодействия","searchable": true,"sortable": true + } + ] + } , "sDf51": { diff --git a/clearing-parent/backend-api/src/main/resources/meta/meta.xml b/clearing-parent/backend-api/src/main/resources/meta/meta.xml index da34204cc..e263bcdf0 100644 --- a/clearing-parent/backend-api/src/main/resources/meta/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta/meta.xml @@ -308,8 +308,17 @@ + + + + + + + + + @@ -1025,7 +1034,7 @@ - + @@ -1552,6 +1561,8 @@ + + @@ -1799,6 +1810,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/clearing-parent/backend-api/src/test/resources/meta.json b/clearing-parent/backend-api/src/test/resources/meta.json index 25f5458ae..4d6f6f1f0 100644 --- a/clearing-parent/backend-api/src/test/resources/meta.json +++ b/clearing-parent/backend-api/src/test/resources/meta.json @@ -1387,6 +1387,29 @@ {"code": "name", "name": "Тип события","shortname": "Событие","type": 2,"length": 50 } + ] + } + , + "priority": { + + "name": "Справочник приоритетов отображения", + + "class": "ru.clearing.platform.dictionary.PriorityDictionary", + + "table": "priority_dictionary", + + "fields": [ + {"code": "id", + "name": "Идентификатор","shortname": "ID","type": 1 + } + , + {"code": "code", + "name": "Код","shortname": "Код","type": 12 + } + , + {"code": "name", + "name": "Приоритет отображения","shortname": "Приоритет","type": 2,"length": 50 + } ] } @@ -1394,6 +1417,28 @@ ,"objects": { + "dbVersion": { + + "name": "Версия базы данных", + + "destination": "db-versions", + + "class": "", + + "table": "db_version", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true,"visible": true + } + , + {"code": "version", + "type": 2,"length": 50,"name": "Версия базы данных, привязанная к релизу","shortname": "Версия БД","searchable": true,"sortable": true,"visible": true + } + ] + + } + , "userCls": { "name": "Пользователь", @@ -4399,7 +4444,7 @@ , "informationAccount": { - "name": "Регистры", + "name": "Регистр КС", "destination": "accounting/information-accounts", @@ -6689,6 +6734,14 @@ {"code": "notificationStatus", "type": 12,"dbname": "Код статуса сообщения","name": "Наименование статуса сообщения","shortname": "Статус","searchable": true,"sortable": true,"visible": true,"link": "notificationStatus" } + , + {"code": "comment", + "type": 2,"length": 255,"name": "Текст сообщения","shortname": "Сообщение","searchable": true,"sortable": true,"visible": true + } + , + {"code": "priority", + "type": 12,"dbname": "Код приоритета отображения","name": "Наименование приоритета отображения","shortname": "Приоритет отображения","searchable": true,"sortable": true,"link": "priority" + } ] ,"actions":[ {"method":"put", @@ -7732,6 +7785,86 @@ } ] + } + , + "sDf21": { + + "name": "ДФ-21 Отчет об операциях", + + "class": "ru.clearing.classes.statics.data.sdf.SDf21", + + "table": "s_df_21", + + "fields": [ + {"code": "id", + "type": 1,"name": "Идентификатор записи","shortname": "ID","searchable": true,"sortable": true + } + , + {"code": "outDocument", + "type": 2,"name": "Уникальный исходящий номер сообщения","shortname": "Исходящий номер сообщения","searchable": true,"sortable": true + } + , + {"code": "inDocument", + "type": 2,"name": "Исходящий номер входящего сообщения","shortname": "Сформировано","searchable": true,"sortable": true + } + , + {"code": "securityCode", + "type": 2,"name": "Код ценной бумаги","shortname": "Ценная бумага","searchable": true,"sortable": true + } + , + {"code": "securityName", + "type": 2,"name": "Наименование ценной бумаги","shortname": "Ценная бумага","searchable": true,"sortable": true + } + , + {"code": "securityType", + "type": 2,"name": "Тип ценной бумаги","shortname": "Ценная бумага","searchable": true,"sortable": true + } + , + {"code": "openBalance", + "type": 2,"name": "Входящий остаток","shortname": "Входящий остаток","searchable": true,"sortable": true + } + , + {"code": "depoCodeCl", + "type": 2,"name": "Код раздела тех.счета/счета депо","shortname": "Код раздела тех.счета/счета депо","searchable": true,"sortable": true + } + , + {"code": "nameCl", + "type": 2,"name": "Наименование клиента","shortname": "Клиент","searchable": true,"sortable": true + } + , + {"code": "quantity", + "type": 2,"name": "Количество ценных бумаг","shortname": "Количество","searchable": true,"sortable": true + } + , + {"code": "operationCode", + "type": 2,"name": "Код операции","shortname": "Код операции","searchable": true,"sortable": true + } + , + {"code": "depoCodeCorr", + "type": 2,"name": "Код раздела субсчета/счета депо корреспондента","shortname": "Код счета депо","searchable": true,"sortable": true + } + , + {"code": "operationDate", + "type": 2,"name": "Дата операции","shortname": "Дата операции","searchable": true,"sortable": true + } + , + {"code": "closeBalance", + "type": 2,"name": "Исходящий остаток","shortname": "Исходящий остаток","searchable": true,"sortable": true + } + , + {"code": "fileName", + "type": 2,"name": "Наименование входящего файла","shortname": "Наименование файла","searchable": true,"sortable": true + } + , + {"code": "generationTime", + "type": 4,"name": "Дата и время создания записи","shortname": "Дата и время создания","searchable": true,"sortable": true + } + , + {"code": "generationId", + "type": 1,"name": "Идентификатор взаимодействия","shortname": "ID взаимодействия","searchable": true,"sortable": true + } + ] + } , "sDf51": { diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/Notification.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/Notification.java index 4474adea4..6d37f4e45 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/Notification.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/Notification.java @@ -15,6 +15,8 @@ public class Notification extends BusinessObject { private String objectType; private Long objectId; private String notificationStatus; + private String comment; + private String priority; public LocalDate getClearingDate() { return clearingDate; @@ -63,4 +65,20 @@ public class Notification extends BusinessObject { public void setNotificationStatus(String notificationStatus) { this.notificationStatus = notificationStatus; } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getPriority() { + return priority; + } + + public void setPriority(String priority) { + this.priority = priority; + } } \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf21.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf21.java new file mode 100644 index 000000000..54b3e5bd7 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/sdf/SDf21.java @@ -0,0 +1,161 @@ +package ru.clearing.classes.statics.data.sdf; + +import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; + +import java.time.Instant; + +/** + * ДФ-21 Отчет об операциях + *

+ * DB table: S_DF21 + **/ +public class SDf21 extends SpcexObjectBase { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private String outDocument; + private String inDocument; + private String securityCode; + private String securityName; + private String securityType; + private String openBalance; + private String depoCodeCl; + private String nameCl; + private String quantity; + private String operationCode; + private String depoCodeCorr; + private String operationDate; + private String closeBalance; + private String fileName; + private Instant generationTime; + private Long generationId; + + public String getOutDocument() { + return outDocument; + } + + public void setOutDocument(String value) { + this.outDocument = value; + } + + public String getInDocument() { + return inDocument; + } + + public void setInDocument(String value) { + this.inDocument = value; + } + + public String getSecurityCode() { + return securityCode; + } + + public void setSecurityCode(String value) { + this.securityCode = value; + } + + public String getSecurityName() { + return securityName; + } + + public void setSecurityName(String value) { + this.securityName = value; + } + + public String getSecurityType() { + return securityType; + } + + public void setSecurityType(String value) { + this.securityType = value; + } + + public String getOpenBalance() { + return openBalance; + } + + public void setOpenBalance(String value) { + this.openBalance = value; + } + + public String getDepoCodeCl() { + return depoCodeCl; + } + + public void setDepoCodeCl(String value) { + this.depoCodeCl = value; + } + + public String getNameCl() { + return nameCl; + } + + public void setNameCl(String value) { + this.nameCl = value; + } + + public String getQuantity() { + return quantity; + } + + public void setQuantity(String value) { + this.quantity = value; + } + + public String getOperationCode() { + return operationCode; + } + + public void setOperationCode(String value) { + this.operationCode = value; + } + + public String getDepoCodeCorr() { + return depoCodeCorr; + } + + public void setDepoCodeCorr(String value) { + this.depoCodeCorr = value; + } + + public String getOperationDate() { + return operationDate; + } + + public void setOperationDate(String value) { + this.operationDate = value; + } + + public String getCloseBalance() { + return closeBalance; + } + + public void setCloseBalance(String value) { + this.closeBalance = value; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String value) { + this.fileName = value; + } + + public Instant getGenerationTime() { + return generationTime; + } + + public void setGenerationTime(Instant value) { + this.generationTime = value; + } + + public Long getGenerationId() { + return generationId; + } + + public void setGenerationId(Long value) { + this.generationId = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql index e9e05d69e..6828cd2ee 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DATA.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DATA.sql @@ -304,7 +304,7 @@ INSERT INTO REGISTRY_UNIT_DICTIONARY(ID, CODE, NAME) values (3, 'B', 'Забло INSERT INTO REGISTRY_UNIT_DICTIONARY(ID, CODE, NAME) values (4, 'C', 'Комиссия') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (1, 'AMAT', 'Денежные средства - на торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (1, 'AMAT', 'Денежные средства - общие') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (2, 'AMAF', 'Денежные средства - свободные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -326,7 +326,7 @@ INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (10, 'LMAT', 'Обя INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (11, 'CSAT', 'Требования по инструментам - свои') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; -INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (12, 'AMBT', 'Денежные средства клиента - на торги') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (12, 'AMBT', 'Денежные средства клиента - общие') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (13, 'AMBF', 'Денежные средства клиента - свободные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -352,6 +352,12 @@ INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (23, 'DMAT', 'Воз INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (24, 'DMBT', 'Возврат депозита по деньгам - клиента') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (25, 'ASAT', 'Ценные бумаги - общие') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (26, 'ASAF', 'Ценные бумаги - свободные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO REGISTRY_CODE_DICTIONARY(ID, CODE, NAME) values (27, 'ASAB', 'Ценные бумаги - блокированные') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (1, 'OK', 'Успешно') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO REGISTRY_STATUS_DICTIONARY(ID, CODE, NAME) values (2, 'UNCV', 'Не исполнено') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -614,6 +620,10 @@ INSERT INTO EVENT_TYPE_DICTIONARY(ID, CODE, NAME) values (2, 'UPDT', 'Обнов INSERT INTO EVENT_TYPE_DICTIONARY(ID, CODE, NAME) values (3, 'DELT', 'Удаление') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO PRIORITY_DICTIONARY(ID, CODE, NAME) values (1, 'HIGH', 'Высокий') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + +INSERT INTO PRIORITY_DICTIONARY(ID, CODE, NAME) values (2, 'LOW', 'Низкий') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1000, 'SECR', 'Общая ошибка модуля securities-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (1001, 'SECR', 'Нет прав на проведение данной операции.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; @@ -764,6 +774,8 @@ INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5018, 'ACNT', 'Для INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5019, 'ACNT', 'Для компании %s отсутствует категория %s.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; +INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5020, 'ACNT', 'Для компании %s отсутствует клиринговый код.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; + INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5200, 'BLNC', 'Общая ошибка модуля balance-service.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; INSERT INTO ERROR_CODE_DICTIONARY(ID, CODE, NAME) values (5210, 'BLNC', 'Клиринговая сессия неактивна.') ON CONFLICT (ID) DO UPDATE SET CODE = EXCLUDED.CODE, NAME = EXCLUDED.NAME; diff --git a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql index cedf98bcb..0b5065d92 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -1,4 +1,4 @@ --- DB version: 3.5.0.30 +-- DB version: 3.5.0.33 /* Dictionaries */ -- allowed - Справочник признаков допустимости использования объектов @@ -663,8 +663,28 @@ COMMENT ON COLUMN EVENT_TYPE_DICTIONARY.CODE IS 'Код'; COMMENT ON COLUMN EVENT_TYPE_DICTIONARY.NAME IS 'Тип события'; +-- priority - Справочник приоритетов отображения +DROP TABLE IF EXISTS PRIORITY_DICTIONARY; +CREATE TABLE PRIORITY_DICTIONARY(ID bigint PRIMARY KEY, CODE varchar(4), NAME varchar(50)); +COMMENT ON TABLE PRIORITY_DICTIONARY IS 'Справочник приоритетов отображения'; + +COMMENT ON COLUMN PRIORITY_DICTIONARY.ID IS 'Идентификатор'; + +COMMENT ON COLUMN PRIORITY_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN PRIORITY_DICTIONARY.NAME IS 'Приоритет отображения'; + /* Business objects */ +-- dbVersion - Версия базы данных +DROP TABLE IF EXISTS DB_VERSION; +CREATE TABLE DB_VERSION(ID bigint PRIMARY KEY, VERSION varchar(50)); +COMMENT ON TABLE DB_VERSION IS 'Версия базы данных'; + +COMMENT ON COLUMN DB_VERSION.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN DB_VERSION.VERSION IS 'Версия базы данных, привязанная к релизу'; + -- userCls - Пользователь DROP TABLE IF EXISTS USER_CLS; CREATE TABLE USER_CLS(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, IDENTIFIER varchar(250), NAME varchar(250), FIRST_NAME varchar(250), LAST_NAME varchar(250), MIDDLE_NAME varchar(250), EMAIL varchar(250)); @@ -1995,10 +2015,10 @@ COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.COMPANY_ID IS 'Идентификатор COMMENT ON COLUMN BANK_ACCOUNT_HISTORY.ID IS 'Идентификатор записи'; --- informationAccount - Регистры +-- informationAccount - Регистр КС DROP TABLE IF EXISTS INFORMATION_ACCOUNT; CREATE TABLE INFORMATION_ACCOUNT(ACCOUNT_ID bigint, CLEARING_ACCOUNT_ID bigint, COMPANY_ID bigint, ID bigint PRIMARY KEY); -COMMENT ON TABLE INFORMATION_ACCOUNT IS 'Регистры'; +COMMENT ON TABLE INFORMATION_ACCOUNT IS 'Регистр КС'; COMMENT ON COLUMN INFORMATION_ACCOUNT.ACCOUNT_ID IS 'Идентификатор информационного счета (linked to account)'; @@ -2009,7 +2029,7 @@ COMMENT ON COLUMN INFORMATION_ACCOUNT.COMPANY_ID IS 'Идентификатор COMMENT ON COLUMN INFORMATION_ACCOUNT.ID IS 'Идентификатор записи'; --- History log of informationAccount - Регистры +-- History log of informationAccount - Регистр КС DROP TABLE IF EXISTS INFORMATION_ACCOUNT_HISTORY; CREATE TABLE INFORMATION_ACCOUNT_HISTORY(INFORMATION_ACCOUNT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ACCOUNT_ID bigint, CLEARING_ACCOUNT_ID bigint, COMPANY_ID bigint, ID bigint PRIMARY KEY); COMMENT ON TABLE INFORMATION_ACCOUNT_HISTORY IS 'История изменений таблицы informationAccount'; @@ -2430,7 +2450,6 @@ COMMENT ON COLUMN EXECUTION_DEPOSIT.UPDATED_AT IS 'Дата-время изме COMMENT ON COLUMN EXECUTION_DEPOSIT.CLEARING_DATE IS 'Дата клиринга'; - -- History log of executionDeposit - Сделки DROP TABLE IF EXISTS EXECUTION_DEPOSIT_HISTORY; CREATE TABLE EXECUTION_DEPOSIT_HISTORY(EXECUTION_DEPOSIT_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), EXCHANGE_EXECUTION_ID bigint, EXCHANGE_EXECUTION_TIME timestamp, TRADING_DATE date, TRADING_CLEARING_REGISTRY_ID bigint, MARKET varchar(4), PRICE numeric(72,18), LOTS numeric(72,2), QUANTITY numeric(72,2), FIRST_LEG_AMOUNT numeric(72,2), SECOND_LEG_AMOUNT numeric(72,2), INTEREST_AMOUNT numeric(72,2), SIDE varchar(4), SETTLEMENT_CURRENCY varchar(4), COMPANY_ID bigint, DURATION bigint, FIRST_LEG_SETTLEMENT_DATE date, SECOND_LEG_SETTLEMENT_DATE date, FIRST_LEG_SETTLEMENT_CODE varchar(12), SECOND_LEG_SETTLEMENT_CODE varchar(12), SECURITY_FULL_NAME varchar(255), SECURITY_SYMBOL varchar(255), SECURITY_CODE varchar(255), SECURITY_ID bigint, CONTRACT varchar(255), COUNTER_PARTY_ID bigint, COVERAGE_STATUS varchar(4), SESSION_ID bigint, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date); @@ -3030,7 +3049,7 @@ COMMENT ON COLUMN PAYMENT_INSTRUCTION.SESSION_ID IS 'Идентификатор -- notification - Сообщения DROP TABLE IF EXISTS NOTIFICATION; -CREATE TABLE NOTIFICATION(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SENDER_ID bigint, ADDRESSEE_ID bigint, OBJECT_TYPE varchar(4), OBJECT_ID bigint, NOTIFICATION_STATUS varchar(4)); +CREATE TABLE NOTIFICATION(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SENDER_ID bigint, ADDRESSEE_ID bigint, OBJECT_TYPE varchar(4), OBJECT_ID bigint, NOTIFICATION_STATUS varchar(4), COMMENT varchar(255), PRIORITY varchar(4)); COMMENT ON TABLE NOTIFICATION IS 'Сообщения'; COMMENT ON COLUMN NOTIFICATION.ID IS 'Идентификатор записи'; @@ -3051,10 +3070,14 @@ COMMENT ON COLUMN NOTIFICATION.OBJECT_ID IS 'Идентификатор объе COMMENT ON COLUMN NOTIFICATION.NOTIFICATION_STATUS IS 'Код статуса сообщения (linked to notificationStatus)'; +COMMENT ON COLUMN NOTIFICATION.COMMENT IS 'Текст сообщения'; + +COMMENT ON COLUMN NOTIFICATION.PRIORITY IS 'Код приоритета отображения (linked to priority)'; + -- History log of notification - Сообщения DROP TABLE IF EXISTS NOTIFICATION_HISTORY; -CREATE TABLE NOTIFICATION_HISTORY(NOTIFICATION_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SENDER_ID bigint, ADDRESSEE_ID bigint, OBJECT_TYPE varchar(4), OBJECT_ID bigint, NOTIFICATION_STATUS varchar(4)); +CREATE TABLE NOTIFICATION_HISTORY(NOTIFICATION_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, EVENT_TYPE VARCHAR(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, SENDER_ID bigint, ADDRESSEE_ID bigint, OBJECT_TYPE varchar(4), OBJECT_ID bigint, NOTIFICATION_STATUS varchar(4), COMMENT varchar(255), PRIORITY varchar(4)); COMMENT ON TABLE NOTIFICATION_HISTORY IS 'История изменений таблицы notification'; COMMENT ON COLUMN NOTIFICATION_HISTORY.NOTIFICATION_ID IS 'Идентификатор записи в таблице NOTIFICATION'; COMMENT ON COLUMN NOTIFICATION_HISTORY.EVENT_TIME IS 'Дата и время изменения'; @@ -3079,6 +3102,10 @@ COMMENT ON COLUMN NOTIFICATION_HISTORY.OBJECT_ID IS 'Идентификатор COMMENT ON COLUMN NOTIFICATION_HISTORY.NOTIFICATION_STATUS IS 'Код статуса сообщения (linked to notificationStatus)'; +COMMENT ON COLUMN NOTIFICATION_HISTORY.COMMENT IS 'Текст сообщения'; + +COMMENT ON COLUMN NOTIFICATION_HISTORY.PRIORITY IS 'Код приоритета отображения (linked to priority)'; + -- verificationResult - Результаты сверки DROP TABLE IF EXISTS VERIFICATION_RESULT; CREATE TABLE VERIFICATION_RESULT(CLEARING_CODE varchar(255), ACCOUNT_ID bigint, IN_SUM numeric(72,2), OUT_INT_SUM numeric(72,2), OUT_EXT_SUM numeric(72,2), DIFF_SUM numeric(72,2), GENERATION_ID bigint, GENERATION_STATUS varchar(4), RESULT_STATUS varchar(4), ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp); @@ -3575,6 +3602,45 @@ COMMENT ON COLUMN S_DF20.GENERATION_TIME IS 'Дата и время создан COMMENT ON COLUMN S_DF20.GENERATION_ID IS 'Идентификатор взаимодействия'; +-- sDf21 - ДФ-21 Отчет об операциях +DROP TABLE IF EXISTS S_DF21; +CREATE TABLE S_DF21(ID bigint PRIMARY KEY, OUT_DOCUMENT varchar, IN_DOCUMENT varchar, SECURITY_CODE varchar, SECURITY_NAME varchar, SECURITY_TYPE varchar, OPEN_BALANCE varchar, DEPO_CODE_CL varchar, NAME_CL varchar, QUANTITY varchar, OPERATION_CODE varchar, DEPO_CODE_CORR varchar, OPERATION_DATE varchar, CLOSE_BALANCE varchar, FILE_NAME varchar, GENERATION_TIME timestamp, GENERATION_ID bigint); +COMMENT ON TABLE S_DF21 IS 'ДФ-21 Отчет об операциях'; + +COMMENT ON COLUMN S_DF21.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN S_DF21.OUT_DOCUMENT IS 'Уникальный исходящий номер сообщения'; + +COMMENT ON COLUMN S_DF21.IN_DOCUMENT IS 'Исходящий номер входящего сообщения'; + +COMMENT ON COLUMN S_DF21.SECURITY_CODE IS 'Код ценной бумаги'; + +COMMENT ON COLUMN S_DF21.SECURITY_NAME IS 'Наименование ценной бумаги'; + +COMMENT ON COLUMN S_DF21.SECURITY_TYPE IS 'Тип ценной бумаги'; + +COMMENT ON COLUMN S_DF21.OPEN_BALANCE IS 'Входящий остаток'; + +COMMENT ON COLUMN S_DF21.DEPO_CODE_CL IS 'Код раздела тех.счета/счета депо'; + +COMMENT ON COLUMN S_DF21.NAME_CL IS 'Наименование клиента'; + +COMMENT ON COLUMN S_DF21.QUANTITY IS 'Количество ценных бумаг'; + +COMMENT ON COLUMN S_DF21.OPERATION_CODE IS 'Код операции'; + +COMMENT ON COLUMN S_DF21.DEPO_CODE_CORR IS 'Код раздела субсчета/счета депо корреспондента'; + +COMMENT ON COLUMN S_DF21.OPERATION_DATE IS 'Дата операции'; + +COMMENT ON COLUMN S_DF21.CLOSE_BALANCE IS 'Исходящий остаток'; + +COMMENT ON COLUMN S_DF21.FILE_NAME IS 'Наименование входящего файла'; + +COMMENT ON COLUMN S_DF21.GENERATION_TIME IS 'Дата и время создания записи'; + +COMMENT ON COLUMN S_DF21.GENERATION_ID IS 'Идентификатор взаимодействия'; + -- sDf51 - ДФ-51 Запрос остатков по всем счетам DROP TABLE IF EXISTS S_DF51; CREATE TABLE S_DF51(ID bigint PRIMARY KEY, NUMBER varchar(10), DATETIME varchar(13), GENERATION_TIME timestamp, GENERATION_ID bigint); diff --git a/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/PriorityDictionary.java b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/PriorityDictionary.java new file mode 100644 index 000000000..310a27da3 --- /dev/null +++ b/clearing-parent/dictionary/src/main/java/ru/clearing/platform/dictionary/PriorityDictionary.java @@ -0,0 +1,11 @@ +package ru.clearing.platform.dictionary; +/** + * Справочник приоритетов отображения + * + * Dictionary DB table: PRIORITY_DICTIONARY + **/ +public class PriorityDictionary extends AbstractDictionary { + private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID; + + +} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/NotificationHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/NotificationHistoryMapStore.java index a70332a61..f974d726f 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/NotificationHistoryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/NotificationHistoryMapStore.java @@ -28,7 +28,7 @@ public class NotificationHistoryMapStore extends TemplateEventMapStore { + + public PriorityDictionaryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_PriorityDictionary; + } + + @Override + public String getTableName() { + return "PRIORITY_DICTIONARY"; + } + + @Override + public PriorityDictionary getDictionaryObject() { + return new PriorityDictionary(); + } + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/NotificationMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/NotificationMapStore.java index ffbd7f8f0..2826683e7 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/NotificationMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/NotificationMapStore.java @@ -30,7 +30,7 @@ public class NotificationMapStore extends TemplateMapStore { @Override public String[] getFields() { return new String[]{ - "ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "SENDER_ID", "ADDRESSEE_ID", "OBJECT_TYPE", "OBJECT_ID", "NOTIFICATION_STATUS" + "ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "SENDER_ID", "ADDRESSEE_ID", "OBJECT_TYPE", "OBJECT_ID", "NOTIFICATION_STATUS", "COMMENT", "PRIORITY" }; } @@ -46,6 +46,8 @@ public class NotificationMapStore extends TemplateMapStore { object.setObjectType(resultSet.getObject("OBJECT_TYPE", String.class)); object.setObjectId(resultSet.getObject("OBJECT_ID", Long.class)); object.setNotificationStatus(resultSet.getObject("NOTIFICATION_STATUS", String.class)); + object.setComment(resultSet.getObject("COMMENT", String.class)); + object.setPriority(resultSet.getObject("PRIORITY", String.class)); return object; } @@ -60,7 +62,9 @@ public class NotificationMapStore extends TemplateMapStore { object.getAddresseeId(), object.getObjectType(), object.getObjectId(), - object.getNotificationStatus() + object.getNotificationStatus(), + object.getComment(), + object.getPriority() }; return args; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf21MapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf21MapStore.java new file mode 100644 index 000000000..aed684cf6 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/SDf21MapStore.java @@ -0,0 +1,85 @@ +package ru.spcex.clearing.imdg.object; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.clearing.classes.statics.data.sdf.SDf21; +import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.platform.utils.time.TimeUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +@Component +public class SDf21MapStore extends TemplateMapStore { + + public SDf21MapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_SDf21; + } + + @Override + public String getTableName() { + return "S_DF21"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "OUT_DOCUMENT", "IN_DOCUMENT", "SECURITY_CODE", "SECURITY_NAME", "SECURITY_TYPE", "OPEN_BALANCE", "DEPO_CODE_CL", "NAME_CL", "QUANTITY", "OPERATION_CODE", "DEPO_CODE_CORR", "OPERATION_DATE", "CLOSE_BALANCE", "FILE_NAME", "GENERATION_TIME", "GENERATION_ID" + }; + } + + @Override + public SDf21 objectReader(ResultSet resultSet) throws SQLException { + SDf21 object = new SDf21(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setOutDocument(resultSet.getObject("OUT_DOCUMENT", String.class)); + object.setInDocument(resultSet.getObject("IN_DOCUMENT", String.class)); + object.setSecurityCode(resultSet.getObject("SECURITY_CODE", String.class)); + object.setSecurityName(resultSet.getObject("SECURITY_NAME", String.class)); + object.setSecurityType(resultSet.getObject("SECURITY_TYPE", String.class)); + object.setOpenBalance(resultSet.getObject("OPEN_BALANCE", String.class)); + object.setDepoCodeCl(resultSet.getObject("DEPO_CODE_CL", String.class)); + object.setNameCl(resultSet.getObject("NAME_CL", String.class)); + object.setQuantity(resultSet.getObject("QUANTITY", String.class)); + object.setOperationCode(resultSet.getObject("OPERATION_CODE", String.class)); + object.setDepoCodeCorr(resultSet.getObject("DEPO_CODE_CORR", String.class)); + object.setOperationDate(resultSet.getObject("OPERATION_DATE", String.class)); + object.setCloseBalance(resultSet.getObject("CLOSE_BALANCE", String.class)); + object.setFileName(resultSet.getObject("FILE_NAME", String.class)); + object.setGenerationTime(getInstantFromTimestamp(resultSet, "GENERATION_TIME")); + object.setGenerationId(resultSet.getObject("GENERATION_ID", Long.class)); + return object; + } + + @Override + public Object[] objectToField(SDf21 object) { + Object[] args = new Object[]{ + object.getId(), + object.getOutDocument(), + object.getInDocument(), + object.getSecurityCode(), + object.getSecurityName(), + object.getSecurityType(), + object.getOpenBalance(), + object.getDepoCodeCl(), + object.getNameCl(), + object.getQuantity(), + object.getOperationCode(), + object.getDepoCodeCorr(), + object.getOperationDate(), + object.getCloseBalance(), + object.getFileName(), + TimeUtil.toDateFromInstant(object.getGenerationTime()), + object.getGenerationId() + }; + return args; + } + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java index 5f02f1d24..4aabadced 100644 --- a/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java +++ b/clearing-parent/imdg/src/test/java/ru/spcex/clearing/imdg/structure/RunnableMapNamesForTesting.java @@ -219,6 +219,7 @@ public class RunnableMapNamesForTesting { checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_ObjectTypeDictionary, ObjectTypeDictionary.class)); checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_ParentDictionary, ParentDictionary.class)); checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_ResultStatusDictionary, ResultStatusDictionary.class)); + checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_PriorityDictionary, PriorityDictionary.class)); checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_SessionStatusDictionary, SessionStatusDictionary.class)); checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_SessionTypeDictionary, SessionTypeDictionary.class)); checkerDictionaryMapStores.add(new CheckerDictionaryMapStore<>(IMDGDistributedNames.Map_ServiceDictionary, ServiceDictionary.class)); @@ -341,6 +342,7 @@ public class RunnableMapNamesForTesting { checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_SDf13, SDf13.class)); checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_SDf14, SDf14.class)); checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_SDf20, SDf20.class)); + checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_SDf21, SDf21.class)); checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_Session, Session.class)); checkerBusinessMapStores.add(new CheckerBusinessMapStore<>(IMDGDistributedNames.Map_STrades, STrades.class, new SettingOperation("setQty", new Class[]{BigDecimal.class}, new Object[]{generatingRandomBigDecimal(2)}), diff --git a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java index a552a7d0a..d4fd82a6b 100644 --- a/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java +++ b/platform-parent/platform-imdg-api/src/main/java/ru/spcex/clearing/imdg/IMDGDistributedNames.java @@ -67,6 +67,7 @@ public final class IMDGDistributedNames { @Deprecated public static final String Map_SDf18 = "Map_SDf18"; public static final String Map_SDf20 = "Map_SDf20"; + public static final String Map_SDf21 = "Map_SDf21"; public static final String Map_SDf51 = "Map_sDf51"; public static final String Map_SDf52 = "Map_sDf52"; public static final String Map_SDf53 = "Map_sDf53"; @@ -191,6 +192,7 @@ public final class IMDGDistributedNames { public static final String Map_SessionTypeDictionary = "Map_SessionTypeDictionary"; public static final String Map_ExecutionFond = "Map_ExecutionFond"; public static final String Map_ExecutionFondHistory = "Map_ExecutionFondHistory"; + public static final String Map_PriorityDictionary = "Map_PriorityDictionary"; public static final String MAP_SEQUENCE_NAME = "MAP_SEQUENCE_NAME";