ialbert 2023-02-06 18:29:36 +03:00
parent 8415cfd243
commit d1b9543d35
4 changed files with 35 additions and 11 deletions

View file

@ -125,9 +125,11 @@ public class AccountBalanceService {
BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount());
BigDecimal previousChangeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount());
BigDecimal previousBalanceAmount = safeBD(accountBalance.getBalanceAmount());
BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount());
accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount));
accountBalance.setChangeBalanceAmount(previousChangeBalanceAmount.subtract(firstLegAmount));
accountBalance.setBalanceAmount(previousBalanceAmount.subtract(firstLegAmount));
accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs()));
accountBalance.setUpdated(Instant.now());
log.trace("updateAccountCategoryIClrn: {}", accountBalance.getId());
accountBalanceImdg.update(accountBalance);
@ -137,7 +139,9 @@ public class AccountBalanceService {
AccountBalance accountBalance = loadAccountBalance(AccountType.Tran);
log.trace("updating AccountBalance {} I TRAN", accountBalance.getId());
BigDecimal previousDebitAmount = safeBD(accountBalance.getDebitAmount());
BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount());
accountBalance.setDebitAmount(previousDebitAmount.add(firstLegAmount.abs()));
accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs()));
accountBalance.setUpdated(Instant.now());
log.trace("updateAccountCategoryITran: {}", accountBalance.getId());
accountBalanceImdg.update(accountBalance);
@ -149,9 +153,11 @@ public class AccountBalanceService {
BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount());
BigDecimal changeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount());
BigDecimal balanceAmount = safeBD(accountBalance.getBalanceAmount());
BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount());
accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount));
accountBalance.setChangeBalanceAmount(changeBalanceAmount.subtract(firstLegAmount));
accountBalance.setBalanceAmount(balanceAmount.subtract(firstLegAmount));
accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs()));
accountBalance.setUpdated(Instant.now());
log.trace("updateAccountCategoryVInfo: {}", accountBalance.getId());
accountBalanceImdg.update(accountBalance);
@ -163,9 +169,11 @@ public class AccountBalanceService {
BigDecimal previousFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount());
BigDecimal previousChangeBalanceAmount = safeBD(accountBalance.getChangeBalanceAmount());
BigDecimal previousBalanceAmount = safeBD(accountBalance.getBalanceAmount());
BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount());
accountBalance.setFreeBalanceAmount(previousFreeBalanceAmount.subtract(firstLegAmount));
accountBalance.setChangeBalanceAmount(previousChangeBalanceAmount.subtract(firstLegAmount));
accountBalance.setBalanceAmount(previousBalanceAmount.subtract(firstLegAmount));
accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs()));
accountBalance.setUpdated(Instant.now());
log.trace("updateAccountCategoryVAnlt: {}", accountBalance.getId());
accountBalanceImdg.update(accountBalance);
@ -177,9 +185,11 @@ public class AccountBalanceService {
BigDecimal debitAmount = safeBD(accountBalance.getDebitAmount());
BigDecimal prevFreeBalanceAmount = safeBD(accountBalance.getFreeBalanceAmount());
BigDecimal prevBalanceAmount = safeBD(accountBalance.getBalanceAmount());
BigDecimal previousCreditAmount = safeBD(accountBalance.getCreditAmount());
accountBalance.setDebitAmount(plus(debitAmount, firstLegAmount.abs()));
accountBalance.setFreeBalanceAmount(plus(prevFreeBalanceAmount, firstLegAmount));
accountBalance.setBalanceAmount(plus(prevBalanceAmount, firstLegAmount));
accountBalance.setCreditAmount(previousCreditAmount.add(firstLegAmount.abs()));
accountBalance.setUpdated(Instant.now());
log.trace("updateAccountCategoryBClrn: {}", accountBalance.getId());
accountBalanceImdg.update(accountBalance);

View file

@ -16,6 +16,8 @@ import ru.spcex.platform.enumeration.*;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgId;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.number.BigDecimalUtil;
import ru.spcex.platform.utils.time.TimeUtil;
import java.math.BigDecimal;
@ -346,7 +348,7 @@ public class PaymentInstructionCreator {
payment1.setSettlementDate(liabilitiesClaimsAssets.getSettlementDate());
Long amount = liabilitiesClaimsAssets.getLiabilitiesQuantity() == null ? null : liabilitiesClaimsAssets.getLiabilitiesQuantity().abs().longValue();
Long amount = liabilitiesClaimsAssets.getClaimsQuantity() == null ? null : liabilitiesClaimsAssets.getClaimsQuantity().abs().longValue();
payment1.setCreditLegAmount(amount);
payment1.setDebitLegAmount(amount);
@ -439,19 +441,17 @@ public class PaymentInstructionCreator {
public void updateFieldLiabilitiesClaimsAssetsByPayment(LiabilitiesClaimsAssets liabilitiesClaimsAssets,
List<PaymentInstruction> paymentInstructions,
Collection<ClearingCategory> clearingCategory) {
AccountType accountType = IEnumKey.getEnumByKey(AccountType.class, liabilitiesClaimsAssets.getAccountType());
PaymentInstruction paymentIAny=paymentInstructions.iterator().next();
if (clearingCategory.contains(ClearingCategory.I) || clearingCategory.contains(ClearingCategory.V)) {
BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal((Long)paymentIAny.getCreditLegAmount());
// При обновлении (по paymentInstruction и категория I и счет CLRN):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount
// При обновлении (по paymentInstruction и категория V и счет INFO):=liabilitiesClaimsAssets.liabilitiesQuantity - paymentInstruction.creditLeg_amount
amount = liabilitiesClaimsAssets.getLiabilitiesQuantity().subtract(amount);
liabilitiesClaimsAssets.setLiabilitiesQuantity(amount);
if ((clearingCategory.contains(ClearingCategory.I) && AccountType.Clrn.equals(accountType))
|| (clearingCategory.contains(ClearingCategory.V) && AccountType.Info.equals(accountType))) {
BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal(paymentIAny.getCreditLegAmount());
BigDecimal prevLQuantity = BigDecimalUtil.safeBD(liabilitiesClaimsAssets.getLiabilitiesQuantity());
liabilitiesClaimsAssets.setLiabilitiesQuantity(prevLQuantity.subtract(amount));
}
if (clearingCategory.contains(ClearingCategory.B)) {
BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal((Long)paymentIAny.getCreditLegAmount());
// При обновлении (по paymentInstruction и категория B и счет CLRN): из paymentInstruction.creditLeg_amount
if (clearingCategory.contains(ClearingCategory.B) && AccountType.Clrn.equals(accountType)) {
BigDecimal amount = paymentIAny.getCreditLegAmount() == null ? BigDecimal.ZERO : new BigDecimal(paymentIAny.getCreditLegAmount());
liabilitiesClaimsAssets.setLiabilitiesQuantity(amount);
}

View file

@ -6,6 +6,7 @@ import ru.spcex.platform.utils.enumeration.IEnumKey;
* CLEARING_CATEGORY_DICTIONARY
*/
public enum ClearingCategory implements IEnumKey {
undefined(UNDEFINED_VALUE),
C("C"), // Категория «Ц» - Банк России
B("B"), // Категория «Б» - Кредитная организация ДР
F("F"), // Категория «Ф» - Участник рынка РЦБ

View file

@ -56,6 +56,19 @@ public interface IEnumKey extends Serializable {
return null;
}
static <T extends Enum<T> & IEnumKey> T getEnumByKeyOrUndefined(Class<T> enumClass, String key) {
T enumByKey = getEnumByKey(enumClass, key);
return enumByKey == null ? getUndefined(enumClass) : enumByKey;
}
static <T extends Enum<T> & IEnumKey> T getUndefined(Class<T> enumClass) {
T enumByKey = getEnumByKey(enumClass, UNDEFINED_VALUE);
if (enumByKey == null) {
throw new IllegalArgumentException("Undefined value not found in enum " + enumClass);
}
return enumByKey;
}
static String getKeyOrNull(IEnumKey enumVal) {
return enumVal == null ? null : enumVal.getKey();
}