diff --git a/src/main/java/com/cleanengine/coin/trade/application/TradeExecutor.java b/src/main/java/com/cleanengine/coin/trade/application/TradeExecutor.java index cb7338f4..b8e4ca14 100644 --- a/src/main/java/com/cleanengine/coin/trade/application/TradeExecutor.java +++ b/src/main/java/com/cleanengine/coin/trade/application/TradeExecutor.java @@ -71,15 +71,16 @@ public void executeTrade(WaitingOrders waitingOrders, TradePair tr tradeService.updateOrder(sellOrder); // 예수금 처리 + // - 매도 예수금 처리 + this.increaseAccountCash(sellOrder, totalTradedPrice); + // - 매수 잔여금액 반환 if (!isMarketOrder(buyOrder) && buyOrder.getPrice() > tradedPrice) { // 매도 호가보다 높은 가격에 매수를 시도한 경우, 차액 반환 + log.debug("[{}] 매도 호가보다 높은 가격에 매수를 시도한 경우, 차액 반환", Thread.currentThread().threadId()); double totalRefundAmount = (buyOrder.getPrice() - tradedPrice) * tradedSize; this.increaseAccountCash(buyOrder, totalRefundAmount); } - // - 매도 예수금 처리 - this.increaseAccountCash(sellOrder, totalTradedPrice); - // 지갑 누적계산 this.updateWalletAfterTrade(buyOrder, ticker, tradedSize, totalTradedPrice); this.updateWalletAfterTrade(sellOrder, ticker, tradedSize, totalTradedPrice); diff --git a/src/main/java/com/cleanengine/coin/user/info/application/AccountService.java b/src/main/java/com/cleanengine/coin/user/info/application/AccountService.java index 94329ad2..af743b5d 100644 --- a/src/main/java/com/cleanengine/coin/user/info/application/AccountService.java +++ b/src/main/java/com/cleanengine/coin/user/info/application/AccountService.java @@ -6,6 +6,7 @@ import com.cleanengine.coin.user.info.infra.WalletRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import java.util.Optional; @@ -38,7 +39,7 @@ public Account createNewAccount(Integer userId, double cash) { return accountRepository.save(account); } - @Transactional + @Transactional(isolation = Isolation.READ_COMMITTED) public void resetBot(String ticker) { Account sellBotAccount = accountRepository.findByUserId(SELL_ORDER_BOT_ID).orElseThrow(); sellBotAccount.setCash(0.0);