Merge remote-tracking branch 'origin/imdg_refactoring' into dev

This commit is contained in:
etreshenkov 2022-10-13 17:58:54 +03:00
commit c9aa070fe3
88 changed files with 6673 additions and 502 deletions

View file

@ -11,6 +11,7 @@ import ru.spcex.clearing.platform.messaging.domain.cud.utilities.KeyRateNewReque
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDeserializer;
import ru.spcex.platform.utils.enumeration.EnumMessage;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.Collection;
import java.util.Collections;
@ -19,7 +20,7 @@ import java.util.List;
public class KeyRateNewAction implements IAction<KeyRateNewRequest> {
@ApiModelProperty(value = "Ключевая ставка ЦБ РФ", example = "12.5")
@JsonProperty
public Double keyRate;
public BigDecimal keyRate;
@ApiModelProperty(value = "Дата начала действия ключевой ставки", example = "2022-01-20")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Europe/Moscow")
@JsonDeserialize(using = InstantDeserializer.class)
@ -57,11 +58,11 @@ public class KeyRateNewAction implements IAction<KeyRateNewRequest> {
return req;
}
public Double getKeyRate() {
public BigDecimal getKeyRate() {
return keyRate;
}
public void setKeyRate(Double keyRate) {
public void setKeyRate(BigDecimal keyRate) {
this.keyRate = keyRate;
}

View file

@ -9,6 +9,7 @@ import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.KeyRateUpdateRequest;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDeserializer;
import java.math.BigDecimal;
import java.time.Instant;
public class KeyRateUpdateAction implements IAction<KeyRateUpdateRequest> {
@ -17,7 +18,7 @@ public class KeyRateUpdateAction implements IAction<KeyRateUpdateRequest> {
public Long id;
@ApiModelProperty(value = "Ключевая ставка ЦБ РФ", example = "12.5")
@JsonProperty
public Double keyRate;
public BigDecimal keyRate;
@ApiModelProperty(value = "Дата начала действия ключевой ставки", example = "2022-01-20")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Europe/Moscow")
@JsonDeserialize(using = InstantDeserializer.class)
@ -49,11 +50,11 @@ public class KeyRateUpdateAction implements IAction<KeyRateUpdateRequest> {
return req;
}
public Double getKeyRate() {
public BigDecimal getKeyRate() {
return keyRate;
}
public void setKeyRate(Double keyRate) {
public void setKeyRate(BigDecimal keyRate) {
this.keyRate = keyRate;
}
@ -77,6 +78,10 @@ public class KeyRateUpdateAction implements IAction<KeyRateUpdateRequest> {
return document;
}
public void setDocument(String document) {
this.document = document;
}
public Long getId() {
return id;
}
@ -84,8 +89,4 @@ public class KeyRateUpdateAction implements IAction<KeyRateUpdateRequest> {
public void setId(Long id) {
this.id = id;
}
public void setDocument(String document) {
this.document = document;
}
}

View file

@ -17,18 +17,6 @@ public class AccountBackendGetAll extends BasicSpcexResponse {
@ApiModelProperty(value = "Полезная нагрузка")
private AccountBackendPayload payload = new AccountBackendPayload();
private static class AccountBackendPayload {
private List<AccountBackendGetFields> items = new ArrayList<>();
public List<AccountBackendGetFields> getItems() {
return items;
}
public void setItems(List<AccountBackendGetFields> items) {
this.items = items;
}
}
public AccountBackendPayload getPayload() {
return payload;
}
@ -45,7 +33,7 @@ public class AccountBackendGetAll extends BasicSpcexResponse {
singleItem.setAccount(account.getAccount());
singleItem.setAccountType(account.getAccountType());
singleItem.setRelationId(account.getRelationId());
singleItem.setStatus(account.getStatus());
singleItem.setStatus(account.getAccountStatus());
singleItem.setProcessingSign(account.getProcessingSign());
singleItem.setCreated(account.getCreated());
singleItem.setUpdated(account.getUpdated());
@ -53,4 +41,16 @@ public class AccountBackendGetAll extends BasicSpcexResponse {
}
}
private static class AccountBackendPayload {
private List<AccountBackendGetFields> items = new ArrayList<>();
public List<AccountBackendGetFields> getItems() {
return items;
}
public void setItems(List<AccountBackendGetFields> items) {
this.items = items;
}
}
}

View file

@ -4,13 +4,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer;
import java.math.BigDecimal;
import java.time.Instant;
public class KeyRateBackendGetFields {
@JsonProperty
private Long id;
@JsonProperty
private Double rate;
private BigDecimal rate;
@JsonSerialize(using = InstantSerializer.class)
@JsonProperty
private Instant startDate;
@ -30,11 +31,11 @@ public class KeyRateBackendGetFields {
this.id = id;
}
public Double getRate() {
public BigDecimal getRate() {
return rate;
}
public void setRate(Double rate) {
public void setRate(BigDecimal rate) {
this.rate = rate;
}

View file

@ -14,7 +14,7 @@ public class Account extends BusinessObject {
private String account;
private String accountType;
private Long relationId;
private String status;
private String accountStatus;
private String processingSign;
public String getAccount() {
@ -41,12 +41,12 @@ public class Account extends BusinessObject {
this.relationId = value;
}
public String getStatus() {
return status;
public String getAccountStatus() {
return accountStatus;
}
public void setStatus(String value) {
this.status = value;
public void setAccountStatus(String value) {
this.accountStatus = value;
}
public String getProcessingSign() {

View file

@ -2,7 +2,6 @@ package ru.clearing.classes.statics.data.company.relation;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import ru.spcex.platform.classes.base.SpcexObjectBase;
/**
* Договорные отношения
@ -15,8 +14,8 @@ public class Relation extends BusinessObject {
private Long consumerId;
private Long supplierId;
private String serviceStatus;
private Long service;
private Long serviceProduct;
private String service;
private String serviceProduct;
private String comment;
public Long getConsumerId() {
@ -43,19 +42,19 @@ public class Relation extends BusinessObject {
this.serviceStatus = value;
}
public Long getService() {
public String getService() {
return service;
}
public void setService(Long value) {
public void setService(String value) {
this.service = value;
}
public Long getServiceProduct() {
public String getServiceProduct() {
return serviceProduct;
}
public void setServiceProduct(Long value) {
public void setServiceProduct(String value) {
this.serviceProduct = value;
}

View file

@ -4,7 +4,8 @@ import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
/**
* Журнал входящих документов
@ -14,34 +15,34 @@ import java.time.Instant;
public class InDocumentJournal extends SpcexObjectBase {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private Instant registrationDate;
private Instant registrationTime;
private LocalDate registrationDate;
private LocalTime registrationTime;
private Long registrationNumber;
private String documentName;
private String sender;
private Long quantity;
private String clearingCode;
private String courierType;
private Instant emailDate;
private LocalDate emailDate;
private BigDecimal amount;
private String dossierNumber;
private String comment;
private Instant receiptDate;
private LocalDate receiptDate;
private String resultStatus;
public Instant getRegistrationDate() {
public LocalDate getRegistrationDate() {
return registrationDate;
}
public void setRegistrationDate(Instant value) {
public void setRegistrationDate(LocalDate value) {
this.registrationDate = value;
}
public Instant getRegistrationTime() {
public LocalTime getRegistrationTime() {
return registrationTime;
}
public void setRegistrationTime(Instant value) {
public void setRegistrationTime(LocalTime value) {
this.registrationTime = value;
}
@ -93,11 +94,11 @@ public class InDocumentJournal extends SpcexObjectBase {
this.courierType = value;
}
public Instant getEmailDate() {
public LocalDate getEmailDate() {
return emailDate;
}
public void setEmailDate(Instant value) {
public void setEmailDate(LocalDate value) {
this.emailDate = value;
}
@ -125,11 +126,11 @@ public class InDocumentJournal extends SpcexObjectBase {
this.comment = value;
}
public Instant getReceiptDate() {
public LocalDate getReceiptDate() {
return receiptDate;
}
public void setReceiptDate(Instant value) {
public void setReceiptDate(LocalDate value) {
this.receiptDate = value;
}

View file

@ -4,7 +4,8 @@ import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
/**
* Журнал исходящих документов
@ -14,33 +15,33 @@ import java.time.Instant;
public class OutDocumentJournal extends SpcexObjectBase {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private Instant registrationDate;
private Instant registrationTime;
private LocalDate registrationDate;
private LocalTime registrationTime;
private Long registrationNumber;
private String documentName;
private String addressee;
private Long quantity;
private String clearingCode;
private String courierType;
private Instant emailDate;
private LocalDate emailDate;
private BigDecimal amount;
private String dossierNumber;
private Instant postDate;
private LocalDate postDate;
private String resultStatus;
public Instant getRegistrationDate() {
public LocalDate getRegistrationDate() {
return registrationDate;
}
public void setRegistrationDate(Instant value) {
public void setRegistrationDate(LocalDate value) {
this.registrationDate = value;
}
public Instant getRegistrationTime() {
public LocalTime getRegistrationTime() {
return registrationTime;
}
public void setRegistrationTime(Instant value) {
public void setRegistrationTime(LocalTime value) {
this.registrationTime = value;
}
@ -92,11 +93,11 @@ public class OutDocumentJournal extends SpcexObjectBase {
this.courierType = value;
}
public Instant getEmailDate() {
public LocalDate getEmailDate() {
return emailDate;
}
public void setEmailDate(Instant value) {
public void setEmailDate(LocalDate value) {
this.emailDate = value;
}
@ -116,11 +117,11 @@ public class OutDocumentJournal extends SpcexObjectBase {
this.dossierNumber = value;
}
public Instant getPostDate() {
public LocalDate getPostDate() {
return postDate;
}
public void setPostDate(Instant value) {
public void setPostDate(LocalDate value) {
this.postDate = value;
}

View file

@ -3,7 +3,7 @@ package ru.clearing.classes.statics.data.messages;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import java.time.Instant;
import java.time.LocalDate;
/**
* Полные тексты ошибок
@ -16,7 +16,7 @@ public class ErrorText extends BusinessObject {
private String errorCode;
private String text;
private Long userId;
private Instant clearingDate;
private LocalDate clearingDate;
public String getErrorCode() {
return errorCode;
@ -42,11 +42,11 @@ public class ErrorText extends BusinessObject {
this.userId = value;
}
public Instant getClearingDate() {
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(Instant value) {
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}

View file

@ -2,41 +2,42 @@ package ru.clearing.classes.statics.data.misc;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.time.Instant;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* Ключевая ставка ЦБ
*
* <p>
* DB table: KEY_RATE
**/
public class KeyRate extends SpcexObjectBase {
private Double rate;
private Instant startDate;
private Instant endDate;
private BigDecimal rate;
private LocalDate startDate;
private LocalDate endDate;
private String document;
private String workflowStatus;
public Double getRate() {
public BigDecimal getRate() {
return rate;
}
public void setRate(Double rate) {
public void setRate(BigDecimal rate) {
this.rate = rate;
}
public Instant getStartDate() {
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(Instant startDate) {
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public Instant getEndDate() {
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(Instant endDate) {
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}

View file

@ -3,7 +3,7 @@ package ru.clearing.classes.statics.data.misc;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
/**
* Инструменты Денежного рынка
@ -13,8 +13,8 @@ import java.time.Instant;
public class MoneyMarketSecurity extends SpcexObjectBase {
private Long securityId;// (linked to security)
private String description;
private Instant startDate;
private Instant endDate;
private LocalDate startDate;
private LocalDate endDate;
private BigDecimal nominalValue;
private Long nominalCurrency; // (linked to currencyCode)
private String instrumentType; // (linked to instrumentType)
@ -37,19 +37,19 @@ public class MoneyMarketSecurity extends SpcexObjectBase {
this.description = description;
}
public Instant getStartDate() {
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(Instant startDate) {
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public Instant getEndDate() {
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(Instant endDate) {
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}

View file

@ -3,7 +3,7 @@ package ru.clearing.classes.statics.data.profile;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.time.Instant;
import java.time.LocalDate;
/**
* DB: PROFILE_DOCUMENT
@ -13,15 +13,15 @@ public class ProfileDocument extends SpcexObjectBase {
private Long companyId;
private String documentType; // ref CHAR(4)
private Instant issueDate;
private LocalDate issueDate;
private String issuePlace;
private String issuer;
private String issuerCode;
private String name;
private String number;
private String place;
private Instant validFromDate;
private Instant validToDate;
private LocalDate validFromDate;
private LocalDate validToDate;
private String link;
public Long getCompanyId() {
@ -40,11 +40,11 @@ public class ProfileDocument extends SpcexObjectBase {
this.documentType = documentType;
}
public Instant getIssueDate() {
public LocalDate getIssueDate() {
return issueDate;
}
public void setIssueDate(Instant issueDate) {
public void setIssueDate(LocalDate issueDate) {
this.issueDate = issueDate;
}
@ -96,19 +96,19 @@ public class ProfileDocument extends SpcexObjectBase {
this.place = place;
}
public Instant getValidFromDate() {
public LocalDate getValidFromDate() {
return validFromDate;
}
public void setValidFromDate(Instant validFromDate) {
public void setValidFromDate(LocalDate validFromDate) {
this.validFromDate = validFromDate;
}
public Instant getValidToDate() {
public LocalDate getValidToDate() {
return validToDate;
}
public void setValidToDate(Instant validToDate) {
public void setValidToDate(LocalDate validToDate) {
this.validToDate = validToDate;
}

View file

@ -2,9 +2,9 @@ package ru.clearing.classes.statics.data.scheduler;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
/**
* Расписание планировщика
@ -15,8 +15,8 @@ public class Scheduler extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private String task;
private Instant taskTime;
private Instant clearingDate;
private LocalTime taskTime;
private LocalDate clearingDate;
private String market;
private String taskStatus;
private Long securityId;
@ -30,19 +30,19 @@ public class Scheduler extends BusinessObject {
this.task = value;
}
public Instant getTaskTime() {
public LocalTime getTaskTime() {
return taskTime;
}
public void setTaskTime(Instant value) {
public void setTaskTime(LocalTime value) {
this.taskTime = value;
}
public Instant getClearingDate() {
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(Instant value) {
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}

View file

@ -3,7 +3,8 @@ package ru.clearing.classes.statics.data.scheduler;
import ru.clearing.classes.ConstSerializable;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
/**
* Расписание на текущий день
@ -14,8 +15,8 @@ public class SchedulerAllToday extends SpcexObjectBase {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private String task;
private Instant taskTime;
private Instant clearingDate;
private LocalTime taskTime;
private LocalDate clearingDate;
private String market;
private String taskStatus;
private Long securityId;
@ -30,19 +31,19 @@ public class SchedulerAllToday extends SpcexObjectBase {
this.task = value;
}
public Instant getTaskTime() {
public LocalTime getTaskTime() {
return taskTime;
}
public void setTaskTime(Instant value) {
public void setTaskTime(LocalTime value) {
this.taskTime = value;
}
public Instant getClearingDate() {
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(Instant value) {
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}

View file

@ -3,7 +3,7 @@ package ru.clearing.classes.statics.data.scheduler;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import java.time.Instant;
import java.time.LocalTime;
/**
* Постоянное расписание операционного дня
@ -14,7 +14,7 @@ public class Timetable extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private String task;
private Instant taskTime;
private LocalTime taskTime;
private String taskStatus;
public String getTask() {
@ -25,11 +25,11 @@ public class Timetable extends BusinessObject {
this.task = value;
}
public Instant getTaskTime() {
public LocalTime getTaskTime() {
return taskTime;
}
public void setTaskTime(Instant value) {
public void setTaskTime(LocalTime value) {
this.taskTime = value;
}

View file

@ -3,7 +3,7 @@ package ru.clearing.classes.statics.data.scheduler;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import java.time.Instant;
import java.time.LocalDate;
/**
* Торговые и неторговые дни
@ -13,15 +13,15 @@ import java.time.Instant;
public class TradingCalendar extends BusinessObject {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private Instant clearingDate;
private LocalDate clearingDate;
private Long companyId;
private String tradingStatus;
public Instant getClearingDate() {
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(Instant value) {
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}

View file

@ -8,14 +8,14 @@ import java.time.Instant;
/**
* ДФ-10 Подтверждение о загрузке по поступлению на клиринговый счет
*
* <p>
* DB table: S_DF10
*/
public class SDf10 extends SpcexObjectBase {
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
private String account;
private String sum;
private BigDecimal sum;
private String market;
private String type;
private BigDecimal number;
@ -33,11 +33,11 @@ public class SDf10 extends SpcexObjectBase {
this.account = account;
}
public String getSum() {
public BigDecimal getSum() {
return sum;
}
public void setSum(String sum) {
public void setSum(BigDecimal sum) {
this.sum = sum;
}

View file

@ -4,7 +4,7 @@ import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
/**
* Денежные средства от расчетной организации
@ -16,16 +16,16 @@ public class Statement extends BusinessObject {
private Long addresseeId;
private Long senderId;
private Instant clearingDate;
private LocalDate clearingDate;
private String statementType;
private String comment;
private Long accountId;
private String account;
private String inOutDirection;
private Instant settlementDate;
private LocalDate settlementDate;
private BigDecimal amount;
private String cashMovementCurrencyCode;
private String status;
private String operationStatus;
private String errorCode;
private String errorText;
private Long inSDfId;
@ -48,11 +48,11 @@ public class Statement extends BusinessObject {
this.senderId = value;
}
public Instant getClearingDate() {
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(Instant value) {
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}
@ -96,11 +96,11 @@ public class Statement extends BusinessObject {
this.inOutDirection = value;
}
public Instant getSettlementDate() {
public LocalDate getSettlementDate() {
return settlementDate;
}
public void setSettlementDate(Instant value) {
public void setSettlementDate(LocalDate value) {
this.settlementDate = value;
}
@ -120,12 +120,12 @@ public class Statement extends BusinessObject {
this.cashMovementCurrencyCode = value;
}
public String getStatus() {
return status;
public String getOperationStatus() {
return operationStatus;
}
public void setStatus(String value) {
this.status = value;
public void setOperationStatus(String value) {
this.operationStatus = value;
}
public String getErrorCode() {

View file

@ -2,9 +2,9 @@ package ru.clearing.classes.statics.data.user;
import ru.clearing.classes.ConstSerializable;
import ru.clearing.classes.objects.BusinessObject;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.time.Instant;
import java.time.LocalDate;
/**
* Активность пользователей в системе
@ -20,7 +20,7 @@ public class UserConnect extends BusinessObject {
private String serverIP;
private String clientIP;
private String connectionState;
private Instant clearingDate;
private LocalDate clearingDate;
private Long errorCode;
private String errorText;
@ -72,11 +72,11 @@ public class UserConnect extends BusinessObject {
this.connectionState = value;
}
public Instant getClearingDate() {
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(Instant value) {
public void setClearingDate(LocalDate value) {
this.clearingDate = value;
}

View file

@ -1,12 +1,12 @@
//package ru.clearing.platform.dictionary;
//
///**
// * Справочник статусов возваращения процентов
// *
// * Dictionary DB table: INTEREST_STATUS_DICTIONARY
// **/
//public class InterestStatusDictionary extends AbstractDictionary {
// private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID;
//
//
//}
package ru.clearing.platform.dictionary;
/**
* Справочник статусов возваращения процентов
* <p>
* Dictionary DB table: INTEREST_STATUS_DICTIONARY
**/
public class InterestStatusDictionary extends AbstractDictionary {
private static final long serialVersionUID = ConstDictionarySerializable.serialVersionUID;
}

View file

@ -1,17 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<artifactId>imdg</artifactId>
<name>Clearing in memory data grid</name>
<packaging>jar</packaging>
<version>SPCEX-1.0.0.0</version>
<parent>
<artifactId>clearing-parent</artifactId>
<groupId>ru.spcex.clearing</groupId>
<parent>
<artifactId>clearing-parent</artifactId>
<groupId>ru.spcex.clearing</groupId>
<version>SPCEX-1.0.0.0</version>
</parent>
@ -74,8 +74,23 @@
<!-- TEST -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
@ -117,6 +132,23 @@
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.2.0-M1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0-M1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>

View file

@ -2,13 +2,14 @@ package ru.spcex.clearing.imdg;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class IMDGApplication {
public static void main(String[] args) {
SpringApplicationBuilder builder = new SpringApplicationBuilder(IMDGApplication.class);
builder.run(args);
builder.run(args);
}
}

View file

@ -18,11 +18,9 @@ import static ru.spcex.clearing.imdg.base.ObjectBaseMapStore.MAX_IN_CLAUSE_SIZE;
* Store для словарей стандартных - из ID, CODE, NAME.
*/
public abstract class DictionaryMapStore<T extends Dictionary> implements MapLoader<Long, T> {
private static Logger log = LoggerFactory.getLogger(DictionaryMapStore.class);
protected NamedParameterJdbcTemplate namedParameterJdbcTemplate;
private static final Logger log = LoggerFactory.getLogger(DictionaryMapStore.class);
protected final JdbcTemplate jdbcTemplate;
protected NamedParameterJdbcTemplate namedParameterJdbcTemplate;
protected DictionaryMapStore(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;

View file

@ -5,14 +5,11 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.sql.Date;
import java.sql.*;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.*;
public abstract class ObjectBaseMapStore<T extends SpcexObjectBase> extends SimpleObjectMapStore<T> {
@ -88,7 +85,7 @@ public abstract class ObjectBaseMapStore<T extends SpcexObjectBase> extends Simp
protected LocalDate getLocalDateFromSqlDate(ResultSet rs, String column) throws SQLException {
Date date = rs.getDate(column);
return date != null ? Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate() : null;
return date != null ? date.toLocalDate() : null;
}
protected LocalTime getLocalTimeFromSqlTime(ResultSet rs, String column) throws SQLException {

View file

@ -25,11 +25,10 @@ import java.util.stream.Collectors;
* @param <T>
*/
public abstract class SimpleObjectMapStore<T extends SpcexObjectBase> implements MapStore<Long, T> {
protected final Logger log = LoggerFactory.getLogger(this.getClass());
private final static int BATCH_SIZE = 1000;
protected SimpleDateFormat DB_DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd");
protected final Logger log = LoggerFactory.getLogger(this.getClass());
protected final JdbcTemplate jdbcTemplate;
protected SimpleDateFormat DB_DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd");
protected SimpleObjectMapStore(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;

View file

@ -41,7 +41,7 @@ public class AccountBalanceHistoryMapStore extends TemplateEventMapStore<Account
AccountBalance object = updateLog.getObject();
Object[] args = new Object[]{
updateLog.getId(),
updateLog.getEventTime(),
TimeUtil.toDateFromInstant(updateLog.getEventTime()),
updateLog.getUserId(),
object.getId(),

View file

@ -27,17 +27,17 @@ public class AccountHistoryMapStore extends TemplateEventMapStore<AccountHistory
@Override
public String[] getFields() {
return new String[]{"ID","EVENT_TIME", "EVENT_USER_ID",
"ACCOUNT_ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT", "ACCOUNT_TYPE", "RELATION_ID", "STATUS", "PROCESSING_SIGN"
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID",
"ACCOUNT_ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT", "ACCOUNT_TYPE", "RELATION_ID", "ACCOUNT_STATUS", "PROCESSING_SIGN"
};
}
@Override
public Object[] objectToField(AccountHistory updateLog) {
Account object=updateLog.getObject();
Account object = updateLog.getObject();
Object[] args = new Object[]{
updateLog.getId(),
updateLog.getEventTime(),
TimeUtil.toDateFromInstant(updateLog.getEventTime()),
updateLog.getUserId(),
object.getId(),
@ -46,7 +46,7 @@ public class AccountHistoryMapStore extends TemplateEventMapStore<AccountHistory
object.getAccount(),
object.getAccountType(),
object.getRelationId(),
object.getStatus(),
object.getAccountStatus(),
object.getProcessingSign()
};
return args;

View file

@ -6,6 +6,7 @@ import ru.clearing.classes.statics.data.account.AccountRouting;
import ru.clearing.classes.statics.data.account.AccountRoutingHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
@Component
public class AccountRoutingHistoryMapStore extends TemplateEventMapStore<AccountRoutingHistory> {
@ -26,17 +27,17 @@ public class AccountRoutingHistoryMapStore extends TemplateEventMapStore<Account
@Override
public String[] getFields() {
return new String[]{"ID","EVENT_TIME", "EVENT_USER_ID",
"ACCOUNT_ROUTING_ID", "DESTINATION_ID", "RELATION_ID", "SOURCE_ID"
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID",
"ACCOUNT_ROUTING_ID", "DESTINATION_ID", "RELATION_ID", "SOURCE_ID"
};
}
@Override
public Object[] objectToField(AccountRoutingHistory updateLog) {
AccountRouting object=updateLog.getObject();
AccountRouting object = updateLog.getObject();
Object[] args = new Object[]{
updateLog.getId(),
updateLog.getEventTime(),
TimeUtil.toDateFromInstant(updateLog.getEventTime()),
updateLog.getUserId(),
object.getId(),

View file

@ -6,6 +6,7 @@ import ru.clearing.classes.statics.data.account.BankAccount;
import ru.clearing.classes.statics.data.account.BankAccountHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
@Component
public class BankAccountHistoryMapStore extends TemplateEventMapStore<BankAccountHistory> {
@ -36,7 +37,7 @@ public class BankAccountHistoryMapStore extends TemplateEventMapStore<BankAccoun
BankAccount object = historyLog.getObject();
Object[] args = new Object[]{
historyLog.getId(),
historyLog.getEventTime(),
TimeUtil.toDateFromInstant(historyLog.getEventTime()),
historyLog.getUserId(),
object.getId(),

View file

@ -2,6 +2,7 @@ package ru.spcex.clearing.imdg.businessevent;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanyHistory;
import ru.clearing.classes.statics.data.profile.CompanyInfo;
@ -13,9 +14,12 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
//@Component
@Component
public class CompanyHistoryMapStore extends BusinessEventMapStore<CompanyHistory> {
protected final String insertStatement = makeInsertSql(getTableName(), getFields(), "id");
protected final String insertCompanyInfoStatement = makeInsertSql("COMPANY_INFO_HISTORY", getFieldsForCompanyInfo(), "id");
public CompanyHistoryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@ -42,9 +46,6 @@ public class CompanyHistoryMapStore extends BusinessEventMapStore<CompanyHistory
};
}
protected final String insertStatement = makeInsertSql(getTableName(), getFields(), "id");
protected final String insertCompanyInfoStatement = makeInsertSql("COMPANY_INFO", getFieldsForCompanyInfo(), "id");
@Override
public void store(Map<Long, CompanyHistory> map) {
List<Object[]> batchArgs = new ArrayList<>();

View file

@ -6,6 +6,7 @@ import ru.clearing.classes.statics.data.account.InformationAccount;
import ru.clearing.classes.statics.data.account.InformationAccountHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateEventMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
@Component
public class InformationAccountHistoryMapStore extends TemplateEventMapStore<InformationAccountHistory> {
@ -26,17 +27,17 @@ public class InformationAccountHistoryMapStore extends TemplateEventMapStore<Inf
@Override
public String[] getFields() {
return new String[]{"ID","EVENT_TIME", "EVENT_USER_ID",
"INFORMATION_ACCOUNT_ID", "ACCOUNT_ID", "CLEARING_ACCOUNT_ID"
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID",
"INFORMATION_ACCOUNT_ID", "ACCOUNT_ID", "CLEARING_ACCOUNT_ID"
};
}
@Override
public Object[] objectToField(InformationAccountHistory historyLog) {
InformationAccount object=historyLog.getObject();
InformationAccount object = historyLog.getObject();
Object[] args = new Object[]{
historyLog.getId(),
historyLog.getEventTime(),
TimeUtil.toDateFromInstant(historyLog.getEventTime()),
historyLog.getUserId(),
object.getId(),

View file

@ -28,17 +28,17 @@ public class RelationHistoryMapStore extends TemplateEventMapStore<RelationHisto
@Override
public String[] getFields() {
return new String[]{"ID","EVENT_TIME", "EVENT_USER_ID",
"RELATION_ID", "CREATED_AT", "UPDATED_AT", "CONSUMER_ID", "SUPPLIER_ID", "SERVICE_STATUS", "SERVICE", "SERVICE_PRODUCT", "COMMENT"
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID",
"RELATION_ID", "CREATED_AT", "UPDATED_AT", "CONSUMER_ID", "SUPPLIER_ID", "SERVICE_STATUS", "SERVICE", "SERVICE_PRODUCT", "COMMENT"
};
}
@Override
public Object[] objectToField(RelationHistory updateLog) {
Relation object=updateLog.getObject();
Relation object = updateLog.getObject();
Object[] args = new Object[]{
updateLog.getId(),
updateLog.getEventTime(),
TimeUtil.toDateFromInstant(updateLog.getEventTime()),
updateLog.getUserId(),
object.getId(),

View file

@ -27,17 +27,17 @@ public class SecurityHistoryMapStore extends TemplateEventMapStore<SecurityHisto
@Override
public String[] getFields() {
return new String[]{"ID","EVENT_TIME", "EVENT_USER_ID",
"SECURITY_ID", "CREATED_AT", "UPDATED_AT", "INSTRUMENT_TYPE", "ISSUER_ID", "SHORT_NAME", "FULL_NAME", "SHORT_NAME_ENG", "FULL_NAME_ENG", "SECURITY_SYMBOL", "WORKFLOW_STATUS"
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID",
"SECURITY_ID", "CREATED_AT", "UPDATED_AT", "INSTRUMENT_TYPE", "ISSUER_ID", "SHORT_NAME", "FULL_NAME", "SHORT_NAME_ENG", "FULL_NAME_ENG", "SECURITY_SYMBOL", "WORKFLOW_STATUS"
};
}
@Override
public Object[] objectToField(SecurityHistory updateLog) {
Security object=updateLog.getObject();
Security object = updateLog.getObject();
Object[] args = new Object[]{
updateLog.getId(),
updateLog.getEventTime(),
TimeUtil.toDateFromInstant(updateLog.getEventTime()),
updateLog.getUserId(),
object.getId(),

View file

@ -37,7 +37,7 @@ public class UserConnectHistoryMapStore extends TemplateEventMapStore<UserConnec
UserConnect object = historyLog.getObject();
Object[] args = new Object[]{
historyLog.getId(),
historyLog.getEventTime(),
TimeUtil.toDateFromInstant(historyLog.getEventTime()),
historyLog.getUserId(),
object.getId(),
@ -49,7 +49,7 @@ public class UserConnectHistoryMapStore extends TemplateEventMapStore<UserConnec
object.getServerIP(),
object.getClientIP(),
object.getConnectionState(),
TimeUtil.toDateFromInstant(object.getClearingDate()),
TimeUtil.toDateFromLocalDate(object.getClearingDate()),
object.getErrorCode(),
object.getErrorText()
};

View file

@ -27,17 +27,17 @@ public class UserHistoryMapStore extends TemplateEventMapStore<UserHistory> {
@Override
public String[] getFields() {
return new String[]{"ID","EVENT_TIME", "EVENT_USER_ID",
"USER_ID", "CREATED_AT", "UPDATED_AT", "IDENTIFIER"
return new String[]{"ID", "EVENT_TIME", "EVENT_USER_ID",
"USER_CLS_ID", "CREATED_AT", "UPDATED_AT", "IDENTIFIER"
};
}
@Override
public Object[] objectToField(UserHistory historyLog) {
User object=historyLog.getObject();
User object = historyLog.getObject();
Object[] args = new Object[]{
historyLog.getId(),
historyLog.getEventTime(),
TimeUtil.toDateFromInstant(historyLog.getEventTime()),
historyLog.getUserId(),
object.getId(),

View file

@ -53,7 +53,7 @@ public class AccountBalanceMapStore extends TemplateMapStore<AccountBalance> {
object.setStartBalanceAmount(resultSet.getObject("START_BALANCE_AMOUNT", BigDecimal.class));
object.setCloseBalanceAmount(resultSet.getObject("CLOSE_BALANCE_AMOUNT", BigDecimal.class));
object.setTradeBalanceAmount(resultSet.getObject("TRADE_BALANCE_AMOUNT", BigDecimal.class));
object.setFreeBalanceAmount(resultSet.getObject("FREE_BALANCE_AMOU", BigDecimal.class));
object.setFreeBalanceAmount(resultSet.getObject("FREE_BALANCE_AMOUNT", BigDecimal.class));
object.setChangeBalanceAmount(resultSet.getObject("CHANGE_BALANCE_AMOUNT", BigDecimal.class));
object.setCreditAmount(resultSet.getObject("CREDIT_AMOUNT", BigDecimal.class));
object.setDebitAmount(resultSet.getObject("DEBIT_AMOUNT", BigDecimal.class));

View file

@ -30,7 +30,7 @@ public class AccountMapStore extends TemplateMapStore<Account> {
@Override
public String[] getFields() {
return new String[]{
"ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT", "ACCOUNT_TYPE", "RELATION_ID", "STATUS", "PROCESSING_SIGN"
"ID", "CREATED_AT", "UPDATED_AT", "ACCOUNT", "ACCOUNT_TYPE", "RELATION_ID", "ACCOUNT_STATUS", "PROCESSING_SIGN"
};
}
@ -43,7 +43,7 @@ public class AccountMapStore extends TemplateMapStore<Account> {
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));
object.setAccountStatus(resultSet.getObject("ACCOUNT_STATUS", String.class));
object.setProcessingSign(resultSet.getObject("PROCESSING_SIGN", String.class));
return object;
}
@ -57,7 +57,7 @@ public class AccountMapStore extends TemplateMapStore<Account> {
object.getAccount(),
object.getAccountType(),
object.getRelationId(),
object.getStatus(),
object.getAccountStatus(),
object.getProcessingSign()
};
return args;

View file

@ -30,7 +30,7 @@ public class ErrorTextMapStore extends TemplateMapStore<ErrorText> {
@Override
public String[] getFields() {
return new String[]{
"ID", "CREATED_AT", "UPDATED_AT", "ERROR_CODE", "TEXT", "USER_ID", "CLEARING_DATE"
"ID", "CREATED_AT", "UPDATED_AT", "ERROR_CODE", "TEXT", "USER_ID", "CLEARING_DATE"
};
}
@ -43,7 +43,7 @@ public class ErrorTextMapStore extends TemplateMapStore<ErrorText> {
object.setErrorCode(resultSet.getObject("ERROR_CODE", String.class));
object.setText(resultSet.getObject("TEXT", String.class));
object.setUserId(resultSet.getObject("USER_ID", Long.class));
object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE"));
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
return object;
}
@ -56,7 +56,7 @@ public class ErrorTextMapStore extends TemplateMapStore<ErrorText> {
object.getErrorCode(),
object.getText(),
object.getUserId(),
TimeUtil.toDateFromInstant(object.getClearingDate())
TimeUtil.toDateFromLocalDate(object.getClearingDate())
};
return args;
}

View file

@ -43,8 +43,8 @@ public class RelationMapStore extends TemplateMapStore<Relation> {
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.setService(resultSet.getObject("SERVICE", Long.class));
object.setServiceProduct(resultSet.getObject("SERVICE_PRODUCT", Long.class));
object.setService(resultSet.getObject("SERVICE", String.class));
object.setServiceProduct(resultSet.getObject("SERVICE_PRODUCT", String.class));
object.setComment(resultSet.getObject("COMMENT", String.class));
return object;
}

View file

@ -41,8 +41,8 @@ public class SchedulerMapStore extends TemplateMapStore<Scheduler> {
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
object.setTask(resultSet.getObject("TASK", String.class));
object.setTaskTime(getInstantFromTimestamp(resultSet, "TASK_TIME"));
object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE"));
object.setTaskTime(getLocalTimeFromSqlTime(resultSet, "TASK_TIME"));
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
object.setMarket(resultSet.getObject("MARKET", String.class));
object.setTaskStatus(resultSet.getObject("TASK_STATUS", String.class));
object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
@ -56,8 +56,8 @@ public class SchedulerMapStore extends TemplateMapStore<Scheduler> {
TimeUtil.toDateFromInstant(object.getCreated()),
TimeUtil.toDateFromInstant(object.getUpdated()),
object.getTask(),
TimeUtil.toDateFromInstant(object.getTaskTime()),
TimeUtil.toDateFromInstant(object.getClearingDate()),
TimeUtil.toDateFromLocalTime(object.getTaskTime()),
TimeUtil.toDateFromLocalDate(object.getClearingDate()),
object.getMarket(),
object.getTaskStatus(),
object.getSecurityId()

View file

@ -31,7 +31,7 @@ public class StatementMapStore extends TemplateMapStore<Statement> {
@Override
public String[] getFields() {
return new String[]{
"ID", "ADDRESSEE_ID", "SENDER_ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "STATEMENT_TYPE_ID", "COMMENT", "ACCOUNT_ID", "ACCOUNT", "IN_OUT_DIRECTION", "SETTLEMENT_DATE", "AMOUNT", "CASH_MOVEMENT_CURRENCY_CODE", "STATUS", "ERROR_CODE", "ERROR_TEXT", "IN_S_DF_ID", "OUT_S_DF_ID", "IN_OUT_S_DF_TYPE"
"ID", "ADDRESSEE_ID", "SENDER_ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "STATEMENT_TYPE", "COMMENT", "ACCOUNT_ID", "ACCOUNT", "IN_OUT_DIRECTION", "SETTLEMENT_DATE", "AMOUNT", "CASH_MOVEMENT_CURRENCY_CODE", "OPERATION_STATUS", "ERROR_CODE", "ERROR_TEXT", "IN_S_DF_ID", "OUT_S_DF_ID", "IN_OUT_S_DF_TYPE"
};
}
@ -43,16 +43,16 @@ public class StatementMapStore extends TemplateMapStore<Statement> {
object.setSenderId(resultSet.getObject("SENDER_ID", Long.class));
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE"));
object.setStatementType(resultSet.getObject("STATEMENT_TYPE_ID", String.class));
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
object.setStatementType(resultSet.getObject("STATEMENT_TYPE", String.class));
object.setComment(resultSet.getObject("COMMENT", String.class));
object.setAccountId(resultSet.getObject("ACCOUNT_ID", Long.class));
object.setAccount(resultSet.getObject("ACCOUNT", String.class));
object.setInOutDirection(resultSet.getObject("IN_OUT_DIRECTION", String.class));
object.setSettlementDate(getInstantFromTimestamp(resultSet, "SETTLEMENT_DATE"));
object.setSettlementDate(getLocalDateFromSqlDate(resultSet, "SETTLEMENT_DATE"));
object.setAmount(resultSet.getObject("AMOUNT", BigDecimal.class));
object.setCashMovementCurrencyCode(resultSet.getObject("CASH_MOVEMENT_CURRENCY_CODE", String.class));
object.setStatus(resultSet.getObject("STATUS", String.class));
object.setOperationStatus(resultSet.getObject("OPERATION_STATUS", String.class));
object.setErrorCode(resultSet.getObject("ERROR_CODE", String.class));
object.setErrorText(resultSet.getObject("ERROR_TEXT", String.class));
object.setInSDfId(resultSet.getObject("IN_S_DF_ID", Long.class));
@ -69,16 +69,16 @@ public class StatementMapStore extends TemplateMapStore<Statement> {
object.getSenderId(),
TimeUtil.toDateFromInstant(object.getCreated()),
TimeUtil.toDateFromInstant(object.getUpdated()),
TimeUtil.toDateFromInstant(object.getClearingDate()),
TimeUtil.toDateFromLocalDate(object.getClearingDate()),
object.getStatementType(),
object.getComment(),
object.getAccountId(),
object.getAccount(),
object.getInOutDirection(),
TimeUtil.toDateFromInstant(object.getSettlementDate()),
TimeUtil.toDateFromLocalDate(object.getSettlementDate()),
object.getAmount(),
object.getCashMovementCurrencyCode(),
object.getStatus(),
object.getOperationStatus(),
object.getErrorCode(),
object.getErrorText(),
object.getInSDfId(),

View file

@ -41,7 +41,7 @@ public class TimetableMapStore extends TemplateMapStore<Timetable> {
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
object.setTask(resultSet.getObject("TASK", String.class));
object.setTaskTime(getInstantFromTimestamp(resultSet, "TASK_TIME"));
object.setTaskTime(getLocalTimeFromSqlTime(resultSet, "TASK_TIME"));
object.setTaskStatus(resultSet.getObject("TASK_STATUS", String.class));
return object;
}
@ -53,7 +53,7 @@ public class TimetableMapStore extends TemplateMapStore<Timetable> {
TimeUtil.toDateFromInstant(object.getCreated()),
TimeUtil.toDateFromInstant(object.getUpdated()),
object.getTask(),
TimeUtil.toDateFromInstant(object.getTaskTime()),
TimeUtil.toDateFromLocalTime(object.getTaskTime()),
object.getTaskStatus()
};
return args;

View file

@ -30,7 +30,7 @@ public class TradingCalendarMapStore extends TemplateMapStore<TradingCalendar> {
@Override
public String[] getFields() {
return new String[]{
"ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "COMPANY_ID", "TRADING_STATUS"
"ID", "CREATED_AT", "UPDATED_AT", "CLEARING_DATE", "COMPANY_ID", "TRADING_STATUS"
};
}
@ -40,7 +40,7 @@ public class TradingCalendarMapStore extends TemplateMapStore<TradingCalendar> {
object.setId(resultSet.getObject("ID", Long.class));
object.setCreated(getInstantFromTimestamp(resultSet, "CREATED_AT"));
object.setUpdated(getInstantFromTimestamp(resultSet, "UPDATED_AT"));
object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE"));
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
object.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
object.setTradingStatus(resultSet.getObject("TRADING_STATUS", String.class));
return object;
@ -52,7 +52,7 @@ public class TradingCalendarMapStore extends TemplateMapStore<TradingCalendar> {
object.getId(),
TimeUtil.toDateFromInstant(object.getCreated()),
TimeUtil.toDateFromInstant(object.getUpdated()),
TimeUtil.toDateFromInstant(object.getClearingDate()),
TimeUtil.toDateFromLocalDate(object.getClearingDate()),
object.getCompanyId(),
object.getTradingStatus()
};

View file

@ -46,7 +46,7 @@ public class UserConnectMapStore extends TemplateMapStore<UserConnect> {
object.setServerIP(resultSet.getObject("SERVER_I_P", String.class));
object.setClientIP(resultSet.getObject("CLIENT_I_P", String.class));
object.setConnectionState(resultSet.getObject("CONNECTION_STATE", String.class));
object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE"));
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
object.setErrorCode(resultSet.getObject("ERROR_CODE", Long.class));
object.setErrorText(resultSet.getObject("ERROR_TEXT", String.class));
return object;
@ -64,7 +64,7 @@ public class UserConnectMapStore extends TemplateMapStore<UserConnect> {
object.getServerIP(),
object.getClientIP(),
object.getConnectionState(),
TimeUtil.toDateFromInstant(object.getClearingDate()),
TimeUtil.toDateFromLocalDate(object.getClearingDate()),
object.getErrorCode(),
object.getErrorText()
};

View file

@ -51,22 +51,11 @@ public class HazelcastConfiguration {
)
);
config.addMapConfig(poolMapConfigs.map_AllowedDictionary());
config.addMapConfig(poolMapConfigs.map_CompanyRoleDictionary());
config.addMapConfig(poolMapConfigs.map_CompanySymbolDictionary());
config.addMapConfig(poolMapConfigs.map_ContactTypeDictionary());
config.addMapConfig(poolMapConfigs.map_CorporationSoleTypeDictionary());
config.addMapConfig(poolMapConfigs.map_CountryCodeDictionary());
config.addMapConfig(poolMapConfigs.map_DocumentTypeDictionary());
config.addMapConfig(poolMapConfigs.map_LegalKindDictionary());
config.addMapConfig(poolMapConfigs.map_OrganizationTypeDictionary());
config.addMapConfig(poolMapConfigs.map_WorkflowStatusDictionary());
config.addMapConfig(poolMapConfigs.map_Company()); //todo убедиться, что CompanyMapStore extends BusinessObjectMapStore теперь будет TemplateMapStore.
config.addMapConfig(poolMapConfigs.map_CompanyHistory());
// Автоподключение мап
List<MapConfig> autoMapCfg = poolMapConfigs.autoconfiguratorOfMapstorages();
for (MapConfig cfg: autoMapCfg) {
for (MapConfig cfg : autoMapCfg) {
config.addMapConfig(cfg);
}

View file

@ -12,10 +12,6 @@ import ru.spcex.clearing.imdg.base.AutoconfiguredMap;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
import ru.spcex.clearing.imdg.businessevent.CompanyHistoryMapStore;
import ru.spcex.clearing.imdg.businessobject.CompanyMapStore;
import ru.spcex.clearing.imdg.dictionary.*;
import ru.spcex.clearing.imdg.object.CompanySymbolsMapStore;
import ru.spcex.clearing.imdg.object.ContactMapStore;
import ru.spcex.clearing.imdg.object.ProfileDocumentMapStore;
import java.util.ArrayList;
import java.util.Arrays;
@ -24,12 +20,21 @@ import java.util.List;
@Configuration
public class PoolMapConfigs {
private Logger log = LoggerFactory.getLogger(getClass());
private final Logger log = LoggerFactory.getLogger(getClass());
@Autowired
private CompanyMapStore companyMapStore;
@Autowired
private CompanyHistoryMapStore companyHistoryMapStore;
// Автоконфигурируемые мапсторы:
@Autowired
private List<AutoconfiguredMap<?>> listOfAutopluginStores;
private MapStoreConfig makeDefaultMapStoreConfig(MapLoader<Long, ?> mapBean) {
return new MapStoreConfig()
.setImplementation(mapBean)
;//todo config: .setWriteDelaySeconds(configRoot.getIMDG().getDbSyncSeconds());
;//todo config: .setWriteDelaySeconds(configRoot.getIMDG().getDbSyncSeconds());
}
public ScheduledExecutorConfig makeDefaultScheduledExecutorConfig(String name) {
@ -67,82 +72,13 @@ public class PoolMapConfigs {
return makeMapIndexConfig(attributeName, false);
}
@Autowired private AllowedDictionaryMapStore allowedDictionaryMapStore;
public MapConfig map_AllowedDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_AllowedDictionary, allowedDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private CompanyRoleDictionaryMapStore companyRoleDictionaryMapStore;
public MapConfig map_CompanyRoleDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_CompanyRoleDictionary, companyRoleDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private CompanySymbolDictionaryMapStore companySymbolDictionaryMapStore;
public MapConfig map_CompanySymbolDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_CompanySymbolDictionary, companySymbolDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private ContactTypeDictionaryMapStore contactTypeDictionaryMapStore;
public MapConfig map_ContactTypeDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_ContactTypeDictionary, contactTypeDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private CorporationSoleTypeDictionaryMapStore corporationSoleTypeDictionaryMapStore;
public MapConfig map_CorporationSoleTypeDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_CorporationSoleTypeDictionary, corporationSoleTypeDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private CountryCodeDictionaryMapStore countryCodeDictionaryMapStore;
public MapConfig map_CountryCodeDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_CountryCodeDictionary, countryCodeDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private DocumentTypeDictionaryMapStore documentTypeDictionaryMapStore;
public MapConfig map_DocumentTypeDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_DocumentTypeDictionary, documentTypeDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private LegalKindDictionaryMapStore legalKindDictionaryMapStore;
public MapConfig map_LegalKindDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_LegalKindDictionary, legalKindDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private OrganizationTypeDictionaryMapStore organizationTypeDictionaryMapStore;
public MapConfig map_OrganizationTypeDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_OrganizationTypeDictionary, organizationTypeDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired private WorkflowStatusDictionaryMapStore workflowStatusDictionaryMapStore;
public MapConfig map_WorkflowStatusDictionary() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_WorkflowStatusDictionary, workflowStatusDictionaryMapStore)
.setNearCacheConfig(makeDefaultNearCacheConfig())
.addMapIndexConfig(makeMapIndexConfig("code"));
}
@Autowired
private CompanyMapStore companyMapStore;
public MapConfig map_Company() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_Company, companyMapStore);
}
// Автоконфигурируемые мапсторы:
@Autowired
private List<AutoconfiguredMap<?>> listOfAutopluginStores;
public MapConfig map_CompanyHistory() {
return makeDefaultMapConfig(IMDGDistributedNames.Map_CompanyHistory, companyHistoryMapStore);
}
// @Qualifier("AutoconfiguredMapStore")
public List<MapConfig> autoconfiguratorOfMapstorages() {
@ -173,7 +109,7 @@ public class PoolMapConfigs {
}
out.add(mapCfg);
} catch (RuntimeException e) {
throw new RuntimeException("Can not configure MapStore " + mapStore.getMapName() + "(" + mapStore.toString() + "): " + e, e);
throw new RuntimeException("Can not configure MapStore " + mapStore.getMapName() + "(" + mapStore + "): " + e, e);
}
}
log.debug("Configured {} mapStore's", out.size());

View file

@ -3,15 +3,21 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.AllowedDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class AllowedDictionaryMapStore extends DictionaryMapStore<AllowedDictionary> {
public class AllowedDictionaryMapStore extends DictionaryTMapStore<AllowedDictionary> {
public AllowedDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_AllowedDictionary;
}
@Override
public String getTableName() {
return "ALLOWED_DICTIONARY";

View file

@ -3,15 +3,21 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.CompanyRoleDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class CompanyRoleDictionaryMapStore extends DictionaryMapStore<CompanyRoleDictionary> {
public class CompanyRoleDictionaryMapStore extends DictionaryTMapStore<CompanyRoleDictionary> {
public CompanyRoleDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_CompanyRoleDictionary;
}
@Override
public String getTableName() {
return "COMPANY_ROLE_DICTIONARY";

View file

@ -3,18 +3,24 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.CompanySymbolDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
import java.sql.ResultSet;
import java.sql.SQLException;
@Component
public class CompanySymbolDictionaryMapStore extends DictionaryMapStore<CompanySymbolDictionary> {
public class CompanySymbolDictionaryMapStore extends DictionaryTMapStore<CompanySymbolDictionary> {
public CompanySymbolDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_CompanySymbolDictionary;
}
@Override
public String getTableName() {
return "COMPANY_SYMBOL_DICTIONARY";

View file

@ -3,15 +3,21 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.ContactTypeDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class ContactTypeDictionaryMapStore extends DictionaryMapStore<ContactTypeDictionary> {
public class ContactTypeDictionaryMapStore extends DictionaryTMapStore<ContactTypeDictionary> {
public ContactTypeDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_ContactTypeDictionary;
}
@Override
public String getTableName() {
return "CONTACT_TYPE_DICTIONARY";

View file

@ -3,15 +3,21 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.CorporationSoleTypeDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class CorporationSoleTypeDictionaryMapStore extends DictionaryMapStore<CorporationSoleTypeDictionary> {
public class CorporationSoleTypeDictionaryMapStore extends DictionaryTMapStore<CorporationSoleTypeDictionary> {
public CorporationSoleTypeDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_CorporationSoleTypeDictionary;
}
@Override
public String getTableName() {
return "CORPORATION_SOLE_TYPE_DICTIONARY";

View file

@ -3,15 +3,22 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.CountryCodeDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class CountryCodeDictionaryMapStore extends DictionaryMapStore<CountryCodeDictionary> {
public class CountryCodeDictionaryMapStore extends DictionaryTMapStore<CountryCodeDictionary> {
public CountryCodeDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_CountryCodeDictionary;
}
@Override
public String getTableName() {
return "COUNTRY_CODE_DICTIONARY";

View file

@ -3,15 +3,22 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.DocumentTypeDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class DocumentTypeDictionaryMapStore extends DictionaryMapStore<DocumentTypeDictionary> {
public class DocumentTypeDictionaryMapStore extends DictionaryTMapStore<DocumentTypeDictionary> {
public DocumentTypeDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_DocumentTypeDictionary;
}
@Override
public String getTableName() {
return "DOCUMENT_TYPE_DICTIONARY";

View file

@ -1,31 +1,31 @@
//package ru.spcex.clearing.imdg.dictionary;
//
//import org.springframework.jdbc.core.JdbcTemplate;
//import org.springframework.stereotype.Component;
//import ru.clearing.platform.dictionary.InterestStatusDictionary;
//import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
//import ru.spcex.clearing.imdg.IMDGDistributedNames;
//
//@Component
//public class InterestStatusDictionaryMapStore extends DictionaryTMapStore<InterestStatusDictionary> {
//
// public InterestStatusDictionaryMapStore(JdbcTemplate jdbcTemplate) {
// super(jdbcTemplate);
// }
//
// @Override
// public String getMapName() {
// return IMDGDistributedNames.Map_InterestStatusDictionary;
// }
//
// @Override
// public String getTableName() {
// return "INTEREST_STATUS_DICTIONARY";
// }
//
// @Override
// public InterestStatusDictionary getDictionaryObject() {
// return new InterestStatusDictionary();
// }
//
//}
package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.InterestStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class InterestStatusDictionaryMapStore extends DictionaryTMapStore<InterestStatusDictionary> {
public InterestStatusDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_InterestStatusDictionary;
}
@Override
public String getTableName() {
return "INTEREST_STATUS_DICTIONARY";
}
@Override
public InterestStatusDictionary getDictionaryObject() {
return new InterestStatusDictionary();
}
}

View file

@ -3,15 +3,21 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.LegalKindDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class LegalKindDictionaryMapStore extends DictionaryMapStore<LegalKindDictionary> {
public class LegalKindDictionaryMapStore extends DictionaryTMapStore<LegalKindDictionary> {
public LegalKindDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_LegalKindDictionary;
}
@Override
public String getTableName() {
return "LEGAL_KIND_DICTIONARY";

View file

@ -3,15 +3,21 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.OrganizationTypeDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class OrganizationTypeDictionaryMapStore extends DictionaryMapStore<OrganizationTypeDictionary> {
public class OrganizationTypeDictionaryMapStore extends DictionaryTMapStore<OrganizationTypeDictionary> {
public OrganizationTypeDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_OrganizationTypeDictionary;
}
@Override
public String getTableName() {
return "ORGANIZATION_TYPE_DICTIONARY";

View file

@ -3,15 +3,21 @@ package ru.spcex.clearing.imdg.dictionary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.platform.dictionary.WorkflowStatusDictionary;
import ru.spcex.clearing.imdg.base.DictionaryMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.DictionaryTMapStore;
@Component
public class WorkflowStatusDictionaryMapStore extends DictionaryMapStore<WorkflowStatusDictionary> {
public class WorkflowStatusDictionaryMapStore extends DictionaryTMapStore<WorkflowStatusDictionary> {
public WorkflowStatusDictionaryMapStore(JdbcTemplate jdbcTemplate) {
super(jdbcTemplate);
}
@Override
public String getMapName() {
return IMDGDistributedNames.Map_WorkflowStatusDictionary;
}
@Override
public String getTableName() {
return "WORKFLOW_STATUS_DICTIONARY";

View file

@ -3,8 +3,8 @@ package ru.spcex.clearing.imdg.object;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.company.CompanyRoleSet;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import java.sql.ResultSet;
import java.sql.SQLException;
@ -34,15 +34,15 @@ public class CompanyRoleSetMapStore extends TemplateMapStore<CompanyRoleSet> {
@Override
public String[] getFields() {
return new String[]{"id", "roleid", "companyid"};
return new String[]{"ID", "ROLE_ID", "COMPANY_ID"};
}
@Override
protected CompanyRoleSet objectReader(ResultSet resultSet) throws SQLException {
CompanyRoleSet companyRoleSet = new CompanyRoleSet();
companyRoleSet.setId(resultSet.getObject("id", Long.class));
companyRoleSet.setRoleId(resultSet.getObject("roleid", Long.class));
companyRoleSet.setCompanyId(resultSet.getObject("companyid", Long.class));
companyRoleSet.setId(resultSet.getObject("ID", Long.class));
companyRoleSet.setRoleId(resultSet.getObject("ROLE_ID", Long.class));
companyRoleSet.setCompanyId(resultSet.getObject("COMPANY_ID", Long.class));
return companyRoleSet;
}

View file

@ -37,9 +37,9 @@ public class CompanySymbolsMapStore extends TemplateMapStore<CompanySymbols> {
protected CompanySymbols objectReader(ResultSet resultSet) throws SQLException {
CompanySymbols object = new CompanySymbols();
object.setId(resultSet.getObject("id", Long.class));
object.setCompanyId(resultSet.getObject("companyid", Long.class));
object.setCompanySymbol(resultSet.getObject("companysymbol", String.class));
object.setCompanySymbolValue(resultSet.getObject("companysymbolvalue", String.class));
object.setCompanyId(resultSet.getObject("company_id", Long.class));
object.setCompanySymbol(resultSet.getObject("company_symbol", String.class));
object.setCompanySymbolValue(resultSet.getObject("company_symbol_value", String.class));
return object;
}

View file

@ -39,20 +39,20 @@ public class InDocumentJournalMapStore extends TemplateMapStore<InDocumentJourna
public InDocumentJournal objectReader(ResultSet resultSet) throws SQLException {
InDocumentJournal object = new InDocumentJournal();
object.setId(resultSet.getObject("ID", Long.class));
object.setRegistrationDate(getInstantFromTimestamp(resultSet, "REGISTRATION_DATE"));
object.setRegistrationTime(getInstantFromTimestamp(resultSet, "REGISTRATION_TIME"));
object.setRegistrationDate(getLocalDateFromSqlDate(resultSet, "REGISTRATION_DATE"));
object.setRegistrationTime(getLocalTimeFromSqlTime(resultSet, "REGISTRATION_TIME"));
object.setRegistrationNumber(resultSet.getObject("REGISTRATION_NUMBER", Long.class));
object.setDocumentName(resultSet.getObject("DOCUMENT_NAME", String.class));
object.setSender(resultSet.getObject("SENDER", String.class));
object.setQuantity(resultSet.getObject("QUANTITY", Long.class));
object.setClearingCode(resultSet.getObject("CLEARING_CODE", String.class));
object.setCourierType(resultSet.getObject("COURIER_TYPE", String.class));
object.setEmailDate(getInstantFromTimestamp(resultSet, "EMAIL_DATE"));
object.setEmailDate(getLocalDateFromSqlDate(resultSet, "EMAIL_DATE"));
object.setAmount(resultSet.getObject("AMOUNT", BigDecimal.class));
object.setDossierNumber(resultSet.getObject("DOSSIER_NUMBER", String.class));
object.setResultStatus(resultSet.getObject("RESULT_STATUS", String.class));
object.setComment(resultSet.getObject("COMMENT", String.class));
object.setReceiptDate(getInstantFromTimestamp(resultSet, "RECEIPT_DATE"));
object.setReceiptDate(getLocalDateFromSqlDate(resultSet, "RECEIPT_DATE"));
return object;
}
@ -60,19 +60,19 @@ public class InDocumentJournalMapStore extends TemplateMapStore<InDocumentJourna
public Object[] objectToField(InDocumentJournal object) {
Object[] args = new Object[]{
object.getId(),
TimeUtil.toDateFromInstant(object.getRegistrationDate()),
TimeUtil.toDateFromInstant(object.getRegistrationTime()),
TimeUtil.toDateFromLocalDate(object.getRegistrationDate()),
TimeUtil.toDateFromLocalTime(object.getRegistrationTime()),
object.getRegistrationNumber(),
object.getDocumentName(),
object.getSender(),
object.getQuantity(),
object.getClearingCode(),
object.getCourierType(),
TimeUtil.toDateFromInstant(object.getEmailDate()),
TimeUtil.toDateFromLocalDate(object.getEmailDate()),
object.getAmount(),
object.getDossierNumber(),
object.getComment(),
TimeUtil.toDateFromInstant(object.getReceiptDate()),
TimeUtil.toDateFromLocalDate(object.getReceiptDate()),
object.getResultStatus()
};
return args;

View file

@ -7,6 +7,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
@ -41,9 +42,9 @@ public class KeyRateMapStore extends TemplateMapStore<KeyRate> {
protected KeyRate objectReader(ResultSet resultSet) throws SQLException {
KeyRate keyRate = new KeyRate();
keyRate.setId(resultSet.getObject("ID", Long.class));
keyRate.setRate(resultSet.getObject("RATE", Double.class));
keyRate.setStartDate(getInstantFromTimestamp(resultSet,"START_DATE"));
keyRate.setEndDate(getInstantFromTimestamp(resultSet, "END_DATE"));
keyRate.setRate(resultSet.getObject("RATE", BigDecimal.class));
keyRate.setStartDate(getLocalDateFromSqlDate(resultSet, "START_DATE"));
keyRate.setEndDate(getLocalDateFromSqlDate(resultSet, "END_DATE"));
keyRate.setDocument(resultSet.getObject("DOCUMENT", String.class));
keyRate.setWorkflowStatus(resultSet.getObject("WORKFLOW_STATUS", String.class));
return keyRate;
@ -54,8 +55,8 @@ public class KeyRateMapStore extends TemplateMapStore<KeyRate> {
Object[] args = new Object[]{
partnerList.getId(),
partnerList.getRate(),
TimeUtil.toDateFromInstant(partnerList.getStartDate()),
TimeUtil.toDateFromInstant(partnerList.getEndDate()),
TimeUtil.toDateFromLocalDate(partnerList.getStartDate()),
TimeUtil.toDateFromLocalDate(partnerList.getEndDate()),
partnerList.getDocument(),
partnerList.getWorkflowStatus()
};

View file

@ -44,8 +44,8 @@ public class MoneyMarketSecurityMapStore extends TemplateMapStore<MoneyMarketSec
object.setId(resultSet.getObject("ID", Long.class));
object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
object.setDescription(resultSet.getObject("DESCRIPTION", String.class));
object.setStartDate(getInstantFromTimestamp(resultSet, "START_DATE"));
object.setEndDate(getInstantFromTimestamp(resultSet, "END_DATE"));
object.setStartDate(getLocalDateFromSqlDate(resultSet, "START_DATE"));
object.setEndDate(getLocalDateFromSqlDate(resultSet, "END_DATE"));
object.setNominalValue(resultSet.getObject("NOMINAL_VALUE", BigDecimal.class));
object.setNominalCurrency(resultSet.getObject("NOMINAL_CURRENCY", Long.class));
object.setInstrumentType(resultSet.getObject("INSTRUMENT_TYPE", String.class));
@ -60,8 +60,8 @@ public class MoneyMarketSecurityMapStore extends TemplateMapStore<MoneyMarketSec
moneyMarketSecurity.getId(),
moneyMarketSecurity.getSecurityId(),
moneyMarketSecurity.getDescription(),
TimeUtil.toDateFromInstant(moneyMarketSecurity.getStartDate()),
TimeUtil.toDateFromInstant(moneyMarketSecurity.getEndDate()),
TimeUtil.toDateFromLocalDate(moneyMarketSecurity.getStartDate()),
TimeUtil.toDateFromLocalDate(moneyMarketSecurity.getEndDate()),
moneyMarketSecurity.getNominalValue(),
moneyMarketSecurity.getNominalCurrency(),
moneyMarketSecurity.getInstrumentType(),

View file

@ -39,19 +39,19 @@ public class OutDocumentJournalMapStore extends TemplateMapStore<OutDocumentJour
public OutDocumentJournal objectReader(ResultSet resultSet) throws SQLException {
OutDocumentJournal object = new OutDocumentJournal();
object.setId(resultSet.getObject("ID", Long.class));
object.setRegistrationDate(getInstantFromTimestamp(resultSet, "REGISTRATION_DATE"));
object.setRegistrationTime(getInstantFromTimestamp(resultSet, "REGISTRATION_TIME"));
object.setRegistrationDate(getLocalDateFromSqlDate(resultSet, "REGISTRATION_DATE"));
object.setRegistrationTime(getLocalTimeFromSqlTime(resultSet, "REGISTRATION_TIME"));
object.setRegistrationNumber(resultSet.getObject("REGISTRATION_NUMBER", Long.class));
object.setDocumentName(resultSet.getObject("DOCUMENT_NAME", String.class));
object.setAddressee(resultSet.getObject("ADDRESSEE", String.class));
object.setQuantity(resultSet.getObject("QUANTITY", Long.class));
object.setClearingCode(resultSet.getObject("CLEARING_CODE", String.class));
object.setCourierType(resultSet.getObject("COURIER_TYPE", String.class));
object.setEmailDate(getInstantFromTimestamp(resultSet, "EMAIL_DATE"));
object.setEmailDate(getLocalDateFromSqlDate(resultSet, "EMAIL_DATE"));
object.setAmount(resultSet.getObject("AMOUNT", BigDecimal.class));
object.setDossierNumber(resultSet.getObject("DOSSIER_NUMBER", String.class));
object.setResultStatus(resultSet.getObject("RESULT_STATUS", String.class));
object.setPostDate(getInstantFromTimestamp(resultSet, "POST_DATE"));
object.setPostDate(getLocalDateFromSqlDate(resultSet, "POST_DATE"));
return object;
}
@ -59,18 +59,18 @@ public class OutDocumentJournalMapStore extends TemplateMapStore<OutDocumentJour
public Object[] objectToField(OutDocumentJournal object) {
Object[] args = new Object[]{
object.getId(),
TimeUtil.toDateFromInstant(object.getRegistrationDate()),
TimeUtil.toDateFromInstant(object.getRegistrationTime()),
TimeUtil.toDateFromLocalDate(object.getRegistrationDate()),
TimeUtil.toDateFromLocalTime(object.getRegistrationTime()),
object.getRegistrationNumber(),
object.getDocumentName(),
object.getAddressee(),
object.getQuantity(),
object.getClearingCode(),
object.getCourierType(),
TimeUtil.toDateFromInstant(object.getEmailDate()),
TimeUtil.toDateFromLocalDate(object.getEmailDate()),
object.getAmount(),
object.getDossierNumber(),
TimeUtil.toDateFromInstant(object.getPostDate()),
TimeUtil.toDateFromLocalDate(object.getPostDate()),
object.getResultStatus()
};
return args;

View file

@ -41,15 +41,15 @@ public class ProfileDocumentMapStore extends TemplateMapStore<ProfileDocument> {
object.setId(resultSet.getObject("id", Long.class));
object.setCompanyId(resultSet.getObject("company_id", Long.class));
object.setDocumentType(resultSet.getObject("document_type", String.class));
object.setIssueDate(getInstantFromTimestamp(resultSet, "issue_date"));
object.setIssueDate(getLocalDateFromSqlDate(resultSet, "issue_date"));
object.setIssuePlace(resultSet.getObject("issue_place", String.class));
object.setIssuer(resultSet.getObject("issuer", String.class));
object.setIssuerCode(resultSet.getObject("issuer_code", String.class));
object.setName(resultSet.getObject("name", String.class));
object.setNumber(resultSet.getObject("number", String.class));
object.setPlace(resultSet.getObject("place", String.class));
object.setValidFromDate(getInstantFromTimestamp(resultSet, "valid_from_date"));
object.setValidToDate(getInstantFromTimestamp(resultSet, "valid_to_date"));
object.setValidFromDate(getLocalDateFromSqlDate(resultSet, "valid_from_date"));
object.setValidToDate(getLocalDateFromSqlDate(resultSet, "valid_to_date"));
object.setLink(resultSet.getObject("LINK", String.class));
return object;
}
@ -60,15 +60,15 @@ public class ProfileDocumentMapStore extends TemplateMapStore<ProfileDocument> {
resultSet.getId(),
resultSet.getCompanyId(),
resultSet.getDocumentType(),
TimeUtil.toDateFromInstant(resultSet.getIssueDate()),
TimeUtil.toDateFromLocalDate(resultSet.getIssueDate()),
resultSet.getIssuePlace(),
resultSet.getIssuer(),
resultSet.getIssuerCode(),
resultSet.getName(),
resultSet.getNumber(),
resultSet.getPlace(),
TimeUtil.toDateFromInstant(resultSet.getValidFromDate()),
TimeUtil.toDateFromInstant(resultSet.getValidToDate()),
TimeUtil.toDateFromLocalDate(resultSet.getValidFromDate()),
TimeUtil.toDateFromLocalDate(resultSet.getValidToDate()),
resultSet.getLink()
};
return args;

View file

@ -5,6 +5,7 @@ import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.sdf.SDf04;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
import java.sql.ResultSet;
import java.sql.SQLException;
@ -145,7 +146,7 @@ public class SDf04MapStore extends TemplateMapStore<SDf04> {
object.getDoc_result(),
object.getImp_result(),
object.getFile_name(),
object.getGenerationTime(),
TimeUtil.toDateFromInstant(object.getGenerationTime()),
object.getGenerationId()
};
return args;

View file

@ -5,6 +5,7 @@ import org.springframework.stereotype.Component;
import ru.clearing.classes.statics.data.sdf.SDf09;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.base.TemplateMapStore;
import ru.spcex.platform.utils.time.TimeUtil;
import java.math.BigDecimal;
import java.sql.ResultSet;
@ -41,6 +42,7 @@ public class SDf09MapStore extends TemplateMapStore<SDf09> {
object.setId(resultSet.getObject("ID", Long.class));
object.setAccount(resultSet.getString("ACCOUNT"));
object.setSum(resultSet.getObject("SUM", BigDecimal.class));
object.setMarket(resultSet.getString("MARKET"));
object.setType(resultSet.getString("TYPE"));
object.setNumber(resultSet.getObject("NUMBER", BigDecimal.class));
object.setInn(resultSet.getObject("_I_N_N", BigDecimal.class));
@ -56,11 +58,12 @@ public class SDf09MapStore extends TemplateMapStore<SDf09> {
object.getId(),
object.getAccount(),
object.getSum(),
object.getMarket(),
object.getType(),
object.getNumber(),
object.getInn(),
object.getFileName(),
object.getGenerationTime(),
TimeUtil.toDateFromInstant(object.getGenerationTime()),
object.getGenerationId()
};
return args;

View file

@ -41,6 +41,7 @@ public class SDf10MapStore extends TemplateMapStore<SDf10> {
SDf10 object = new SDf10();
object.setId(resultSet.getObject("ID", Long.class));
object.setAccount(resultSet.getObject("ACCOUNT", String.class));
object.setSum(resultSet.getObject("SUM", BigDecimal.class));
object.setMarket(resultSet.getObject("MARKET", String.class));
object.setType(resultSet.getObject("TYPE", String.class));
object.setNumber(resultSet.getObject("NUMBER", BigDecimal.class));
@ -57,6 +58,7 @@ public class SDf10MapStore extends TemplateMapStore<SDf10> {
Object[] args = new Object[]{
object.getId(),
object.getAccount(),
object.getSum(),
object.getMarket(),
object.getType(),
object.getNumber(),

View file

@ -30,7 +30,7 @@ public class SchedulerAllTodayMapStore extends TemplateMapStore<SchedulerAllToda
@Override
public String[] getFields() {
return new String[]{
"ID", "TASK", "TASK_TIME", "CLEARING_DATE", "MARKET", "TASK_STATUS", "SECURITY_ID", "SOURCE", "ORIG_ID"
"ID", "TASK", "TASK_TIME", "CLEARING_DATE", "MARKET", "TASK_STATUS", "SECURITY_ID", "SOURCE", "ORIG_ID"
};
}
@ -39,8 +39,8 @@ public class SchedulerAllTodayMapStore extends TemplateMapStore<SchedulerAllToda
SchedulerAllToday object = new SchedulerAllToday();
object.setId(resultSet.getObject("ID", Long.class));
object.setTask(resultSet.getObject("TASK", String.class));
object.setTaskTime(getInstantFromTimestamp(resultSet, "TASK_TIME"));
object.setClearingDate(getInstantFromTimestamp(resultSet, "CLEARING_DATE"));
object.setTaskTime(getLocalTimeFromSqlTime(resultSet, "TASK_TIME"));
object.setClearingDate(getLocalDateFromSqlDate(resultSet, "CLEARING_DATE"));
object.setMarket(resultSet.getObject("MARKET", String.class));
object.setTaskStatus(resultSet.getObject("TASK_STATUS", String.class));
object.setSecurityId(resultSet.getObject("SECURITY_ID", Long.class));
@ -54,8 +54,8 @@ public class SchedulerAllTodayMapStore extends TemplateMapStore<SchedulerAllToda
Object[] args = new Object[]{
object.getId(),
object.getTask(),
TimeUtil.toDateFromInstant(object.getTaskTime()),
TimeUtil.toDateFromInstant(object.getClearingDate()),
TimeUtil.toDateFromLocalTime(object.getTaskTime()),
TimeUtil.toDateFromLocalDate(object.getClearingDate()),
object.getMarket(),
object.getTaskStatus(),
object.getSecurityId(),

View file

@ -7,8 +7,17 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.account.*;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanyHistory;
import ru.clearing.classes.statics.data.company.relation.Relation;
import ru.clearing.classes.statics.data.company.relation.RelationHistory;
import ru.clearing.classes.statics.data.security.Security;
import ru.clearing.classes.statics.data.security.SecurityHistory;
import ru.clearing.classes.statics.data.user.User;
import ru.clearing.classes.statics.data.user.UserConnect;
import ru.clearing.classes.statics.data.user.UserConnectHistory;
import ru.clearing.classes.statics.data.user.UserHistory;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
@Service
@ -22,18 +31,72 @@ public class UpdateMapService extends AbstractUpdateMapService {
@Override
public void addingListenersToCards() {
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_AccountBalance).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_Account).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_AccountRouting).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_BankAccount).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_Company).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_InformationAccount).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_Relation).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_Security).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_UserConnect).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_User).addLocalEntryListener(this, Predicates.alwaysTrue(), true);
}
@Override
protected void entryModified(EntryEvent<Long, Object> event, String eventType) {
log.debug("{} {}", event, eventType);
Object value = (EVENT_DELETE.equals(eventType) ? event.getOldValue() : event.getValue());
if (value instanceof Company) {
if (value instanceof AccountBalance) {
AccountBalanceHistory accountBalanceHistory = new AccountBalanceHistory();
createBusinessEvent(accountBalanceHistory, eventType);
accountBalanceHistory.setObject((AccountBalance) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_AccountBalanceHistory).put(accountBalanceHistory.getId(), accountBalanceHistory);
} else if (value instanceof Account) {
AccountHistory accountHistory = new AccountHistory();
createBusinessEvent(accountHistory, eventType);
accountHistory.setObject((Account) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_AccountHistory).put(accountHistory.getId(), accountHistory);
} else if (value instanceof AccountRouting) {
AccountRoutingHistory accountRoutingHistory = new AccountRoutingHistory();
createBusinessEvent(accountRoutingHistory, eventType);
accountRoutingHistory.setObject((AccountRouting) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_AccountRoutingHistory).put(accountRoutingHistory.getId(), accountRoutingHistory);
} else if (value instanceof BankAccount) {
BankAccountHistory bankAccountHistory = new BankAccountHistory();
createBusinessEvent(bankAccountHistory, eventType);
bankAccountHistory.setObject((BankAccount) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_BankAccountHistory).put(bankAccountHistory.getId(), bankAccountHistory);
} else if (value instanceof Company) {
CompanyHistory companyHistory = new CompanyHistory();
createBusinessEvent(companyHistory, eventType);
companyHistory.setObject((Company) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_CompanyHistory).put(companyHistory.getId(), companyHistory);
} else if (value instanceof InformationAccount) {
InformationAccountHistory informationAccountHistory = new InformationAccountHistory();
createBusinessEvent(informationAccountHistory, eventType);
informationAccountHistory.setObject((InformationAccount) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_InformationAccountHistory).put(informationAccountHistory.getId(), informationAccountHistory);
} else if (value instanceof Relation) {
RelationHistory relationHistory = new RelationHistory();
createBusinessEvent(relationHistory, eventType);
relationHistory.setObject((Relation) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_RelationHistory).put(relationHistory.getId(), relationHistory);
} else if (value instanceof Security) {
SecurityHistory securityHistory = new SecurityHistory();
createBusinessEvent(securityHistory, eventType);
securityHistory.setObject((Security) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_SecurityHistory).put(securityHistory.getId(), securityHistory);
} else if (value instanceof UserConnect) {
UserConnectHistory userConnectHistory = new UserConnectHistory();
createBusinessEvent(userConnectHistory, eventType);
userConnectHistory.setObject((UserConnect) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_UserConnectHistory).put(userConnectHistory.getId(), userConnectHistory);
} else if (value instanceof User) {
UserHistory userHistory = new UserHistory();
createBusinessEvent(userHistory, eventType);
userHistory.setObject((User) value);
hazelcastServerInstance.getMap(IMDGDistributedNames.Map_UserHistory).put(userHistory.getId(), userHistory);
} else {
log.error("unexpected event {}", event);
}

View file

@ -2,7 +2,6 @@ imdg.hazelcast.listenPort=5701
imdg.hazelcast.login=dev
imdg.hazelcast.password=dev-pass
imdg.hazelcast.cluster-members[0]=127.0.0.1
imdg.database.login=clearing
imdg.database.password=Aa111111
imdg.database.url=jdbc:postgresql://10.200.200.133:5432/postgres

View file

@ -0,0 +1,322 @@
package ru.spcex.clearing.imdg;
import com.hazelcast.config.MapStoreConfig;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlTypeValue;
import org.springframework.jdbc.core.StatementCreatorUtils;
import org.springframework.lang.NonNull;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanyHistory;
import ru.clearing.classes.statics.data.profile.CompanyInfo;
import ru.clearing.platform.dictionary.AbstractDictionary;
import ru.clearing.platform.dictionary.CompanySymbolDictionary;
import ru.spcex.clearing.imdg.base.*;
import ru.spcex.clearing.imdg.config.DbTestConnectionConfig;
import ru.spcex.clearing.imdg.config.TestConfiguration;
import ru.spcex.clearing.imdg.structure.BusinessObjectAndBusinessEventForCheckMapStore;
import ru.spcex.clearing.imdg.structure.DictionaryObjectForCheckMapStore;
import ru.spcex.clearing.imdg.utils.BusinessEventRowMapper;
import ru.spcex.clearing.imdg.utils.DbDataUtils;
import ru.spcex.clearing.imdg.utils.SpcexObjectBaseRowMapper;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import ru.spcex.platform.utils.text.TextUtil;
import javax.annotation.PostConstruct;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.*;
import java.util.stream.Collectors;
import static ru.spcex.clearing.imdg.structure.RunnableMapNamesForTesting.businessObjectAndBusinessEventForCheckMapStores;
import static ru.spcex.clearing.imdg.structure.RunnableMapNamesForTesting.dictionaryObjectForCheckMapStores;
import static ru.spcex.clearing.imdg.utils.DbDataUtils.generatingRandomString;
@ContextConfiguration(classes = {
TestConfiguration.class,
DbTestConnectionConfig.class})
@ExtendWith(SpringExtension.class)
@TestPropertySource(properties = "spring.config.location=D:/repo/mfd/clearing/clearing-parent/imdg/src/main/resources")
public class AllMapStoreTest {
private static final Long ID = 1000000L;
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
TestConfiguration testConfig;
@Autowired
JdbcTemplate jdbcTemplate;
@PostConstruct
public void initTestObjects() {
try {
for (BusinessObjectAndBusinessEventForCheckMapStore<SpcexObjectBase> objectForCheck : businessObjectAndBusinessEventForCheckMapStores) {
SpcexObjectBase object = objectForCheck.getClazz().getDeclaredConstructor().newInstance();
DbDataUtils.fillObjectDefaultValues(object, object.getClass());
if (objectForCheck.getClazz().equals(CompanyHistory.class)) {
CompanyHistory companyHistory = (CompanyHistory) object;
CompanyInfo companyInfo = companyHistory.getObject().getProfile();
companyInfo.setCompanyId(companyHistory.getObject().getId());
companyInfo.setId(1000000L);
objectForCheck.setPredictableObj(companyHistory);
} else if (objectForCheck.getClazz().equals(Company.class)) {
Company company = (Company) object;
CompanyInfo companyInfo = company.getProfile();
companyInfo.setCompanyId(1000000L);
companyInfo.setId(1000000L);
objectForCheck.setPredictableObj(company);
} else if (objectForCheck.getMapName().startsWith("Map_SDf")) {
trySettingString(object, objectForCheck.getClazz(), "setMarket", 1);
trySettingString(object, objectForCheck.getClazz(), "setFile_type", 1);
trySettingString(object, objectForCheck.getClazz(), "setSeg_type", 1);
trySettingString(object, objectForCheck.getClazz(), "setPriority", 1);
trySettingString(object, objectForCheck.getClazz(), "setPr", 1);
trySettingString(object, objectForCheck.getClazz(), "setType", 1);
trySettingString(object, objectForCheck.getClazz(), "setOp_order", 1);
trySettingString(object, objectForCheck.getClazz(), "setSp_code", 2);
trySettingString(object, objectForCheck.getClazz(), "setDoc_result", 2);
trySettingString(object, objectForCheck.getClazz(), "setAcc_type", 2);
trySettingString(object, objectForCheck.getClazz(), "setOp_type", 2);
trySettingString(object, objectForCheck.getClazz(), "setDoc_result", 2);
trySettingString(object, objectForCheck.getClazz(), "setResult", 3);
trySettingString(object, objectForCheck.getClazz(), "setImp_result", 3);
objectForCheck.setPredictableObj(object);
} else {
objectForCheck.setPredictableObj(object);
}
}
for (DictionaryObjectForCheckMapStore<AbstractDictionary> objectForCheck : dictionaryObjectForCheckMapStores) {
AbstractDictionary object = objectForCheck.getClazz().getDeclaredConstructor().newInstance();
DbDataUtils.fillObjectDefaultValues(object, object.getClass());
objectForCheck.setPredictableObj(object);
}
} catch (InstantiationException | IllegalAccessException e) {
log.error(e.getMessage());
} catch (InvocationTargetException | NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
@Test
public void checkAllMapStoreCreatedTest() throws SQLException {
Assumptions.assumeTrue(false, "todo удалить если будет не нужна, пока не работает из-за не все mapStore готовы");
//Поиск таблиц которым нужно добавить mapStore и вывод результата в консоль
List<String> nameTables = new ArrayList<>();
Connection jdbcConnection = DriverManager.getConnection("jdbc:postgresql://10.200.200.133:5432/postgres", "clearing", "Aa111111");
DatabaseMetaData md = jdbcConnection.getMetaData();
ResultSet rs = md.getTables(null, "clearing_tester", "%", new String[]{"TABLE"});
while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
//сущности для company_info и company_info_history включены соответсвенно в company и company_history
if (tableName.equals("company_info") || tableName.equals("company_info_history")) {
continue;
}
nameTables.add(tableName);
}
HazelcastInstance hazelcastInstance = testConfig.getHazelcastInstance();
hazelcastInstance.getMap("");
for (String mapName : hazelcastInstance.getConfig().getMapConfigs().keySet()) {
Object mapStore = getMapStore(mapName);
String tableName;
if (mapStore instanceof TemplateMapStore) {
tableName = ((TemplateMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof DictionaryMapStore) {
tableName = ((DictionaryMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof TemplateEventMapStore) {
tableName = ((TemplateEventMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof BusinessObjectMapStore) {
tableName = ((BusinessObjectMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof BusinessEventMapStore) {
tableName = ((BusinessEventMapStore<?>) mapStore).getTableName();
} else if (mapName.equals("default")) {
continue;
} else {
System.out.println(mapStore == null ? "Не получилось сопоставить mapStore: is null" : "Не получилось сопоставить: " + mapStore.getClass() + " с таблицей");
continue;
}
nameTables.remove(tableName.toLowerCase());
}
System.out.println("** Результат поиска таблиц которым нужно добавить mapStore **");
nameTables.forEach(System.out::println);
System.out.println("*************************************************************");
Assertions.assertEquals(0, nameTables.size());
}
@Test
public void checkSavingForAllMapStoreTest() {
saveBusinessObjectAndBusinessEventToMaps();
saveDictionaryObjectToMaps();
testConfig.shutDownHazelcast();
testConfig.reinitHazlecastInstance();
for (BusinessObjectAndBusinessEventForCheckMapStore objectForCheck : businessObjectAndBusinessEventForCheckMapStores) {
String mapName = objectForCheck.getMapName();
SpcexObjectBase actual;
if (getMapStore(mapName) instanceof TemplateEventMapStore) {
String sql = String.format("SELECT * FROM %s WHERE id = %d", getTableNameFromMapStore(objectForCheck.getMapName()), ID);
List<SpcexObjectBase> obj = jdbcTemplate.query(sql, new BusinessEventRowMapper<>(objectForCheck.getClazz()));
actual = DataAccessUtils.singleResult(obj);
} else if (getMapStore(mapName) instanceof BusinessEventMapStore) {
String sql = String.format("SELECT * FROM %s WHERE id = %d", getTableNameFromMapStore(objectForCheck.getMapName()), ID);
List<CompanyHistory> objCompanyHistory = jdbcTemplate.query(sql, new BusinessEventRowMapper<>(objectForCheck.getClazz()));
CompanyHistory companyHistory = DataAccessUtils.singleResult(objCompanyHistory);
String sqlI = String.format("SELECT * FROM %s WHERE id = %d", "COMPANY_INFO_HISTORY", ID);
List<CompanyInfo> objCompanyInfo = jdbcTemplate.query(sqlI, new SpcexObjectBaseRowMapper<>(CompanyInfo.class));
CompanyInfo companyInfo = DataAccessUtils.singleResult(objCompanyInfo);
companyHistory.getObject().setProfile(companyInfo);
actual = companyHistory;
} else {
IMap<Long, SpcexObjectBase> map = testConfig.getHazelcastInstance().getMap(mapName);
actual = map.get(ID);
}
objectForCheck.getMATCHER().assertMatch(actual, objectForCheck.getPredictableObj());
}
for (DictionaryObjectForCheckMapStore objectForCheck : dictionaryObjectForCheckMapStores) {
String mapName = objectForCheck.getMapName();
AbstractDictionary actual;
IMap<Long, AbstractDictionary> map = testConfig.getHazelcastInstance().getMap(mapName);
actual = map.get(ID);
objectForCheck.getMATCHER().assertMatch(actual, objectForCheck.getPredictableObj());
}
}
//todo удалить если будет не нужна, пока не работает из-за "deleteIsSupported() return false" в SimpleObjectMapStore.
@Test
public void checkDeletingForAllMapStoreTest() {
Assumptions.assumeTrue(false, "todo удалить если будет не нужна, пока не работает из-за \"deleteIsSupported() return false\" в SimpleObjectMapStore.");
saveBusinessObjectAndBusinessEventToMaps();
for (BusinessObjectAndBusinessEventForCheckMapStore objectForCheck : businessObjectAndBusinessEventForCheckMapStores) {
IMap<Long, SpcexObjectBase> map = testConfig.getHazelcastInstance().getMap(objectForCheck.getMapName());
map.remove(ID);
String sql = String.format("SELECT * FROM %s WHERE id = %d", getTableNameFromMapStore(objectForCheck.getMapName()), ID);
List<SpcexObjectBase> obj = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(objectForCheck.getClazz()));
Assertions.assertNull(map.get(ID));
Assertions.assertEquals(0, obj.size());
}
}
private String getTableNameFromMapStore(String mapName) {
MapStoreConfig mapStoreConfig = testConfig.getHazelcastInstance().getConfig().getMapConfig(mapName).getMapStoreConfig();
Object mapStore = mapStoreConfig.getImplementation();
String tableName = null;
if (mapStore instanceof TemplateMapStore) {
tableName = ((TemplateMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof DictionaryMapStore) {
tableName = ((DictionaryMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof TemplateEventMapStore) {
tableName = ((TemplateEventMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof BusinessObjectMapStore) {
tableName = ((BusinessObjectMapStore<?>) mapStore).getTableName();
} else if (mapStore instanceof BusinessEventMapStore) {
tableName = ((BusinessEventMapStore<?>) mapStore).getTableName();
}
return tableName;
}
private Object getMapStore(String mapName) {
MapStoreConfig mapStoreConfig = testConfig.getHazelcastInstance().getConfig().getMapConfig(mapName).getMapStoreConfig();
return mapStoreConfig.getImplementation();
}
private void saveBusinessObjectAndBusinessEventToMaps() {
for (BusinessObjectAndBusinessEventForCheckMapStore objectForCheck : businessObjectAndBusinessEventForCheckMapStores) {
String mapName = objectForCheck.getMapName();
SpcexObjectBase spcexObjectBase = objectForCheck.getPredictableObj();
spcexObjectBase.setId(ID);
log.info("Запись в мап {} объекта {}", mapName, spcexObjectBase);
IMap<Long, SpcexObjectBase> map = testConfig.getHazelcastInstance().getMap(mapName);
map.put(spcexObjectBase.getId(), spcexObjectBase);
}
}
private void saveDictionaryObjectToMaps() {
for (DictionaryObjectForCheckMapStore objectForCheck : dictionaryObjectForCheckMapStores) {
String mapName = objectForCheck.getMapName();
AbstractDictionary dictionaryObj = objectForCheck.getPredictableObj();
dictionaryObj.setId(ID);
log.info("Запись в мап {} объекта {}", mapName, dictionaryObj);
Object mapStore = getMapStore(mapName);
String[] fields;
Object[] args;
if (mapName.equals(IMDGDistributedNames.Map_CompanySymbolDictionary)) {
CompanySymbolDictionary companySymbolDictionary = (CompanySymbolDictionary) dictionaryObj;
fields = new String[]{"ID", "CODE", "NAME", "SHORTNAME"};
args = new Object[]{companySymbolDictionary.getId(), companySymbolDictionary.getCode(), companySymbolDictionary.getName(), companySymbolDictionary.getShortname()};
} else {
fields = new String[]{"ID", "CODE", "NAME"};
args = new Object[]{dictionaryObj.getId(), dictionaryObj.getCode(), dictionaryObj.getName()};
}
makeInsertSql(((DictionaryTMapStore<?>) mapStore).getTableName(), fields, args, "id");
}
}
private void trySettingString(SpcexObjectBase object, Class clazz, String methodName, int lenght) {
try {
Method method = clazz.getDeclaredMethod(methodName, String.class);
method.invoke(object, generatingRandomString(lenght));
} catch (Exception ignored) {
}
}
private void makeInsertSql(String tableName, String[] fields, Object[] args, String matchingKey) {
String INSERT_TEMPLATE = "INSERT INTO ${tableName} (${columnsEnumeration}) VALUES (${valuesEnumeration}) ON CONFLICT (${matchingKey}) DO UPDATE SET ${excludedColumns}";
String columnsEnumeration = Arrays.stream(fields).map(f -> "" + f.toUpperCase() + "").collect(Collectors.joining(", "));
String valuesEnumeration = String.join(", ", Collections.nCopies(fields.length, "?"));
String excludedColumns = Arrays.stream(fields).filter(f -> !matchingKey.equalsIgnoreCase(f)).
map(f -> "" + f.toUpperCase() + "=EXCLUDED." + f.toUpperCase() + "").collect(Collectors.joining(", "));
Map<String, Object> params = new HashMap<>();
params.put("tableName", tableName);
params.put("columnsEnumeration", columnsEnumeration);
params.put("valuesEnumeration", valuesEnumeration);
params.put("matchingKey", matchingKey.toUpperCase());
params.put("excludedColumns", excludedColumns);
String insertStatement = TextUtil.format(INSERT_TEMPLATE, params);
List<Object[]> batchArgs = new ArrayList<>();
if (args.length != args.length) {
throw new IllegalArgumentException("objectToField return " + args.length + " arguments, but expected " + args.length);
}
batchArgs.add(args);
batchInsertUpdate(insertStatement, batchArgs, tableName);
}
private void batchInsertUpdate(@NonNull String insertStatement, @NonNull List<Object[]> args, String tableName) {
try {
int[][] ret = jdbcTemplate.batchUpdate(insertStatement, args, 1000, (ps, params) -> {
for (int i = 0; i < params.length; i++) {
Object value = params[i];
try {
StatementCreatorUtils.setParameterValue(ps, i + 1, SqlTypeValue.TYPE_UNKNOWN, value);
} catch (SQLException e) {
throw new SQLException("batchInsertUpdate, at prepare argument " + i + " value = " + value + "; SQL=" + insertStatement, e);
}
}
});
int batchSize = ret.length > 0 ? ret[0].length : ret.length;
log.debug("{} {} rows stored", tableName, batchSize);
} catch (Exception e) {
log.error("SQL error at batch UPDATE OR INSERT INTO {}\n{}", tableName, ExceptionUtils.getStackTrace(e));
throw e;
}
}
}

View file

@ -0,0 +1,76 @@
package ru.spcex.clearing.imdg.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import ru.spcex.clearing.imdg.error.ModuleInitializeException;
import javax.sql.DataSource;
import java.sql.Connection;
@SuppressWarnings("UnnecessaryLocalVariable")
@Configuration
public class DbTestConnectionConfig {
private final Logger log = LoggerFactory.getLogger(this.getClass());
private DatabasePopulator createDatabasePopulator() {
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator();
databasePopulator.setContinueOnError(true);
databasePopulator.addScript(new ClassPathResource("/ddl.sql"));
return databasePopulator;
}
@Bean
public DataSource dataSource() {
DataSource result;
String login = "clearing";
String password = "Aa111111";
String logTimeoutPart = "";
String dbPath = "jdbc:postgresql://10.200.200.133:5432/postgres?currentSchema=clearing_tester";
int timeoutSec = 30;
ComboPooledDataSource cpds = new ComboPooledDataSource();
try {
cpds.setDriverClass("org.postgresql.Driver");
} catch (Exception ue) {
throw new RuntimeException(ue);
}
cpds.setJdbcUrl(dbPath);
cpds.setUser(login);
cpds.setPassword(password);
cpds.setInitialPoolSize(10);
cpds.setMinPoolSize(01);
cpds.setMaxPoolSize(30);
int numHelperThreads = Runtime.getRuntime().availableProcessors() * 2;
cpds.setNumHelperThreads(numHelperThreads);
cpds.setCheckoutTimeout(timeoutSec * 1000);
logTimeoutPart = String.format(" (timeout=%ds)", timeoutSec);
// DatabasePopulatorUtils.execute(createDatabasePopulator(), cpds);
result = cpds;
String OPERATION_DATABASE_CONNECTION_CHECK = String.format("Database [%s] connection check", dbPath);
try {
Connection conn = result.getConnection();
conn.close();
log.info("{}: success", OPERATION_DATABASE_CONNECTION_CHECK);
return result;
} catch (Throwable e) {
String msg = String.format("%s%s: failed: %s -> %s",
OPERATION_DATABASE_CONNECTION_CHECK, logTimeoutPart, e.getClass().getSimpleName(), e.getMessage());
log.error(msg);
throw new ModuleInitializeException(msg, e);
}
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
}
}

View file

@ -0,0 +1,51 @@
package ru.spcex.clearing.imdg.config;
import com.hazelcast.config.Config;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@Configuration
@Import({HazelcastConfiguration.class, PoolMapConfigs.class})
@ComponentScan(basePackages = {"ru.spcex.clearing.imdg"})
public class TestConfiguration {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private HazelcastInstance hazelcastInstance;
@Autowired
private Config hazelcastConfig;
public void shutDownHazelcast() {
if (hazelcastInstance != null) {
hazelcastInstance.getLifecycleService().shutdown();
while (hazelcastInstance.getLifecycleService().isRunning()) {
try {
Thread.sleep(1000);
log.info("Waiting to complete hazelCast");
} catch (InterruptedException e) {
log.warn("Test at ShutDownHazelcast(): thread interrupted {}", e);
}
}
}
hazelcastInstance = null;
}
public void reinitHazlecastInstance() {
hazelcastInstance = Hazelcast.getOrCreateHazelcastInstance(hazelcastConfig);
}
public Config getHazelcastConfig() {
return hazelcastConfig;
}
public HazelcastInstance getHazelcastInstance() {
return hazelcastInstance;
}
}

View file

@ -0,0 +1,80 @@
package ru.spcex.clearing.imdg.structure;
import ru.spcex.clearing.imdg.utils.MatcherFactory.Matcher;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import static ru.spcex.clearing.imdg.utils.MatcherFactory.usingIgnoringFieldsComparator;
public class BusinessObjectAndBusinessEventForCheckMapStore<T> {
public final Matcher<T> MATCHER = usingIgnoringFieldsComparator();
private final String mapName;
private final Class<T> clazz;
private SettingOperation settingOperation;
private SpcexObjectBase predictableObj;
public BusinessObjectAndBusinessEventForCheckMapStore(String mapName, Class<T> clazz) {
this.mapName = mapName;
this.clazz = clazz;
}
public BusinessObjectAndBusinessEventForCheckMapStore(String mapName, Class<T> clazz, SettingOperation settingOperation) {
this.mapName = mapName;
this.clazz = clazz;
this.settingOperation = settingOperation;
}
public String getMapName() {
return mapName;
}
public Class<T> getClazz() {
return clazz;
}
public Matcher<T> getMATCHER() {
return MATCHER;
}
public SpcexObjectBase getPredictableObj() {
return predictableObj;
}
public void setPredictableObj(SpcexObjectBase predictableObj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
if (settingOperation != null) {
Method method = clazz.getDeclaredMethod(settingOperation.getMethodName(), settingOperation.getParameterTypes());
method.invoke(predictableObj, settingOperation.getParams());
}
this.predictableObj = predictableObj;
}
public static class SettingOperation {
private final String methodName;
private final Class[] parameterTypes;
private final Object[] params;
//сеттер для полей значения которых обрезаются при вставке в БД
public SettingOperation(String methodName, Class[] parameterTypes, Object[] params) {
this.methodName = methodName;
this.parameterTypes = parameterTypes;
this.params = params;
}
public String getMethodName() {
return methodName;
}
public Class[] getParameterTypes() {
return parameterTypes;
}
public Object[] getParams() {
return params;
}
}
}

View file

@ -0,0 +1,43 @@
package ru.spcex.clearing.imdg.structure;
import ru.clearing.platform.dictionary.AbstractDictionary;
import ru.spcex.clearing.imdg.utils.MatcherFactory.Matcher;
import java.lang.reflect.InvocationTargetException;
import static ru.spcex.clearing.imdg.utils.MatcherFactory.usingIgnoringFieldsComparator;
public class DictionaryObjectForCheckMapStore<T> {
public final Matcher<T> MATCHER = usingIgnoringFieldsComparator();
private final String mapName;
private final Class<T> clazz;
private AbstractDictionary predictableObj;
public DictionaryObjectForCheckMapStore(String mapName, Class<T> clazz) {
this.mapName = mapName;
this.clazz = clazz;
}
public String getMapName() {
return mapName;
}
public Class<T> getClazz() {
return clazz;
}
public Matcher<T> getMATCHER() {
return MATCHER;
}
public AbstractDictionary getPredictableObj() {
return predictableObj;
}
public void setPredictableObj(AbstractDictionary predictableObj) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
this.predictableObj = predictableObj;
}
}

View file

@ -0,0 +1,148 @@
package ru.spcex.clearing.imdg.structure;
import ru.clearing.classes.statics.data.account.*;
import ru.clearing.classes.statics.data.company.Company;
import ru.clearing.classes.statics.data.company.CompanyHistory;
import ru.clearing.classes.statics.data.company.CompanyRoleSet;
import ru.clearing.classes.statics.data.company.CompanySymbols;
import ru.clearing.classes.statics.data.company.relation.Relation;
import ru.clearing.classes.statics.data.company.relation.RelationHistory;
import ru.clearing.classes.statics.data.generated.ClearingMemberCategory;
import ru.clearing.classes.statics.data.journal.InDocumentJournal;
import ru.clearing.classes.statics.data.journal.OutDocumentJournal;
import ru.clearing.classes.statics.data.messages.ErrorText;
import ru.clearing.classes.statics.data.misc.KeyRate;
import ru.clearing.classes.statics.data.misc.MoneyMarketSecurity;
import ru.clearing.classes.statics.data.profile.Contact;
import ru.clearing.classes.statics.data.profile.ProfileDocument;
import ru.clearing.classes.statics.data.scheduler.*;
import ru.clearing.classes.statics.data.sdf.*;
import ru.clearing.classes.statics.data.security.Security;
import ru.clearing.classes.statics.data.security.SecurityHistory;
import ru.clearing.classes.statics.data.statement.Statement;
import ru.clearing.classes.statics.data.user.*;
import ru.clearing.platform.dictionary.*;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.imdg.structure.BusinessObjectAndBusinessEventForCheckMapStore.SettingOperation;
import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.List;
public class RunnableMapNamesForTesting {
public static List<BusinessObjectAndBusinessEventForCheckMapStore> businessObjectAndBusinessEventForCheckMapStores;
public static List<DictionaryObjectForCheckMapStore> dictionaryObjectForCheckMapStores;
static {
init();
}
private static void init() {
businessObjectAndBusinessEventForCheckMapStores = new LinkedList<>();
dictionaryObjectForCheckMapStores = new LinkedList<>();
//business event
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_AccountBalanceHistory, AccountBalanceHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_AccountHistory, AccountHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_AccountRoutingHistory, AccountRoutingHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_BankAccountHistory, BankAccountHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_CompanyHistory, CompanyHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_InformationAccountHistory, InformationAccountHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_RelationHistory, RelationHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SecurityHistory, SecurityHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_UserConnectHistory, UserConnectHistory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_UserHistory, UserHistory.class));
//business object
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Account, Account.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Company, Company.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_ErrorText, ErrorText.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Relation, Relation.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Scheduler, Scheduler.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Security, Security.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Statement, Statement.class,
new SettingOperation("setAmount", new Class[]{BigDecimal.class}, new Object[]{new BigDecimal("23.22")})));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_TaskRunner, TaskRunner.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Timetable, Timetable.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_TradingCalendar, TradingCalendar.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_UserConnect, UserConnect.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_User, User.class));
//dictionary
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_AccountStatusDictionary, AccountStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_AccountTypeDictionary, AccountTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_AllowedDictionary, AllowedDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_BalanceAccountTypeDictionary, BalanceAccountTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ChargeDirectionDictionary, ChargeDirectionDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ClearingStatusDictionary, ClearingStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_CompanyRoleDictionary, CompanyRoleDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_CompanySymbolDictionary, CompanySymbolDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ConnectionStateDictionary, ConnectionStateDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ContactTypeDictionary, ContactTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_CorporationSoleTypeDictionary, CorporationSoleTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_CountryCodeDictionary, CountryCodeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_CourierTypeDictionary, CourierTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_CurrencyCodeDictionary, CurrencyCodeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_DocumentTypeDictionary, DocumentTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ErrorCodeDictionary, ErrorCodeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_InOutDirectionDictionary, InOutDirectionDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_InstrumentTypeDictionary, InstrumentTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_InterestStatusDictionary, InterestStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_LegalKindDictionary, LegalKindDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ManagementJournalPurposeDictionary, ManagementJournalPurposeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ManagementJournalStatusDictionary, ManagementJournalStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ManagementJournalTypeDictionary, ManagementJournalTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_MoneyFlowSideDictionary, MoneyFlowSideDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_OperationStatusDictionary, OperationStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_OperationTypeDictionary, OperationTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_OrganizationTypeDictionary, OrganizationTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ResultStatusDictionary, ResultStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_SectorDictionary, SectorDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ServiceDictionary, ServiceDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ServiceProductDictionary, ServiceProductDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_ServiceStatusDictionary, ServiceStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_SourceDictionary, SourceDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_StatementTypeDictionary, StatementTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_TermTypeDictionary, TermTypeDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_TradingStatusDictionary, TradingStatusDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_UserRoleDictionary, UserRoleDictionary.class));
dictionaryObjectForCheckMapStores.add(new DictionaryObjectForCheckMapStore<>(IMDGDistributedNames.Map_WorkflowStatusDictionary, WorkflowStatusDictionary.class));
//object
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_AccountRouting, AccountRouting.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_BankAccount, BankAccount.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_CompanyRoleSet, CompanyRoleSet.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_Contact, Contact.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_InDocumentJournal, InDocumentJournal.class,
new SettingOperation("setAmount", new Class[]{BigDecimal.class}, new Object[]{new BigDecimal("23.22")})));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_InformationAccount, InformationAccount.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_KeyRate, KeyRate.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_MoneyMarketSecurity, MoneyMarketSecurity.class,
new SettingOperation("setNominalValue", new Class[]{BigDecimal.class}, new Object[]{new BigDecimal("23.22")})));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_OutDocumentJournal, OutDocumentJournal.class,
new SettingOperation("setAmount", new Class[]{BigDecimal.class}, new Object[]{new BigDecimal("23.22")})));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_ProfileDocument, ProfileDocument.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SchedulerAllToday, SchedulerAllToday.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf01, SDf01.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf02, SDf02.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf03, SDf03.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf04, SDf04.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf05, SDf05.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf08, SDf08.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf09, SDf09.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf10, SDf10.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf11, SDf11.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf12, SDf12.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf13, SDf13.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf16, SDf16.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf17, SDf17.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_SDf18, SDf18.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_UserRoleSession, UserRoleSession.class));
businessObjectAndBusinessEventForCheckMapStores.add(new BusinessObjectAndBusinessEventForCheckMapStore<>(IMDGDistributedNames.Map_UserSettings, UserSettings.class));
}
}

View file

@ -0,0 +1,74 @@
package ru.spcex.clearing.imdg.utils;
import org.springframework.jdbc.core.RowMapper;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
public abstract class AbstractHistoryRowMapper<T extends SpcexObjectBase> implements RowMapper<T> {
@Override
abstract public T mapRow(ResultSet rs, int rowNum) throws SQLException;
protected void setValueFildForObjectIfFildExists(SpcexObjectBase object, Class<?> clazz, String fildName, Object value) {
try {
Field field = clazz.getDeclaredField(fildName);
field.setAccessible(true);
Class<?> typeField = field.getType();
if (typeField.equals(LocalDate.class)) {
Date date = (Date) value;
field.set(object, value != null ? Instant.ofEpochMilli(date.getTime()).atZone(ZoneId.systemDefault()).toLocalDate() : null);
} else if (typeField.equals(LocalTime.class)) {
Time time = (Time) value;
field.set(object, value != null ? time.toLocalTime() : null);
} else if (typeField.getName().equals(Instant.class.getName())) {
field.set(object, value != null ? ((Timestamp) value).toInstant() : null);
} else {
field.set(object, value);
}
} catch (NoSuchFieldException e) {
if (!clazz.getSuperclass().getName().equals(Object.class.getName())) {
setValueFildForObjectIfFildExists(object, clazz.getSuperclass(), fildName, value);
}
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
protected String getFildName(String str, String objIdColumn) {
if (str.equals(objIdColumn)) {
return "objId";
} else if (str.equals("created_at")) {
return "created";
} else if (str.equals("updated_at")) {
return "updated";
}
return snakeCaseToCamelCase(str);
}
protected String snakeCaseToCamelCase(String str) {
StringBuilder builder = new StringBuilder(str);
for (int i = 0; i < builder.length(); i++) {
// Check char is underscore
if (builder.charAt(i) == '_') {
builder.deleteCharAt(i);
builder.replace(
i, i + 1,
String.valueOf(
Character.toUpperCase(
builder.charAt(i))));
}
}
return builder.toString();
}
}

View file

@ -0,0 +1,65 @@
package ru.spcex.clearing.imdg.utils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.NotWritablePropertyException;
import org.springframework.beans.TypeMismatchException;
import org.springframework.jdbc.support.JdbcUtils;
import ru.clearing.classes.objects.BusinessEvent;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class BusinessEventRowMapper<T extends BusinessEvent> extends AbstractHistoryRowMapper<T> {
private final Class<T> mappedClass;
public BusinessEventRowMapper(Class<T> mappedClass) {
this.mappedClass = mappedClass;
}
@Override
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
T historyObject = BeanUtils.instantiateClass(this.mappedClass);
SpcexObjectBase objectFild = null;
try {
objectFild = (SpcexObjectBase) BeanUtils.instantiateClass(historyObject.getClass().getDeclaredField("object").getType());
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
ResultSetMetaData meta_data = rs.getMetaData();
String objIdColumn = rs.getMetaData().getTableName(1).replace("_history", "_id");
int columnCount = meta_data.getColumnCount();
for (int index = 1; index <= columnCount; index++) {
String column = JdbcUtils.lookupColumnName(meta_data, index);
String fildName = getFildName(column, objIdColumn);
try {
Object value = JdbcUtils.getResultSetValue(rs, index, Class.forName(meta_data.getColumnClassName(index)));
if (fildName.equals("id")) {
historyObject.setId((Long) value);
continue;
} else if (fildName.equals("eventUserId")) {
historyObject.setUserId((Long) value);
continue;
} else if (fildName.equals("userId")) {
setValueFildForObjectIfFildExists(objectFild, objectFild.getClass(), fildName, value);
continue;
} else if (fildName.equals("objId")) {
objectFild.setId((Long) value);
continue;
}
setValueFildForObjectIfFildExists(historyObject, historyObject.getClass(), fildName, value);
setValueFildForObjectIfFildExists(objectFild, objectFild.getClass(), fildName, value);
} catch (TypeMismatchException | NotWritablePropertyException e) {
// Ignore
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
historyObject.setObject(objectFild);
return historyObject;
}
}

View file

@ -0,0 +1,251 @@
package ru.spcex.clearing.imdg.utils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Утилитарный класс для работы с embedded базой.
* Так же используется для заполнения значений классов для подготовки вставки в базу
*/
public final class DbDataUtils {
private static final Logger log = LoggerFactory.getLogger(DbDataUtils.class);
/**
* Паттерн который проверяет что исполняемый скрипт пересоздает таблицу (recreate table * (*))
*/
private final static Pattern PATTERN_CREATE_TABLE = Pattern.compile(
"(?m)(?i)^\\s*?(?:re)*(create\\s*?table\\s*?[^\\s$]+?\\s*?\\([\\S\\s]+?(?:\\);|^\\)\\s*?$))");
private final static Pattern PATTERN_ALTER_TABLE = Pattern.compile(
"(?m)(?i)^\\s*?(alter\\s*?table\\s*?[^\\s$]+?\\s*?add\\s*?constraint\\s*?[^\\s$]+?\\s*?primary\\s*?key\\s*?\\([\\S\\s]+?(?:\\);|^\\)\\s*?$))");
private final static Pattern PATTERN_UPDATE_OR_INSERT_TABLE = Pattern.compile(
"(?i)update\\s+\\w+\\s+set\\s+\\w+|update\\s+or\\s+insert\\s+into\\s+\\w+.*?values|insert\\s+into\\s+\\w+.*?values");
private final static Pattern PATTERN_UPDATE_OR_INSERT_VERSIONDB = Pattern.compile(
"(?m)(?i)^\\s*?(update or insert into VERSIONEDID\\s*?[\\w\\s\\(\\,)]+\\s*values\\s*?[\\w\\s\\.'\\(\\,)]+matching\\s*?[\\w\\s,\\(\\)]+\\s*;)");
private final static Pattern PATTERN_CHANGE_CREATE_TO_RECREATE = Pattern.compile(
"(?i)^\\s*?create");
private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("ddMMyyyy");
/**
* Создавать объект этого типа нельзя
*/
private DbDataUtils() {
}
/**
* Создает пустую базу по DDL скрипту (только таблицы), так же проверяет скрипты DDL на валидность.
*/
public static void executeAllDDL(List<String> DDLs, JdbcTemplate jdbcTemplate) {
Logger log = LoggerFactory.getLogger(DbDataUtils.class);
log.info("Создание всех таблиц по DDL.sql");
int executed = 0;
for (String dll : DDLs) {
executed += executeOneDDL(dll, jdbcTemplate);
}
log.info("Закончено создание таблиц... выполненых запросов {}", executed);
}
public static int executeOneDDL(String ddl, JdbcTemplate jdbcTemplate) {
Logger log = LoggerFactory.getLogger(DbDataUtils.class);
Matcher m = PATTERN_CREATE_TABLE.matcher(ddl);
// Matcher alterMatcher = PATTERN_ALTER_TABLE.matcher(ddl);
List<String> sqls = new ArrayList<>();
// List<String> alterSqls = new ArrayList<>();
while (m.find()) {
String oneDDL = m.group(1);
Matcher mr = PATTERN_CHANGE_CREATE_TO_RECREATE.matcher(oneDDL);
oneDDL = mr.replaceAll("RECREATE");
sqls.add(oneDDL);
}
// while (alterMatcher.find()) {
// String oneDDL = alterMatcher.group(1);
// alterSqls.add(oneDDL);
// }
log.info("Exec batch");
int[] result = jdbcTemplate.batchUpdate(sqls.toArray(new String[0]));
// int alterResult[] = jdbcTemplate.batchUpdate(alterSqls.toArray(new String[0]));
log.info("Batch sql done");
// Для проставления версии БД
int insertCount = 0;
Matcher versionM = PATTERN_UPDATE_OR_INSERT_VERSIONDB.matcher(ddl);
while (versionM.find()) {
String oneSQL = versionM.group(1);
jdbcTemplate.execute(oneSQL);
log.trace("Executed version SQL: {}", oneSQL);
insertCount++;
}
return result.length + insertCount;
}
public static void fillMandatorySqlData(Map<String, String> mandatorySql, JdbcTemplate jdbcTemplate) {
Logger log = LoggerFactory.getLogger(DbDataUtils.class);
log.info("Заполнение базы общими значениями");
fillSqlData(mandatorySql, jdbcTemplate);
}
public static void fillAdditionalSqlData(Map<String, String> additionalSql, JdbcTemplate jdbcTemplate) {
Logger log = LoggerFactory.getLogger(DbDataUtils.class);
log.info("Заполнение базы дополнительными значениями");
fillSqlData(additionalSql, jdbcTemplate);
}
public static void fillSqlData(Map<String, String> sqlMap, JdbcTemplate jdbcTemplate) {
Logger log = LoggerFactory.getLogger(DbDataUtils.class);
for (Map.Entry<String, String> sqlEntry : sqlMap.entrySet()) {
String sql = sqlEntry.getValue();
String[] lines = sql.split("\n");
List<String> sqls = new ArrayList<>();
for (String line : lines) {
if (StringUtils.isEmpty(line) || StringUtils.isWhitespace(line))
continue;
String execLine = line.trim();
if (!execLine.endsWith(";"))
execLine += ";";
Matcher updateOrInsertMatcher = PATTERN_UPDATE_OR_INSERT_TABLE.matcher(execLine);
if (updateOrInsertMatcher.find()) {
execLine = execLine.replaceAll("(?i)update\\s+or\\s+insert\\s*", "insert ");
log.info("Скрипт {}", execLine);
sqls.add(execLine);
}
}
log.info("Exec batch");
int[] result = jdbcTemplate.batchUpdate(sqls.toArray(new String[0]));
log.info("Batch sql done");
}
log.info("Заполнение базы значениями завершено");
}
private static void fillObjectDefaultValues(Object object) {
fillObjectDefaultValues(object, object.getClass());
for (Field field : object.getClass().getDeclaredFields()) {
if (!Modifier.isFinal(field.getModifiers())) {
field.setAccessible(true);
setFieldDefaultValue(field, object);
}
}
}
public static void fillObjectDefaultValues(Object object, Class<?> clazz) {
if (!clazz.getSuperclass().getName().equals(Object.class.getName())) {
fillObjectDefaultValues(object, clazz.getSuperclass());
}
for (Field field : clazz.getDeclaredFields()) {
if (!Modifier.isFinal(field.getModifiers()) && !Modifier.isStatic(field.getModifiers())) {
field.setAccessible(true);
setFieldDefaultValue(field, object);
}
}
}
public static void getObjectsFieldValues(Object object, Map<Field, Object> values, boolean deepScan) throws IllegalAccessException {
if (!object.getClass().getSuperclass().getName().equals(Object.class.getName())) {
log.trace("Scan values of {}", object.getClass().getName());
getObjectsFieldValues(object.getClass().getSuperclass(), values, deepScan);
for (Field field : object.getClass().getDeclaredFields()) {
if (!Modifier.isFinal(field.getModifiers())) {
field.setAccessible(true);
Object value = field.get(object);
values.put(field, value);
if (deepScan && isBusinessObject(value)) { // пройти внутрь наших классов
getObjectsFieldValues(value, values, deepScan); // go to deeper
}
}
}
}
}
/**
* Это наш класс и не примитив
*
* @param value объект, возможно otc-объект.
* @return нужно ли применять deepScan
*/
private static boolean isBusinessObject(Object value) {
String classesClassPathPrefix = "ru.clearing.classes.objects";
return value != null && value.getClass().getName().startsWith(classesClassPathPrefix);
}
private static void setFieldDefaultValue(Field field, Object object) {
Logger log = LoggerFactory.getLogger(DbDataUtils.class);
Class<?> typeField = field.getType();
try {
if (typeField.getName().equals(String.class.getName())) {
field.set(object, generatingRandomString(4));
} else if (typeField.equals(Integer.TYPE) || typeField.equals(Integer.class)) {
field.set(object, generatingRandomInteger());
} else if (typeField.getName().equals(BigDecimal.class.getName())) {
field.set(object, new BigDecimal(String.format("%d3.220000000000000000", generatingRandomInteger())));
} else if (typeField.equals(Long.TYPE) || typeField.equals(Long.class)) {
field.set(object, generatingRandomLong());
} else if (typeField.equals(LocalDate.class)) {
field.set(object, LocalDate.of(2022, generatingRandomInteger(), generatingRandomInteger()));
} else if (typeField.equals(LocalTime.class)) {
field.set(object, LocalTime.of(generatingRandomInteger(), generatingRandomInteger()));
} else if (typeField.getName().equals(Date.class.getName())) {
field.set(object, new Date());
} else if (typeField.getName().equals(Boolean.class.getName())) {
field.set(object, true);
} else if (typeField.getName().equals(UUID.class.getName())) {
field.set(object, UUID.randomUUID());
} else if (typeField.getName().equals(Instant.class.getName())) {
field.set(object, Instant.parse(String.format("2022-10-0%dT15:39:18.659Z", generatingRandomInteger())));
// } else if (typeField.getSimpleName().equals(CompanyInfo.class.getSimpleName())) {
// CompanyInfo companyInfo = new CompanyInfo();
// fillObjectDefaultValues(companyInfo, CompanyInfo.class);
// field.set(object, companyInfo);
// } else if (typeField.getSuperclass().getName().equals(SpcexObjectBase.class.getName())) {
// Object objectField = typeField.getDeclaredConstructor().newInstance();
// DbDataUtils.fillObjectDefaultValues(objectField, objectField.getClass());
// field.set(object, objectField);
} else {
Object objectField = typeField.getDeclaredConstructor().newInstance();
fillObjectDefaultValues(objectField, objectField.getClass());
field.set(object, objectField);
}
} catch (IllegalAccessException e) {
log.info(e.getMessage());
} catch (InvocationTargetException | InstantiationException | NoSuchMethodException e) {
throw new RuntimeException(e);
}
}
public static String generatingRandomString(int targetStringLength) {
int leftLimit = 97; // letter 'a'
int rightLimit = 122; // letter 'z'
Random random = new Random();
return random.ints(leftLimit, rightLimit + 1)
.limit(targetStringLength)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
public static Long generatingRandomLong() {
long leftLimit = 1L;
long rightLimit = 1000000L;
return leftLimit + (long) (Math.random() * (rightLimit - leftLimit));
}
public static int generatingRandomInteger() {
int leftLimit = 1;
int rightLimit = 9;
return leftLimit + (int) (new Random().nextFloat() * (rightLimit - leftLimit));
}
}

View file

@ -0,0 +1,38 @@
package ru.spcex.clearing.imdg.utils;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Factory for creating test matchers.
* <p>
* Comparing actual and expected objects via AssertJ
*/
public class MatcherFactory {
public static <T> Matcher<T> usingIgnoringFieldsComparator(String... fieldsToIgnore) {
return new Matcher<>(fieldsToIgnore);
}
public static class Matcher<T> {
private final String[] fieldsToIgnore;
private Matcher(String... fieldsToIgnore) {
this.fieldsToIgnore = fieldsToIgnore;
}
public void assertMatch(T actual, T expected) {
assertThat(actual).usingRecursiveComparison().ignoringFields(fieldsToIgnore).isEqualTo(expected);
}
@SafeVarargs
public final void assertMatch(Iterable<T> actual, T... expected) {
assertMatch(actual, Arrays.asList(expected));
}
public void assertMatch(Iterable<T> actual, Iterable<T> expected) {
assertThat(actual).usingRecursiveFieldByFieldElementComparatorIgnoringFields(fieldsToIgnore).isEqualTo(expected);
}
}
}

View file

@ -0,0 +1,48 @@
package ru.spcex.clearing.imdg.utils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.NotWritablePropertyException;
import org.springframework.beans.TypeMismatchException;
import org.springframework.jdbc.support.JdbcUtils;
import ru.spcex.platform.classes.base.SpcexObjectBase;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class SpcexObjectBaseRowMapper<T extends SpcexObjectBase> extends AbstractHistoryRowMapper<T> {
private final Class<T> mappedClass;
public SpcexObjectBaseRowMapper(Class<T> mappedClass) {
this.mappedClass = mappedClass;
}
@Override
public T mapRow(ResultSet rs, int rowNum) throws SQLException {
T object = BeanUtils.instantiateClass(this.mappedClass);
ResultSetMetaData meta_data = rs.getMetaData();
String objIdColumn = rs.getMetaData().getTableName(1).replace("_history", "_id");
int columnCount = meta_data.getColumnCount();
for (int index = 1; index <= columnCount; index++) {
String column = JdbcUtils.lookupColumnName(meta_data, index);
String fildName = getFildName(column, objIdColumn);
try {
Object value = JdbcUtils.getResultSetValue(rs, index, Class.forName(meta_data.getColumnClassName(index)));
if (fildName.equals("objId")) {
object.setId((Long) value);
continue;
}
setValueFildForObjectIfFildExists(object, object.getClass(), fildName, value);
} catch (TypeMismatchException | NotWritablePropertyException e) {
// Ignore
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
return object;
}
}

File diff suppressed because it is too large Load diff

View file

@ -20,9 +20,9 @@ import ru.spcex.platform.enumeration.Status;
import ru.spcex.platform.enumeration.UserRole;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.time.TimeUtil;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@ -34,11 +34,13 @@ import java.util.stream.Stream;
@Service
public class UserService extends QueueConsumer implements InitializingBean {
private final static Map<String, UserRole> roleMapping = new HashMap<>();
static {
roleMapping.put("CS_MKR_ADMIN", UserRole.Admin);
roleMapping.put("CS_MKR_SUPERVISER", UserRole.Superviser);
roleMapping.put("CS_MKR_SECURITY", UserRole.Security);
}
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<User> userMap;
private final Imdg<UserRoleSession> userRoleSessionImdg;
@ -52,6 +54,47 @@ public class UserService extends QueueConsumer implements InitializingBean {
this.userConnectImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_UserConnect, UserConnect.class);
}
static Collection<RoleAction> defineAllRoleChanges(Collection<UserRoleSession> presentRoles, Collection<String> authRoles) {
Collection<String> finalAuthRoles = authRoles.stream().flatMap((Function<String, Stream<String>>) keycloakRole -> {
UserRole userRole = roleMapping.get(keycloakRole);
if (userRole == null) return Stream.empty();
return Stream.of(userRole.getKey());
}).collect(Collectors.toList());
return Stream.concat(
presentRoles
.stream()
.filter(presentRole -> !(Status.Active.equalsByKey(presentRole.getStatus()) && contain(presentRole, finalAuthRoles)))
.filter(presentRole -> !(Status.Blocked.equalsByKey(presentRole.getStatus()) && !contain(presentRole, finalAuthRoles)))
.map(role -> {
RoleAction roleAction = new RoleAction();
roleAction.roleToChange = role;
if (Status.Active.equalsByKey(role.getStatus())) {
roleAction.newStatus = Status.Blocked;
} else {
roleAction.newStatus = Status.Active;
}
return roleAction;
}),
finalAuthRoles
.stream()
.filter(authRole -> !contain(authRole, presentRoles))
.map(authRole -> {
RoleAction action = new RoleAction();
action.newStatus = Status.Active;
action.roleName = authRole;
return action;
})
).toList();
}
private static boolean contain(UserRoleSession role, Collection<String> authRoles) {
return authRoles.stream().anyMatch(authRole -> authRole.equalsIgnoreCase(role.getUserRole()));
}
private static boolean contain(String authRole, Collection<UserRoleSession> presentRoles) {
return presentRoles.stream().anyMatch(role -> role.getUserRole().equalsIgnoreCase(authRole));
}
@Override
public void afterPropertiesSet() {
callback(UserAuthRequest.class)
@ -87,7 +130,7 @@ public class UserService extends QueueConsumer implements InitializingBean {
userConnect.setDisconnectionTime(logoutInfo.getTime());
userConnect.setUpdated(logoutInfo.getTime());
userConnect.setConnectionState(ConnectionState.Disconnected.getKey());
userConnect.setClearingDate(TimeUtil.today());
userConnect.setClearingDate(LocalDate.now());
userConnectImdg.update(userConnect);
}
@ -147,7 +190,7 @@ public class UserService extends QueueConsumer implements InitializingBean {
userConnect.setServerIP(serverIp);
userConnect.setClientIP(clientIp);
userConnect.setConnectionState(ConnectionState.Connected.getKey());
userConnect.setClearingDate(TimeUtil.today());
userConnect.setClearingDate(LocalDate.now());
if (isNew) {
userConnectImdg.insert(userConnect);
} else {
@ -155,52 +198,12 @@ public class UserService extends QueueConsumer implements InitializingBean {
}
}
static Collection<RoleAction> defineAllRoleChanges(Collection<UserRoleSession> presentRoles, Collection<String> authRoles) {
Collection<String> finalAuthRoles = authRoles.stream().flatMap((Function<String, Stream<String>>) keycloakRole -> {
UserRole userRole = roleMapping.get(keycloakRole);
if (userRole == null) return Stream.empty();
return Stream.of(userRole.getKey());
}).collect(Collectors.toList());
return Stream.concat(
presentRoles
.stream()
.filter(presentRole -> !(Status.Active.equalsByKey(presentRole.getStatus()) && contain(presentRole, finalAuthRoles)))
.filter(presentRole -> !(Status.Blocked.equalsByKey(presentRole.getStatus()) && !contain(presentRole, finalAuthRoles)))
.map(role -> {
RoleAction roleAction = new RoleAction();
roleAction.roleToChange = role;
if (Status.Active.equalsByKey(role.getStatus())) {
roleAction.newStatus = Status.Blocked;
} else {
roleAction.newStatus = Status.Active;
}
return roleAction;
}),
finalAuthRoles
.stream()
.filter(authRole -> !contain(authRole, presentRoles))
.map(authRole -> {
RoleAction action = new RoleAction();
action.newStatus = Status.Active;
action.roleName = authRole;
return action;
})
).toList();
}
private static boolean contain(UserRoleSession role, Collection<String> authRoles) {
return authRoles.stream().anyMatch(authRole -> authRole.equalsIgnoreCase(role.getUserRole()));
}
private static boolean contain(String authRole, Collection<UserRoleSession> presentRoles) {
return presentRoles.stream().anyMatch(role -> role.getUserRole().equalsIgnoreCase(authRole));
}
public static class RoleAction {
String roleName;
//------поля при обновления-----
Status newStatus;
UserRoleSession roleToChange;
boolean create() {
return roleToChange == null;
}

View file

@ -55,9 +55,9 @@ public final class IMDGDistributedNames {
public static final String Map_SDf09 = "Map_SDf09";
public static final String Map_SDf12 = "Map_SDf12";
public static final String Map_SDf18 = "Map_SDf18";
// public static final String Map_InterestStatusDictionary = "Map_InterestStatusDictionary"; future
public static final String Map_InterestStatusDictionary = "Map_InterestStatusDictionary";
public static final String Map_AllowedDictionary = "Map_AllowedDictionary";
// public static final String Map_ClearingMemberCategoryDictionary = "Map_ClearingMemberCategoryDictionary"; future
public static final String Map_ClearingMemberCategoryDictionary = "Map_ClearingMemberCategoryDictionary";
public static final String Map_CompanyRoleDictionary = "Map_CompanyRoleDictionary";
public static final String Map_CompanySymbolDictionary = "Map_CompanySymbolDictionary";
public static final String Map_ContactTypeDictionary = "Map_ContactTypeDictionary";

View file

@ -6,17 +6,17 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer;
import java.time.Instant;
import java.time.LocalDate;
public class MoneyMarketSecurityNewRequest {
@JsonProperty
@JsonSerialize(using = InstantSerializer.class)
@JsonDeserialize(using = InstantDeserializer.class)
public Instant startDate;
public LocalDate startDate;
@JsonProperty
@JsonSerialize(using = InstantSerializer.class)
@JsonDeserialize(using = InstantDeserializer.class)
public Instant endDate;
public LocalDate endDate;
@JsonProperty
public Double nominalValue;
@JsonProperty
@ -30,19 +30,19 @@ public class MoneyMarketSecurityNewRequest {
@JsonProperty
public Double lotSize;
public Instant getStartDate() {
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(Instant startDate) {
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public Instant getEndDate() {
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(Instant endDate) {
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}

View file

@ -7,7 +7,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer;
import java.time.Instant;
import java.time.LocalDate;
public class MoneyMarketSecurityUpdateRequest {
@JsonProperty
@ -16,7 +16,7 @@ public class MoneyMarketSecurityUpdateRequest {
@JsonSerialize(using = InstantSerializer.class)
@JsonDeserialize(using = InstantDeserializer.class)
@JsonProperty
public Instant endDate;
public LocalDate endDate;
@JsonProperty
public Double nominalValue;
@JsonProperty
@ -36,11 +36,11 @@ public class MoneyMarketSecurityUpdateRequest {
this.id = id;
}
public Instant getEndDate() {
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(Instant endDate) {
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}

View file

@ -6,43 +6,44 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer;
import java.time.Instant;
import java.math.BigDecimal;
import java.time.LocalDate;
public class KeyRateNewRequest {
@JsonProperty
public Double keyRate;
public BigDecimal keyRate;
@JsonSerialize(using = InstantSerializer.class)
@JsonDeserialize(using = InstantDeserializer.class)
@JsonProperty
public Instant startDate;
public LocalDate startDate;
@JsonSerialize(using = InstantSerializer.class)
@JsonDeserialize(using = InstantDeserializer.class)
@JsonProperty
public Instant endDate;
public LocalDate endDate;
@JsonProperty
public String document;
public Double getKeyRate() {
public BigDecimal getKeyRate() {
return keyRate;
}
public void setKeyRate(Double keyRate) {
public void setKeyRate(BigDecimal keyRate) {
this.keyRate = keyRate;
}
public Instant getStartDate() {
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(Instant startDate) {
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public Instant getEndDate() {
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(Instant endDate) {
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}

View file

@ -6,21 +6,22 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import ru.spcex.clearing.platform.messaging.domain.json.deserialize.InstantDeserializer;
import ru.spcex.clearing.platform.messaging.domain.json.serialize.InstantSerializer;
import java.time.Instant;
import java.math.BigDecimal;
import java.time.LocalDate;
public class KeyRateUpdateRequest {
@JsonProperty
public Long id;
@JsonProperty
public Double keyRate;
public BigDecimal keyRate;
@JsonSerialize(using = InstantSerializer.class)
@JsonDeserialize(using = InstantDeserializer.class)
@JsonProperty
public Instant startDate;
public LocalDate startDate;
@JsonSerialize(using = InstantSerializer.class)
@JsonDeserialize(using = InstantDeserializer.class)
@JsonProperty
public Instant endDate;
public LocalDate endDate;
@JsonProperty
public String document;
@ -32,27 +33,27 @@ public class KeyRateUpdateRequest {
this.id = id;
}
public Double getKeyRate() {
public BigDecimal getKeyRate() {
return keyRate;
}
public void setKeyRate(Double keyRate) {
public void setKeyRate(BigDecimal keyRate) {
this.keyRate = keyRate;
}
public Instant getStartDate() {
public LocalDate getStartDate() {
return startDate;
}
public void setStartDate(Instant startDate) {
public void setStartDate(LocalDate startDate) {
this.startDate = startDate;
}
public Instant getEndDate() {
public LocalDate getEndDate() {
return endDate;
}
public void setEndDate(Instant endDate) {
public void setEndDate(LocalDate endDate) {
this.endDate = endDate;
}