| | |
| | | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(changeAmount, total, null, walletContract.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholePrice(memberEntity.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholeForceClosingPrice(holdOrderEntity.getSymbol(), memberEntity); |
| | | // 计算佣金 |
| | | ThreadPoolUtils.calReturnMoney(memberEntity.getId(), fee, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); |
| | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(changeAmount, total, null, walletContract.getId()); |
| | | |
| | | contractEntrustOrderDao.deleteById(entrustOrder.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholePrice(memberEntity.getId()); |
| | | |
| | | ThreadPoolUtils.sendWholeForceClosingPrice(holdOrderEntity.getSymbol(), memberEntity); |
| | | // 计算佣金 |
| | | ThreadPoolUtils.calReturnMoney(memberEntity.getId(), fee, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE); |
| | |
| | | @Override |
| | | public void wholeBombOrder(WholePriceDataModel wholePriceData) { |
| | | MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(wholePriceData.getMemberId(), CoinTypeEnum.USDT.name()); |
| | | |
| | | MemberEntity memberEntity = memberDao.selectById(wholePriceData.getMemberId()); |
| | | List<HoldOrderDataModel> list = wholePriceData.getList(); |
| | | if (CollUtil.isNotEmpty(list)) { |
| | | for (HoldOrderDataModel holdOrderDataModel : list) { |
| | | ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectById(holdOrderDataModel.getId()); |
| | | if (holdOrderEntity == null) { |
| | | log.info("持仓不存在:{}", holdOrderDataModel.getId()); |
| | | continue; |
| | | } |
| | | |
| | | holdOrderEntity.setForceClosingPrice(getForceSetPrice(wholePriceData, holdOrderEntity)); |
| | | contractHoldOrderDao.deleteById(holdOrderDataModel.getId()); |
| | | |
| | | ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity); |
| | |
| | | |
| | | BigDecimal rewardRatio = holdOrderDataModel.getRewardAmount().divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); |
| | | contractOrderEntity.setRewardRatio(rewardRatio); |
| | | contractOrderEntity.setRewardAmount(holdOrderDataModel.getRewardAmount()); |
| | | contractOrderEntity.setRewardAmount(holdOrderDataModel.getRewardAmount().add(contractOrderEntity.getBondAmount().subtract(contractOrderEntity.getOpeningFeeAmount()).negate())); |
| | | contractOrderEntity.setClosingPrice(holdOrderDataModel.getClosingPrice()); |
| | | contractOrderEntity.setForceClosingPrice(holdOrderDataModel.getClosingPrice()); |
| | | |
| | | // 订单状态转换 |
| | | if (ContractOrderEntity.ORDER_TYPE_OPEN_MORE == contractOrderEntity.getOrderType()) { |
| | |
| | | contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_LESS); |
| | | } |
| | | contractOrderEntity.setClosingTime(new Date()); |
| | | contractOrderEntity.setClosingFeeAmount(holdOrderEntity.getOpeningFeeAmount()); |
| | | |
| | | contractOrderDao.insert(contractOrderEntity); |
| | | } |
| | |
| | | } |
| | | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().subtract(totalAmount).negate(), null, wallet.getId()); |
| | | } else { |
| | | log.info("参数有误:{}", memberEntity.getId()); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 1 2 3 |
| | | * 开仓价 - (权益 - 其他币种成本)/当前币种成本 * (开仓价 * 1/杠杆) |
| | | * |
| | | * @param dataModel |
| | | * @param holdOrder |
| | | * @return |
| | | */ |
| | | private BigDecimal getForceSetPrice(WholePriceDataModel dataModel, ContractHoldOrderEntity holdOrder) { |
| | | if (holdOrder.getOpeningType() == ContractOrderEntity.ORDER_TYPE_OPEN_MORE) { |
| | | return holdOrder.getOpeningPrice().subtract(holdOrder.getOpeningPrice().multiply(BigDecimal.ONE.divide(new BigDecimal(holdOrder.getLeverRatio()), 8, BigDecimal.ROUND_DOWN))); |
| | | } else { |
| | | return holdOrder.getOpeningPrice().add(holdOrder.getOpeningPrice().multiply(BigDecimal.ONE.divide(new BigDecimal(holdOrder.getLeverRatio()), 8, BigDecimal.ROUND_DOWN))); |
| | | } |
| | | } |
| | | } |