This commit is contained in:
parent
e65973cf90
commit
6a1951db28
11 changed files with 82 additions and 35 deletions
|
|
@ -74,7 +74,8 @@ public class ValidationConfig {
|
|||
return new ValidatorImpl<>(context,
|
||||
Sdf16ValidationRule.CompanyPresent,
|
||||
ExistClrnAccountValidationRule.AccountPresent,
|
||||
MarketIsUValidationRule.instance);
|
||||
MarketIsUValidationRule.instance,
|
||||
AccountBalanceFreeAmountEnough.instance(SDf16.class));
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -92,7 +93,7 @@ public class ValidationConfig {
|
|||
Sdf09ValidationRule.CompanyPresent,
|
||||
Sdf09ValidationRule.AccountPresent,
|
||||
MarketIsUValidationRule.instance,
|
||||
Sdf09ValidationRule.BalanceEnough
|
||||
AccountBalanceFreeAmountEnough.instance(SDf09.class)
|
||||
);
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,7 +116,8 @@ public class Sdf16Executor extends AbstractExecutor<SDf16> {
|
|||
statement.setSenderId(Sender.Prc.getId());
|
||||
statement.setCreated(Instant.now());
|
||||
statement.setClearingDate(LocalDate.now());
|
||||
statement.setStatementType(StatementType.full.getKey());
|
||||
statement.setStatementType(StatementType.incr.getKey());
|
||||
statement.setComment(sdf.getSpec());
|
||||
statement.setAccountId(account.getId());
|
||||
statement.setAccount(sdf.getAccount());
|
||||
statement.setInOutDirection(InOutDirection.in.getKey());
|
||||
|
|
@ -124,13 +125,14 @@ public class Sdf16Executor extends AbstractExecutor<SDf16> {
|
|||
statement.setCashMovementCurrencyCode(CurrencyCode.RUB.getKey());
|
||||
statement.setOperationStatus(OperationStatus.Pending.getKey());
|
||||
statement.setInSDfId(sdf.getId());
|
||||
statement.setInOutSDfType(InOutSDfType.type1.getKey());
|
||||
statement.setInOutSDfType(InOutSDfType.type16.getKey());
|
||||
statementImdg.insert(statement);
|
||||
return statement;
|
||||
}
|
||||
|
||||
private void updateFlow(Statement statement, SDf16 sdf, Account account) {
|
||||
statement.setUpdated(Instant.now());
|
||||
statement.setComment(sdf.getSpec());
|
||||
statement.setAccountId(account.getId());
|
||||
statement.setAccount(sdf.getAccount());
|
||||
statement.setInOutDirection(InOutDirection.in.getKey());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,44 @@
|
|||
package ru.spcex.clearing.balance.validation;
|
||||
|
||||
import ru.clearing.classes.statics.data.account.AccountBalance;
|
||||
import ru.spcex.clearing.balance.errors.BalanceError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithSum;
|
||||
import ru.spcex.platform.enumeration.AccountType;
|
||||
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 class AccountBalanceFreeAmountEnough<T extends WithAccount & WithSum> implements IValidationRule<ImdgValidationContext<T>> {
|
||||
|
||||
private AccountBalanceFreeAmountEnough() {
|
||||
}
|
||||
|
||||
public static <T1 extends WithAccount & WithSum> AccountBalanceFreeAmountEnough<T1> instance(Class<T1> clazz) {
|
||||
return new AccountBalanceFreeAmountEnough<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<EnumMessage> validate(ImdgValidationContext<T> context) {
|
||||
T 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();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
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;
|
||||
|
|
@ -14,7 +13,6 @@ 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;
|
||||
|
||||
|
|
@ -60,27 +58,7 @@ public enum Sdf09ValidationRule implements IValidationRule<ImdgValidationContext
|
|||
}
|
||||
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() {
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ import ru.clearing.classes.statics.data.company.CompanySymbols;
|
|||
import ru.clearing.classes.statics.data.sdf.SDf16;
|
||||
import ru.spcex.clearing.balance.errors.BalanceError;
|
||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||
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.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public enum Sdf16ValidationRule implements IValidationRule<ImdgValidationContext<SDf16>> {
|
||||
|
|
@ -20,8 +20,10 @@ public enum Sdf16ValidationRule implements IValidationRule<ImdgValidationContext
|
|||
SDf16 sdf16 = context.getValidatedObject();
|
||||
Imdg<CompanySymbols> companySymbolsImdg = context.obtainMap(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class);
|
||||
Imdg<Company> companyImdg = context.obtainMap(IMDGDistributedNames.Map_Company, Company.class);
|
||||
CompanySymbols companySymbols = companySymbolsImdg.getSingleObjectByFieldValues(Map.of("companySymbolValue", sdf16.getInn()));
|
||||
// CompanySymbols companySymbols = companySymbolsImdg.getSingleObjectByFieldValues(Map.of("companySymbolValue", sdf16.getInn()));//search by bic
|
||||
CompanySymbols companySymbols = companySymbolsImdg.getSingleObjectBySQL(
|
||||
String.format("(companySymbolValue = '%s' and companySymbol = '%s') " +
|
||||
"or (companySymbolValue = '%s' and companySymbol = '%s')",
|
||||
sdf16.getInn(), CompanySymbol.INN.getKey(), sdf16.getBic(), CompanySymbol.BIC.getKey()));
|
||||
Company company = null;
|
||||
if (companySymbols != null) {
|
||||
company = companyImdg.getSingleObjectByID(companySymbols.getCompanyId());
|
||||
|
|
@ -36,6 +38,6 @@ public enum Sdf16ValidationRule implements IValidationRule<ImdgValidationContext
|
|||
|
||||
@Override
|
||||
public String ruleName() {
|
||||
return "Sdf01ValidationRule." + name();
|
||||
return "Sdf16ValidationRule." + name();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import ru.clearing.classes.ConstSerializable;
|
|||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithSum;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
|
|
@ -13,7 +14,7 @@ import java.time.Instant;
|
|||
* <p>
|
||||
* DB table: S_DF08
|
||||
**/
|
||||
public class SDf09 extends SpcexObjectBase implements WithAccount, WithMarket {
|
||||
public class SDf09 extends SpcexObjectBase implements WithAccount, WithMarket, WithSum {
|
||||
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
||||
|
||||
private String account;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import ru.clearing.classes.ConstSerializable;
|
|||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithAccount;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithMarket;
|
||||
import ru.spcex.platform.classes.base.interfaces.WithSum;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Instant;
|
||||
|
|
@ -13,7 +14,7 @@ import java.time.Instant;
|
|||
* <p>
|
||||
* DB table: S_DF16
|
||||
**/
|
||||
public class SDf16 extends SpcexObjectBase implements WithAccount, WithMarket {
|
||||
public class SDf16 extends SpcexObjectBase implements WithAccount, WithMarket, WithSum {
|
||||
private static final long serialVersionUID = ConstSerializable.serialVersionUID;
|
||||
|
||||
private String account;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
package ru.spcex.platform.classes.base.interfaces;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public interface WithSum {
|
||||
BigDecimal getSum();
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration;
|
|||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
public enum CompanySymbol implements IEnumKey {
|
||||
INN("INN");
|
||||
INN("INN"), BIC("BIC");
|
||||
|
||||
private final String key;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package ru.spcex.platform.enumeration;
|
|||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||
|
||||
public enum InOutSDfType implements IEnumKey {
|
||||
type1("0102"), type9("0910");
|
||||
type1("0102"), type16("1617"), type9("0910");
|
||||
|
||||
private final String key;
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.hazelcast.core.IMap;
|
|||
import com.hazelcast.core.IdGenerator;
|
||||
import com.hazelcast.query.Predicate;
|
||||
import com.hazelcast.query.Predicates;
|
||||
import com.hazelcast.query.SqlPredicate;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||
|
|
@ -99,6 +100,16 @@ public class ImdgHazelcast<T extends SpcexObjectBase> implements Imdg<T> {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public T getSingleObjectBySQL(String paramString) {
|
||||
SqlPredicate sqlPredicate = new SqlPredicate(paramString);
|
||||
Set<Map.Entry<Long, T>> found = map.entrySet(sqlPredicate);
|
||||
Iterator<Map.Entry<Long, T>> allFoundByCondition = found.iterator();
|
||||
if (allFoundByCondition.hasNext()) {
|
||||
return allFoundByCondition.next().getValue();
|
||||
} else return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* возвращает коллекцию объектов, удовлетворяющий условиям на поля
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue