| | |
| | | log.info("全仓逻辑"); |
| | | // 获取最新价 |
| | | BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitOrderDto.getSymbol()))); |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); |
| | | MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(submitOrderDto.getSymbol())); |
| | | PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); |
| | | |
| | | MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId()); |
| | |
| | | BigDecimal subBondAmount = bondAmount.subtract(wholeHoldOrder.getBondAmount()); |
| | | log.info("保证金差值:{}", subBondAmount); |
| | | |
| | | BigDecimal forceClosingPrice = CalculateUtil.getForceSetPriceForWhole(submitOrderDto.getSymbol(), memberEntity); |
| | | log.info("新预估强平价:{}", forceClosingPrice); |
| | | if (subBondAmount.compareTo(walletContract.getAvailableBalance()) > -1) { |
| | | // 可用余额不足 |
| | | return Result.fail(MessageSourceUtils.getString("member_service_0085")); |
| | | } |
| | | |
| | | |
| | | // BigDecimal forceClosingPrice = CalculateUtil.getForceSetPriceForWhole(submitOrderDto.getSymbol(), memberEntity); |
| | | // log.info("新预估强平价:{}", forceClosingPrice); |
| | | |
| | | ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(wholeHoldOrder); |
| | | contractOrderEntity.setBondAmount(bondAmount.add(openFeePrice)); |
| | | contractOrderEntity.setForceClosingPrice(forceClosingPrice); |
| | | // contractOrderEntity.setForceClosingPrice(forceClosingPrice); |
| | | contractOrderEntity.setOpeningPrice(newOpenPrice); |
| | | contractOrderEntity.setSymbolCnt(submitOrderDto.getSymbolCnt()); |
| | | contractOrderEntity.setOpeningTime(new Date()); |
| | |
| | | wholeHoldOrder.setBondAmount(bondAmount); |
| | | wholeHoldOrder.setSymbolCnt(wholeHoldOrder.getSymbolCnt() + submitOrderDto.getSymbolCnt()); |
| | | wholeHoldOrder.setSymbolCntSale(wholeHoldOrder.getSymbolCntSale() + submitOrderDto.getSymbolCnt()); |
| | | wholeHoldOrder.setForceClosingPrice(forceClosingPrice); |
| | | // wholeHoldOrder.setForceClosingPrice(forceClosingPrice); |
| | | wholeHoldOrder.setPrePaymentAmount(prePaymentAmount); |
| | | wholeHoldOrder.setOperateNo(wholeHoldOrder.getOperateNo() + 1); |
| | | int i = contractHoldOrderDao.updateById(wholeHoldOrder); |
| | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(subBondAmount.add(openFeePrice).negate(), openFeePrice.negate(), null, walletContract.getId()); |
| | | |
| | | // 发送爆仓消息 |
| | | sendOrderBombMsg(wholeHoldOrder.getId(), wholeHoldOrder.getOpeningType(), forceClosingPrice, wholeHoldOrder.getSymbol(), wholeHoldOrder.getOperateNo()); |
| | | |
| | | // sendOrderBombMsg(wholeHoldOrder.getId(), wholeHoldOrder.getOpeningType(), forceClosingPrice, wholeHoldOrder.getSymbol(), wholeHoldOrder.getOperateNo()); |
| | | // 发送预估强平价 |
| | | ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity); |
| | | // 计算佣金 |
| | | ThreadPoolUtils.calReturnMoney(memberEntity.getId(), openFeePrice, contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); |
| | | |
| | |
| | | } |
| | | |
| | | // 预估强平价 |
| | | BigDecimal forceClosingPrice = CalculateUtil.getForceSetPriceForWhole(submitOrderDto.getSymbol(), memberEntity); |
| | | // BigDecimal forceClosingPrice = CalculateUtil.getForceSetPriceForWhole(submitOrderDto.getSymbol(), memberEntity); |
| | | |
| | | ContractHoldOrderEntity holdOrderEntity = new ContractHoldOrderEntity(); |
| | | holdOrderEntity.setMemberId(memberEntity.getId()); |
| | |
| | | holdOrderEntity.setSymbolCntSale(submitOrderDto.getSymbolCnt()); |
| | | holdOrderEntity.setSymbolSku(lotNumber); |
| | | holdOrderEntity.setLeverRatio(submitOrderDto.getLeverRatio()); |
| | | holdOrderEntity.setForceClosingPrice(forceClosingPrice); |
| | | // holdOrderEntity.setForceClosingPrice(forceClosingPrice); |
| | | holdOrderEntity.setOpeningFeeAmount(openFeePrice); |
| | | holdOrderEntity.setOpeningPrice(openingPrice); |
| | | holdOrderEntity.setOpeningType(submitOrderDto.getOrderType()); |
| | | holdOrderEntity.setMarkPrice(newPrice); |
| | | holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y); |
| | | holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N); |
| | | holdOrderEntity.setPrePaymentAmount(prePaymentAmount); |
| | | holdOrderEntity.setBondAmount(bondAmount.add(openFeePrice)); |
| | | holdOrderEntity.setOperateNo(1); |
| | |
| | | memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); |
| | | |
| | | // 发送爆仓消息 |
| | | sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo()); |
| | | // sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo()); |
| | | // 发送预估强平价 |
| | | ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity); |
| | | |
| | | // 计算佣金 |
| | | ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); |
| | |
| | | return Result.fail("可平张数不足"); |
| | | } |
| | | |
| | | log.info("--->{},{}", holdOrderEntity.getSymbolCntSale(), wholeCloseOrderDto.getCount()); |
| | | int sub = holdOrderEntity.getSymbolCntSale() - wholeCloseOrderDto.getCount(); |
| | | log.info("剩余张数:{}", sub); |
| | | // 判断当前持仓张数是否等于平仓张数,若等于则直接更新该订单为不可平状态,否则更新可平张数 |
| | | if (wholeCloseOrderDto.getCount() == holdOrderEntity.getSymbolCntSale()) { |
| | | contractHoldOrderDao.updateHoldOrderIsCanClosingById(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N, wholeCloseOrderDto.getId()); |
| | | } else { |
| | | // 更新可平张数 |
| | | holdOrderEntity.setSymbolCntSale(holdOrderEntity.getSymbolCntSale() - wholeCloseOrderDto.getCount()); |
| | | contractHoldOrderDao.updateById(holdOrderEntity); |
| | | if (sub == 0) { |
| | | holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N); |
| | | } |
| | | |
| | | // 更新可平张数 |
| | | holdOrderEntity.setSymbolCntSale(sub); |
| | | holdOrderEntity.setSymbolCnt(sub); |
| | | contractHoldOrderDao.updateById(holdOrderEntity); |
| | | |
| | | // 将待平张数放入缓存 |
| | | redisUtils.set(AppContants.CLOSING_ORDER_PREFIX + holdOrderEntity.getId(), wholeCloseOrderDto.getCount()); |
| | |
| | | PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting(); |
| | | BigDecimal newPriceSymbol = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol))); |
| | | |
| | | // 当前合约委托单 |
| | | List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId()); |
| | | |
| | | // 当前持仓列表 |
| | | List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId()); |
| | | List<ContractEntrustOrderEntity> entrustOrderEntities; |
| | | List<ContractHoldOrderEntity> holdOrderEntities; |
| | | MemberWalletContractEntity walletContractEntity; |
| | | if (memberEntity.getContractPositionType().equals(ContractEntrustOrderEntity.POSITION_TYPE_ADD)) { |
| | | // 当前合约委托单 |
| | | entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId()); |
| | | // 当前持仓列表 |
| | | holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId()); |
| | | walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); |
| | | } else { |
| | | entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol); |
| | | holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberEntity.getId(), symbol); |
| | | walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(symbol)); |
| | | } |
| | | |
| | | // 冻结保证金 -- 即委托单中的保证金之和 |
| | | BigDecimal frozenBondAmount = BigDecimal.ZERO; |
| | |
| | | totalProfitOrLess = totalProfitOrLess.add(profitOrLess); |
| | | } |
| | | } |
| | | |
| | | MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); |
| | | |
| | | MemberLevelRateEntity rateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), symbol); |
| | | |
| | |
| | | updateEntity.setId(member.getId()); |
| | | int i = memberDao.updateById(updateEntity); |
| | | if (i > 0) { |
| | | member.setContractPositionType(positionType); |
| | | LoginUserUtils.resetAppLoginUser(member); |
| | | return Result.ok(MessageSourceUtils.getString("member_service_0040")); |
| | | } |