fix check balance for cny

This commit is contained in:
etreschenkov 2026-06-03 16:41:06 +03:00
parent 7a622f8a70
commit c8fabb4444

View file

@ -46,12 +46,15 @@ import ru.spcex.platform.enumeration.ObjectType;
import ru.spcex.platform.enumeration.OrderStatus;
import ru.spcex.platform.enumeration.OvernightType;
import ru.spcex.platform.enumeration.Priority;
import ru.spcex.platform.enumeration.RegistryTradingParams;
import ru.spcex.platform.enumeration.Side;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import ru.spcex.platform.utils.log.ExceptionUtils;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
import static ru.spcex.platform.utils.number.BigDecimalUtil.safeSumBD;
@Service
public class TaskListener extends QueueConsumer implements InitializingBean {
@ -194,11 +197,7 @@ public class TaskListener extends QueueConsumer implements InitializingBean {
log.debug("Check balance for registryId={}; order ids: {}", registryId,
orderCurrencies.stream().map(OrderCurrency::getId).collect(Collectors.toList()));
Registry pmtRegistry = imdgQueryService.getRegistryById(registryId);
Registry amfRegistry = null;
boolean isRubPmt = pmtRegistry.getSecuritySymbol().equals(CurrencyCode.RUB.getKey());
if (!isRubPmt) {
amfRegistry = imdgQueryService.findAmfRegistry(pmtRegistry, CurrencyCode.RUB.getKey());
}
String currency = isRubPmt ? CurrencyCode.CNY.getKey() : pmtRegistry.getSecuritySymbol();
Rates rates = imdgQueryService.getRateOnNextWorkingDay(currency);
@ -215,7 +214,12 @@ public class TaskListener extends QueueConsumer implements InitializingBean {
registryBalance = pmtRegistry.getBalance();
diff = registryBalance.add(summaryValByCurrencies);
} else {
registryBalance = amfRegistry.getBalance();
Registry amfRegistry = imdgQueryService.findAmfRegistry(pmtRegistry, CurrencyCode.RUB.getKey());
Collection<Registry> om_ts = imdgQueryService.findOTRegistry(pmtRegistry, RegistryTradingParams.OM_T, CurrencyCode.RUB.getKey());
Collection<Registry> tm_ts = imdgQueryService.findOTRegistry(pmtRegistry, RegistryTradingParams.TM_T, CurrencyCode.RUB.getKey());
registryBalance = safeBD(amfRegistry, Registry::getBalance)
.subtract(safeSumBD(om_ts, Registry::getBalance))
.add(safeSumBD(tm_ts, Registry::getBalance));
diff = registryBalance.subtract(summaryValByCurrencies);
}
log.debug("Registry balance: {}; Summary balance by orders: {}; diff: {}", registryBalance,