import nl.strohalm.cyclos.entities.accounts.transactions.Transfer; //导入方法依赖的package包/类
private Transfer doUpdateAuthorizationData(final LockHandler lockHandler, Transfer transfer, final AuthorizationLevel nextAuthorizationLevel, final boolean processed, final TransferAuthorization authorization) {
if (processed) {
lockHandler.lock(transfer.getFrom(), transfer.getTo());
// apply rates
RatesToSave rates = rateService.applyTransfer(transfer);
/*
* set processDate AFTER applying rates, but before persisting them. This is important, because the transfer itself must not sum up for
* rates or balances when the rates are processed, and it does if processdate is already set. In that case, the transfer's processDate can
* equal the fromRates's date.
*/
Calendar processDate = (rates.getFromRates() == null) ? Calendar.getInstance() : rates.getFromRates().getDate();
transfer.setProcessDate(processDate);
rateService.persist(rates);
// Return the reserved amount
accountService.returnReservation(authorization, transfer);
// Remove any pending closed balances on the destination account. The returnReservation will do this for the source account
accountService.removeClosedBalancesAfter(transfer.getTo(), processDate);
// update the transfer information, and also the rates.
transfer = transferDao.updateAuthorizationData(transfer.getId(), Transfer.Status.PROCESSED, null, transfer.getProcessDate(), rates);
} else {
transfer = transferDao.updateAuthorizationData(transfer.getId(), Transfer.Status.PENDING, nextAuthorizationLevel, null, null);
}
// Update child transfers
for (final Transfer childTransfer : transfer.getChildren()) {
updateChildTransfer(lockHandler, transfer, childTransfer, authorization, processed);
}
return transfer;
}