|  |  | 
 |  |  |                     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(); | 
 |  |  | 
 |  |  |                         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()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } |