http://jira.mfd.msk:8088/browse/CLS-74 validation
This commit is contained in:
parent
da14e08665
commit
7cb1101b52
10 changed files with 171 additions and 21 deletions
|
|
@ -4,12 +4,13 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import ru.clearing.classes.statics.data.account.Account;
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
import ru.clearing.classes.statics.data.account.AccountBalance;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf01;
|
import ru.clearing.classes.statics.data.sdf.SDf01;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf09;
|
||||||
import ru.clearing.classes.statics.data.sdf.SDf16;
|
import ru.clearing.classes.statics.data.sdf.SDf16;
|
||||||
import ru.spcex.clearing.balance.validation.AccountBalanceValidation;
|
import ru.spcex.clearing.balance.validation.*;
|
||||||
import ru.spcex.clearing.balance.validation.AccountBalanceValidationRule;
|
|
||||||
import ru.spcex.clearing.balance.validation.Sdf01ValidationRule;
|
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
|
@ -33,6 +34,8 @@ public class ValidationConfig {
|
||||||
BiConsumer<String, Class<? extends SpcexObjectBase>> addImdg = (s, aClass) -> imdgs.put(s, imdgProvider.getImdg(s, aClass));
|
BiConsumer<String, Class<? extends SpcexObjectBase>> addImdg = (s, aClass) -> imdgs.put(s, imdgProvider.getImdg(s, aClass));
|
||||||
addImdg.accept(IMDGDistributedNames.Map_Account, Account.class);
|
addImdg.accept(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
|
addImdg.accept(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -42,9 +45,8 @@ public class ValidationConfig {
|
||||||
return imdgs.get(key);
|
return imdgs.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Bean("sdf01Validator")
|
@Bean("sdf01Validator")
|
||||||
public Function<SDf01, IValidator> sdf01Validator(ImdgProvider imdgProvider) {
|
public Function<SDf01, IValidator> sdf01Validator() {
|
||||||
return sDf01 -> {
|
return sDf01 -> {
|
||||||
ImdgValidationContext<SDf01> context = new ImdgValidationContext<>();
|
ImdgValidationContext<SDf01> context = new ImdgValidationContext<>();
|
||||||
context.setValidatedObject(sDf01);
|
context.setValidatedObject(sDf01);
|
||||||
|
|
@ -56,7 +58,7 @@ public class ValidationConfig {
|
||||||
Sdf01ValidationRule.AccountPresent,
|
Sdf01ValidationRule.AccountPresent,
|
||||||
Sdf01ValidationRule.CurrencyCode,
|
Sdf01ValidationRule.CurrencyCode,
|
||||||
Sdf01ValidationRule.CurrentDateOnly,
|
Sdf01ValidationRule.CurrentDateOnly,
|
||||||
Sdf01ValidationRule.Market,
|
MarketIsUValidationRule.instance,
|
||||||
Sdf01ValidationRule.accountType);
|
Sdf01ValidationRule.accountType);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -74,11 +76,30 @@ public class ValidationConfig {
|
||||||
Sdf01ValidationRule.AccountPresent,
|
Sdf01ValidationRule.AccountPresent,
|
||||||
Sdf01ValidationRule.CurrencyCode,
|
Sdf01ValidationRule.CurrencyCode,
|
||||||
Sdf01ValidationRule.CurrentDateOnly,
|
Sdf01ValidationRule.CurrentDateOnly,
|
||||||
Sdf01ValidationRule.Market,
|
MarketIsUValidationRule.instance,
|
||||||
Sdf01ValidationRule.accountType);
|
Sdf01ValidationRule.accountType);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean("sdf09Validator")
|
||||||
|
public Function<SDf09, IValidator> sdf09Validator() {
|
||||||
|
return sDf09 -> {
|
||||||
|
ImdgValidationContext<SDf09> context = new ImdgValidationContext<>();
|
||||||
|
context.setValidatedObject(sDf09);
|
||||||
|
Consumer<String> addImdg = (s) -> context.addImdg(s, getImdg(s));
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_Account);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_Company);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_CompanySymbols);
|
||||||
|
addImdg.accept(IMDGDistributedNames.Map_AccountBalance);
|
||||||
|
return new ValidatorImpl<>(context,
|
||||||
|
Sdf09ValidationRule.CompanyPresent,
|
||||||
|
Sdf09ValidationRule.AccountPresent,
|
||||||
|
MarketIsUValidationRule.instance,
|
||||||
|
Sdf09ValidationRule.BalanceEnough
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Bean("accountBalanceValidator")
|
@Bean("accountBalanceValidator")
|
||||||
public Function<AccountBalanceValidation, IValidator> accountBalanceValidator(ImdgProvider imdgProvider) {
|
public Function<AccountBalanceValidation, IValidator> accountBalanceValidator(ImdgProvider imdgProvider) {
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ public enum BalanceError implements IEnumId {
|
||||||
WrongMarket(5215L),
|
WrongMarket(5215L),
|
||||||
WrongAccount(5215L),
|
WrongAccount(5215L),
|
||||||
AccountNotPresent(5217L),
|
AccountNotPresent(5217L),
|
||||||
AccountNotActive(5218L)
|
AccountNotActive(5218L),
|
||||||
|
BalanceNotEnough(5222L),
|
||||||
;
|
;
|
||||||
private final Long id;
|
private final Long id;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
package ru.spcex.clearing.balance.validation;
|
||||||
|
|
||||||
|
import ru.spcex.clearing.balance.errors.BalanceError;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
||||||
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class MarketIsUValidationRule implements IValidationRule<ImdgValidationContext<WithMarket>> {
|
||||||
|
|
||||||
|
public static final MarketIsUValidationRule instance = new MarketIsUValidationRule();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<WithMarket> context) {
|
||||||
|
WithMarket validatedObject = context.getValidatedObject();
|
||||||
|
if (!"U".equals(validatedObject.getMarket())) {
|
||||||
|
return of(BalanceError.WrongMarket);
|
||||||
|
}
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -65,16 +65,6 @@ public enum Sdf01ValidationRule implements IValidationRule<ImdgValidationContext
|
||||||
return empty();
|
return empty();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Market() {
|
|
||||||
@Override
|
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<SDf01> context) {
|
|
||||||
SDf01 sdf01 = context.getValidatedObject();
|
|
||||||
if (!"U".equals(sdf01.getMarket())) {
|
|
||||||
return of(BalanceError.WrongMarket);
|
|
||||||
}
|
|
||||||
return empty();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
accountType() {
|
accountType() {
|
||||||
@Override
|
@Override
|
||||||
public Optional<EnumMessage> validate(ImdgValidationContext<SDf01> context) {
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf01> context) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
package ru.spcex.clearing.balance.validation;
|
||||||
|
|
||||||
|
import ru.clearing.classes.statics.data.account.Account;
|
||||||
|
import ru.clearing.classes.statics.data.account.AccountBalance;
|
||||||
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
|
import ru.clearing.classes.statics.data.company.CompanySymbols;
|
||||||
|
import ru.clearing.classes.statics.data.sdf.SDf09;
|
||||||
|
import ru.spcex.clearing.balance.errors.BalanceError;
|
||||||
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
|
import ru.spcex.platform.enumeration.AccountType;
|
||||||
|
import ru.spcex.platform.enumeration.CompanySymbol;
|
||||||
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public enum Sdf09ValidationRule implements IValidationRule<ImdgValidationContext<SDf09>> {
|
||||||
|
CompanyPresent() {
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf09> context) {
|
||||||
|
SDf09 sdf09 = context.getValidatedObject();
|
||||||
|
Imdg<CompanySymbols> companySymbolImdg = context.obtainMap(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||||
|
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
|
||||||
|
CompanySymbols symbol = companySymbolImdg
|
||||||
|
.getSingleObjectByFieldValues(Map.of("companySymbol", CompanySymbol.INN.getKey(),
|
||||||
|
"companySymbolValue", sdf09.getInn()));
|
||||||
|
Company company = companyImdg.getSingleObjectByID(symbol.getCompanyId());
|
||||||
|
|
||||||
|
if (company == null) {
|
||||||
|
return of( BalanceError.CompanyNotFound);
|
||||||
|
}
|
||||||
|
context.storeObject(ValidationStored.Company, company);
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
AccountPresent() {
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf09> context) {
|
||||||
|
SDf09 sdf09 = context.getValidatedObject();
|
||||||
|
Imdg<Account> accountImdg = context.obtainMap(IMDGDistributedNames.Map_Account, Account.class);
|
||||||
|
Account account = accountImdg.getSingleObjectByFieldValues(Map.of("account", sdf09.getAccount(),
|
||||||
|
"accountType", AccountType.Clrn.getKey()));
|
||||||
|
if (account == null) {
|
||||||
|
return of(BalanceError.AccountNotPresent);
|
||||||
|
}
|
||||||
|
context.storeObject(ValidationStored.Account, account);
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Market() {
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf09> context) {
|
||||||
|
SDf09 sdf09 = context.getValidatedObject();
|
||||||
|
if (!"U".equals(sdf09.getMarket())) {
|
||||||
|
return of(BalanceError.WrongMarket);
|
||||||
|
}
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
BalanceEnough() {
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<SDf09> context) {
|
||||||
|
SDf09 validatedObject = context.getValidatedObject();
|
||||||
|
if (validatedObject.getSum().compareTo(BigDecimal.ZERO) >= 0) {
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
Imdg<AccountBalance> balanceImdg = context.obtainMap(IMDGDistributedNames.Map_AccountBalance, AccountBalance.class);
|
||||||
|
AccountBalance balance = balanceImdg.getSingleObjectByFieldValues(Map.of("account", validatedObject.getAccount(),
|
||||||
|
"accountType", AccountType.Clrn.getKey()));
|
||||||
|
if (balance == null) {
|
||||||
|
return of(BalanceError.BalanceNotEnough);
|
||||||
|
}
|
||||||
|
if (balance.getFreeBalanceAmount().compareTo(validatedObject.getSum()) < 0) {
|
||||||
|
return of(BalanceError.BalanceNotEnough);
|
||||||
|
}
|
||||||
|
return empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String ruleName() {
|
||||||
|
return "Sdf09ValidationRule." + name();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.clearing.classes.statics.data.sdf;
|
||||||
import ru.clearing.classes.ConstSerializable;
|
import ru.clearing.classes.ConstSerializable;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
|
|
@ -11,7 +12,7 @@ import java.time.Instant;
|
||||||
* <p>
|
* <p>
|
||||||
* DB table: S_DF01
|
* DB table: S_DF01
|
||||||
**/
|
**/
|
||||||
public class SDf01 extends SpcexObjectBase implements WithAccount {
|
public class SDf01 extends SpcexObjectBase implements WithAccount, WithMarket {
|
||||||
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
||||||
|
|
||||||
private String curr_code;
|
private String curr_code;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.clearing.classes.statics.data.sdf;
|
||||||
import ru.clearing.classes.ConstSerializable;
|
import ru.clearing.classes.ConstSerializable;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
@ -12,7 +13,7 @@ import java.time.Instant;
|
||||||
* <p>
|
* <p>
|
||||||
* DB table: S_DF08
|
* DB table: S_DF08
|
||||||
**/
|
**/
|
||||||
public class SDf09 extends SpcexObjectBase implements WithAccount {
|
public class SDf09 extends SpcexObjectBase implements WithAccount, WithMarket {
|
||||||
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
||||||
|
|
||||||
private String account;
|
private String account;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package ru.clearing.classes.statics.data.sdf;
|
||||||
import ru.clearing.classes.ConstSerializable;
|
import ru.clearing.classes.ConstSerializable;
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
||||||
|
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
@ -12,7 +13,7 @@ import java.time.Instant;
|
||||||
* <p>
|
* <p>
|
||||||
* DB table: S_DF16
|
* DB table: S_DF16
|
||||||
**/
|
**/
|
||||||
public class SDf16 extends SpcexObjectBase implements WithAccount {
|
public class SDf16 extends SpcexObjectBase implements WithAccount, WithMarket {
|
||||||
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
||||||
|
|
||||||
private String account;
|
private String account;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
package ru.spcex.platform.classes.base.interfaces;
|
||||||
|
|
||||||
|
public interface WithMarket {
|
||||||
|
String getMarket();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package ru.spcex.platform.enumeration;
|
||||||
|
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
|
public enum CompanySymbol implements IEnumKey {
|
||||||
|
INN("INN");
|
||||||
|
|
||||||
|
private final String key;
|
||||||
|
|
||||||
|
CompanySymbol(String key) {
|
||||||
|
this.key = key;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue