diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java index c657efe39..d7f4fab4f 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendGetAll.java @@ -55,7 +55,6 @@ public class CompanyBackendGetAll extends BasicSpcexResponse { CompanyInfo profile = company.getProfile(); companyInfoFields.setId(profile.getId()); companyInfoFields.setCompanyId(profile.getCompanyId()); - companyInfoFields.setClearingMemberCategory(profile.getClearingMemberCategory()); companyInfoFields.setCorporationSoleType(profile.getCorporationSoleType()); companyInfoFields.setCountryCode(profile.getCountryCode()); companyInfoFields.setDescription(profile.getDescription()); diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendInfoGetAll.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendInfoGetAll.java index ddb1692a7..effd0af08 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendInfoGetAll.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/response/entity/company/CompanyBackendInfoGetAll.java @@ -43,7 +43,6 @@ public class CompanyBackendInfoGetAll extends BasicSpcexResponse { var singleItem = new CompanyBackendInfoGetFields(); singleItem.setId(companyInfo.getId()); singleItem.setCompanyId(companyInfo.getCompanyId()); - singleItem.setClearingMemberCategory(companyInfo.getClearingMemberCategory()); singleItem.setCorporationSoleType(companyInfo.getCorporationSoleType()); singleItem.setCountryCode(companyInfo.getCountryCode()); singleItem.setDescription(companyInfo.getDescription()); diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalance.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalance.java new file mode 100644 index 000000000..ad7611ace --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalance.java @@ -0,0 +1,187 @@ +package ru.clearing.classes.statics.data.account; + +import ru.clearing.classes.ConstSerializable; +import ru.clearing.classes.objects.BusinessObject; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * Счета + *

+ * DB table: ACCOUNT_BALANCE + **/ +public class AccountBalance extends BusinessObject { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + private Long companyId; + private Long accountId; + private Long accountType; + private String account; + private BigDecimal openBalanceAmount; + private BigDecimal startBalanceAmount; + private BigDecimal closeBalanceAmount; + private BigDecimal tradeBalanceAmount; + private BigDecimal freeBalanceAmount; + private BigDecimal changeBalanceAmount; + private BigDecimal creditAmount; + private BigDecimal debitAmount; + private BigDecimal balanceAmount; + private String balanceAccountType; + private LocalDate clearingDate; + private String currencyCode; + private String tradingCode; + private String shortName; + private String fullName; + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long companyId) { + this.companyId = companyId; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public Long getAccountType() { + return accountType; + } + + public void setAccountType(Long accountType) { + this.accountType = accountType; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public BigDecimal getOpenBalanceAmount() { + return openBalanceAmount; + } + + public void setOpenBalanceAmount(BigDecimal openBalanceAmount) { + this.openBalanceAmount = openBalanceAmount; + } + + public BigDecimal getStartBalanceAmount() { + return startBalanceAmount; + } + + public void setStartBalanceAmount(BigDecimal startBalanceAmount) { + this.startBalanceAmount = startBalanceAmount; + } + + public BigDecimal getCloseBalanceAmount() { + return closeBalanceAmount; + } + + public void setCloseBalanceAmount(BigDecimal closeBalanceAmount) { + this.closeBalanceAmount = closeBalanceAmount; + } + + public BigDecimal getTradeBalanceAmount() { + return tradeBalanceAmount; + } + + public void setTradeBalanceAmount(BigDecimal tradeBalanceAmount) { + this.tradeBalanceAmount = tradeBalanceAmount; + } + + public BigDecimal getFreeBalanceAmount() { + return freeBalanceAmount; + } + + public void setFreeBalanceAmount(BigDecimal freeBalanceAmount) { + this.freeBalanceAmount = freeBalanceAmount; + } + + public BigDecimal getChangeBalanceAmount() { + return changeBalanceAmount; + } + + public void setChangeBalanceAmount(BigDecimal changeBalanceAmount) { + this.changeBalanceAmount = changeBalanceAmount; + } + + public BigDecimal getCreditAmount() { + return creditAmount; + } + + public void setCreditAmount(BigDecimal creditAmount) { + this.creditAmount = creditAmount; + } + + public BigDecimal getDebitAmount() { + return debitAmount; + } + + public void setDebitAmount(BigDecimal debitAmount) { + this.debitAmount = debitAmount; + } + + public BigDecimal getBalanceAmount() { + return balanceAmount; + } + + public void setBalanceAmount(BigDecimal balanceAmount) { + this.balanceAmount = balanceAmount; + } + + public String getBalanceAccountType() { + return balanceAccountType; + } + + public void setBalanceAccountType(String balanceAccountType) { + this.balanceAccountType = balanceAccountType; + } + + public LocalDate getClearingDate() { + return clearingDate; + } + + public void setClearingDate(LocalDate clearingDate) { + this.clearingDate = clearingDate; + } + + public String getCurrencyCode() { + return currencyCode; + } + + public void setCurrencyCode(String currencyCode) { + this.currencyCode = currencyCode; + } + + public String getTradingCode() { + return tradingCode; + } + + public void setTradingCode(String tradingCode) { + this.tradingCode = tradingCode; + } + + public String getShortName() { + return shortName; + } + + public void setShortName(String shortName) { + this.shortName = shortName; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalanceHistory.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalanceHistory.java new file mode 100644 index 000000000..3fd8f9d11 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/account/AccountBalanceHistory.java @@ -0,0 +1,28 @@ +package ru.clearing.classes.statics.data.account; + +import ru.clearing.classes.ConstSerializable; +import ru.clearing.classes.objects.BusinessEvent; + +import java.io.Serial; + +/** + * Изменение состояния объекта Счета + *

+ * DB table: ACCOUNT_BALANCE_HISTORY + **/ +public class AccountBalanceHistory extends BusinessEvent { + @Serial + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private AccountBalance object; + + @Override + public AccountBalance getObject() { + return object; + } + + @Override + public void setObject(AccountBalance object) { + this.object = object; + } +} diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java index 4e82c1bb6..9bbc2ee44 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java @@ -1,8 +1,8 @@ package ru.clearing.classes.statics.data.company; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.statics.data.profile.CompanyInfo; import ru.clearing.classes.objects.BusinessObject; +import ru.clearing.classes.statics.data.profile.CompanyInfo; import java.io.Serial; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/AdmittedDeal.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/AdmittedDeal.java new file mode 100644 index 000000000..b83f356d8 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/AdmittedDeal.java @@ -0,0 +1,30 @@ +package ru.clearing.classes.statics.data.misc; + +import ru.clearing.classes.ConstSerializable; +import ru.clearing.classes.objects.BusinessObject; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalTime; + +/** + * Счета + *

+ * DB table: ADMITTED_DEAL + **/ +public class AdmittedDeal extends BusinessObject { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private String companyFullName; + private Instant executionDepositRegisterTradingDate; + private String exchangeExecutionId; + private LocalTime exchangeExecutionTime; + private Long securityShortName; + private String sellerFullName; + private String sellerClearingCode; + private String sellerAccount; + private String buyerFullName; + private String buyerClearingCode; + private String buyerAccount; + private BigDecimal executionDepositRegisterAmount; +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java index 824450757..175c17b69 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java @@ -10,7 +10,6 @@ public class CompanyInfo extends SpcexObjectBase { private static final long serialVersionUID = ConstSerializable.serialVersionUID; private Long companyId; // Company.CompanyInfo.companyId = CompanyInfo.id - private String clearingMemberCategory; // ref CHAR(4), private String corporationSoleType; // ref CHAR(4), private String countryCode; //ref CHAR(4), private String description; @@ -34,14 +33,6 @@ public class CompanyInfo extends SpcexObjectBase { this.companyId = companyId; } - public String getClearingMemberCategory() { - return clearingMemberCategory; - } - - public void setClearingMemberCategory(String clearingMemberCategory) { - this.clearingMemberCategory = clearingMemberCategory; - } - public String getCorporationSoleType() { return corporationSoleType; } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java index 917737e04..18f22bce6 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/IMDGApplication.java @@ -1,17 +1,70 @@ package ru.spcex.clearing.imdg; +import com.hazelcast.config.MapStoreConfig; +import com.hazelcast.core.HazelcastInstance; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; +import ru.spcex.clearing.imdg.base.BusinessObjectMapStore; +import ru.spcex.clearing.imdg.base.DictionaryMapStore; +import ru.spcex.clearing.imdg.base.TemplateEventMapStore; +import ru.spcex.clearing.imdg.base.TemplateMapStore; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; @SpringBootApplication public class IMDGApplication { public static void main(String[] args) { + SpringApplicationBuilder builder = new SpringApplicationBuilder(IMDGApplication.class); + ConfigurableApplicationContext configurableApplicationContext = builder.run(args); + tmpLogUncompletedMapStores(configurableApplicationContext); + } + + public static void tmpLogUncompletedMapStores(ConfigurableApplicationContext configurableApplicationContext) { try { - SpringApplicationBuilder builder = new SpringApplicationBuilder(IMDGApplication.class); - builder.run(args); - } catch (Throwable e) { + //Поиск таблиц которым нужно добавить mapStore и вывод результата в консоль + List nameTables = new ArrayList<>(); + Connection jdbcConnection = DriverManager.getConnection("jdbc:postgresql://10.200.200.133:5432/postgres", "clearing", "Aa111111"); + DatabaseMetaData md = jdbcConnection.getMetaData(); + ResultSet rs = md.getTables(null, "clearing", "%", new String[]{"TABLE"}); + while (rs.next()) { + nameTables.add(rs.getString(3)); + } + + HazelcastInstance hazelcastInstance = configurableApplicationContext.getBean(HazelcastInstance.class); + hazelcastInstance.getMap(""); + for (String mapName : hazelcastInstance.getConfig().getMapConfigs().keySet()) { + MapStoreConfig mapStoreConfig = hazelcastInstance.getConfig().getMapConfig(mapName).getMapStoreConfig(); + Object mapStore = mapStoreConfig.getImplementation(); + String tableName; + if (mapStore instanceof TemplateMapStore) { + tableName = ((TemplateMapStore) mapStore).getTableName(); + } else if (mapStore instanceof DictionaryMapStore) { + tableName = ((DictionaryMapStore) mapStore).getTableName(); + } else if (mapStore instanceof TemplateEventMapStore) { + tableName = ((TemplateEventMapStore) mapStore).getTableName(); + } else if (mapStore instanceof BusinessObjectMapStore) { + tableName = ((BusinessObjectMapStore) mapStore).getTableName(); + } else if (mapName.equals("default")) { + continue; + } else { + System.out.println(mapStore == null ? "Не получилось сопоставить mapStore: is null" : "Не получилось сопоставить: " + mapStore.getClass() + " с таблицей"); + continue; + } + nameTables.remove(tableName.toLowerCase()); + } + System.out.println("** Результата поиска таблиц которым нужно добавить mapStore **"); + nameTables.forEach(System.out::println); + System.out.println("**************************************************************"); + } catch ( + Throwable e) { LoggerFactory.getLogger(IMDGApplication.class).error("STORAGE start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); System.exit(-1); } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/BusinessObjectMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/BusinessObjectMapStore.java index 3a7c7e706..32b4b047a 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/BusinessObjectMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/BusinessObjectMapStore.java @@ -27,8 +27,8 @@ public abstract class BusinessObjectMapStore extends O } protected void fillBusinessObjectFields(BusinessObject businessObject, ResultSet rs, String idName) throws SQLException { - businessObject.setUpdated(getInstantFromTimestamp(rs, "updated")); - businessObject.setCreated(getInstantFromTimestamp(rs, "created")); + businessObject.setUpdated(getInstantFromTimestamp(rs, "updated_at")); + businessObject.setCreated(getInstantFromTimestamp(rs, "created_at")); businessObject.setId(getLong(rs, idName)); } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/AccountBalanceHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/AccountBalanceHistoryMapStore.java new file mode 100644 index 000000000..9e081556d --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/AccountBalanceHistoryMapStore.java @@ -0,0 +1,73 @@ +package ru.spcex.clearing.imdg.businessevent; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.statics.data.account.AccountBalance; +import ru.clearing.classes.statics.data.account.AccountBalanceHistory; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateEventMapStore; +import ru.spcex.platform.utils.time.TimeUtil; + +@Component +public class AccountBalanceHistoryMapStore extends TemplateEventMapStore { + + public AccountBalanceHistoryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_AccountBalanceHistory; + } + + @Override + public String getTableName() { + return "ACCOUNT_BALANCE_HISTORY"; + } + + @Override + public String[] getFields() { + return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID", + "ACCOUNT_BALANCE_ID", "COMPANY_ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT_ID", "ACCOUNT_TYPE", + "ACCOUNT", "OPEN_BALANCE_AMOUNT", "START_BALANCE_AMOUNT", "CLOSE_BALANCE_AMOUNT", + "TRADE_BALANCE_AMOUNT", "FREE_BALANCE_AMOUNT", "CHANGE_BALANCE_AMOUNT", + "CREDIT_AMOUNT", "DEBIT_AMOUNT", "BALANCE_AMOUNT", "BALANCE_ACCOUNT_TYPE", + "CLEARING_DATE", "CURRENCY_CODE", "TRADING_CODE", "SHORT_NAME", "FULL_NAME" + }; + } + + @Override + public Object[] objectToField(AccountBalanceHistory updateLog) { + AccountBalance object = updateLog.getObject(); + Object[] args = new Object[]{ + updateLog.getId(), + updateLog.getEventTime(), + updateLog.getUserId(), + + object.getId(), + object.getCompanyId(), + TimeUtil.toDateFromInstant(object.getCreated()), + TimeUtil.toDateFromInstant(object.getUpdated()), + object.getAccountId(), + object.getAccountType(), + object.getAccount(), + object.getOpenBalanceAmount(), + object.getStartBalanceAmount(), + object.getCloseBalanceAmount(), + object.getTradeBalanceAmount(), + object.getFreeBalanceAmount(), + object.getChangeBalanceAmount(), + object.getCreditAmount(), + object.getDebitAmount(), + object.getBalanceAmount(), + object.getBalanceAccountType(), + TimeUtil.toDateFromLocalDate(object.getClearingDate()), + object.getCurrencyCode(), + object.getTradingCode(), + object.getShortName(), + object.getFullName() + }; + return args; + } + +} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyHistoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyHistoryMapStore.java index aa0ff5f3c..ce029e5a9 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyHistoryMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyHistoryMapStore.java @@ -29,16 +29,16 @@ public class CompanyHistoryMapStore extends BusinessEventMapStore companyInfoToSQLArgs(@NonNull CompanyInfo companyInfo, CompanyHistory rootUpdate) { @@ -97,7 +97,6 @@ public class CompanyHistoryMapStore extends BusinessEventMapStore { + + public AccountBalanceMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_AccountBalance; + } + + @Override + public String getTableName() { + return "ACCOUNT_BALANCE"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "COMPANY_ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT_ID", "ACCOUNT_TYPE", + "ACCOUNT", "OPEN_BALANCE_AMOUNT", "START_BALANCE_AMOUNT", "CLOSE_BALANCE_AMOUNT", + "TRADE_BALANCE_AMOUNT", "FREE_BALANCE_AMOUNT", "CHANGE_BALANCE_AMOUNT", + "CREDIT_AMOUNT", "DEBIT_AMOUNT", "BALANCE_AMOUNT", "BALANCE_ACCOUNT_TYPE", + "CLEARING_DATE", "CURRENCY_CODE", "TRADING_CODE", "SHORT_NAME", "FULL_NAME" + }; + } + + @Override + public AccountBalance objectReader(ResultSet resultSet) throws SQLException { + AccountBalance object = new AccountBalance(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class)); + object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); + object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); + object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class)); + object.setAccountType(resultSet.getObject("ACCOUNT_TYPE", Long.class)); + object.setAccount(resultSet.getObject("ACCOUNT", String.class)); + object.setOpenBalanceAmount(resultSet.getObject("OPEN_BALANCE_AMOUNT", BigDecimal.class)); + object.setStartBalanceAmount(resultSet.getObject("START_BALANCE_AMOUNT", BigDecimal.class)); + object.setCloseBalanceAmount(resultSet.getObject("CLOSE_BALANCE_AMOUNT", BigDecimal.class)); + object.setTradeBalanceAmount(resultSet.getObject("TRADE_BALANCE_AMOUNT", BigDecimal.class)); + object.setFreeBalanceAmount(resultSet.getObject("FREE_BALANCE_AMOU", BigDecimal.class)); + object.setChangeBalanceAmount(resultSet.getObject("CHANGE_BALANCE_AMOUNT", BigDecimal.class)); + object.setCreditAmount(resultSet.getObject("CREDIT_AMOUNT", BigDecimal.class)); + object.setDebitAmount(resultSet.getObject("DEBIT_AMOUNT", BigDecimal.class)); + object.setBalanceAmount(resultSet.getObject("BALANCE_AMOUNT", BigDecimal.class)); + object.setBalanceAccountType(resultSet.getObject("BALANCE_ACCOUNT_TYPE", String.class)); + object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE")); + object.setCurrencyCode(resultSet.getObject("CURRENCY_CODE", String.class)); + object.setTradingCode(resultSet.getObject("TRADING_CODE", String.class)); + object.setShortName(resultSet.getObject("SHORT_NAME", String.class)); + object.setFullName(resultSet.getObject("FULL_NAME", String.class)); + return object; + } + + @Override + public Object[] objectToField(AccountBalance object) { + Object[] args = new Object[]{ + object.getId(), + object.getCompanyId(), + TimeUtil.toDateFromInstant(object.getCreated()), + TimeUtil.toDateFromInstant(object.getUpdated()), + object.getAccountId(), + object.getAccountType(), + object.getAccount(), + object.getOpenBalanceAmount(), + object.getStartBalanceAmount(), + object.getCloseBalanceAmount(), + object.getTradeBalanceAmount(), + object.getFreeBalanceAmount(), + object.getChangeBalanceAmount(), + object.getCreditAmount(), + object.getDebitAmount(), + object.getBalanceAmount(), + object.getBalanceAccountType(), + TimeUtil.toDateFromLocalDate(object.getClearingDate()), + object.getCurrencyCode(), + object.getTradingCode(), + object.getShortName(), + object.getFullName() + }; + return args; + } + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java index 62ed7e51e..23a7caef6 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/CompanyMapStore.java @@ -14,6 +14,9 @@ import java.util.*; @Component public class CompanyMapStore extends BusinessObjectMapStore { + protected final String insertStatement = makeInsertSql(getTableName(), getFields(), "id"); + protected final String insertCompanyInfoStatement = makeInsertSql("COMPANY_INFO", getFieldsForCompanyInfo(), "id"); + public CompanyMapStore(JdbcTemplate jdbcTemplate) { super(jdbcTemplate); } @@ -26,21 +29,18 @@ public class CompanyMapStore extends BusinessObjectMapStore { @Override public String[] getFields() { return new String[]{ - "id", "created_at", "updated_at", "trading_code", "clearing_code", "registration_code", "workflow_status", "short_name", "full_name" + "id", "created_at", "updated_at", "trading_code", "clearing_code", "registration_code", "workflow_status", "short_name", "full_name" }; } public String[] getFieldsForCompanyInfo() { return new String[]{ - "id", "company_id", "clearing_member_category", "corporation_sole_type", "country_code", "description", + "id", "company_id", "corporation_sole_type", "country_code", "description", "professional_sign", "legal_kind", "organization_type", "residence", "short_name", "full_name", - "short_name_eng", "full_name_eng", "trading_code", "clearing_code", "registration_code" + "short_name_eng", "full_name_eng", "trading_code", "clearing_code", "registration_code" }; } - protected final String insertStatement = makeInsertSql(getTableName(), getFields(), "id"); - protected final String insertCompanyInfoStatement = makeInsertSql("COMPANY_INFO", getFieldsForCompanyInfo(), "id"); - @Override public Collection load(Collection keys) { Map> paramMap = Collections.singletonMap("ids", keys); @@ -103,19 +103,18 @@ public class CompanyMapStore extends BusinessObjectMapStore { (rs, rowNum) -> { CompanyInfo companyInfo = new CompanyInfo(); companyInfo.setId(rs.getObject("Id", Long.class)); - companyInfo.setCompanyId(rs.getObject("CompanyId", Long.class)); - companyInfo.setClearingMemberCategory(rs.getString("ClearingMemberCategory")); - companyInfo.setCorporationSoleType(rs.getString("CorporationSoleType")); - companyInfo.setCountryCode(rs.getString("CountryCode")); - companyInfo.setDescription(rs.getString("Description")); - companyInfo.setProfessionalSign(rs.getString("ProfessionalSign")); - companyInfo.setLegalKind(rs.getString("LegalKind")); - companyInfo.setOrganizationType(rs.getString("OrganizationType")); - companyInfo.setResidence(rs.getString("Residence")); - companyInfo.setShortName(rs.getString("ShortName")); - companyInfo.setFullName(rs.getString("FullName")); - companyInfo.setShortNameEng(rs.getString("ShortNameEng")); - companyInfo.setFullNameEng(rs.getString("FullNameEng")); + companyInfo.setCompanyId(rs.getObject("COMPANY_ID", Long.class)); + companyInfo.setCorporationSoleType(rs.getString("CORPORATION_SOLE_TYPE")); + companyInfo.setCountryCode(rs.getString("COUNTRY_CODE")); + companyInfo.setDescription(rs.getString("DESCRIPTION")); + companyInfo.setProfessionalSign(rs.getString("PROFESSIONAL_SIGN")); + companyInfo.setLegalKind(rs.getString("LEGAL_KIND")); + companyInfo.setOrganizationType(rs.getString("ORGANIZATION_TYPE")); + companyInfo.setResidence(rs.getString("RESIDENCE")); + companyInfo.setShortName(rs.getString("SHORT_NAME")); + companyInfo.setFullName(rs.getString("FULL_NAME")); + companyInfo.setShortNameEng(rs.getString("SHORT_NAME_ENG")); + companyInfo.setFullNameEng(rs.getString("FULL_NAME_ENG")); companyInfo.setTradingCode(rs.getObject("TRADING_CODE", String.class)); companyInfo.setClearingCode(rs.getObject("CLEARING_CODE", String.class)); companyInfo.setRegistrationCode(rs.getObject("REGISTRATION_CODE", String.class)); @@ -135,14 +134,13 @@ public class CompanyMapStore extends BusinessObjectMapStore { * Перечисление значений полей CompanyInfo. * См. insertCompanyInfoStatement * - * @param companyInfo должен быть заполнен id, company_id = company.id + * @param companyInfo должен быть заполнен id, company_id = company.id * @return */ protected List companyInfoToSQLArgs(@NonNull CompanyInfo companyInfo) { List companyInfoArgs = new ArrayList<>(Arrays.asList( companyInfo.getId(), companyInfo.getCompanyId(), - companyInfo.getClearingMemberCategory(), companyInfo.getCorporationSoleType(), companyInfo.getCountryCode(), companyInfo.getDescription(), @@ -157,7 +155,7 @@ public class CompanyMapStore extends BusinessObjectMapStore { companyInfo.getTradingCode(), companyInfo.getClearingCode(), companyInfo.getRegistrationCode() - )); + )); return companyInfoArgs; } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java index 8b563b73c..9f2178bdd 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/PoolMapConfigs.java @@ -178,47 +178,4 @@ public class PoolMapConfigs { log.debug("Configured {} mapStore's", out.size()); return out; } - - - @Autowired - private CompanySymbolsMapStore companySymbolsMapStore; - - public MapConfig map_CompanySymbols() { - return makeDefaultMapConfig(IMDGDistributedNames.Map_CompanySymbols, companySymbolsMapStore) - .addMapIndexConfig(makeMapIndexConfig("companyId")) - .addMapIndexConfig(makeMapIndexConfig("companySymbol")); - } - - - @Autowired - private ProfileDocumentMapStore profileDocumentMapStore; - - public MapConfig map_ProfileDocument() { - return makeDefaultMapConfig(IMDGDistributedNames.Map_ProfileDocument, profileDocumentMapStore) - .addMapIndexConfig(makeMapIndexConfig("companyId")); - } - - @Autowired - private ContactMapStore contactMapStore; - - public MapConfig map_Contact() { - return makeDefaultMapConfig(IMDGDistributedNames.Map_Contact, contactMapStore) - .addMapIndexConfig(makeMapIndexConfig("companyId")); - } - - - @Autowired - private CompanyMapStore companyMapStore; - - public MapConfig map_Company() { - return makeDefaultMapConfig(IMDGDistributedNames.Map_Company, companyMapStore); -// .addMapIndexConfig(makeMapIndexConfig("companyId")); - } - -// @Autowired - private CompanyHistoryMapStore companyHistoryMapStore; - - public MapConfig map_CompanyUpdate() { - return makeDefaultMapConfig(IMDGDistributedNames.Map_CompanyHistory, companyHistoryMapStore); - } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java index c8e3735e1..74dadc2a6 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanySymbolsMapStore.java @@ -3,17 +3,24 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.spcex.clearing.imdg.base.ObjectBaseMapStore; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; -import java.util.*; +import java.sql.ResultSet; +import java.sql.SQLException; @Component -public class CompanySymbolsMapStore extends ObjectBaseMapStore { +public class CompanySymbolsMapStore extends TemplateMapStore { public CompanySymbolsMapStore(JdbcTemplate jdbcTemplate) { super(jdbcTemplate); } + @Override + public String getMapName() { + return IMDGDistributedNames.Map_CompanySymbols; + } + @Override public String getTableName() { return "COMPANY_SYMBOLS"; @@ -26,38 +33,24 @@ public class CompanySymbolsMapStore extends ObjectBaseMapStore { }; } - protected final String insertStatement = makeInsertSql(getTableName(), getFields(), "id"); - @Override - public Collection load(Collection keys) { - Map> paramMap = Collections.singletonMap("ids", keys); - return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap, - (resultSet, i) -> { - CompanySymbols companySymbols = new CompanySymbols(); - companySymbols.setId(resultSet.getObject("id", Long.class)); - companySymbols.setCompanyId(resultSet.getObject("companyid", Long.class)); - companySymbols.setCompanySymbol(resultSet.getObject("companysymbol", String.class)); - companySymbols.setCompanySymbolValue(resultSet.getObject("companysymbolvalue", String.class)); - return companySymbols; - }); + protected CompanySymbols objectReader(ResultSet resultSet) throws SQLException { + CompanySymbols object = new CompanySymbols(); + object.setId(resultSet.getObject("id", Long.class)); + object.setCompanyId(resultSet.getObject("companyid", Long.class)); + object.setCompanySymbol(resultSet.getObject("companysymbol", String.class)); + object.setCompanySymbolValue(resultSet.getObject("companysymbolvalue", String.class)); + return object; } @Override - public void store(Map map) { - List batchArgs = new ArrayList<>(); - - for (Map.Entry entry : map.entrySet()) { - CompanySymbols companySymbols = entry.getValue(); - - Object[] args = new Object[]{ - companySymbols.getId(), - companySymbols.getCompanyId(), - companySymbols.getCompanySymbol(), - companySymbols.getCompanySymbolValue() - }; - batchArgs.add(args); - } - batchInsertUpdate(insertStatement, batchArgs); + protected Object[] objectToField(CompanySymbols resultSet) { + Object[] args = new Object[]{ + resultSet.getId(), + resultSet.getCompanyId(), + resultSet.getCompanySymbol(), + resultSet.getCompanySymbolValue() + }; + return args; } - } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java index 5bf6ca2c0..53d225f2c 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ContactMapStore.java @@ -3,17 +3,24 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.profile.Contact; -import ru.spcex.clearing.imdg.base.ObjectBaseMapStore; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; -import java.util.*; +import java.sql.ResultSet; +import java.sql.SQLException; @Component -public class ContactMapStore extends ObjectBaseMapStore { +public class ContactMapStore extends TemplateMapStore { public ContactMapStore(JdbcTemplate jdbcTemplate) { super(jdbcTemplate); } + @Override + public String getMapName() { + return IMDGDistributedNames.Map_Contact; + } + @Override public String getTableName() { return "CONTACT"; @@ -26,38 +33,24 @@ public class ContactMapStore extends ObjectBaseMapStore { }; } - protected final String insertStatement = makeInsertSql(getTableName(), getFields(), "id"); - @Override - public Collection load(Collection keys) { - Map> paramMap = Collections.singletonMap("ids", keys); - return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap, - (resultSet, i) -> { - Contact contact = new Contact(); - contact.setId(resultSet.getObject("id", Long.class)); - contact.setCompanyId(resultSet.getObject("company_id", Long.class)); - contact.setContactType(resultSet.getObject("contact_type", String.class)); - contact.setContactValue(resultSet.getObject("contact_value", String.class)); - return contact; - }); + protected Contact objectReader(ResultSet resultSet) throws SQLException { + Contact object = new Contact(); + object.setId(resultSet.getObject("id", Long.class)); + object.setCompanyId(resultSet.getObject("company_id", Long.class)); + object.setContactType(resultSet.getObject("contact_type", String.class)); + object.setContactValue(resultSet.getObject("contact_value", String.class)); + return object; } @Override - public void store(Map map) { - List batchArgs = new ArrayList<>(); - - for (Map.Entry entry : map.entrySet()) { - Contact contact = entry.getValue(); - - Object[] args = new Object[]{ - contact.getId(), - contact.getCompanyId(), - contact.getContactType(), - contact.getContactValue() - }; - batchArgs.add(args); - } - batchInsertUpdate(insertStatement, batchArgs); + protected Object[] objectToField(Contact resultSet) { + Object[] args = new Object[]{ + resultSet.getId(), + resultSet.getCompanyId(), + resultSet.getContactType(), + resultSet.getContactValue() + }; + return args; } - } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java index bd5260861..b6bd80323 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ProfileDocumentMapStore.java @@ -3,18 +3,25 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import ru.clearing.classes.statics.data.profile.ProfileDocument; -import ru.spcex.clearing.imdg.base.ObjectBaseMapStore; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; import ru.spcex.platform.utils.time.TimeUtil; -import java.util.*; +import java.sql.ResultSet; +import java.sql.SQLException; @Component -public class ProfileDocumentMapStore extends ObjectBaseMapStore { +public class ProfileDocumentMapStore extends TemplateMapStore { public ProfileDocumentMapStore(JdbcTemplate jdbcTemplate) { super(jdbcTemplate); } + @Override + public String getMapName() { + return IMDGDistributedNames.Map_ProfileDocument; + } + @Override public String getTableName() { return "PROFILE_DOCUMENT"; @@ -28,56 +35,42 @@ public class ProfileDocumentMapStore extends ObjectBaseMapStore }; } - protected final String insertStatement = makeInsertSql(getTableName(), getFields(), "id"); - @Override - public Collection load(Collection keys) { - Map> paramMap = Collections.singletonMap("ids", keys); - return namedParameterJdbcTemplate.query("select * from " + getTableName() + " where id in (:ids)", paramMap, - (resultSet, i) -> { - ProfileDocument profileDocument = new ProfileDocument(); - profileDocument.setId(resultSet.getObject("id", Long.class)); - profileDocument.setCompanyId(resultSet.getObject("company_id", Long.class)); - profileDocument.setDocumentType(resultSet.getObject("document_type", String.class)); - profileDocument.setIssueDate(getInstantFromTimestamp(resultSet,"issue_date")); - profileDocument.setIssuePlace(resultSet.getObject("issue_place", String.class)); - profileDocument.setIssuer(resultSet.getObject("issuer", String.class)); - profileDocument.setIssuerCode(resultSet.getObject("issuer_code", String.class)); - profileDocument.setName(resultSet.getObject("name", String.class)); - profileDocument.setNumber(resultSet.getObject("number", String.class)); - profileDocument.setPlace(resultSet.getObject("place", String.class)); - profileDocument.setValidFromDate(getInstantFromTimestamp(resultSet,"valid_from_date")); - profileDocument.setValidToDate(getInstantFromTimestamp(resultSet,"valid_to_date")); - profileDocument.setLink(resultSet.getObject("LINK", String.class)); - return profileDocument; - }); + protected ProfileDocument objectReader(ResultSet resultSet) throws SQLException { + ProfileDocument object = new ProfileDocument(); + object.setId(resultSet.getObject("id", Long.class)); + object.setCompanyId(resultSet.getObject("company_id", Long.class)); + object.setDocumentType(resultSet.getObject("document_type", String.class)); + object.setIssueDate(getInstantFromTimestamp(resultSet, "issue_date")); + object.setIssuePlace(resultSet.getObject("issue_place", String.class)); + object.setIssuer(resultSet.getObject("issuer", String.class)); + object.setIssuerCode(resultSet.getObject("issuer_code", String.class)); + object.setName(resultSet.getObject("name", String.class)); + object.setNumber(resultSet.getObject("number", String.class)); + object.setPlace(resultSet.getObject("place", String.class)); + object.setValidFromDate(getInstantFromTimestamp(resultSet, "valid_from_date")); + object.setValidToDate(getInstantFromTimestamp(resultSet, "valid_to_date")); + object.setLink(resultSet.getObject("LINK", String.class)); + return object; } @Override - public void store(Map map) { - List batchArgs = new ArrayList<>(); - - for (Map.Entry entry : map.entrySet()) { - ProfileDocument profileDocument = entry.getValue(); - - Object[] args = new Object[]{ - profileDocument.getId(), - profileDocument.getCompanyId(), - profileDocument.getDocumentType(), - TimeUtil.toDateFromInstant(profileDocument.getIssueDate()), - profileDocument.getIssuePlace(), - profileDocument.getIssuer(), - profileDocument.getIssuerCode(), - profileDocument.getName(), - profileDocument.getNumber(), - profileDocument.getPlace(), - TimeUtil.toDateFromInstant(profileDocument.getValidFromDate()), - TimeUtil.toDateFromInstant(profileDocument.getValidToDate()), - profileDocument.getLink() - }; - batchArgs.add(args); - } - batchInsertUpdate(insertStatement, batchArgs); + protected Object[] objectToField(ProfileDocument resultSet) { + Object[] args = new Object[]{ + resultSet.getId(), + resultSet.getCompanyId(), + resultSet.getDocumentType(), + TimeUtil.toDateFromInstant(resultSet.getIssueDate()), + resultSet.getIssuePlace(), + resultSet.getIssuer(), + resultSet.getIssuerCode(), + resultSet.getName(), + resultSet.getNumber(), + resultSet.getPlace(), + TimeUtil.toDateFromInstant(resultSet.getValidFromDate()), + TimeUtil.toDateFromInstant(resultSet.getValidToDate()), + resultSet.getLink() + }; + return args; } - } 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 ea63c6480..b3c3b9d8d 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 @@ -8,11 +8,12 @@ public final class IMDGDistributedNames { public static final String Map_CompanyHistory = "Map_CompanyHistory"; public static final String Map_CompanyRoleSet = "Map_CompanyRoleSet"; public static final String Map_CompanySymbols = "Map_CompanySymbols"; - public static final String Map_CompanyInfo = "Map_CompanyInfo"; public static final String Map_Contact = "Map_Contact"; public static final String Map_ProfileDocument = "Map_ProfileDocument"; public static final String Map_Account = "Map_Account"; + public static final String Map_AccountBalance = "Map_AccountBalance"; public static final String Map_AccountHistory = "Map_AccountHistory"; + public static final String Map_AccountBalanceHistory = "Map_AccountBalanceHistory"; public static final String Map_Relation = "Map_Relation"; public static final String Map_ClearingAccount = "Map_ClearingAccount"; public static final String Map_ClearingAccountHistory = "Map_ClearingAccountHistory"; @@ -100,7 +101,6 @@ public final class IMDGDistributedNames { public static final String Map_AccountStatusDictionary = "Map_AccountStatusDictionary"; public static final String Map_KeyRate = "Map_KeyRate"; public static final String Map_MoneyMarketSecurity = "Map_MoneyMarketSecurity"; - public static final String Map_AccountBalance = "Map_AccountBalance"; public static final String MAP_SEQUENCE_NAME = "MAP_SEQUENCE_NAME"; // todo вынести idGenerator отдельно и завернуть в метод, чтобы не напрямую обращаться. private IMDGDistributedNames() {