This commit is contained in:
parent
313ff28cbd
commit
2a81e33b78
2 changed files with 148 additions and 11 deletions
|
|
@ -18,22 +18,22 @@ public abstract class TemplateEventMapStore<T extends BusinessEvent<? extends Sp
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final Iterable<Long> loadAllKeys() {
|
public Iterable<Long> loadAllKeys() {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final T load(Long id) {
|
public T load(Long id) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final Collection<T> load(Collection<Long> keys) {
|
public Collection<T> load(Collection<Long> keys) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final Map<Long, T> loadAll(Collection<Long> keys) {
|
public Map<Long, T> loadAll(Collection<Long> keys) {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.spcex.clearing.imdg.businessevent;
|
package ru.spcex.clearing.imdg.businessevent;
|
||||||
|
|
||||||
|
import org.springframework.dao.support.DataAccessUtils;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import ru.clearing.classes.statics.data.registry.Registry;
|
import ru.clearing.classes.statics.data.registry.Registry;
|
||||||
|
|
@ -8,6 +9,11 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
|
||||||
import ru.spcex.platform.utils.time.TimeUtil;
|
import ru.spcex.platform.utils.time.TimeUtil;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHistory> {
|
public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHistory> {
|
||||||
|
|
||||||
|
|
@ -15,23 +21,154 @@ public class RegistryHistoryMapStore extends TemplateEventMapStore<RegistryHisto
|
||||||
super(jdbcTemplate);
|
super(jdbcTemplate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMapName() {
|
|
||||||
return IMDGDistributedNames.Map_RegistryHistory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTableName() {
|
public String getTableName() {
|
||||||
return "REGISTRY_HISTORY";
|
return "REGISTRY_HISTORY";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getMapName() {
|
||||||
|
return IMDGDistributedNames.Map_RegistryHistory;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String[] getFields() {
|
public String[] getFields() {
|
||||||
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE",
|
return new String[]{
|
||||||
"REGISTRY_ID", "CREATED_AT", "UPDATED_AT", "COMPANY_ID", "TRADING_CODE", "CLEARING_CODE", "SHORT_NAME", "FULL_NAME", "ACCOUNT_ID", "ACCOUNT_TYPE", "ACCOUNT", "REGISTRY_DESIGNATION", "REGISTRY_INSTRUMENT_TYPE", "REGISTRY_CAPACITY", "REGISTRY_UNIT", "REGISTRY_CODE", "TRADING_CLEARING_REGISTRY_ID", "TRADING_CLEARING_REGISTRY", "REGISTRY_STATUS", "SECURITY_ID", "SECURITY_SYMBOL", "BALANCE", "OPEN_BALANCE", "CLOSE_BALANCE", "CREDIT", "DEBIT", "SETTLED_CREDIT", "SETTLED_DEBIT", "CHECK_BALANCE", "DIFF_BALANCE", "PLAN_BALANCE", "BALANCE_DIMENSION", "SETTLEMENT_DATE", "SETTLEMENT_CODE", "TRADING_DATE", "CLEARING_DATE", "REFUND_DATE", "VALUE_DATE", "PRICE", "CONTRACT", "COUNTER_PARTY_ID", "COMMENT", "PARENT_ID", "GROUP_ID", "SESSION_ID", "SESSION_TYPE", "PAYMENT_ID"
|
"ID", "EVENT_TIME", "EVENT_USER_ID", "EVENT_TYPE", "REGISTRY_ID", "CREATED_AT", "UPDATED_AT",
|
||||||
|
"COMPANY_ID", "TRADING_CODE", "CLEARING_CODE", "SHORT_NAME", "FULL_NAME", "ACCOUNT_ID",
|
||||||
|
"ACCOUNT_TYPE", "ACCOUNT", "REGISTRY_DESIGNATION", "REGISTRY_INSTRUMENT_TYPE", "REGISTRY_CAPACITY",
|
||||||
|
"REGISTRY_UNIT", "REGISTRY_CODE", "TRADING_CLEARING_REGISTRY_ID", "TRADING_CLEARING_REGISTRY",
|
||||||
|
"REGISTRY_STATUS", "SECURITY_ID", "SECURITY_SYMBOL", "BALANCE", "OPEN_BALANCE", "CLOSE_BALANCE",
|
||||||
|
"CREDIT", "DEBIT", "SETTLED_CREDIT", "SETTLED_DEBIT", "CHECK_BALANCE", "DIFF_BALANCE", "PLAN_BALANCE",
|
||||||
|
"BALANCE_DIMENSION", "SETTLEMENT_DATE", "SETTLEMENT_CODE", "TRADING_DATE", "CLEARING_DATE", "REFUND_DATE",
|
||||||
|
"VALUE_DATE", "PRICE", "CONTRACT", "COUNTER_PARTY_ID", "COMMENT", "PARENT_ID", "GROUP_ID", "SESSION_ID",
|
||||||
|
"SESSION_TYPE", "PAYMENT_ID"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<Long> loadAllKeys() {
|
||||||
|
return defaultLoadAllKeysOnTodayByField("EVENT_TIME", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RegistryHistory load(Long id) {
|
||||||
|
if (!isLoadable(id)) return null;
|
||||||
|
Collection<RegistryHistory> rows;
|
||||||
|
List<Long> list = Collections.singletonList(id);
|
||||||
|
try {
|
||||||
|
rows = load(list);
|
||||||
|
} catch (Throwable e) { // one retry
|
||||||
|
rows = load(list);
|
||||||
|
}
|
||||||
|
RegistryHistory obj = DataAccessUtils.singleResult(rows);
|
||||||
|
if (obj != null && isLoadable(obj))
|
||||||
|
return obj;
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Long, RegistryHistory> loadAll(Collection<Long> keys) {
|
||||||
|
log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys");
|
||||||
|
Map<Long, RegistryHistory> result = new HashMap<>();
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// загрузить данные по ключам частями, чтобы не выйти за ограничения базы по кол-ву элементов в in clause
|
||||||
|
List<Long> keysSubList = new ArrayList<>(MAX_IN_CLAUSE_SIZE);
|
||||||
|
for (Iterator<Long> iterator = keys.iterator(); iterator.hasNext(); ) {
|
||||||
|
Long key = iterator.next();
|
||||||
|
keysSubList.add(key);
|
||||||
|
if (keysSubList.size() == MAX_IN_CLAUSE_SIZE || !iterator.hasNext()) {
|
||||||
|
Collection<RegistryHistory> rows = load(keysSubList);
|
||||||
|
for (RegistryHistory row : rows) {
|
||||||
|
result.put(row.getId(), row);
|
||||||
|
}
|
||||||
|
keysSubList.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("loadAll from " + getTableName() + " " + keys.size() + " keys done in " + (System.currentTimeMillis() - start) + "ms");
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<RegistryHistory> load(Collection<Long> keys) {
|
||||||
|
Map<String, Collection<Long>> paramMap = Collections.singletonMap("ids", keys);
|
||||||
|
return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap,
|
||||||
|
(resultSet, i) -> objectReader(resultSet));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected RegistryHistory objectReader(ResultSet resultSet) throws SQLException {
|
||||||
|
RegistryHistory registryHistory = new RegistryHistory();
|
||||||
|
Registry object = new Registry();
|
||||||
|
|
||||||
|
registryHistory.setId(resultSet.getObject("ID", Long.class));
|
||||||
|
registryHistory.setEventTime(getInstantFromTimestamp(resultSet, "EVENT_TIME"));
|
||||||
|
registryHistory.setUserId(resultSet.getObject("EVENT_USER_ID", Long.class));
|
||||||
|
registryHistory.setEventType(resultSet.getObject("EVENT_TYPE", String.class));
|
||||||
|
|
||||||
|
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
|
||||||
|
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
|
||||||
|
|
||||||
|
object.setId(resultSet.getObject("REGISTRY_ID", Long.class));
|
||||||
|
object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
|
||||||
|
object.setTradingCode(resultSet.getObject("TRADING_CODE", String.class));
|
||||||
|
object.setClearingCode(resultSet.getObject("CLEARING_CODE", String.class));
|
||||||
|
object.setShortName(resultSet.getObject("SHORT_NAME", String.class));
|
||||||
|
object.setFullName(resultSet.getObject("FULL_NAME", String.class));
|
||||||
|
object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class));
|
||||||
|
|
||||||
|
object.setAccountType(resultSet.getObject("ACCOUNT_TYPE", String.class));
|
||||||
|
object.setAccount(resultSet.getObject("ACCOUNT", String.class));
|
||||||
|
object.setRegistryDesignation(resultSet.getObject("REGISTRY_DESIGNATION", String.class));
|
||||||
|
object.setRegistryInstrumentType(resultSet.getObject("REGISTRY_INSTRUMENT_TYPE", String.class));
|
||||||
|
object.setRegistryCapacity(resultSet.getObject("REGISTRY_CAPACITY", String.class));
|
||||||
|
|
||||||
|
object.setRegistryUnit(resultSet.getObject("REGISTRY_UNIT", String.class));
|
||||||
|
object.setRegistryCode(resultSet.getObject("REGISTRY_CODE", String.class));
|
||||||
|
object.setTradingClearingRegistryId(resultSet.getObject("TRADING_CLEARING_REGISTRY_ID", Long.class));
|
||||||
|
object.setTradingClearingRegistry(resultSet.getObject("TRADING_CLEARING_REGISTRY", String.class));
|
||||||
|
|
||||||
|
object.setRegistryStatus(resultSet.getObject("REGISTRY_STATUS", String.class));
|
||||||
|
object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
|
||||||
|
object.setSecuritySymbol(resultSet.getObject("SECURITY_SYMBOL", String.class));
|
||||||
|
object.setBalance(resultSet.getObject("BALANCE", BigDecimal.class));
|
||||||
|
object.setOpenBalance(resultSet.getObject("OPEN_BALANCE", BigDecimal.class));
|
||||||
|
object.setCloseBalance(resultSet.getObject("CLOSE_BALANCE", BigDecimal.class));
|
||||||
|
|
||||||
|
object.setCredit(resultSet.getObject("CREDIT", BigDecimal.class));
|
||||||
|
object.setDebit(resultSet.getObject("DEBIT", BigDecimal.class));
|
||||||
|
object.setSettledCredit(resultSet.getObject("SETTLED_CREDIT", BigDecimal.class));
|
||||||
|
object.setSettledDebit(resultSet.getObject("SETTLED_DEBIT", BigDecimal.class));
|
||||||
|
object.setCheckBalance(resultSet.getObject("CHECK_BALANCE", BigDecimal.class));
|
||||||
|
object.setDiffBalance(resultSet.getObject("DIFF_BALANCE", BigDecimal.class));
|
||||||
|
object.setPlanBalance(resultSet.getObject("PLAN_BALANCE", BigDecimal.class));
|
||||||
|
|
||||||
|
object.setBalanceDimension(resultSet.getObject("BALANCE_DIMENSION", String.class));
|
||||||
|
object.setSettlementDate(getLocalDateFromSqlDate(resultSet, "SETTLEMENT_DATE"));
|
||||||
|
object.setSettlementCode(resultSet.getObject("SETTLEMENT_CODE", String.class));
|
||||||
|
object.setTradingDate(getLocalDateFromSqlDate(resultSet, "TRADING_DATE"));
|
||||||
|
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
|
||||||
|
object.setRefundDate(getLocalDateFromSqlDate(resultSet, "REFUND_DATE"));
|
||||||
|
|
||||||
|
object.setValueDate(getLocalDateFromSqlDate(resultSet, "VALUE_DATE"));
|
||||||
|
object.setPrice(resultSet.getObject("PRICE", BigDecimal.class));
|
||||||
|
object.setContract(resultSet.getObject("CONTRACT", String.class));
|
||||||
|
object.setCounterPartyId(resultSet.getObject("COUNTER_PARTY_ID", Long.class));
|
||||||
|
object.setComment(resultSet.getObject("COMMENT", String.class));
|
||||||
|
object.setParentId(resultSet.getObject("PARENT_ID", Long.class));
|
||||||
|
object.setGroupId(resultSet.getObject("GROUP_ID", Long.class));
|
||||||
|
object.setSessionId(resultSet.getObject("SESSION_ID", Long.class));
|
||||||
|
|
||||||
|
object.setSessionType(resultSet.getObject("SESSION_TYPE", String.class));
|
||||||
|
object.setPaymentId(resultSet.getObject("PAYMENT_ID", Long.class));
|
||||||
|
|
||||||
|
registryHistory.setObject(object);
|
||||||
|
return registryHistory;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object[] objectToField(RegistryHistory historyLog) {
|
public Object[] objectToField(RegistryHistory historyLog) {
|
||||||
Registry object = historyLog.getObject();
|
Registry object = historyLog.getObject();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue