コード例 #1
0
 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;
 }