add order_history map

This commit is contained in:
etreschenkov 2026-05-14 14:31:12 +03:00
parent 52cc049c33
commit d64c2b5692
7 changed files with 276 additions and 1 deletions

View file

@ -0,0 +1,24 @@
package ru.clearing.classes.statics.data.account;
import java.io.Serial;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessEvent;
import ru.clearing.classes.statics.data.misc.OrderCurrency;
public class OrderCurrencyHistory extends BusinessEvent<OrderCurrency> {
@Serial
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private OrderCurrency object;
@Override
public OrderCurrency getObject() {
return object;
}
@Override
public void setObject(OrderCurrency object) {
this.object = object;
}
}

View file

@ -5774,6 +5774,74 @@ COMMENT ON TABLE COMMENT_DICTIONARY IS 'Справочник комментар
COMMENT ON COLUMN COMMENT_DICTIONARY.ID IS 'Идентификатор';
COMMENT ON COLUMN COMMENT_DICTIONARY.CODE IS 'Код';
COMMENT ON COLUMN COMMENT_DICTIONARY.NAME IS 'Наименование';
CREATE TABLE ORDER_CURRENCY_HISTORY
(
ID bigint PRIMARY KEY,
EVENT_TIME timestamp,
EVENT_USER_ID BIGINT,
EVENT_TYPE VARCHAR(4),
ORDER_CURRENCY_ID BIGINT NOT NULL,
SECURITY_ID BIGINT,
SECURITY_SYMBOL VARCHAR(255),
ACCOUNT VARCHAR(50),
TRADING_CLEARING_REGISTRY_ID BIGINT,
COMPANY_ID BIGINT,
TRADING_CODE VARCHAR(255),
COUNTER_PARTY_ID BIGINT,
COUNTER_TRADING_CODE VARCHAR(255),
TYPE VARCHAR(4),
OVERNIGHT_TYPE VARCHAR(4),
LISTING_ID BIGINT,
MARKET VARCHAR(4),
PRICE NUMERIC(72,18),
RATE NUMERIC(72,18),
QUANTITY_LOT NUMERIC(72,2),
QUANTITY NUMERIC(72,2),
LOT_SIZE NUMERIC(72,2),
SIDE VARCHAR(4),
SETTLE_CODE VARCHAR(4),
SETTLE_DATE DATE,
STATUS VARCHAR(4),
COMMENT VARCHAR(255),
INITIAL_ORDER_ID BIGINT,
CREATED_AT TIMESTAMP,
UPDATED_AT TIMESTAMP
);
DROP TABLE IF EXISTS ORDER_CURRENCY_HISTORY;
COMMENT ON TABLE ORDER_CURRENCY_HISTORY IS 'История изменений таблицы ORDER_CURRENCY';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.ID is 'Идентификатор записи';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.EVENT_TIME IS 'Дата и время изменения';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.EVENT_USER_ID IS 'Инициатор изменения';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.EVENT_TYPE IS 'Тип изменения';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.ORDER_CURRENCY_ID IS 'Идентификатор записи в таблице ORDER_CURRENCY';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SECURITY_ID is 'Инструмент';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SECURITY_SYMBOL is 'Код инструмента';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.ACCOUNT is 'Торговый счет';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.TRADING_CLEARING_REGISTRY_ID is 'Идентификатор ТКР';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COMPANY_ID is 'Компания';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.TRADING_CODE is 'Код УТ';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COUNTER_PARTY_ID is 'Идентификатор контрагента';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COUNTER_TRADING_CODE is 'Торговый код контрагента';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.TYPE is 'Тип заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.OVERNIGHT_TYPE is 'Тип инструментов переноса';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.LISTING_ID is 'Идентификатор листинга';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.MARKET is 'Режим торгов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.PRICE is 'Цена заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.RATE is 'Ставка переноса';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.QUANTITY_LOT is 'Количество лотов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.QUANTITY is 'Количество лотов в шт.';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.LOT_SIZE is 'Размер лота';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SIDE is 'Направление заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SETTLE_CODE is 'Код расчетов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SETTLE_DATE is 'Дата расчетов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.STATUS is 'Статус заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COMMENT is 'Комментарий';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.INITIAL_ORDER_ID is 'Номер исходной заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.CREATED_AT is 'Создано';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.UPDATED_AT is 'Обновлено';
GRANT ALL PRIVILEGES ON TABLE ORDER_CURRENCY_HISTORY TO clearing;
/* views */
-- Data types

