| | |
| | | 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; |
| | |
| | | private MoneyLogService moneyLogService; |
| | | @Autowired |
| | | private WalletService walletService; |
| | | @Autowired |
| | | private FollowWalletService followWalletService; |
| | | @Autowired |
| | | private ContractOrderService contractOrderService; |
| | | @Autowired |
| | |
| | | map.put("amount", order.getVolume().multiply(order.getUnitAmount())); |
| | | map.put("amount_open", order.getVolumeOpen().multiply(order.getUnitAmount())); |
| | | map.put("fee", order.getFee()); |
| | | map.put("funding_fee", order.getFundingFee()); |
| | | map.put("deposit", order.getDeposit()); |
| | | data.add(map); |
| | | } |
| | |
| | | log.info("{} --- order --- {} --- {}", order.getSymbol(), item.getUuid(), levers.size()); |
| | | checkLever(order, levers); |
| | | |
| | | BigDecimal sourceLeverRate = order.getLeverRate(); |
| | | sourceLeverRate = sourceLeverRate == null ? BigDecimal.ZERO : sourceLeverRate; |
| | | // BigDecimal sourceLeverRate = order.getLeverRate(); |
| | | // sourceLeverRate = sourceLeverRate == null ? BigDecimal.ZERO : sourceLeverRate; |
| | | |
| | | List<ContractOrder> contractOrderSubmitted = contractOrderService.findSubmitted(order.getPartyId(), |
| | | order.getSymbol(), order.getDirection()); |
| | | for (int i = 0; i < contractOrderSubmitted.size(); i++) { |
| | | BigDecimal targetLeverRate = contractOrderSubmitted.get(i).getLeverRate(); |
| | | targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate; |
| | | if (sourceLeverRate.compareTo(targetLeverRate) != 0) { |
| | | throw new YamiShopBindException("存在不同杠杆的持仓单"); |
| | | } |
| | | } |
| | | |
| | | List<ContractApplyOrder> applyOrderSubmittedList = this.findSubmitted(order.getPartyId(), |
| | | order.getSymbol(), "open", order.getDirection()); |
| | | for (int i = 0; i < applyOrderSubmittedList.size(); i++) { |
| | | BigDecimal targetLeverRate = applyOrderSubmittedList.get(i).getLeverRate(); |
| | | targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate; |
| | | if (sourceLeverRate.compareTo(targetLeverRate) != 0) { |
| | | throw new YamiShopBindException("存在不同杠杆的持仓单"); |
| | | } |
| | | } |
| | | |
| | | // List<ContractOrder> contractOrderSubmitted = contractOrderService.findSubmitted(order.getPartyId(), |
| | | // order.getSymbol(), order.getDirection()); |
| | | // for (int i = 0; i < contractOrderSubmitted.size(); i++) { |
| | | // BigDecimal targetLeverRate = contractOrderSubmitted.get(i).getLeverRate(); |
| | | // targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate; |
| | | // if (sourceLeverRate.compareTo(targetLeverRate) != 0) { |
| | | // throw new YamiShopBindException("存在不同杠杆的持仓单"); |
| | | // } |
| | | // } |
| | | // |
| | | // List<ContractApplyOrder> applyOrderSubmittedList = this.findSubmitted(order.getPartyId(), |
| | | // order.getSymbol(), "open", order.getDirection()); |
| | | // for (int i = 0; i < applyOrderSubmittedList.size(); i++) { |
| | | // BigDecimal targetLeverRate = applyOrderSubmittedList.get(i).getLeverRate(); |
| | | // targetLeverRate = targetLeverRate == null ? BigDecimal.ZERO : targetLeverRate; |
| | | // if (sourceLeverRate.compareTo(targetLeverRate) != 0) { |
| | | // throw new YamiShopBindException("存在不同杠杆的持仓单"); |
| | | // } |
| | | // } |
| | | //下单数量 |
| | | BigDecimal volume = order.getVolume(); |
| | | //当前价格 |
| | | List<Realtime> list = dataService.realtime(order.getSymbol()); |
| | | double close = 0; |
| | | |
| | | /** |
| | | * 限价单 |
| | | */ |
| | | if ("limit".equals(order.getOrderPriceType())) { |
| | | close = order.getPrice().doubleValue(); |
| | | }else{ |
| | | close = list.get(0).getClose(); |
| | | } |
| | | |
| | | if(StringUtils.isEmptyString(order.getOrderNo())) { |
| | | order.setOrderNo(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8)); |
| | | } |
| | | order.setUnitAmount(BigDecimal.valueOf(item.getUnitAmount())); |
| | | |
| | | order.setFee(BigDecimal.valueOf(item.getUnitFee()).multiply(order.getVolume())); |
| | | order.setDeposit(BigDecimal.valueOf(item.getUnitAmount()).multiply(order.getVolume())); |
| | | |
| | | order.setDeposit(BigDecimal.valueOf(close).multiply(order.getVolume()).divide(order.getLeverRate())); |
| | | order.setFee(BigDecimal.valueOf(item.getUnitFee()).multiply(BigDecimal.valueOf(close).multiply(order.getVolume()))); |
| | | BigDecimal fee = order.getFee(); |
| | | if (order.getLeverRate() != null) { |
| | | // 加上杠杆 |
| | | order.setVolume(order.getVolume().multiply(order.getLeverRate())); |
| | | Syspara syspara = sysparaService.find("perpetual_contracts"); |
| | | if (ObjectUtils.isEmpty(syspara)||"0".equals(syspara.getSvalue())) { |
| | | // order.setFee(fee.multiply(order.getLeverRate())); |
| | | } |
| | | } |
| | | // if (order.getLeverRate() != null) { |
| | | // // 加上杠杆 |
| | | // order.setVolume(order.getVolume().multiply(order.getLeverRate())); |
| | | // Syspara syspara = sysparaService.find("perpetual_contracts"); |
| | | // if (ObjectUtils.isEmpty(syspara)||"0".equals(syspara.getSvalue())) { |
| | | //// order.setFee(fee.multiply(order.getLeverRate())); |
| | | // } |
| | | // } |
| | | |
| | | Syspara syspara = sysparaService.find("u_standard_contract"); |
| | | BigDecimal deposit = order.getDeposit(); |
| | |
| | | |
| | | 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())) { |