From 5c96a980c662796045c1b741015e58790409e191 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Sat, 29 Aug 2020 16:06:34 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java | 151 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 90 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java index 1489125..f26a9b1 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/OrderWebsocketServiceImpl.java @@ -738,69 +738,17 @@ contractHoldOrderService.updateOrderIsCanClosingAndBatchNoById(orderId); continue; } - boolean isDone = false; - Long memId = coinsOrder.getMemberId(); - BigDecimal nowPrice = coinsOrder.getForceClosingPrice(); - // 创建订单(加入历史表的订单) - ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(coinsOrder); - //查询是否满足爆仓条件 - if (coinsOrder.getOpeningType() == ContractHoldOrderEntity.OPENING_TYPE_MORE) { - //如果是开多,当前价小于预估强平价即为爆仓 - // 设置平仓类型 // 爆仓平多 - contractOrderEntity.setClosingType(4); - //更新用户钱包数据 - isDone = true; + if (ContractEntrustOrderEntity.POSITION_TYPE_ADD == coinsOrder.getPositionType()) { + bombOrder(coinsOrder); } else { - //如果是开空,当前价大于预估强平价即为爆仓 - contractOrderEntity.setClosingType(5); - //更新主表订单状态位为“已平仓” - isDone = true; + List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(coinsOrder.getMemberId(), coinsOrder.getSymbol()); + if (CollectionUtils.isNotEmpty(holdOrderEntities)) { + for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) { + bombOrder(holdOrderEntity); + } - } - if (isDone) { - //删除次仓订单 - contractHoldOrderService.removeById(orderId); - // 订单状态转换 - if (ContractOrderEntity.ORDER_TYPE_OPEN_MORE == contractOrderEntity.getOrderType()) { - contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_MORE); - } else { - contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_LESS); - } - //更新主表订单状态位为“已平仓” - contractOrderEntity.setId(null); - contractOrderEntity.setClosingPrice(nowPrice); - contractOrderEntity.setClosingTime(new Date()); - contractOrderEntity.setClosingFeeAmount(coinsOrder.getOpeningFeeAmount()); - - if (coinsOrder.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { - contractOrderEntity.setRewardAmount(coinsOrder.getBondAmount().subtract(contractOrderEntity.getOpeningFeeAmount()).negate()); - contractOrderService.save(contractOrderEntity); - - //更新用户钱包数据 - MemberWalletContractEntity usdt = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, "USDT"); - - // 减去的时候用负数 - BigDecimal totalPrice = coinsOrder.getBondAmount().negate(); - memberWalletContractService.increaseWalletContractBalanceById(null, totalPrice, null, usdt.getId()); - - // 流水记录 TODO - MemberAccountFlowEntity record = new MemberAccountFlowEntity(); - record.setCreateTime(new Date()); - record.setSource("系统自动平仓"); - record.setRemark("系统自动平仓"); - record.setBalance(usdt.getAvailableBalance()); - record.setMemberId(memId); - record.setSymbol(coinsOrder.getSymbol()); - record.setPrice(coinsOrder.getBondAmount()); - memberAccountFlowEntityDao.insert(record); - } else { - MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol())); - - contractOrderEntity.setRewardAmount(wallet.getTotalBalance().subtract(coinsOrder.getOpeningFeeAmount()).negate()); - contractOrderService.save(contractOrderEntity); - - memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().negate(), null, wallet.getId()); + MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(coinsOrder.getMemberId(), CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol())); // 流水记录 TODO MemberAccountFlowEntity record = new MemberAccountFlowEntity(); @@ -808,12 +756,93 @@ record.setSource("系统自动平仓"); record.setRemark("系统自动平仓"); record.setBalance(BigDecimal.ZERO); - record.setMemberId(memId); + record.setMemberId(coinsOrder.getMemberId()); record.setSymbol(coinsOrder.getSymbol()); record.setPrice(wallet.getTotalBalance().subtract(coinsOrder.getOpeningFeeAmount())); memberAccountFlowEntityDao.insert(record); } } + + } + } + } + + private void bombOrder(ContractHoldOrderEntity coinsOrder) { + Long orderId = coinsOrder.getId(); + boolean isDone = false; + Long memId = coinsOrder.getMemberId(); + BigDecimal nowPrice = coinsOrder.getForceClosingPrice(); + // 创建订单(加入历史表的订单) + ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(coinsOrder); + + //查询是否满足爆仓条件 + if (coinsOrder.getOpeningType() == ContractHoldOrderEntity.OPENING_TYPE_MORE) { + //如果是开多,当前价小于预估强平价即为爆仓 + // 设置平仓类型 // 爆仓平多 + contractOrderEntity.setClosingType(4); + //更新用户钱包数据 + isDone = true; + } else { + //如果是开空,当前价大于预估强平价即为爆仓 + contractOrderEntity.setClosingType(5); + //更新主表订单状态位为“已平仓” + isDone = true; + + } + if (isDone) { + //删除次仓订单 + contractHoldOrderService.removeById(orderId); + // 订单状态转换 + if (ContractOrderEntity.ORDER_TYPE_OPEN_MORE == contractOrderEntity.getOrderType()) { + contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_MORE); + } else { + contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_LESS); + } + //更新主表订单状态位为“已平仓” + contractOrderEntity.setId(null); + contractOrderEntity.setClosingPrice(nowPrice); + contractOrderEntity.setClosingTime(new Date()); + contractOrderEntity.setClosingFeeAmount(coinsOrder.getOpeningFeeAmount()); + + if (coinsOrder.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + contractOrderEntity.setRewardAmount(coinsOrder.getBondAmount().subtract(contractOrderEntity.getOpeningFeeAmount()).negate()); + contractOrderService.save(contractOrderEntity); + + //更新用户钱包数据 + MemberWalletContractEntity usdt = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, "USDT"); + + // 减去的时候用负数 + BigDecimal totalPrice = coinsOrder.getBondAmount().negate(); + memberWalletContractService.increaseWalletContractBalanceById(null, totalPrice, null, usdt.getId()); + + // 流水记录 TODO + MemberAccountFlowEntity record = new MemberAccountFlowEntity(); + record.setCreateTime(new Date()); + record.setSource("系统自动平仓"); + record.setRemark("系统自动平仓"); + record.setBalance(usdt.getAvailableBalance()); + record.setMemberId(memId); + record.setSymbol(coinsOrder.getSymbol()); + record.setPrice(coinsOrder.getBondAmount()); + memberAccountFlowEntityDao.insert(record); + } else { + MemberWalletContractEntity wallet = memberWalletContractService.findWalletContractByMemberIdAndSymbol(memId, CoinTypeConvert.convertContractTypeToCoin(coinsOrder.getSymbol())); + + BigDecimal rewardRatio = BigDecimal.ZERO; + // 开多 + if (ContractHoldOrderEntity.OPENING_TYPE_MORE == coinsOrder.getOpeningType()) { + // (最新价-开仓价)*规格*张数 + rewardRatio = nowPrice.subtract(coinsOrder.getOpeningPrice()).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale())); + // 开空 + } else { + // (开仓价-最新价)*规格*张数 + rewardRatio = coinsOrder.getOpeningPrice().subtract(nowPrice).multiply(coinsOrder.getSymbolSku()).multiply(new BigDecimal(coinsOrder.getSymbolCntSale())); + } + + contractOrderEntity.setRewardAmount(rewardRatio); + contractOrderService.save(contractOrderEntity); + + memberWalletContractService.increaseWalletContractBalanceById(wallet.getAvailableBalance().negate(), wallet.getTotalBalance().negate(), null, wallet.getId()); } } } -- Gitblit v1.9.1