private static function transferMoney(Deal $deal1, Deal $deal2) { if ($deal1->getType() == 1 && $deal2->getType() == 0) { $sellDeal = $deal1; $buyDeal = $deal2; } else { if ($deal1->getType() == 0 && $deal2->getType() == 1) { $sellDeal = $deal2; $buyDeal = $deal1; } else { return false; } } $rate = new Rate(); $rate->findById($sellDeal->getRateId()); $sellOrder = new Order(); $sellOrder->findById($sellDeal->getOrderId()); $buyOrder = new Order(); $buyOrder->findById($buyDeal->getOrderId()); $sellerSecondCurrencyPurse = self::getPurseOrMakeNew($sellOrder->getUserId(), $rate->getSecondCurrencyId()); $buyerFirstCurrencyPurse = self::getPurseOrMakeNew($buyOrder->getUserId(), $rate->getFirstCurrencyId()); $buyerSecondCurrencyPurse = self::getPurseOrMakeNew($buyOrder->getUserId(), $rate->getSecondCurrencyId()); $firstCurVolume = $sellDeal->getVolume(); $buyerFirstCurrencyPurse->addValue($firstCurVolume); $buyerFirstCurrencyPurse->save(); $secondCurVolume = $firstCurVolume * $sellDeal->getPrice(); $sellerSecondCurrencyPurse->addValue($secondCurVolume * (1.0 - $rate->getFee())); $refund = ($firstCurVolume * $buyOrder->getPrice() - $secondCurVolume) * (1.0 + $rate->getFee()); if ($buyOrder->getUserId() != $sellOrder->getUserId()) { $sellerSecondCurrencyPurse->save(); $buyerSecondCurrencyPurse->addValue($refund); $buyerSecondCurrencyPurse->save(); } else { $sellerSecondCurrencyPurse->addValue($refund); $sellerSecondCurrencyPurse->save(); } return true; }