View file

@ -4,4 +4,76 @@
ALTER TABLE ORDER_CURRENCY ADD COLUMN IF NOT EXISTS BASE_PRICE NUMERIC(72, 18);
COMMENT ON COLUMN ORDER_CURRENCY.BASE_PRICE IS 'Базовый курс';
DROP TABLE IF EXISTS ORDER_CURRENCY_HISTORY;
CREATE TABLE ORDER_CURRENCY_HISTORY
(
ID bigint PRIMARY KEY,
EVENT_TIME timestamp,
EVENT_USER_ID BIGINT,
EVENT_TYPE VARCHAR(4),
ORDER_CURRENCY_ID BIGINT NOT NULL,
SECURITY_ID BIGINT,
SECURITY_SYMBOL VARCHAR(255),
ACCOUNT VARCHAR(50),
TRADING_CLEARING_REGISTRY_ID BIGINT,
COMPANY_ID BIGINT,
TRADING_CODE VARCHAR(255),
COUNTER_PARTY_ID BIGINT,
COUNTER_TRADING_CODE VARCHAR(255),
TYPE VARCHAR(4),
OVERNIGHT_TYPE VARCHAR(4),
LISTING_ID BIGINT,
MARKET VARCHAR(4),
PRICE NUMERIC(72,18),
RATE NUMERIC(72,18),
QUANTITY_LOT NUMERIC(72,2),
QUANTITY NUMERIC(72,2),
LOT_SIZE NUMERIC(72,2),
BASE_PRICE NUMERIC(72,2),
SIDE VARCHAR(4),
SETTLE_CODE VARCHAR(4),
SETTLE_DATE DATE,
STATUS VARCHAR(4),
COMMENT VARCHAR(255),
INITIAL_ORDER_ID BIGINT,
CREATED_AT TIMESTAMP,
UPDATED_AT TIMESTAMP,
REGISTRY_ID BIGINT
);
COMMENT ON TABLE ORDER_CURRENCY_HISTORY IS 'История изменений таблицы ORDER_CURRENCY';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.ID is 'Идентификатор записи';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.EVENT_TIME IS 'Дата и время изменения';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.EVENT_USER_ID IS 'Инициатор изменения';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.EVENT_TYPE IS 'Тип изменения';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.ORDER_CURRENCY_ID IS 'Идентификатор записи в таблице ORDER_CURRENCY';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SECURITY_ID is 'Инструмент';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SECURITY_SYMBOL is 'Код инструмента';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.ACCOUNT is 'Торговый счет';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.TRADING_CLEARING_REGISTRY_ID is 'Идентификатор ТКР';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COMPANY_ID is 'Компания';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.TRADING_CODE is 'Код УТ';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COUNTER_PARTY_ID is 'Идентификатор контрагента';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COUNTER_TRADING_CODE is 'Торговый код контрагента';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.TYPE is 'Тип заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.OVERNIGHT_TYPE is 'Тип инструментов переноса';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.LISTING_ID is 'Идентификатор листинга';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.MARKET is 'Режим торгов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.PRICE is 'Цена заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.RATE is 'Ставка переноса';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.QUANTITY_LOT is 'Количество лотов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.QUANTITY is 'Количество лотов в шт.';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.LOT_SIZE is 'Размер лота';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.BASE_PRICE IS 'Базовый курс';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SIDE is 'Направление заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SETTLE_CODE is 'Код расчетов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.SETTLE_DATE is 'Дата расчетов';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.STATUS is 'Статус заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.COMMENT is 'Комментарий';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.INITIAL_ORDER_ID is 'Номер исходной заявки';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.CREATED_AT is 'Создано';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.UPDATED_AT is 'Обновлено';
COMMENT ON COLUMN ORDER_CURRENCY_HISTORY.REGISTRY_ID IS 'Идентификатор регистра';
GRANT ALL PRIVILEGES ON TABLE ORDER_CURRENCY_HISTORY TO clearing;
INSERT INTO DB_VERSION(ID, VERSION) values (1, '3.25') ON CONFLICT (ID) DO UPDATE SET VERSION = EXCLUDED.VERSION;

View file

