|  |  | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 holdOrderEntity.setForceClosingPrice(getForceSetPrice(wholePriceData, holdOrderEntity)); | 
 |  |  |                 holdOrderEntity.setForceClosingPrice(getForceSetPrice(wholePriceData, holdOrderEntity, holdOrderDataModel.getSymbol())); | 
 |  |  |                 contractHoldOrderDao.deleteById(holdOrderDataModel.getId()); | 
 |  |  |  | 
 |  |  |                 ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(holdOrderEntity); | 
 |  |  | 
 |  |  |      * @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))); | 
 |  |  |     private BigDecimal getForceSetPrice(WholePriceDataModel dataModel, ContractHoldOrderEntity holdOrder, String currentSymbol) { | 
 |  |  |         Long memberId = holdOrder.getMemberId(); | 
 |  |  |         List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberId, null); | 
 |  |  |         List<String> symbols = contractHoldOrderDao.selectWholeHoldOrderSymbolsByMemberId(memberId); | 
 |  |  |  | 
 |  |  |         BigDecimal result = BigDecimal.ZERO; | 
 |  |  |         if (CollUtil.isNotEmpty(holdOrderEntities)) { | 
 |  |  |  | 
 |  |  |             for (String symbol : symbols) { | 
 |  |  |                 // 其他币种成本 | 
 |  |  |                 BigDecimal totalBondAmount = BigDecimal.ZERO; | 
 |  |  |                 // 当前币种保证金 | 
 |  |  |                 BigDecimal symbolBondAmount = BigDecimal.ZERO; | 
 |  |  |  | 
 |  |  |                 // 开仓均价 | 
 |  |  |                 BigDecimal openPrice = BigDecimal.ZERO; | 
 |  |  |                 // 杠杆 | 
 |  |  |                 int leverRatio = 0; | 
 |  |  |                 boolean isAloneLess = true; | 
 |  |  |                 for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) { | 
 |  |  |                     BigDecimal bondAmount = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()); | 
 |  |  |  | 
 |  |  |                     if (symbol.equalsIgnoreCase(holdOrderEntity.getSymbol())) { | 
 |  |  |                         if (holdOrderEntity.getOpeningType() == ContractHoldOrderEntity.OPENING_TYPE_MORE) { | 
 |  |  |                             isAloneLess = false; | 
 |  |  |         } | 
 |  |  |                         symbolBondAmount = symbolBondAmount.add(bondAmount.subtract(holdOrderEntity.getOpeningFeeAmount())); | 
 |  |  |  | 
 |  |  |                         if (openPrice.compareTo(BigDecimal.ZERO) == 0) { | 
 |  |  |                             openPrice = holdOrderEntity.getOpeningPrice(); | 
 |  |  |                         } else { | 
 |  |  |                             openPrice = openPrice.add(holdOrderEntity.getOpeningPrice()).divide(BigDecimal.valueOf(2), 8, BigDecimal.ROUND_DOWN); | 
 |  |  |                         } | 
 |  |  |                         leverRatio = holdOrderEntity.getLeverRatio(); | 
 |  |  |                     } else { | 
 |  |  |                         totalBondAmount = totalBondAmount.add(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount())); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 BigDecimal equity = dataModel.getEquity(); | 
 |  |  |                 BigDecimal sub = equity.subtract(totalBondAmount); | 
 |  |  |  | 
 |  |  |                 if (sub.compareTo(symbolBondAmount) <= 0) { | 
 |  |  |                     BigDecimal multi = BigDecimal.valueOf(10); | 
 |  |  |                     BigDecimal divide = equity.divide(equity.add(multi), 8, BigDecimal.ROUND_DOWN); | 
 |  |  |                     sub = symbolBondAmount.multiply(divide); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 BigDecimal divide = sub.divide(symbolBondAmount, 8, BigDecimal.ROUND_DOWN); | 
 |  |  |                 BigDecimal divide2 = openPrice.divide(BigDecimal.valueOf(leverRatio), 8, BigDecimal.ROUND_DOWN); | 
 |  |  |  | 
 |  |  |                 BigDecimal forcePrice = BigDecimal.ZERO; | 
 |  |  |                 if (isAloneLess) { | 
 |  |  |                     forcePrice  = openPrice.add(divide.multiply(divide2)); | 
 |  |  |                 } else { | 
 |  |  |                     forcePrice  = openPrice.subtract(divide.multiply(divide2)); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (symbol.equalsIgnoreCase(currentSymbol)) { | 
 |  |  |                     result = forcePrice; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return result; | 
 |  |  |     } | 
 |  |  | } |