| | |
| | | import com.yami.trading.bean.data.domain.Realtime; |
| | | import com.yami.trading.bean.item.domain.Item; |
| | | import com.yami.trading.bean.item.dto.ItemLeverageDTO; |
| | | import com.yami.trading.bean.model.FollowWallet; |
| | | import com.yami.trading.bean.model.User; |
| | | import com.yami.trading.bean.model.Wallet; |
| | | import com.yami.trading.bean.syspara.domain.Syspara; |
| | |
| | | import com.yami.trading.common.util.RandomUtil; |
| | | import com.yami.trading.common.util.StringUtils; |
| | | import com.yami.trading.dao.contract.ContractApplyOrderMapper; |
| | | import com.yami.trading.service.FollowWalletService; |
| | | import com.yami.trading.service.MoneyLogService; |
| | | import com.yami.trading.service.RechargeBonusService; |
| | | import com.yami.trading.service.WalletService; |
| | | import com.yami.trading.service.data.DataService; |
| | | import com.yami.trading.service.item.ItemLeverageService; |
| | | import com.yami.trading.service.item.ItemPreMarketService; |
| | | import com.yami.trading.service.item.ItemService; |
| | | import com.yami.trading.service.rate.ExchangeRateService; |
| | | import com.yami.trading.service.syspara.SysparaService; |
| | |
| | | private UserService partyService; |
| | | @Autowired |
| | | private ItemService itemService; |
| | | @Autowired(required = false) |
| | | private ItemPreMarketService itemPreMarketService; |
| | | @Qualifier("dataService") |
| | | @Autowired |
| | | private DataService dataService; |
| | |
| | | private MoneyLogService moneyLogService; |
| | | @Autowired |
| | | private WalletService walletService; |
| | | @Autowired |
| | | private FollowWalletService followWalletService; |
| | | @Autowired |
| | | private ContractOrderService contractOrderService; |
| | | @Autowired |
| | |
| | | |
| | | //rose 校验如果是数字货币,则7*24 |
| | | String type = item.getType(); |
| | | if(!type.equalsIgnoreCase(Item.cryptos)){ |
| | | //外汇交易后台接口 |
| | | if (!type.equalsIgnoreCase(Item.cryptos)) { |
| | | boolean preMarketActive = itemPreMarketService != null |
| | | && itemPreMarketService.isPreMarketTradingActive(order.getSymbol()); |
| | | boolean orderOpen = this.sysparaService.find("order_open").getBoolean(); |
| | | if (!orderOpen) { |
| | | if (!orderOpen && !preMarketActive && !itemService.isOpen(order.getSymbol())) { |
| | | throw new YamiShopBindException("不在交易时段"); |
| | | } |
| | | } |
| | |
| | | |
| | | order.setVolumeOpen(order.getVolume()); |
| | | |
| | | if(ContractApplyOrder.ORDER_FOLLOW == order.getFollow()) { // 跟单订单 |
| | | FollowWallet followWallet = followWalletService.findByUserId(order.getPartyId()); |
| | | BigDecimal amountBefore = followWallet.getMoney(); |
| | | Wallet wallet = this.walletService.findByUserId(order.getPartyId()); |
| | | BigDecimal amountBefore = wallet.getMoney(); |
| | | // fee = exchangeRateService.getUsdtByType(order.getFee(), type); |
| | | // deposit = exchangeRateService.getUsdtByType(deposit, type); |
| | | BigDecimal totalAmountCost = deposit.add(order.getFee()); |
| | | if (amountBefore.compareTo(totalAmountCost) < 0) { |
| | | throw new YamiShopBindException("余额不足"); |
| | | } |
| | | |
| | | followWalletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(deposit), BigDecimal.ZERO |
| | | , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_OPEN, "委托单,订单号[" + order.getOrderNo() + "]" |
| | | ); |
| | | followWalletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(fee), BigDecimal.ZERO |
| | | , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_FEE, "委托单手续费,订单号[" + order.getOrderNo() + "]" |
| | | ); |
| | | } else { |
| | | Wallet wallet = this.walletService.findByUserId(order.getPartyId()); |
| | | BigDecimal amountBefore = wallet.getMoney(); |
| | | // fee = exchangeRateService.getUsdtByType(order.getFee(), type); |
| | | // deposit = exchangeRateService.getUsdtByType(deposit, type); |
| | | BigDecimal totalAmountCost = deposit.add(order.getFee()); |
| | | if (amountBefore.compareTo(totalAmountCost) < 0) { |
| | | throw new YamiShopBindException("余额不足"); |
| | | } |
| | | |
| | | walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(deposit), BigDecimal.ZERO |
| | | , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_OPEN, "委托单,订单号[" + order.getOrderNo() + "]" |
| | | ); |
| | | walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(fee), BigDecimal.ZERO |
| | | , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_FEE, "委托单手续费,订单号[" + order.getOrderNo() + "]" |
| | | ); |
| | | |
| | | |
| | | //ICE盘定制交易手续费返佣 |
| | | rechargeBonusService.saveTradeBounsHandle(order.getPartyId(),1, fee.doubleValue(),order.getOrderNo(),order.getSymbol()); |
| | | BigDecimal totalAmountCost = deposit.add(order.getFee()); |
| | | if (amountBefore.compareTo(totalAmountCost) < 0) { |
| | | throw new YamiShopBindException("余额不足"); |
| | | } |
| | | |
| | | walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(deposit), BigDecimal.ZERO |
| | | , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_CONTRACT_OPEN, "委托单,订单号[" + order.getOrderNo() + "]" |
| | | ); |
| | | walletService.updateMoney(order.getSymbol(), order.getPartyId(), BigDecimal.ZERO.subtract(fee), BigDecimal.ZERO |
| | | , Constants.MONEYLOG_CATEGORY_CONTRACT, Constants.WALLET_USDT, Constants.MONEYLOG_CONTENT_FEE, "委托单手续费,订单号[" + order.getOrderNo() + "]" |
| | | ); |
| | | |
| | | |
| | | //ICE盘定制交易手续费返佣 |
| | | rechargeBonusService.saveTradeBounsHandle(order.getPartyId(),1, fee.doubleValue(),order.getOrderNo(),order.getSymbol()); |
| | | save(order); |
| | | User party = this.userService.getById(order.getPartyId()); |
| | | if (Constants.SECURITY_ROLE_MEMBER.equals(party.getRoleName())) { |
| | |
| | | } |
| | | } |
| | | } |
| | | tryImmediatePreMarketFill(order); |
| | | } |
| | | |
| | | /** 盘前时段:市价/限价委托立即按盘前价成交,避免停留在委托队列 */ |
| | | private void tryImmediatePreMarketFill(ContractApplyOrder order) { |
| | | if (itemPreMarketService == null || !itemPreMarketService.isPreMarketTradingActive(order.getSymbol())) { |
| | | return; |
| | | } |
| | | if (!ContractApplyOrder.OFFSET_OPEN.equals(order.getOffset())) { |
| | | return; |
| | | } |
| | | Double prePrice = itemPreMarketService.getActivePreMarketPrice(order.getSymbol()); |
| | | if (prePrice == null) { |
| | | log.warn("盘前已激活但未取到盘前价 symbol={} orderNo={}", order.getSymbol(), order.getOrderNo()); |
| | | return; |
| | | } |
| | | Realtime realtime = new Realtime(); |
| | | realtime.setSymbol(order.getSymbol()); |
| | | realtime.setClose(prePrice); |
| | | contractOrderService.saveOpen(order, realtime); |
| | | } |
| | | |
| | | /** |