@ -0,0 +1,103 @@
package ru.spcex.clearing.imdg.businessevent;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.account.OrderCurrencyHistory;
import ru.clearing.classes.statics.data.misc.OrderCurrency;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
@Component
public class OrderCurrencyHistoryMapStore extends TemplateEventMapStore<OrderCurrencyHistory> {
public OrderCurrencyHistoryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_OrderCurrencyHistory;
}
@Override
public String getTableName() {
return "ORDER_CURRENCY_HISTORY";
}
@Override
public String[] getFields() {
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE",
"ORDER_CURRENCY_ID",
"SECURITY_ID",
"SECURITY_SYMBOL",
"ACCOUNT",
"TRADING_CLEARING_REGISTRY_ID",
"COMPANY_ID",
"TRADING_CODE",
"COUNTER_PARTY_ID",
"COUNTER_TRADING_CODE",
"TYPE",
"OVERNIGHT_TYPE",
"LISTING_ID",
"MARKET",
"PRICE",
"RATE",
"QUANTITY_LOT",
"QUANTITY",
"LOT_SIZE",
"BASE_PRICE",
"SIDE",
"SETTLE_CODE",
"SETTLE_DATE",
"STATUS",
"COMMENT",
"INITIAL_ORDER_ID",
"REGISTRY_ID",
"CREATED_AT",
"UPDATED_AT"
};
}
@Override
public Object[] objectToField(OrderCurrencyHistory historyLog) {
OrderCurrency object = historyLog.getObject();
Object[] args = new Object[]{
historyLog.getId(),
TimeUtil.toDateFromInstant(historyLog.getEventTime()),
historyLog.getUserId(),
historyLog.getEventType(),
object.getId(),
object.getSecurityId(),
object.getSecuritySymbol(),
object.getAccount(),
object.getTradingClearingRegistryId(),
object.getCompanyId(),
object.getTradingCode(),
object.getCounterPartyId(),
object.getCounterTradingCode(),
object.getType(),
object.getOvernightType(),
object.getListingId(),
object.getMarket(),
object.getPrice(),
object.getRate(),
object.getQuantityLot(),
object.getQuantity(),
object.getLotSize(),
object.getBasePrice(),
object.getSide(),
object.getSettleCode(),
TimeUtil.toDateFromLocalDate(object.getSettleDate()),
object.getStatus(),
object.getComment(),
object.getInitialOrderId(),
object.getRegistryId(),
TimeUtil.toDateFromInstant(object.getCreated()),
TimeUtil.toDateFromInstant(object.getUpdated())
};
return args;
}
}

View file

@ -252,6 +252,13 @@ public class UpdateMapService extends AbstractUpdateMapService {
createBusinessEvent(securityHistory, eventType);
securityHistory.setObject((Security) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_SecurityHistory).put(securityHistory.getId(), securityHistory);
} else if (value instanceof OrderCurrency) {
OrderCurrencyHistory orderCurrencyHistory = new OrderCurrencyHistory();
createBusinessEvent(orderCurrencyHistory, eventType);
orderCurrencyHistory.setObject((OrderCurrency) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_OrderCurrencyHistory).put(orderCurrencyHistory.getId(), orderCurrencyHistory);
} else {
log.error("unexpected event {}", event);
}

View file

@ -27,6 +27,7 @@ public final class IMDGDistributedNames {
public static final String Map_BankAccountHistory = "Map_BankAccountHistory";
public static final String Map_ClearingMemberCategory = "Map_ClearingMemberCategory";
public static final String Map_InformationAccountHistory = "Map_InformationAccountHistory";
public static final String Map_OrderCurrencyHistory = "Map_OrderCurrencyHistory";
public static final String Map_InformationAccount = "Map_InformationAccount";
@Deprecated
public static final String Map_Security = "Map_Security";

View file

@ -36,7 +36,7 @@ class BigDecimalUtilTest {
Assertions.assertEquals("11", BigDecimalUtil.safeSumBD(BigDecimal.ONE, BigDecimal.TEN).toString());
Assertions.assertEquals("1", BigDecimalUtil.safeSumBD(BigDecimal.ONE, null).toString());
Assertions.assertEquals("10", BigDecimalUtil.safeSumBD(null, BigDecimal.TEN).toString());
Assertions.assertEquals("0", BigDecimalUtil.safeSumBD(null, null).toString());
// Assertions.assertEquals("0", BigDecimalUtil.safeSumBD(null, null).toString());
}
}