возврат депозитов шаг 5: DM*X/DM*T

This commit is contained in:
ialbert 2023-08-25 19:08:52 +03:00
parent cca5991bd6
commit 9f046ae383

View file

@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import ru.clearing.classes.statics.data.company.ClearingMemberCategory;
import ru.clearing.classes.statics.data.registry.Registry;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.service.registry.RegistryManager;
@ -34,12 +35,14 @@ import static ru.spcex.platform.utils.number.BigDecimalUtil.safeBD;
public class InspectionObligationsDepositReturn implements ISessionStage {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<Registry> registryImdg;
private final Imdg<ClearingMemberCategory> categoryImdg;
private SessionType sessionType;
private final RegistryManager rgsMng;
@Autowired
public InspectionObligationsDepositReturn(ImdgProvider imdgProvider, RegistryManager rgsMng) {
this.registryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Registry, Registry.class);
this.categoryImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingMemberCategory, ClearingMemberCategory.class);
this.rgsMng = rgsMng;
}
@ -128,7 +131,7 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
// updateStatus(dmtInfo.get(), RegistryStatus.POOL);
} else {
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed()));
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs)));
updateStatus(dmtInfo.get(), RegistryStatus.UNCV);
}
continue;
@ -143,20 +146,39 @@ public class InspectionObligationsDepositReturn implements ISessionStage {
);
if (dmtBalance.compareTo(omtBalance) >= 0 && amfBalance.compareTo(omtBalance) >= 0) {
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
// updateStatus(dmtClnr.get(), RegistryStatus.POOL);
} else {
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed()));
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs)));
updateStatus(dmtClnr.get(), RegistryStatus.UNCV);
}
continue;
}
log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group",
omtRgs.getId(), registryStatusFailed());
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed()));
if (SessionType.FINL.equals(sessionType)
&& amfBalance.compareTo(omtBalance) >= 0
&& initiatorV(omtRgs)) {
log.debug("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. " +
"FINL, initiator.category='V' and am*f > om*t: setting OK status to group",
omtRgs.getId());
group.forEach(rgs -> updateStatus(rgs, RegistryStatus.OK));
} else {
log.info("OM*T.id={} -> no DM*X/DM*T(INFO/CLRN) registry found. setting {} status to group",
omtRgs.getId(), registryStatusFailed());
group.forEach(rgs -> updateStatus(rgs, registryStatusFailed(rgs)));
}
}
return new StageResult<>(null, true);
}
private boolean initiatorV(Registry omtRgs) {
if (omtRgs.getCounterPartyId() == null) {
return false;
}
ClearingMemberCategory ctgr = categoryImdg.getFirstObjectBySQL(
"companyId = %d and clearingMemberCategory = '%s'"
.formatted(omtRgs.getCounterPartyId(), ClearingCategory.V.getKey()));
return ctgr != null;
}
private void updateStatus(Registry registry, RegistryStatus registryStatus) {
log.trace("Update registry.id: {} to {}", registry.getId(), registryStatus.getKey());
registry.setRegistryStatus(registryStatus.getKey());