| | |
| | | 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); |
| | | |
| | | if (subBondAmount.compareTo(walletContract.getAvailableBalance()) > -1) { |
| | | // 可用余额不足 |
| | | return Result.fail(MessageSourceUtils.getString("member_service_0085")); |
| | | } |
| | | |
| | | |
| | | // BigDecimal forceClosingPrice = CalculateUtil.getForceSetPriceForWhole(submitOrderDto.getSymbol(), memberEntity); |
| | | // log.info("新预估强平价:{}", forceClosingPrice); |
| | |
| | | } |
| | | |
| | | 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()); |
| | |
| | | // 发送平仓消息 |
| | | List<Long> ids = new ArrayList<>(); |
| | | ids.add(wholeCloseOrderDto.getId()); |
| | | // producer.sendCloseTrade(JSONObject.toJSONString(ids)); |
| | | producer.sendCloseTrade(JSONObject.toJSONString(ids)); |
| | | |
| | | // 平仓成功 |
| | | return Result.ok(MessageSourceUtils.getString("order_service_0044")); |
| | |
| | | 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")); |
| | | } |