diff --git a/clearing-parent/backend-api/src/main/resources/meta.xml b/clearing-parent/backend-api/src/main/resources/meta.xml index 8c47e00a7..69aa21006 100644 --- a/clearing-parent/backend-api/src/main/resources/meta.xml +++ b/clearing-parent/backend-api/src/main/resources/meta.xml @@ -253,7 +253,7 @@ - + diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/Account.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/Account.java new file mode 100644 index 000000000..bc20ffbbe --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/Account.java @@ -0,0 +1,51 @@ +package ru.clearing.classes.StaticData.Account; + +import ru.clearing.classes.ConstSerializable; +import ru.clearing.classes.objects.BusinessObject; + +/** + * Счета + *

+ * DB table: ACCOUNT + **/ +public class Account extends BusinessObject { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private String account; + private String accountType; + private Long relationId; + private String status; + + public String getAccount() { + return account; + } + + public void setAccount(String value) { + this.account = value; + } + + public String getAccountType() { + return accountType; + } + + public void setAccountType(String value) { + this.accountType = value; + } + + public Long getRelationId() { + return relationId; + } + + public void setRelationId(Long value) { + this.relationId = value; + } + + public String getStatus() { + return status; + } + + public void setStatus(String value) { + this.status = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/AccountRouting.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/AccountRouting.java new file mode 100644 index 000000000..bfd8bdd20 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/AccountRouting.java @@ -0,0 +1,45 @@ +package ru.clearing.classes.StaticData.Account; + +import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; + +import java.io.Serial; + +/** + * Маршрутизация счета + *

+ * DB table: ACCOUNT_ROUTING + **/ +public class AccountRouting extends SpcexObjectBase { + @Serial + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private Long destinationId; + private Long relationId; + private Long sourceId; + + public Long getDestinationId() { + return destinationId; + } + + public void setDestinationId(Long value) { + this.destinationId = value; + } + + public Long getRelationId() { + return relationId; + } + + public void setRelationId(Long value) { + this.relationId = value; + } + + public Long getSourceId() { + return sourceId; + } + + public void setSourceId(Long value) { + this.sourceId = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/BankAccount.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/BankAccount.java new file mode 100644 index 000000000..ed83035b1 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/BankAccount.java @@ -0,0 +1,123 @@ +package ru.clearing.classes.StaticData.Account; + +import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; + +/** + * Банковские счета + *

+ * DB table: BANK_ACCOUNT + **/ +public class BankAccount extends SpcexObjectBase { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private Long accountId; + private String bankIdentificationCode; + private String bankName; + private String correspondentAccountName; + private String currency; + private String destination; + private String iban; + private String internationalTransferSign; + private String swiftCode; + private String taxpayerIdentificationNumber; + private String taxRegistrationReasonCode; + private String correspondentAccount; + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long value) { + this.accountId = value; + } + + public String getBankIdentificationCode() { + return bankIdentificationCode; + } + + public void setBankIdentificationCode(String value) { + this.bankIdentificationCode = value; + } + + public String getBankName() { + return bankName; + } + + public void setBankName(String value) { + this.bankName = value; + } + + public String getCorrespondentAccountName() { + return correspondentAccountName; + } + + public void setCorrespondentAccountName(String value) { + this.correspondentAccountName = value; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String value) { + this.currency = value; + } + + public String getDestination() { + return destination; + } + + public void setDestination(String value) { + this.destination = value; + } + + public String getIban() { + return iban; + } + + public void setIban(String value) { + this.iban = value; + } + + public String getInternationalTransferSign() { + return internationalTransferSign; + } + + public void setInternationalTransferSign(String value) { + this.internationalTransferSign = value; + } + + public String getSwiftCode() { + return swiftCode; + } + + public void setSwiftCode(String value) { + this.swiftCode = value; + } + + public String getTaxpayerIdentificationNumber() { + return taxpayerIdentificationNumber; + } + + public void setTaxpayerIdentificationNumber(String value) { + this.taxpayerIdentificationNumber = value; + } + + public String getTaxRegistrationReasonCode() { + return taxRegistrationReasonCode; + } + + public void setTaxRegistrationReasonCode(String value) { + this.taxRegistrationReasonCode = value; + } + + public String getCorrespondentAccount() { + return correspondentAccount; + } + + public void setCorrespondentAccount(String value) { + this.correspondentAccount = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/ClearingAccount.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/ClearingAccount.java new file mode 100644 index 000000000..2422fbbb0 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Account/ClearingAccount.java @@ -0,0 +1,51 @@ +package ru.clearing.classes.StaticData.Account; + +import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; + +/** + * Клиринговые счета + *

+ * DB table: CLEARING_ACCOUNT + **/ +public class ClearingAccount extends SpcexObjectBase { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private Long accountId; + private Long cashAccountId; + private Long depoAccountId; + private String settlementCode; + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long value) { + this.accountId = value; + } + + public Long getCashAccountId() { + return cashAccountId; + } + + public void setCashAccountId(Long value) { + this.cashAccountId = value; + } + + public Long getDepoAccountId() { + return depoAccountId; + } + + public void setDepoAccountId(Long value) { + this.depoAccountId = value; + } + + public String getSettlementCode() { + return settlementCode; + } + + public void setSettlementCode(String value) { + this.settlementCode = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Relation/Relation.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Relation/Relation.java new file mode 100644 index 000000000..b74bb58a8 --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Relation/Relation.java @@ -0,0 +1,70 @@ +package ru.clearing.classes.StaticData.Company.Relation; + +import ru.clearing.classes.ConstSerializable; +import ru.clearing.classes.objects.BusinessObject; +import ru.spcex.platform.classes.base.SpcexObjectBase; + +/** + * Договорные отношения + *

+ * DB table: RELATION + **/ +public class Relation extends BusinessObject { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private Long consumerId; + private Long supplierId; + private String serviceStatus; + private Long serviceId; + private Long serviceProductId; + private String comment; + + public Long getConsumerId() { + return consumerId; + } + + public void setConsumerId(Long value) { + this.consumerId = value; + } + + public Long getSupplierId() { + return supplierId; + } + + public void setSupplierId(Long value) { + this.supplierId = value; + } + + public String getServiceStatus() { + return serviceStatus; + } + + public void setServiceStatus(String value) { + this.serviceStatus = value; + } + + public Long getServiceId() { + return serviceId; + } + + public void setServiceId(Long value) { + this.serviceId = value; + } + + public Long getServiceProductId() { + return serviceProductId; + } + + public void setServiceProductId(Long value) { + this.serviceProductId = value; + } + + public String getComment() { + return comment; + } + + public void setComment(String value) { + this.comment = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/generated/ClearingMemberCategory.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/generated/ClearingMemberCategory.java new file mode 100644 index 000000000..720c73cfa --- /dev/null +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/generated/ClearingMemberCategory.java @@ -0,0 +1,33 @@ +package ru.clearing.classes.StaticData.generated; + +import ru.clearing.classes.ConstSerializable; +import ru.spcex.platform.classes.base.SpcexObjectBase; + +/** + * Категории участника клиринга + *

+ * DB table: CLEARING_MEMBER_CATEGORY + **/ +public class ClearingMemberCategory extends SpcexObjectBase { + private static final long serialVersionUID = ConstSerializable.serialVersionUID; + + private Long companyId; + private String clearingMemberCategory; + + public Long getCompanyId() { + return companyId; + } + + public void setCompanyId(Long value) { + this.companyId = value; + } + + public String getClearingMemberCategory() { + return clearingMemberCategory; + } + + public void setClearingMemberCategory(String value) { + this.clearingMemberCategory = value; + } + +} \ No newline at end of file diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Company.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java similarity index 92% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Company.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java index 56ba80c6a..0acf9f092 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/Company.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/Company.java @@ -1,7 +1,7 @@ -package ru.clearing.classes.StaticData.Company; +package ru.clearing.classes.statics.data.company; import ru.clearing.classes.ConstSerializable; -import ru.clearing.classes.StaticData.Profile.CompanyInfo; +import ru.clearing.classes.statics.data.profile.CompanyInfo; import ru.clearing.classes.objects.BusinessObject; import java.io.Serial; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyRoleSet.java similarity index 92% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyRoleSet.java index b2e5d0472..52dff6067 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyRoleSet.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyRoleSet.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.StaticData.Company; +package ru.clearing.classes.statics.data.company; import ru.clearing.classes.ConstSerializable; import ru.spcex.platform.classes.base.SpcexObjectBase; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanySymbols.java similarity index 94% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanySymbols.java index 43563f3a9..4ae40a8d0 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanySymbols.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanySymbols.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.StaticData.Company; +package ru.clearing.classes.statics.data.company; import ru.clearing.classes.ConstSerializable; import ru.spcex.platform.classes.base.SpcexObjectBase; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyUpdate.java similarity index 91% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyUpdate.java index f022c7796..354b2feb6 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Company/CompanyUpdate.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/company/CompanyUpdate.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.StaticData.Company; +package ru.clearing.classes.statics.data.company; import ru.clearing.classes.ConstSerializable; import ru.clearing.classes.objects.BusinessEvent; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/KeyRate.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/KeyRate.java similarity index 81% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/KeyRate.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/KeyRate.java index fa0891ef5..d107be73e 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/KeyRate.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/KeyRate.java @@ -1,59 +1,58 @@ -package ru.clearing.classes.StaticData.Misc; - -import ru.spcex.platform.classes.base.SpcexObjectBase; - -import java.math.BigDecimal; -import java.time.Instant; - -/** - * Ключевая ставка ЦБ - * - * DB table: KEY_RATE - **/ -public class KeyRate extends SpcexObjectBase { - private BigDecimal rate; - private Instant startDate; - private Instant endDate; - private String document; - private String workflowStatus; - - public BigDecimal getRate() { - return rate; - } - - public void setRate(BigDecimal rate) { - this.rate = rate; - } - - public Instant getStartDate() { - return startDate; - } - - public void setStartDate(Instant startDate) { - this.startDate = startDate; - } - - public Instant getEndDate() { - return endDate; - } - - public void setEndDate(Instant endDate) { - this.endDate = endDate; - } - - public String getDocument() { - return document; - } - - public void setDocument(String document) { - this.document = document; - } - - public String getWorkflowStatus() { - return workflowStatus; - } - - public void setWorkflowStatus(String workflowStatus) { - this.workflowStatus = workflowStatus; - } -} +package ru.clearing.classes.statics.data.misc; + +import ru.spcex.platform.classes.base.SpcexObjectBase; + +import java.time.Instant; + +/** + * Ключевая ставка ЦБ + * + * DB table: KEY_RATE + **/ +public class KeyRate extends SpcexObjectBase { + private Double rate; + private Instant startDate; + private Instant endDate; + private String document; + private String workflowStatus; + + public Double getRate() { + return rate; + } + + public void setRate(Double rate) { + this.rate = rate; + } + + public Instant getStartDate() { + return startDate; + } + + public void setStartDate(Instant startDate) { + this.startDate = startDate; + } + + public Instant getEndDate() { + return endDate; + } + + public void setEndDate(Instant endDate) { + this.endDate = endDate; + } + + public String getDocument() { + return document; + } + + public void setDocument(String document) { + this.document = document; + } + + public String getWorkflowStatus() { + return workflowStatus; + } + + public void setWorkflowStatus(String workflowStatus) { + this.workflowStatus = workflowStatus; + } +} diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/MoneyMarketSecurity.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java similarity index 94% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/MoneyMarketSecurity.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java index 40f57035e..feca98c31 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Misc/MoneyMarketSecurity.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/misc/MoneyMarketSecurity.java @@ -1,95 +1,95 @@ -package ru.clearing.classes.StaticData.Misc; - -import ru.spcex.platform.classes.base.SpcexObjectBase; - -import java.math.BigDecimal; -import java.time.Instant; - -/** - * Инструменты Денежного рынка - *

- * DB table: MONEY_MARKET_SECURITY - **/ -public class MoneyMarketSecurity extends SpcexObjectBase { - private Long securityId;// (linked to security) - private String description; - private Instant startDate; - private Instant endDate; - private BigDecimal nominalValue; - private Long nominalCurrency; // (linked to currencyCode) - private String instrumentType; // (linked to instrumentType) - private String fullName; - private String securitySymbol; - - public Long getSecurityId() { - return securityId; - } - - public void setSecurityId(Long securityId) { - this.securityId = securityId; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public Instant getStartDate() { - return startDate; - } - - public void setStartDate(Instant startDate) { - this.startDate = startDate; - } - - public Instant getEndDate() { - return endDate; - } - - public void setEndDate(Instant endDate) { - this.endDate = endDate; - } - - public BigDecimal getNominalValue() { - return nominalValue; - } - - public void setNominalValue(BigDecimal nominalValue) { - this.nominalValue = nominalValue; - } - - public Long getNominalCurrency() { - return nominalCurrency; - } - - public void setNominalCurrency(Long nominalCurrency) { - this.nominalCurrency = nominalCurrency; - } - - public String getInstrumentType() { - return instrumentType; - } - - public void setInstrumentType(String instrumentType) { - this.instrumentType = instrumentType; - } - - public String getFullName() { - return fullName; - } - - public void setFullName(String fullName) { - this.fullName = fullName; - } - - public String getSecuritySymbol() { - return securitySymbol; - } - - public void setSecuritySymbol(String securitySymbol) { - this.securitySymbol = securitySymbol; - } -} +package ru.clearing.classes.statics.data.misc; + +import ru.spcex.platform.classes.base.SpcexObjectBase; + +import java.math.BigDecimal; +import java.time.Instant; + +/** + * Инструменты Денежного рынка + *

+ * DB table: MONEY_MARKET_SECURITY + **/ +public class MoneyMarketSecurity extends SpcexObjectBase { + private Long securityId;// (linked to security) + private String description; + private Instant startDate; + private Instant endDate; + private BigDecimal nominalValue; + private Long nominalCurrency; // (linked to currencyCode) + private String instrumentType; // (linked to instrumentType) + private String fullName; + private String securitySymbol; + + public Long getSecurityId() { + return securityId; + } + + public void setSecurityId(Long securityId) { + this.securityId = securityId; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Instant getStartDate() { + return startDate; + } + + public void setStartDate(Instant startDate) { + this.startDate = startDate; + } + + public Instant getEndDate() { + return endDate; + } + + public void setEndDate(Instant endDate) { + this.endDate = endDate; + } + + public BigDecimal getNominalValue() { + return nominalValue; + } + + public void setNominalValue(BigDecimal nominalValue) { + this.nominalValue = nominalValue; + } + + public Long getNominalCurrency() { + return nominalCurrency; + } + + public void setNominalCurrency(Long nominalCurrency) { + this.nominalCurrency = nominalCurrency; + } + + public String getInstrumentType() { + return instrumentType; + } + + public void setInstrumentType(String instrumentType) { + this.instrumentType = instrumentType; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public String getSecuritySymbol() { + return securitySymbol; + } + + public void setSecuritySymbol(String securitySymbol) { + this.securitySymbol = securitySymbol; + } +} diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java similarity index 98% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java index 5bc4eab1a..52f899e00 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/CompanyInfo.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/CompanyInfo.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.StaticData.Profile; +package ru.clearing.classes.statics.data.profile; import ru.clearing.classes.ConstSerializable; import ru.spcex.platform.classes.base.SpcexObjectBase; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/Contact.java similarity index 94% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/Contact.java index 547e288ac..e2aeeeca1 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/Contact.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/Contact.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.StaticData.Profile; +package ru.clearing.classes.statics.data.profile; import ru.clearing.classes.ConstSerializable; import ru.spcex.platform.classes.base.SpcexObjectBase; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/ProfileDocument.java similarity index 97% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/ProfileDocument.java index bb38c616c..043aa2d1d 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/Profile/ProfileDocument.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/profile/ProfileDocument.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.StaticData.Profile; +package ru.clearing.classes.statics.data.profile; import ru.clearing.classes.ConstSerializable; import ru.spcex.platform.classes.base.SpcexObjectBase; diff --git a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/User/ClearingUser.java b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/ClearingUser.java similarity index 92% rename from clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/User/ClearingUser.java rename to clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/ClearingUser.java index a0e4f93d6..50fbff743 100644 --- a/clearing-parent/classes/src/main/java/ru/clearing/classes/StaticData/User/ClearingUser.java +++ b/clearing-parent/classes/src/main/java/ru/clearing/classes/statics/data/user/ClearingUser.java @@ -1,4 +1,4 @@ -package ru.clearing.classes.StaticData.User; +package ru.clearing.classes.statics.data.user; import ru.clearing.classes.ConstSerializable; diff --git a/clearing-parent/company-service/pom.xml b/clearing-parent/company-service/pom.xml new file mode 100644 index 000000000..cd323c846 --- /dev/null +++ b/clearing-parent/company-service/pom.xml @@ -0,0 +1,70 @@ + + + + clearing-parent + ru.spcex.clearing + SPCEX-1.0.0.0 + + 4.0.0 + + company-service + + + 17 + 17 + + + + ru.spcex.platform + platform-messaging + + + ru.spcex.platform + platform-imdg-api-hazelcast-impl + + + ru.spcex.clearing + classes + + + org.springframework.boot + spring-boot-starter + + + com.fasterxml.jackson.core + jackson-databind + + + + + + + src/main/resources + + application.properties + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + ${project.artifactId} + + + + + + + \ No newline at end of file diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/CompanyServiceApplication.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/CompanyServiceApplication.java new file mode 100644 index 000000000..19bdaf7b1 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/CompanyServiceApplication.java @@ -0,0 +1,12 @@ +package ru.spcex.clearing.company; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CompanyServiceApplication { + public static void main(String[] args) { + SpringApplication app = new SpringApplication(CompanyServiceApplication.class); + app.run(args); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java new file mode 100644 index 000000000..d63ecf6c5 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/KafkaConfig.java @@ -0,0 +1,17 @@ +package ru.spcex.clearing.company.config; + +import org.apache.kafka.clients.consumer.Consumer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.company.config.settings.CompanyServiceSettings; +import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; + +@Configuration +public class KafkaConfig { + @Autowired + @Bean + public Consumer createProducer(CompanyServiceSettings settings) { + return KafkaConsumerFactory.consumer(settings.getKafka()); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/UtilityServiceImdgConfig.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/UtilityServiceImdgConfig.java new file mode 100644 index 000000000..bbe41d92f --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/UtilityServiceImdgConfig.java @@ -0,0 +1,47 @@ +package ru.spcex.clearing.company.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import ru.spcex.clearing.company.config.settings.CompanyServiceSettings; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; + +@Configuration +public class UtilityServiceImdgConfig { + private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) { + ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor(); + if (maxPoolSz > 2) { + pool.setKeepAliveSeconds(60); + pool.setAllowCoreThreadTimeOut(true); + } + pool.setCorePoolSize(maxPoolSz); + pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion); + return pool; + } + + @Bean(name = "taskExecutorHazelcastClientInitializer") + public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() { + return createThreadPoolTaskExecutor(1, true); + } + + @Bean(name = "taskExecutorIdGeneratorAwaiter") + public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() { + return createThreadPoolTaskExecutor(1, false); + } + + @Autowired + @Bean + public ImdgProvider imdgProvider( + @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, + @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, + CompanyServiceSettings settings + ) { + return new HazelcastService(taskExecutorHazelcastClientInitializer, + taskExecutorIdGeneratorAwaiter, + settings.getHazelcast()); + } + +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/settings/CompanyServiceSettings.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/settings/CompanyServiceSettings.java new file mode 100644 index 000000000..98f925d5f --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/config/settings/CompanyServiceSettings.java @@ -0,0 +1,31 @@ +package ru.spcex.clearing.company.config.settings; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; + +@Component +@PropertySource("file:${spring.config.location}/application.properties") +@ConfigurationProperties("utility-service") +public class CompanyServiceSettings { + private HazelcastClientParams hazelcast; + private KafkaConsumerSettings kafka; + + public HazelcastClientParams getHazelcast() { + return hazelcast; + } + + public void setHazelcast(HazelcastClientParams hazelcast) { + this.hazelcast = hazelcast; + } + + public KafkaConsumerSettings getKafka() { + return kafka; + } + + public void setKafka(KafkaConsumerSettings kafka) { + this.kafka = kafka; + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java new file mode 100644 index 000000000..07c867578 --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyInfoService.java @@ -0,0 +1,56 @@ +package ru.spcex.clearing.company.service; + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.profile.CompanyInfo; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class CompanyInfoService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg companyInfoMap; + + @Autowired + public CompanyInfoService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + super(kafkaQueue); + this.companyInfoMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, CompanyInfo.class); + } + + @Override + public void afterPropertiesSet() { + callback(CompanyInfoUpdateRequest.class) + .setConsumer(this::companyInfoUpdate) + .forDestination(Consts.DESTINATION_COMPANY_INFO_UPDATE, callbacks::put); + init(); + } + + public void companyInfoUpdate(BaseRequest userRequest) { + CompanyInfoUpdateRequest req = userRequest.getRequestPayload(); + log.debug("CompanyInfoUpdateRequest received"); + CompanyInfo companyInfo = companyInfoMap.getSingleObjectByID(req.getId()); + + companyInfo.setCorporationSoleType(req.getCorporationSoleType()); + companyInfo.setCountryCode(req.getCountryCode()); + companyInfo.setDescription(req.getDescription()); + companyInfo.setProfessionalSign(req.getProfessionalSign()); + companyInfo.setLegalKind(req.getLegalKind()); + companyInfo.setOrganizationType(req.getOrganizationType()); + companyInfo.setResidence(req.getResidence()); + companyInfo.setShortNameEng(req.getShortNameEng()); + companyInfo.setFullNameEng(req.getFullNameEng()); + companyInfo.setShortName(req.getShortName()); + companyInfo.setFullName(req.getFullName()); + companyInfoMap.update(companyInfo); + log.debug("successfully processed, id {}", companyInfo.getId()); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java new file mode 100644 index 000000000..fc16ae75c --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanyService.java @@ -0,0 +1,43 @@ +package ru.spcex.clearing.company.service; + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.Company; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class CompanyService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg companyMap; + + @Autowired + public CompanyService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + super(kafkaQueue); + this.companyMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Company, Company.class); + } + + @Override + public void afterPropertiesSet() { + callback(CommonDeleteRequest.class) + .setConsumer(this::deleteCompany) + .forDestination(Consts.DESTINATION_COMPANY_DELETE, callbacks::put); + init(); + } + + private void deleteCompany(BaseRequest userRequest) { + CommonDeleteRequest req = userRequest.getRequestPayload(); + log.debug("CommonDeleteRequest received id = {}", req.getId()); + Company company = companyMap.getSingleObjectByID(req.getId()); + companyMap.delete(company); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java new file mode 100644 index 000000000..c62cd502e --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/CompanySymbolService.java @@ -0,0 +1,48 @@ +package ru.spcex.clearing.company.service; + + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.company.CompanySymbols; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class CompanySymbolService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg companySymbolsMap; + + @Autowired + public CompanySymbolService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + super(kafkaQueue); + this.companySymbolsMap = imdgProvider.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); + } + + @Override + public void afterPropertiesSet() { + callback(CompanySymbolUpdateRequest.class) + .setConsumer(this::companySymbolUpdate) + .forDestination(Consts.DESTINATION_COMPANY_SYMBOL_UPDATE, callbacks::put); + init(); + } + + public void companySymbolUpdate(BaseRequest userRequest) { + CompanySymbolUpdateRequest req = userRequest.getRequestPayload(); + log.debug("CompanySymbolUpdateRequest received"); + CompanySymbols companySymbols = companySymbolsMap.getSingleObjectByID(req.getId()); + companySymbols.setCompanySymbol(req.getCompanySymbol()); + companySymbols.setCompanySymbolValue(req.getCompanySymbolValue()); + + companySymbolsMap.update(companySymbols); + log.debug("successfully processed, id {}", companySymbols.getId()); + } +} diff --git a/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java new file mode 100644 index 000000000..f28ef832f --- /dev/null +++ b/clearing-parent/company-service/src/main/java/ru/spcex/clearing/company/service/ContactService.java @@ -0,0 +1,45 @@ +package ru.spcex.clearing.company.service; + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import ru.clearing.classes.statics.data.profile.Contact; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +public class ContactService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg contactMap; + + @Autowired + public ContactService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + super(kafkaQueue); + this.contactMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Contact, Contact.class); + } + + @Override + public void afterPropertiesSet() { + callback(ContactUpdateRequest.class) + .setConsumer(this::contactUpdate) + .forDestination(Consts.DESTINATION_CONTACT_UPDATE, callbacks::put); + init(); + } + + public void contactUpdate(BaseRequest userRequest) { + ContactUpdateRequest req = userRequest.getRequestPayload(); + log.debug("CompanySymbolUpdateRequest received"); + Contact contact = contactMap.getSingleObjectByID(req.getId()); + contact.setContactType(req.getContactType()); + contact.setContactValue(req.getContactValue()); + + contactMap.update(contact); + log.debug("successfully processed, id {}", contact.getId()); + } +} \ No newline at end of file diff --git a/clearing-parent/company-service/src/main/resources/application.properties b/clearing-parent/company-service/src/main/resources/application.properties new file mode 100644 index 000000000..f3f6bd027 --- /dev/null +++ b/clearing-parent/company-service/src/main/resources/application.properties @@ -0,0 +1,13 @@ +spring.main.web-application-type=none + +utility-service.hazelcast.cluster-members=127.0.0.1 +utility-service.hazelcast.login=dev +utility-service.hazelcast.password=dev-pass + +utility-service.kafka.bootstrap-servers=localhost:9092 +utility-service.kafka.group-id=dev-group +utility-service.kafka.enable-auto-commit=false +utility-service.kafka.session-timeout-ms=30000 +utility-service.kafka.auto-offset-reset=latest +utility-service.kafka.linger-ms=1 +utility-service.kafka.buffer-memory=33554432 \ No newline at end of file diff --git a/clearing-parent/company-service/src/main/resources/logback.xml b/clearing-parent/company-service/src/main/resources/logback.xml new file mode 100644 index 000000000..bc21772aa --- /dev/null +++ b/clearing-parent/company-service/src/main/resources/logback.xml @@ -0,0 +1,38 @@ + + + + + + %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n + utf-8 + + + + ./logs/company-service.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n + utf8 + + + + ./logs/company-service.%i.log + + 1 + 10 + + + 500MB + + + + + + + + + + + + + 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 b6acee77f..253cf259c 100644 --- a/clearing-parent/db-scripts/src/main/resources/db/DDL.sql +++ b/clearing-parent/db-scripts/src/main/resources/db/DDL.sql @@ -1,6 +1,26 @@ -- DB version: 0.0.0.5 /* Dictionaries */ +-- interestStatus - Справочник статусов возваращения процентов +CREATE TABLE IF NOT EXISTS INTEREST_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255)); +COMMENT ON TABLE INTEREST_STATUS_DICTIONARY IS 'Справочник статусов возваращения процентов'; + +COMMENT ON COLUMN INTEREST_STATUS_DICTIONARY.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN INTEREST_STATUS_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN INTEREST_STATUS_DICTIONARY.NAME IS 'Наименование'; + +-- clearingStatus - Справочник результатов клиринга +CREATE TABLE IF NOT EXISTS CLEARING_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255)); +COMMENT ON TABLE CLEARING_STATUS_DICTIONARY IS 'Справочник результатов клиринга'; + +COMMENT ON COLUMN CLEARING_STATUS_DICTIONARY.ID IS 'Идентификатор записи'; + +COMMENT ON COLUMN CLEARING_STATUS_DICTIONARY.CODE IS 'Код'; + +COMMENT ON COLUMN CLEARING_STATUS_DICTIONARY.NAME IS 'Наименование'; + -- workflowStatus - Справочник статусов бизнес-процессов CREATE TABLE IF NOT EXISTS WORKFLOW_STATUS_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255)); COMMENT ON TABLE WORKFLOW_STATUS_DICTIONARY IS 'Справочник статусов бизнес-процессов'; @@ -253,7 +273,7 @@ COMMENT ON COLUMN RESULT_STATUS_DICTIONARY.CODE IS 'Код'; COMMENT ON COLUMN RESULT_STATUS_DICTIONARY.NAME IS 'Статус обработки'; --- extError - +-- extError - CREATE TABLE IF NOT EXISTS EXT_ERROR_DICTIONARY(ID bigint PRIMARY KEY, CODE char(4), NAME varchar(255)); COMMENT ON TABLE EXT_ERROR_DICTIONARY IS ''; @@ -305,9 +325,9 @@ COMMENT ON COLUMN COMPANY.CREATED_AT IS 'Дата и время создания COMMENT ON COLUMN COMPANY.UPDATED_AT IS 'Дата и время изменения записи'; -COMMENT ON COLUMN COMPANY.TRADING_CODE IS 'Торговый код'; +COMMENT ON COLUMN COMPANY.TRADING_CODE IS 'Код участника торгов'; -COMMENT ON COLUMN COMPANY.CLEARING_CODE IS 'Клиринговый код'; +COMMENT ON COLUMN COMPANY.CLEARING_CODE IS 'Код участника клиринга'; COMMENT ON COLUMN COMPANY.WORKFLOW_STATUS IS 'Статус (linked to workflowStatus)'; @@ -316,7 +336,7 @@ COMMENT ON COLUMN COMPANY.SHORT_NAME IS 'Краткое наименование COMMENT ON COLUMN COMPANY.FULL_NAME IS 'Полное наименование Компании'; -- companyInfo - Профиль Компании -CREATE TABLE IF NOT EXISTS COMPANY_INFO(ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255)); +CREATE TABLE IF NOT EXISTS COMPANY_INFO(ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), TRADING_CODE varchar(255), CLEARING_CODE varchar(255)); COMMENT ON TABLE COMPANY_INFO IS 'Профиль Компании'; COMMENT ON COLUMN COMPANY_INFO.ID IS 'Идентификатор записи'; @@ -341,9 +361,17 @@ COMMENT ON COLUMN COMPANY_INFO.SHORT_NAME_ENG IS 'Краткое наимено COMMENT ON COLUMN COMPANY_INFO.FULL_NAME_ENG IS 'Полное наименование Компании на английском'; +COMMENT ON COLUMN COMPANY_INFO.SHORT_NAME IS 'Краткое наименование Компании'; + +COMMENT ON COLUMN COMPANY_INFO.FULL_NAME IS 'Полное наименование Компании'; + +COMMENT ON COLUMN COMPANY_INFO.TRADING_CODE IS 'Код участника торгов'; + +COMMENT ON COLUMN COMPANY_INFO.CLEARING_CODE IS 'Код участника клиринга'; + -- Update log of companyInfo - Профиль Компании -CREATE TABLE IF NOT EXISTS COMPANY_INFO_UPDATE(COMPANY_INFO_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255)); +CREATE TABLE IF NOT EXISTS COMPANY_INFO_UPDATE(COMPANY_INFO_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, CORPORATION_SOLE_TYPE char(4), COUNTRY_CODE char(4), DESCRIPTION varchar, PROFESSIONAL_SIGN char(4), LEGAL_KIND char(4), ORGANIZATION_TYPE char(4), RESIDENCE char(4), SHORT_NAME_ENG varchar(255), FULL_NAME_ENG varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255), TRADING_CODE varchar(255), CLEARING_CODE varchar(255) ); COMMENT ON TABLE COMPANY_INFO_UPDATE IS 'Журнал изменений таблицы companyInfo'; COMMENT ON COLUMN COMPANY_INFO_UPDATE.COMPANY_INFO_ID IS 'Идентификатор записи в таблице COMPANY_INFO'; COMMENT ON COLUMN COMPANY_INFO_UPDATE.EVENT_TIME IS 'Дата и время изменения'; @@ -371,6 +399,14 @@ COMMENT ON COLUMN COMPANY_INFO_UPDATE.SHORT_NAME_ENG IS 'Краткое наим COMMENT ON COLUMN COMPANY_INFO_UPDATE.FULL_NAME_ENG IS 'Полное наименование Компании на английском'; +COMMENT ON COLUMN COMPANY_INFO_UPDATE.SHORT_NAME IS 'Краткое наименование Компании'; + +COMMENT ON COLUMN COMPANY_INFO_UPDATE.FULL_NAME IS 'Полное наименование Компании'; + +COMMENT ON COLUMN COMPANY_INFO_UPDATE.TRADING_CODE IS 'Код участника торгов'; + +COMMENT ON COLUMN COMPANY_INFO_UPDATE.CLEARING_CODE IS 'Код участника клиринга'; + -- clearingMemberCategory - Категории участника клиринга CREATE TABLE IF NOT EXISTS CLEARING_MEMBER_CATEGORY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CLEARING_MEMBER_CATEGORY char(4)); COMMENT ON TABLE CLEARING_MEMBER_CATEGORY IS 'Категории участника клиринга'; @@ -860,7 +896,7 @@ COMMENT ON COLUMN LISTING_UPDATE.TRADING_CURRENCY IS 'Идентификатор COMMENT ON COLUMN LISTING_UPDATE.WORKFLOW_STATUS IS 'Идентификатор статуса листинга в системе (linked to workflowStatus)'; -- market - Торговые площадки -CREATE TABLE IF NOT EXISTS MARKET(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), MARKET_CODE varchar(255), SETTLEMENT_CURRENCY char(4), SECTOR char(4)); +CREATE TABLE IF NOT EXISTS MARKET(ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), CODE char(4), SETTLEMENT_CURRENCY char(4), SECTOR char(4)); COMMENT ON TABLE MARKET IS 'Торговые площадки'; COMMENT ON COLUMN MARKET.ID IS 'Идентификатор записи'; @@ -875,7 +911,7 @@ COMMENT ON COLUMN MARKET.EXCHANGE_ID IS 'Идентификатор площад COMMENT ON COLUMN MARKET.NAME IS 'Наименование'; -COMMENT ON COLUMN MARKET.MARKET_CODE IS 'Режим'; +COMMENT ON COLUMN MARKET.CODE IS 'Режим'; COMMENT ON COLUMN MARKET.SETTLEMENT_CURRENCY IS 'Валютный код расчетов (linked to currency)'; @@ -883,7 +919,7 @@ COMMENT ON COLUMN MARKET.SECTOR IS 'Идентификатор сектора (l -- Update log of market - Торговые площадки -CREATE TABLE IF NOT EXISTS MARKET_UPDATE(MARKET_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), MARKET_CODE varchar(255), SETTLEMENT_CURRENCY char(4), SECTOR char(4)); +CREATE TABLE IF NOT EXISTS MARKET_UPDATE(MARKET_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, CREATED_AT timestamp, UPDATED_AT timestamp, DESCRIPTION varchar(255), EXCHANGE_ID bigint, NAME varchar(255), CODE char(4), SETTLEMENT_CURRENCY char(4), SECTOR char(4)); COMMENT ON TABLE MARKET_UPDATE IS 'Журнал изменений таблицы market'; COMMENT ON COLUMN MARKET_UPDATE.MARKET_ID IS 'Идентификатор записи в таблице MARKET'; COMMENT ON COLUMN MARKET_UPDATE.EVENT_TIME IS 'Дата и время изменения'; @@ -901,7 +937,7 @@ COMMENT ON COLUMN MARKET_UPDATE.EXCHANGE_ID IS 'Идентификатор пл COMMENT ON COLUMN MARKET_UPDATE.NAME IS 'Наименование'; -COMMENT ON COLUMN MARKET_UPDATE.MARKET_CODE IS 'Режим'; +COMMENT ON COLUMN MARKET_UPDATE.CODE IS 'Режим'; COMMENT ON COLUMN MARKET_UPDATE.SETTLEMENT_CURRENCY IS 'Валютный код расчетов (linked to currency)'; @@ -1193,7 +1229,7 @@ COMMENT ON COLUMN CONTRACT_REGISTER.VALID_FROM_DATE IS 'Дата начала с COMMENT ON COLUMN CONTRACT_REGISTER.VALID_TO_DATE IS 'Дата окончания срока действия'; -- liabilitiesClaimsMoney - Требования и обязательства денежных средств -CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_MONEY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_AMOUNT numeric(72,2), CLAIMS_AMOUNT numeric(72,2), SETTLEMENT_DATE date, TRADING_DATE date, CURRENCY_CODE char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); +CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_MONEY(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_AMOUNT numeric(72,2), REFUND_INTEREST numeric(72,2), ACCRUED_INTEREST numeric(72,2), CLAIMS_AMOUNT numeric(72,2), SETTLEMENT_DATE date, TRADING_DATE date, CURRENCY char(4), TRADING_CODE varchar(255), SHORT_NAME varchar(255), FULL_NAME varchar(255)); COMMENT ON TABLE LIABILITIES_CLAIMS_MONEY IS 'Требования и обязательства денежных средств'; COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ID IS 'Идентификатор записи'; @@ -1210,15 +1246,19 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT_TYPE IS 'Тип счета (l COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCOUNT IS 'Счет (linked to account)'; -COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.LIABILITIES_AMOUNT IS 'Регистр «Обязательства по денежным средствам, сформированные по результатам собственных сделок Участника клиринга»'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.LIABILITIES_AMOUNT IS 'Регистр «Обязательства по денежным средствам, сформированные по результатам собственных сделок Участника клиринга», исключая проценты'; -COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CLAIMS_AMOUNT IS 'Сумма требований'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.REFUND_INTEREST IS 'Проценты к возврату'; + +COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.ACCRUED_INTEREST IS 'Начисленные проценты'; + +COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CLAIMS_AMOUNT IS 'Сумма требований, исключая проценты'; COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.SETTLEMENT_DATE IS 'Дата расчета'; COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.TRADING_DATE IS 'Дата торгов'; -COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CURRENCY_CODE IS 'Код валюты (linked to currency)'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.CURRENCY IS 'Код валюты (linked to currencyCode)'; COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.TRADING_CODE IS 'Торговый код Участника (linked to company)'; @@ -1227,7 +1267,7 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.SHORT_NAME IS 'Короткое на COMMENT ON COLUMN LIABILITIES_CLAIMS_MONEY.FULL_NAME IS 'Полное наименование Участника (linked to company)'; -- liabilitiesClaimsAssets - Требования и обязательства финансовых активов -CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_ASSETS(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_QUANTITY numeric(72,18), CLAIMS_QUANTITY numeric(72,18), SETTLEMENT_DATE date, TRADING_DATE date, REFUND_DATE date, SECURITY_ID bigint, TRADING_CODE varchar(255), SHORT_NAME varchar(255), CONTRACT varchar(255), COMMENT varchar(255), FULL_NAME varchar(255), PARENT_ID bigint); +CREATE TABLE IF NOT EXISTS LIABILITIES_CLAIMS_ASSETS(ID bigint PRIMARY KEY, COMPANY_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, ACCOUNT_ID bigint, ACCOUNT_TYPE bigint, ACCOUNT bigint, LIABILITIES_QUANTITY numeric(72,18), CLAIMS_QUANTITY numeric(72,18), CURRENCY char(4), SETTLEMENT_DATE date, TRADING_DATE date, REFUND_DATE date, PRICE numeric(72,18), SECURITY_ID bigint, TRADING_CODE varchar(255), SHORT_NAME varchar(255), CONTRACT varchar(255), COMMENT varchar(255), FULL_NAME varchar(255), PARENT_ID bigint, LIABILITIES_CLAIMS_MONEY_ID bigint, INTEREST_STATUS bigint, CLEARING_STATUS bigint, PAYMENT_ID bigint, REFUND_PAYMENT_ID bigint); COMMENT ON TABLE LIABILITIES_CLAIMS_ASSETS IS 'Требования и обязательства финансовых активов'; COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.ID IS 'Идентификатор записи'; @@ -1248,12 +1288,16 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.LIABILITIES_QUANTITY IS 'Сумма COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.CLAIMS_QUANTITY IS 'Сумма требований'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.CURRENCY IS 'Код валюты (linked to currencyCode)'; + COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.SETTLEMENT_DATE IS 'Дата расчета'; COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.TRADING_DATE IS 'Дата торгов'; COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.REFUND_DATE IS 'Дата возврата'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.PRICE IS 'Ставка по депозиту'; + COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.SECURITY_ID IS 'Инструмент (linked to security)'; COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.TRADING_CODE IS 'Торговый код Участника (linked to company)'; @@ -1268,6 +1312,16 @@ COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.FULL_NAME IS 'Полное наим COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.PARENT_ID IS 'Идентификатор записи основного договора без разделения'; +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.LIABILITIES_CLAIMS_MONEY_ID IS 'Регистры денежных средств (linked to liabilitiesClaimsMoney)'; + +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.INTEREST_STATUS IS 'Статус возврата процентов (linked to interestStatus)'; + +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.CLEARING_STATUS IS 'Статус клиринга (linked to clearingStatus)'; + +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.PAYMENT_ID IS 'Платеж'; + +COMMENT ON COLUMN LIABILITIES_CLAIMS_ASSETS.REFUND_PAYMENT_ID IS 'Обратный платежа'; + -- statement - Денежные средства от расчетной организации CREATE TABLE IF NOT EXISTS STATEMENT(ID bigint PRIMARY KEY, ADDRESSEE_ID bigint, SENDER_ID bigint, CREATED_AT timestamp, UPDATED_AT timestamp, CLEARING_DATE date, STATEMENT_TYPE_ID bigint, COMMENT varchar(255), ACCOUNT_ID bigint, ACCOUNT bigint, IN_OUT_DIRECTION bigint, SETTLEMENT_DATE date, AMOUNT numeric(72,2), CASH_MOVEMENTCURRENCY_CODE char(4), STATUS_ID bigint); COMMENT ON TABLE STATEMENT IS 'Денежные средства от расчетной организации'; @@ -1386,6 +1440,144 @@ COMMENT ON COLUMN MARKET_DATA.UPDATED_AT IS 'Время изменения сд COMMENT ON COLUMN MARKET_DATA.TRADING_DATE IS 'Дата торгов'; +-- chargeTariff - Тарифы комиссий +CREATE TABLE IF NOT EXISTS CHARGE_TARIFF(ID bigint PRIMARY KEY, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp); +COMMENT ON TABLE CHARGE_TARIFF IS 'Тарифы комиссий'; + +COMMENT ON COLUMN CHARGE_TARIFF.ID IS 'Идентификатор'; + +COMMENT ON COLUMN CHARGE_TARIFF.MARKET IS 'Секция (linked to market)'; + +COMMENT ON COLUMN CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; + +COMMENT ON COLUMN CHARGE_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; + +COMMENT ON COLUMN CHARGE_TARIFF.CHARGE_RATE IS 'Ставка комиссионного сбора'; + +COMMENT ON COLUMN CHARGE_TARIFF.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)'; + +COMMENT ON COLUMN CHARGE_TARIFF.VALID_FROM_DATE IS 'Дата начала срока действия'; + +COMMENT ON COLUMN CHARGE_TARIFF.VALID_TO_DATE IS 'Дата окончания срока действия'; + +COMMENT ON COLUMN CHARGE_TARIFF.CREATED_AT IS 'Создано'; + +COMMENT ON COLUMN CHARGE_TARIFF.UPDATED_AT IS 'Изменено'; + + +-- Update log of chargeTariff - Тарифы комиссий +CREATE TABLE IF NOT EXISTS CHARGE_TARIFF_UPDATE(CHARGE_TARIFF_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp); +COMMENT ON TABLE CHARGE_TARIFF_UPDATE IS 'Журнал изменений таблицы chargeTariff'; +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CHARGE_TARIFF_ID IS 'Идентификатор записи в таблице CHARGE_TARIFF'; +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.EVENT_TIME IS 'Дата и время изменения'; +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.EVENT_USER_ID IS 'Инициатор изменения'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.ID IS 'Идентификатор'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.MARKET IS 'Секция (linked to market)'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CHARGE_RATE IS 'Ставка комиссионного сбора'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.VALID_FROM_DATE IS 'Дата начала срока действия'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.VALID_TO_DATE IS 'Дата окончания срока действия'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.CREATED_AT IS 'Создано'; + +COMMENT ON COLUMN CHARGE_TARIFF_UPDATE.UPDATED_AT IS 'Изменено'; + +-- individualChargeTariff - Индивидуальные тарифы комиссий для Участника +CREATE TABLE IF NOT EXISTS INDIVIDUAL_CHARGE_TARIFF(ID bigint PRIMARY KEY, COMPANY_ID bigint, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp); +COMMENT ON TABLE INDIVIDUAL_CHARGE_TARIFF IS 'Индивидуальные тарифы комиссий для Участника'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.ID IS 'Идентификатор'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.COMPANY_ID IS 'Участник (linked to company)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.MARKET IS 'Секция (linked to market)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CHARGE_RATE IS 'Ставка комиссионного сбора'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.VALID_FROM_DATE IS 'Дата начала срока действия'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.VALID_TO_DATE IS 'Дата окончания срока действия'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.CREATED_AT IS 'Создано'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF.UPDATED_AT IS 'Изменено'; + + +-- Update log of individualChargeTariff - Индивидуальные тарифы комиссий для Участника +CREATE TABLE IF NOT EXISTS INDIVIDUAL_CHARGE_TARIFF_UPDATE(INDIVIDUAL_CHARGE_TARIFF_ID BIGINT NOT NULL, EVENT_TIME timestamp, EVENT_USER_ID BIGINT, ID bigint PRIMARY KEY, COMPANY_ID bigint, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp); +COMMENT ON TABLE INDIVIDUAL_CHARGE_TARIFF_UPDATE IS 'Журнал изменений таблицы individualChargeTariff'; +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.INDIVIDUAL_CHARGE_TARIFF_ID IS 'Идентификатор записи в таблице INDIVIDUAL_CHARGE_TARIFF'; +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.EVENT_TIME IS 'Дата и время изменения'; +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.EVENT_USER_ID IS 'Инициатор изменения'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.ID IS 'Идентификатор'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.COMPANY_ID IS 'Участник (linked to company)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.MARKET IS 'Секция (linked to market)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CHARGE_RATE IS 'Ставка комиссионного сбора'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.VALID_FROM_DATE IS 'Дата начала срока действия'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.VALID_TO_DATE IS 'Дата окончания срока действия'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.CREATED_AT IS 'Создано'; + +COMMENT ON COLUMN INDIVIDUAL_CHARGE_TARIFF_UPDATE.UPDATED_AT IS 'Изменено'; + +-- companyTariff - Тарифы комиссий в разрезе Участника +CREATE TABLE IF NOT EXISTS COMPANY_TARIFF(ID bigint PRIMARY KEY, MARKET bigint, CLEARING_MEMBER_CATEGORY char(4), FULL_NAME varchar(255), CONTRACT varchar(255), CHARGE_TYPE_ID bigint, CHARGE_RATE numeric(72,18), CURRENCY bigint, VALID_FROM_DATE date, VALID_TO_DATE date, CREATED_AT timestamp, UPDATED_AT timestamp, COMPANY_ID bigint); +COMMENT ON TABLE COMPANY_TARIFF IS 'Тарифы комиссий в разрезе Участника'; + +COMMENT ON COLUMN COMPANY_TARIFF.ID IS 'Идентификатор'; + +COMMENT ON COLUMN COMPANY_TARIFF.MARKET IS 'Секция (linked to market)'; + +COMMENT ON COLUMN COMPANY_TARIFF.CLEARING_MEMBER_CATEGORY IS 'Категория участника клиринга (linked to clearingCategory)'; + +COMMENT ON COLUMN COMPANY_TARIFF.FULL_NAME IS 'Полное наименование Участника (linked to company)'; + +COMMENT ON COLUMN COMPANY_TARIFF.CONTRACT IS 'Номер договора'; + +COMMENT ON COLUMN COMPANY_TARIFF.CHARGE_TYPE_ID IS 'Тип комиссии (linked to chargeType)'; + +COMMENT ON COLUMN COMPANY_TARIFF.CHARGE_RATE IS 'Ставка комиссионного сбора'; + +COMMENT ON COLUMN COMPANY_TARIFF.CURRENCY IS 'Валюта начисления комиссии (linked to currencyCode)'; + +COMMENT ON COLUMN COMPANY_TARIFF.VALID_FROM_DATE IS 'Дата начала срока действия'; + +COMMENT ON COLUMN COMPANY_TARIFF.VALID_TO_DATE IS 'Дата окончания срока действия'; + +COMMENT ON COLUMN COMPANY_TARIFF.CREATED_AT IS 'Создано'; + +COMMENT ON COLUMN COMPANY_TARIFF.UPDATED_AT IS 'Изменено'; + +COMMENT ON COLUMN COMPANY_TARIFF.COMPANY_ID IS 'Участник (linked to company)'; + -- sDf01 - ДФ 02 - Направление уведомлений об операциях загрузки CREATE TABLE IF NOT EXISTS S_DF01(ID bigint PRIMARY KEY, DATE date, CURR_CODE char(4), ACCOUNT varchar(25), REMAINDER_SUM varchar(20), DEAL char(4), ACC_CODE varchar(5), DAT varchar(8), MARKET varchar(1), ACC_NAME varchar(1), ACC_TYPE varchar(1), SUMENGAGE varchar(22), SUMUNBLOCK varchar(22), FILE_TYPE varchar(1), RESULT_CODE varchar(1), ERROR_TEXT varchar(255), EXT_ERROR_CODE char(4)); COMMENT ON TABLE S_DF01 IS 'ДФ 02 - Направление уведомлений об операциях загрузки'; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java index c87d157c7..c9b65f572 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/base/ObjectBaseMapStore.java @@ -77,6 +77,7 @@ public abstract class ObjectBaseMapStore extends Simp return rs.getObject(columnName, Long.class); } + // todo отрефакторить метод - длинное название protected Instant getInstantFromTimestamp(ResultSet rs, String column) throws SQLException { Timestamp date = rs.getTimestamp(column); return date != null ? date.toInstant() : null; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java index 21ab5d97c..64dc14d4d 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessevent/CompanyUpdateMapStore.java @@ -2,9 +2,9 @@ package ru.spcex.clearing.imdg.businessevent; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.lang.NonNull; -import ru.clearing.classes.StaticData.Company.Company; -import ru.clearing.classes.StaticData.Company.CompanyUpdate; -import ru.clearing.classes.StaticData.Profile.CompanyInfo; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanyUpdate; +import ru.clearing.classes.statics.data.profile.CompanyInfo; import ru.spcex.clearing.imdg.base.BusinessEventMapStore; import ru.spcex.clearing.imdg.utils.DbUtilsHelper; import ru.spcex.clearing.imdg.utils.TimeUtil; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountMapStore.java new file mode 100644 index 000000000..b696a0622 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/AccountMapStore.java @@ -0,0 +1,66 @@ +package ru.spcex.clearing.imdg.businessobject; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.StaticData.Account.Account; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.clearing.imdg.utils.DbUtilsHelper; +import ru.spcex.clearing.imdg.utils.TimeUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +@Component +public class AccountMapStore extends TemplateMapStore { + + public AccountMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_Account; + } + + @Override + public String getTableName() { + return "ACCOUNT"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT", "ACCOUNT_TYPE", "RELATION_ID", "STATUS" + }; + } + + @Override + public Account objectReader(ResultSet resultSet) throws SQLException { + Account object = new Account(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); + object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); + object.setAccount(resultSet.getObject("ACCOUNT", String.class)); + object.setAccountType(resultSet.getObject("ACCOUNT_TYPE", String.class)); + object.setRelationId(resultSet.getObject("RELATION_ID", Long.class)); + object.setStatus(resultSet.getObject("STATUS", String.class)); + return object; + } + + @Override + public Object[] objectToField(Account object) { + Object[] args = new Object[]{ + object.getId(), + TimeUtil.fromInstant(object.getCreated()), + TimeUtil.fromInstant(object.getUpdated()), + object.getAccount(), + object.getAccountType(), + object.getRelationId(), + object.getStatus() + }; + return args; + } + +}//todo updatemapstore !!! \ 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 30e21db9e..801be1c1c 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 @@ -4,8 +4,8 @@ import org.springframework.dao.support.DataAccessUtils; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; -import ru.clearing.classes.StaticData.Company.Company; -import ru.clearing.classes.StaticData.Profile.CompanyInfo; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.profile.CompanyInfo; import ru.spcex.clearing.imdg.base.BusinessObjectMapStore; import ru.spcex.clearing.imdg.utils.DbUtilsHelper; import ru.spcex.clearing.imdg.utils.TimeUtil; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java new file mode 100644 index 000000000..bdb505435 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/businessobject/RelationMapStore.java @@ -0,0 +1,71 @@ +package ru.spcex.clearing.imdg.businessobject; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.StaticData.Company.Relation.Relation; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.clearing.imdg.utils.DbUtilsHelper; +import ru.spcex.clearing.imdg.utils.TimeUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +@Component +public class RelationMapStore extends TemplateMapStore { + + public RelationMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_Relation; + } + + @Override + public String getTableName() { + return "RELATION"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "CREATED_AT", "UPDATED_AT", "CONSUMER_ID", "SUPPLIER_ID", "SERVICE_STATUS", "SERVICE_ID", "SERVICE_PRODUCT_ID", "COMMENT" + }; + } + + @Override + public Relation objectReader(ResultSet resultSet) throws SQLException { + Relation object = new Relation(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT")); + object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT")); + object.setConsumerId(resultSet.getObject("CONSUMER_ID", Long.class)); + object.setSupplierId(resultSet.getObject("SUPPLIER_ID", Long.class)); + object.setServiceStatus(resultSet.getObject("SERVICE_STATUS", String.class)); + object.setServiceId(resultSet.getObject("SERVICE_ID", Long.class)); + object.setServiceProductId(resultSet.getObject("SERVICE_PRODUCT_ID", Long.class)); + object.setComment(resultSet.getObject("COMMENT", String.class)); + return object; + } + + @Override + public Object[] objectToField(Relation object) { + Object[] args = new Object[]{ + object.getId(), + TimeUtil.fromInstant(object.getCreated()), + TimeUtil.fromInstant(object.getUpdated()), + object.getConsumerId(), + object.getSupplierId(), + object.getServiceStatus(), + object.getServiceId(), + object.getServiceProductId(), + object.getComment() + }; + return args; + } + +} +// todo Сделать BusinessEventMapStore RelationUpdateMapStore \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/AccountRoutingMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/AccountRoutingMapStore.java new file mode 100644 index 000000000..f4250d264 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/AccountRoutingMapStore.java @@ -0,0 +1,61 @@ +package ru.spcex.clearing.imdg.object; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.StaticData.Account.AccountRouting; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.clearing.imdg.utils.DbUtilsHelper; +import ru.spcex.clearing.imdg.utils.TimeUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +@Component +public class AccountRoutingMapStore extends TemplateMapStore { + + public AccountRoutingMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_AccountRouting; + } + + @Override + public String getTableName() { + return "ACCOUNT_ROUTING"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "DESTINATION_ID", "RELATION_ID", "SOURCE_ID" + }; + } + + @Override + public AccountRouting objectReader(ResultSet resultSet) throws SQLException { + AccountRouting object = new AccountRouting(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setDestinationId(resultSet.getObject("DESTINATION_ID", Long.class)); + object.setRelationId(resultSet.getObject("RELATION_ID", Long.class)); + object.setSourceId(resultSet.getObject("SOURCE_ID", Long.class)); + return object; + } + + @Override + public Object[] objectToField(AccountRouting object) { + Object[] args = new Object[]{ + object.getId(), + object.getDestinationId(), + object.getRelationId(), + object.getSourceId() + }; + return args; + } + +} +// todo Сделать BusinessEventMapStore AccountRoutingUpdateMapStore \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/BankAccountMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/BankAccountMapStore.java new file mode 100644 index 000000000..62970e8a8 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/BankAccountMapStore.java @@ -0,0 +1,79 @@ +package ru.spcex.clearing.imdg.object; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.StaticData.Account.BankAccount; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.clearing.imdg.utils.DbUtilsHelper; +import ru.spcex.clearing.imdg.utils.TimeUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +@Component +public class BankAccountMapStore extends TemplateMapStore { + + public BankAccountMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_BankAccount; + } + + @Override + public String getTableName() { + return "BANK_ACCOUNT"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "ACCOUNT_ID", "BANK_IDENTIFICATION_CODE", "BANK_NAME", "CORRESPONDENT_ACCOUNT_NAME", "CURRENCY", "DESTINATION", "IBAN", "INTERNATIONAL_TRANSFER_SIGN", "SWIFT_CODE", "TAXPAYER_IDENTIFICATION_NUMBER", "TAX_REGISTRATION_REASON_CODE", "CORRESPONDENT_ACCOUNT" + }; + } + + @Override + public BankAccount objectReader(ResultSet resultSet) throws SQLException { + BankAccount object = new BankAccount(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class)); + object.setBankIdentificationCode(resultSet.getObject("BANK_IDENTIFICATION_CODE", String.class)); + object.setBankName(resultSet.getObject("BANK_NAME", String.class)); + object.setCorrespondentAccountName(resultSet.getObject("CORRESPONDENT_ACCOUNT_NAME", String.class)); + object.setCurrency(resultSet.getObject("CURRENCY", String.class)); + object.setDestination(resultSet.getObject("DESTINATION", String.class)); + object.setIban(resultSet.getObject("IBAN", String.class)); + object.setInternationalTransferSign(resultSet.getObject("INTERNATIONAL_TRANSFER_SIGN", String.class)); + object.setSwiftCode(resultSet.getObject("SWIFT_CODE", String.class)); + object.setTaxpayerIdentificationNumber(resultSet.getObject("TAXPAYER_IDENTIFICATION_NUMBER", String.class)); + object.setTaxRegistrationReasonCode(resultSet.getObject("TAX_REGISTRATION_REASON_CODE", String.class)); + object.setCorrespondentAccount(resultSet.getObject("CORRESPONDENT_ACCOUNT", String.class)); + return object; + } + + @Override + public Object[] objectToField(BankAccount object) { + Object[] args = new Object[]{ + object.getId(), + object.getAccountId(), + object.getBankIdentificationCode(), + object.getBankName(), + object.getCorrespondentAccountName(), + object.getCurrency(), + object.getDestination(), + object.getIban(), + object.getInternationalTransferSign(), + object.getSwiftCode(), + object.getTaxpayerIdentificationNumber(), + object.getTaxRegistrationReasonCode(), + object.getCorrespondentAccount() + }; + return args; + } + +} +// todo Сделать BusinessEventMapStore BankAccountUpdateMapStore \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingAccountMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingAccountMapStore.java new file mode 100644 index 000000000..0abaf390f --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingAccountMapStore.java @@ -0,0 +1,63 @@ +package ru.spcex.clearing.imdg.object; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.StaticData.Account.ClearingAccount; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; +import ru.spcex.clearing.imdg.utils.DbUtilsHelper; +import ru.spcex.clearing.imdg.utils.TimeUtil; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; + +@Component +public class ClearingAccountMapStore extends TemplateMapStore { + + public ClearingAccountMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_ClearingAccount; + } + + @Override + public String getTableName() { + return "CLEARING_ACCOUNT"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "ACCOUNT_ID", "CASH_ACCOUNT_ID", "DEPO_ACCOUNT_ID", "SETTLEMENT_CODE" + }; + } + + @Override + public ClearingAccount objectReader(ResultSet resultSet) throws SQLException { + ClearingAccount object = new ClearingAccount(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class)); + object.setCashAccountId(resultSet.getObject("CASH_ACCOUNT_ID", Long.class)); + object.setDepoAccountId(resultSet.getObject("DEPO_ACCOUNT_ID", Long.class)); + object.setSettlementCode(resultSet.getObject("SETTLEMENT_CODE", String.class)); + return object; + } + + @Override + public Object[] objectToField(ClearingAccount object) { + Object[] args = new Object[]{ + object.getId(), + object.getAccountId(), + object.getCashAccountId(), + object.getDepoAccountId(), + object.getSettlementCode() + }; + return args; + } + +} +// todo Сделать BusinessEventMapStore ClearingAccountUpdateMapStore \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingMemberCategoryMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingMemberCategoryMapStore.java new file mode 100644 index 000000000..881d614fe --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/ClearingMemberCategoryMapStore.java @@ -0,0 +1,55 @@ +package ru.spcex.clearing.imdg.object; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Component; +import ru.clearing.classes.StaticData.generated.ClearingMemberCategory; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.imdg.base.TemplateMapStore; + +import java.sql.ResultSet; +import java.sql.SQLException; + +@Component +public class ClearingMemberCategoryMapStore extends TemplateMapStore { + + public ClearingMemberCategoryMapStore(JdbcTemplate jdbcTemplate) { + super(jdbcTemplate); + } + + @Override + public String getMapName() { + return IMDGDistributedNames.Map_ClearingMemberCategory; + } + + @Override + public String getTableName() { + return "CLEARING_MEMBER_CATEGORY"; + } + + @Override + public String[] getFields() { + return new String[]{ + "ID", "COMPANY_ID", "CLEARING_MEMBER_CATEGORY" + }; + } + + @Override + public ClearingMemberCategory objectReader(ResultSet resultSet) throws SQLException { + ClearingMemberCategory object = new ClearingMemberCategory(); + object.setId(resultSet.getObject("ID", Long.class)); + object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class)); + object.setClearingMemberCategory(resultSet.getObject("CLEARING_MEMBER_CATEGORY", String.class)); + return object; + } + + @Override + public Object[] objectToField(ClearingMemberCategory object) { + Object[] args = new Object[]{ + object.getId(), + object.getCompanyId(), + object.getClearingMemberCategory() + }; + return args; + } + +} \ No newline at end of file diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java index e6dc11297..ee62a53af 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/CompanyRoleSetMapStore.java @@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import ru.clearing.classes.StaticData.Company.CompanyRoleSet; +import ru.clearing.classes.statics.data.company.CompanyRoleSet; import ru.spcex.clearing.imdg.base.TemplateMapStore; import ru.spcex.clearing.imdg.IMDGDistributedNames; 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 74dfa90af..5952a177b 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 @@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import ru.clearing.classes.StaticData.Company.CompanySymbols; +import ru.clearing.classes.statics.data.company.CompanySymbols; import ru.spcex.clearing.imdg.base.ObjectBaseMapStore; import ru.spcex.clearing.imdg.utils.DbUtilsHelper; 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 cab560cc2..f03a3c79f 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 @@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import ru.clearing.classes.StaticData.Profile.Contact; +import ru.clearing.classes.statics.data.profile.Contact; import ru.spcex.clearing.imdg.base.ObjectBaseMapStore; import ru.spcex.clearing.imdg.utils.DbUtilsHelper; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java index 9cfe9c445..ace520cd7 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/KeyRateMapStore.java @@ -2,12 +2,11 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import ru.clearing.classes.StaticData.Misc.KeyRate; +import ru.clearing.classes.statics.data.misc.KeyRate; import ru.spcex.clearing.imdg.base.TemplateMapStore; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.utils.TimeUtil; -import java.math.BigDecimal; import java.sql.ResultSet; import java.sql.SQLException; @@ -42,7 +41,7 @@ public class KeyRateMapStore extends TemplateMapStore { protected KeyRate objectReader(ResultSet resultSet) throws SQLException { KeyRate keyRate = new KeyRate(); keyRate.setId(resultSet.getObject("ID", Long.class)); - keyRate.setRate(resultSet.getObject("RATE", BigDecimal.class)); + keyRate.setRate(resultSet.getObject("RATE", Double.class)); keyRate.setStartDate(getInstantFromTimestamp(resultSet,"START_DATE")); keyRate.setEndDate(getInstantFromTimestamp(resultSet, "END_DATE")); keyRate.setDocument(resultSet.getObject("DOCUMENT", String.class)); diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java index 113780189..cd635835b 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/object/MoneyMarketSecurityMapStore.java @@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import ru.clearing.classes.StaticData.Misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; import ru.spcex.clearing.imdg.base.TemplateMapStore; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.imdg.utils.TimeUtil; 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 ca3519005..8b21fffdb 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 @@ -2,7 +2,7 @@ package ru.spcex.clearing.imdg.object; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; -import ru.clearing.classes.StaticData.Profile.ProfileDocument; +import ru.clearing.classes.statics.data.profile.ProfileDocument; import ru.spcex.clearing.imdg.base.ObjectBaseMapStore; import ru.spcex.clearing.imdg.utils.DbUtilsHelper; import ru.spcex.clearing.imdg.utils.TimeUtil; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java index 1f652cdf2..fdb081b63 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/UpdateMapService.java @@ -7,8 +7,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import ru.clearing.classes.StaticData.Company.Company; -import ru.clearing.classes.StaticData.Company.CompanyUpdate; +import ru.clearing.classes.statics.data.company.Company; +import ru.clearing.classes.statics.data.company.CompanyUpdate; import ru.spcex.clearing.imdg.IMDGDistributedNames; @Service diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml index 3c0360f3e..717490f8d 100644 --- a/clearing-parent/pom.xml +++ b/clearing-parent/pom.xml @@ -24,6 +24,9 @@ dbf-importer dbf-exporter securities-service + utility-service + company-service + reports-service diff --git a/clearing-parent/reports-service/pom.xml b/clearing-parent/reports-service/pom.xml new file mode 100644 index 000000000..f5c8ebac9 --- /dev/null +++ b/clearing-parent/reports-service/pom.xml @@ -0,0 +1,62 @@ + + + + 4.0.0 + + reports-service + reports-service + Service for creating reports + SPCEX-1.0.0.0 + + + clearing + ru.spcex.clearing + SPCEX-1.0.0.0 + + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-autoconfigure + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + + + com.thoughtworks.xstream + xstream + 1.4.19 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + ${project.artifactId} + + + + + + \ No newline at end of file diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/ReportsServiceApplication.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/ReportsServiceApplication.java new file mode 100644 index 000000000..9c9f83420 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/ReportsServiceApplication.java @@ -0,0 +1,21 @@ +package ru.spcex.clearing.reports_service; + +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import ru.spcex.clearing.reports_service.services.ReportsService; + +@SpringBootApplication +public class ReportsServiceApplication { + public static void main(String[] args) { + try { + SpringApplicationBuilder builder = new SpringApplicationBuilder(ReportsServiceApplication.class); + builder.run(args); + } catch (Throwable e) { + LoggerFactory.getLogger(ReportsServiceApplication.class).error("DBF-Loader start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); + System.exit(-1); + } + ReportsService reportsService = new ReportsService(); + reportsService.writeXML(null); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/config/ReportsServiceConfig.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/config/ReportsServiceConfig.java new file mode 100644 index 000000000..44345db8c --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/config/ReportsServiceConfig.java @@ -0,0 +1,12 @@ +package ru.spcex.clearing.reports_service.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableConfigurationProperties +@ComponentScan(basePackages = {"ru.spcex.clearing.reports_service"}) +public class ReportsServiceConfig { + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/controller/DefaultController.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/controller/DefaultController.java new file mode 100644 index 000000000..5206e9db4 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/controller/DefaultController.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.reports_service.controller; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller("/") +public class DefaultController implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + + @RequestMapping(method = RequestMethod.GET, path = "/test", produces = MediaType.TEXT_PLAIN_VALUE) + @ResponseBody + public String processGet() { + log.info("Call test method for exporter controller"); + return "exporter controller test method"; + } + + @Override + public void afterPropertiesSet() throws Exception { + log.info("controller started"); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/exceptions/ConfigException.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/exceptions/ConfigException.java new file mode 100644 index 000000000..b51da9820 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/exceptions/ConfigException.java @@ -0,0 +1,6 @@ +package ru.spcex.clearing.reports_service.exceptions; + +public class ConfigException extends RuntimeException { + public ConfigException(String msg) { super(msg); } + public ConfigException(String msg, Throwable cause) { super(msg, cause); } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/properties/AProperties.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/properties/AProperties.java new file mode 100644 index 000000000..6dac8567b --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/properties/AProperties.java @@ -0,0 +1,8 @@ +package ru.spcex.clearing.reports_service.properties; + +import org.springframework.stereotype.Component; + +@Component("reportsServiceProperties") +public class AProperties { + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/services/ReportsService.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/services/ReportsService.java new file mode 100644 index 000000000..b94cba214 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/services/ReportsService.java @@ -0,0 +1,24 @@ +package ru.spcex.clearing.reports_service.services; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.AbstractDriver; +import ru.spcex.clearing.reports_service.xml_test.ChildElementForWrite; +import ru.spcex.clearing.reports_service.xml_test.CustomLocalDateConverter; +import ru.spcex.clearing.reports_service.xml_test.RootElementForWrite; + +public class ReportsService { + public void writeXML(AbstractDriver driver) { + XStream xStream = driver == null ? new XStream() : new XStream(driver); + + // достаточно только для рутового объекта вызвать обработку аннотаций + xStream.processAnnotations(RootElementForWrite.class); + xStream.registerConverter(new CustomLocalDateConverter(), -100); + + RootElementForWrite elementForWrite = new RootElementForWrite(); + elementForWrite.getTestList().add(new ChildElementForWrite()); + elementForWrite.getTestList().add(new ChildElementForWrite()); + String dataXml = xStream.toXML(elementForWrite); + + System.out.println(dataXml); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ChildElementForWrite.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ChildElementForWrite.java new file mode 100644 index 000000000..ba1db7e10 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ChildElementForWrite.java @@ -0,0 +1,80 @@ +package ru.spcex.clearing.reports_service.xml_test; + + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.annotations.XStreamOmitField; +import com.thoughtworks.xstream.converters.basic.BooleanConverter; +import com.thoughtworks.xstream.converters.basic.DateConverter; + +import java.util.Date; + +// without aliases +public class ChildElementForWrite { + @XStreamAlias("childStr") // alias for field name + private String testChildString = "testChildStr"; + + @XStreamAsAttribute + private Integer testAttributeInt = Integer.MIN_VALUE; + + // при использовании настраевомого встроенного конвертора, ему необходимо передать параметры в конструктор + // делается это посредством параметров strings, booleans, nulls. + // т.е. такая запись эквивалентна: + // new DateConverter("MM-yyyy-dd", null) + @XStreamConverter(value = DateConverter.class, strings = {"MM-yyyy-dd"}, nulls = {String[].class}) + private Date testDate = new Date(); + + @XStreamAsAttribute + @XStreamAlias("isBoolean") + @XStreamConverter(value = BooleanConverter.class, booleans = {true}, strings = {"yes", "no"}) + private Boolean testYesAttributeBool = Boolean.TRUE; + + private Integer testChildInt = Integer.MAX_VALUE; + + @XStreamOmitField + private String testIgnoredString = "testIgnore"; + + + + public String getTestChildString() { + return testChildString; + } + + public void setTestChildString(String testChildString) { + this.testChildString = testChildString; + } + + public Integer getTestAttributeInt() { + return testAttributeInt; + } + + public void setTestAttributeInt(Integer testAttributeInt) { + this.testAttributeInt = testAttributeInt; + } + + public Integer getTestChildInt() { + return testChildInt; + } + + public void setTestChildInt(Integer testChildInt) { + this.testChildInt = testChildInt; + } + + public String getTestIgnoredString() { + return testIgnoredString; + } + + public void setTestIgnoredString(String testIgnoredString) { + this.testIgnoredString = testIgnoredString; + } + + public Boolean getTestYesAttributeBool() { + return testYesAttributeBool; + } + + public void setTestYesAttributeBool(Boolean testYesAttributeBool) { + this.testYesAttributeBool = testYesAttributeBool; + } + +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/CustomLocalDateConverter.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/CustomLocalDateConverter.java new file mode 100644 index 000000000..11a414756 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/CustomLocalDateConverter.java @@ -0,0 +1,32 @@ +package ru.spcex.clearing.reports_service.xml_test; + +import com.thoughtworks.xstream.converters.Converter; +import com.thoughtworks.xstream.converters.MarshallingContext; +import com.thoughtworks.xstream.converters.UnmarshallingContext; +import com.thoughtworks.xstream.io.HierarchicalStreamReader; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +// самый большой минус работы с датами: если у какой то даты отличается формат, для нее нужен кастомный конвертер +public class CustomLocalDateConverter implements Converter { + private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + @Override + public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { + LocalDate date = (LocalDate) source; + writer.setValue(formatter.format(date)); + writer.addAttribute("formatted", "true"); + } + + @Override + public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { + // not implemented (not used) + return null; + } + + @Override + public boolean canConvert(Class type) { + return LocalDate.class.isAssignableFrom(type); + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ElementWithAttributeOnly.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ElementWithAttributeOnly.java new file mode 100644 index 000000000..9ee1da75d --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/ElementWithAttributeOnly.java @@ -0,0 +1,29 @@ +package ru.spcex.clearing.reports_service.xml_test; + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; + +@XStreamAlias("withAttrsOnly") +public class ElementWithAttributeOnly { + @XStreamAsAttribute + private String attrStr = "attrStr"; + + @XStreamAsAttribute + private Long attrLong = Long.MIN_VALUE; + + public String getAttrStr() { + return attrStr; + } + + public void setAttrStr(String attrStr) { + this.attrStr = attrStr; + } + + public Long getAttrLong() { + return attrLong; + } + + public void setAttrLong(Long attrLong) { + this.attrLong = attrLong; + } +} diff --git a/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/RootElementForWrite.java b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/RootElementForWrite.java new file mode 100644 index 000000000..f8ae35408 --- /dev/null +++ b/clearing-parent/reports-service/src/main/java/ru/spcex/clearing/reports_service/xml_test/RootElementForWrite.java @@ -0,0 +1,155 @@ +package ru.spcex.clearing.reports_service.xml_test; + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamConverter; +import com.thoughtworks.xstream.annotations.XStreamImplicit; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@XStreamAlias("root") // alias for classname +public class RootElementForWrite { + + @XStreamAlias("string") // alias for field + private String testString = "testString"; + + private BigDecimal testBigDecimal = new BigDecimal("666.666"); + + private Double testDouble = Double.MAX_VALUE; + + private Long testLong = Long.MIN_VALUE; + + private Boolean testBoolean = Boolean.FALSE; + + private LocalDate testLocalDateDefault = LocalDate.now(); + + @XStreamConverter(CustomLocalDateConverter.class) + private LocalDate testLocalDateCustom = LocalDate.now(); + + private LocalDateTime testLocalDateTime = LocalDateTime.now(); + + private OffsetDateTime testOffsetDateTime = OffsetDateTime.now(); + + private Instant testInstant = Instant.now(); + + @XStreamAlias("namedList") + private List testList = new ArrayList<>(); + + @XStreamImplicit + private List testListTwo = Arrays.asList(new ChildElementForWrite(), new ChildElementForWrite()); + + // can marshal without getter/setter + private ElementWithAttributeOnly elementWithAttributeOnly = new ElementWithAttributeOnly(); + + public String getTestString() { + return testString; + } + + public void setTestString(String testString) { + this.testString = testString; + } + + public BigDecimal getTestBigDecimal() { + return testBigDecimal; + } + + public void setTestBigDecimal(BigDecimal testBigDecimal) { + this.testBigDecimal = testBigDecimal; + } + + public Double getTestDouble() { + return testDouble; + } + + public void setTestDouble(Double testDouble) { + this.testDouble = testDouble; + } + + public Long getTestLong() { + return testLong; + } + + public void setTestLong(Long testLong) { + this.testLong = testLong; + } + + public Boolean getTestBoolean() { + return testBoolean; + } + + public void setTestBoolean(Boolean testBoolean) { + this.testBoolean = testBoolean; + } + + public LocalDate getTestLocalDate() { + return testLocalDateCustom; + } + + public void setTestLocalDate(LocalDate testLocalDate) { + this.testLocalDateCustom = testLocalDate; + } + + public LocalDateTime getTestLocalDateTime() { + return testLocalDateTime; + } + + public void setTestLocalDateTime(LocalDateTime testLocalDateTime) { + this.testLocalDateTime = testLocalDateTime; + } + + public OffsetDateTime getTestOffsetDateTime() { + return testOffsetDateTime; + } + + public void setTestOffsetDateTime(OffsetDateTime testOffsetDateTime) { + this.testOffsetDateTime = testOffsetDateTime; + } + + public Instant getTestInstant() { + return testInstant; + } + + public void setTestInstant(Instant testInstant) { + this.testInstant = testInstant; + } + + public List getTestList() { + return testList; + } + + public void setTestList(List testList) { + this.testList = testList; + } + + public List getTestListTwo() { + return testListTwo; + } + + public void setTestListTwo(List testListTwo) { + this.testListTwo = testListTwo; + } + + public LocalDate getTestLocalDateDefault() { + return testLocalDateDefault; + } + + public void setTestLocalDateDefault(LocalDate testLocalDateDefault) { + this.testLocalDateDefault = testLocalDateDefault; + } + + public LocalDate getTestLocalDateCustom() { + return testLocalDateCustom; + } + + public void setTestLocalDateCustom(LocalDate testLocalDateCustom) { + this.testLocalDateCustom = testLocalDateCustom; + } + +} + diff --git a/clearing-parent/reports-service/src/main/resources/application.properties b/clearing-parent/reports-service/src/main/resources/application.properties new file mode 100644 index 000000000..fdc884583 --- /dev/null +++ b/clearing-parent/reports-service/src/main/resources/application.properties @@ -0,0 +1,3 @@ +server.port=8080 +server.servlet.context-path=/reports_service +spring.main.web-application-type=servlet \ No newline at end of file diff --git a/clearing-parent/reports-service/src/main/resources/logback.xml b/clearing-parent/reports-service/src/main/resources/logback.xml new file mode 100644 index 000000000..865483aab --- /dev/null +++ b/clearing-parent/reports-service/src/main/resources/logback.xml @@ -0,0 +1,37 @@ + + + + + UTF-8 + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + ./logs/reports_service.log + + UTF-8 + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + ../logs/reports_service.%i.log + + 1 + 10 + + + 500MB + + + + + + + + + + + + + \ No newline at end of file diff --git a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java index 02ddfbcf4..33f330bc6 100644 --- a/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java +++ b/clearing-parent/securities-service/src/main/java/ru/spcex/clearing/securities/service/cud/MoneyMarketSecurityService.java @@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import ru.clearing.classes.StaticData.Misc.MoneyMarketSecurity; +import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; diff --git a/clearing-parent/utility-service/pom.xml b/clearing-parent/utility-service/pom.xml new file mode 100644 index 000000000..2aed17aef --- /dev/null +++ b/clearing-parent/utility-service/pom.xml @@ -0,0 +1,70 @@ + + + + clearing-parent + ru.spcex.clearing + SPCEX-1.0.0.0 + + 4.0.0 + + utility-service + + + 17 + 17 + + + + ru.spcex.platform + platform-messaging + + + ru.spcex.platform + platform-imdg-api-hazelcast-impl + + + ru.spcex.clearing + classes + + + org.springframework.boot + spring-boot-starter + + + com.fasterxml.jackson.core + jackson-databind + + + + + + + src/main/resources + + application.properties + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + ${project.artifactId} + + + + + + + \ No newline at end of file diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/UtilityServiceApplication.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/UtilityServiceApplication.java new file mode 100644 index 000000000..e4775c6e5 --- /dev/null +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/UtilityServiceApplication.java @@ -0,0 +1,12 @@ +package ru.spcex.clearing.utility; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class UtilityServiceApplication { + public static void main(String[] args) { + SpringApplication springApplication = new SpringApplication(UtilityServiceApplication.class); + springApplication.run(args); + } +} diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java new file mode 100644 index 000000000..e9284ce25 --- /dev/null +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/KafkaConfig.java @@ -0,0 +1,17 @@ +package ru.spcex.clearing.utility.config; + +import org.apache.kafka.clients.consumer.Consumer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; +import ru.spcex.clearing.utility.config.settings.UtilityServiceSettings; + +@Configuration +public class KafkaConfig { + @Autowired + @Bean + public Consumer createProducer(UtilityServiceSettings settings) { + return KafkaConsumerFactory.consumer(settings.getKafka()); + } +} diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/UtilityServiceImdgConfig.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/UtilityServiceImdgConfig.java new file mode 100644 index 000000000..2330cb2f6 --- /dev/null +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/UtilityServiceImdgConfig.java @@ -0,0 +1,49 @@ +package ru.spcex.clearing.utility.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import ru.spcex.clearing.utility.config.settings.UtilityServiceSettings; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; + +@Configuration +public class UtilityServiceImdgConfig { + @Bean(name = "taskExecutorHazelcastClientInitializer") + public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() { + return createThreadPoolTaskExecutor(1, true); + } + + @Bean(name = "taskExecutorIdGeneratorAwaiter") + public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() { + return createThreadPoolTaskExecutor(1, false); + } + + @Autowired + @Bean + public ImdgProvider imdgProvider( + @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, + @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, + UtilityServiceSettings settings + ) { + return new HazelcastService(taskExecutorHazelcastClientInitializer, + taskExecutorIdGeneratorAwaiter, + settings.getHazelcast()); + } + + + private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) { + ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor(); + if (maxPoolSz > 2) { + pool.setKeepAliveSeconds(60); + pool.setAllowCoreThreadTimeOut(true); + } + pool.setCorePoolSize(maxPoolSz); + pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion); + return pool; + } + +} diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/settings/UtilityServiceSettings.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/settings/UtilityServiceSettings.java new file mode 100644 index 000000000..54f22e60c --- /dev/null +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/config/settings/UtilityServiceSettings.java @@ -0,0 +1,31 @@ +package ru.spcex.clearing.utility.config.settings; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; + +@Component +@PropertySource("file:${spring.config.location}/application.properties") +@ConfigurationProperties("utility-service") +public class UtilityServiceSettings { + private HazelcastClientParams hazelcast; + private KafkaConsumerSettings kafka; + + public HazelcastClientParams getHazelcast() { + return hazelcast; + } + + public void setHazelcast(HazelcastClientParams hazelcast) { + this.hazelcast = hazelcast; + } + + public KafkaConsumerSettings getKafka() { + return kafka; + } + + public void setKafka(KafkaConsumerSettings kafka) { + this.kafka = kafka; + } +} diff --git a/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/KeyRateService.java b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/KeyRateService.java new file mode 100644 index 000000000..92c3cdf26 --- /dev/null +++ b/clearing-parent/utility-service/src/main/java/ru/spcex/clearing/utility/service/KeyRateService.java @@ -0,0 +1,75 @@ +package ru.spcex.clearing.utility.service; + +import org.apache.kafka.clients.consumer.Consumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.clearing.classes.statics.data.misc.KeyRate; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.KeyRateNewRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.KeyRateUpdateRequest; +import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Service +public class KeyRateService extends QueueConsumer implements InitializingBean { + private final Logger log = LoggerFactory.getLogger(getClass()); + private final Imdg keyRateMap; + + @Autowired + public KeyRateService(Consumer kafkaQueue, ImdgProvider imdgProvider) { + super(kafkaQueue); + this.keyRateMap = imdgProvider.getImdg(IMDGDistributedNames.Map_KeyRate, KeyRate.class); + } + + @Override + public void afterPropertiesSet() { + callback(KeyRateNewRequest.class) + .setConsumer(this::newKeyRate) + .forDestination(Consts.DESTINATION_KEY_RATE_NEW, callbacks::put); + callback(KeyRateUpdateRequest.class) + .setConsumer(this::updateKeyRate) + .forDestination(Consts.DESTINATION_KEY_RATE_UPDATE, callbacks::put); + callback(CommonDeleteRequest.class) + .setConsumer(this::deleteKeyRate) + .forDestination(Consts.DESTINATION_KEY_RATE_DELETE, callbacks::put); + init(); + } + + private void newKeyRate(BaseRequest userRequest) { + KeyRateNewRequest req = userRequest.getRequestPayload(); + log.debug("MoneyMarketSecurityNewRequest received"); + KeyRate keyRate = new KeyRate(); + keyRate.setEndDate(req.getEndDate()); + keyRate.setDocument(req.getDocument()); + keyRate.setRate(req.getKeyRate()); + keyRate.setStartDate(req.getStartDate()); + keyRateMap.insert(keyRate); + log.debug("successfully processed, new id {}", keyRate.getId()); + } + + private void updateKeyRate(BaseRequest userRequest) { + KeyRateUpdateRequest req = userRequest.getRequestPayload(); + log.debug("MoneyMarketSecurityUpdateRequest received id = {}", req.getId()); + KeyRate keyRate = keyRateMap.getSingleObjectByID(req.getId()); + keyRate.setEndDate(req.getEndDate()); + keyRate.setDocument(req.getDocument()); + keyRate.setRate(req.getKeyRate()); + keyRate.setStartDate(req.getStartDate()); + keyRateMap.update(keyRate); + } + + private void deleteKeyRate(BaseRequest userRequest) { + CommonDeleteRequest req = userRequest.getRequestPayload(); + log.debug("CommonDeleteRequest received id = {}", req.getId()); + KeyRate keyRate = keyRateMap.getSingleObjectByID(req.getId()); + keyRateMap.delete(keyRate); + } + +} diff --git a/clearing-parent/utility-service/src/main/resources/application.properties b/clearing-parent/utility-service/src/main/resources/application.properties new file mode 100644 index 000000000..f3f6bd027 --- /dev/null +++ b/clearing-parent/utility-service/src/main/resources/application.properties @@ -0,0 +1,13 @@ +spring.main.web-application-type=none + +utility-service.hazelcast.cluster-members=127.0.0.1 +utility-service.hazelcast.login=dev +utility-service.hazelcast.password=dev-pass + +utility-service.kafka.bootstrap-servers=localhost:9092 +utility-service.kafka.group-id=dev-group +utility-service.kafka.enable-auto-commit=false +utility-service.kafka.session-timeout-ms=30000 +utility-service.kafka.auto-offset-reset=latest +utility-service.kafka.linger-ms=1 +utility-service.kafka.buffer-memory=33554432 \ No newline at end of file diff --git a/clearing-parent/utility-service/src/main/resources/logback.xml b/clearing-parent/utility-service/src/main/resources/logback.xml new file mode 100644 index 000000000..e3e8a4454 --- /dev/null +++ b/clearing-parent/utility-service/src/main/resources/logback.xml @@ -0,0 +1,38 @@ + + + + + + %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n + utf-8 + + + + ./logs/utility-service.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n + utf8 + + + + ./logs/utility-service.%i.log + + 1 + 10 + + + 500MB + + + + + + + + + + + + + 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 b6eee8392..a1eb7515a 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 @@ -14,6 +14,12 @@ public final class IMDGDistributedNames { // public static final String Map_CompanyInfo = "Map_CompanyInfo"; интегрировано в Map_Company 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_Relation = "Map_Relation"; + public static final String Map_ClearingAccount = "Map_ClearingAccount"; + public static final String Map_BankAccount = "Map_BankAccount"; + public static final String Map_ClearingMemberCategory = "Map_ClearingMemberCategory"; + public static final String Map_AccountRouting = "Map_AccountRouting"; // public static final String Map_InterestStatusDictionary = "Map_InterestStatusDictionary"; future public static final String Map_AllowedDictionary = "Map_AllowedDictionary";