From 17b12b82967c65d170b7bda3c79e3aa76ecfa746 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 28 Aug 2020 14:48:59 +0800 Subject: [PATCH] Merge branch 'whole' of https://gitee.com/chonggaoxiao/new_excoin into whole --- src/main/java/com/xcong/excoin/utils/CalculateUtil.java | 58 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java index 258355a..3e8c5a1 100644 --- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java +++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java @@ -3,6 +3,7 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONObject; +import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; import com.xcong.excoin.common.exception.GlobalException; import com.xcong.excoin.common.response.Result; @@ -86,9 +87,8 @@ * 全仓模式 -- 预估强平价 * 面值*(多单张数*多单开仓价-空单张数*空单开仓价)-余额-已实现盈亏 / 面值*(多单张数-空单张数)-(维持保证金率+TAKER手续费)*面值*(开多张数+开空张数) * - * @return */ - public static BigDecimal getForceSetPriceForWhole(@NotNull String symbol, @NotNull MemberEntity memberEntity) { + public static void getForceSetPriceForWhole(@NotNull String symbol, @NotNull MemberEntity memberEntity) { ContractHoldOrderDao holdOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class); MemberWalletContractDao walletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class); CacheSettingUtils cacheSettingUtils = SpringContextHolder.getBean(CacheSettingUtils.class); @@ -96,10 +96,36 @@ Long memberId = memberEntity.getId(); BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(symbol); PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting(); - MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, symbol); - List<ContractHoldOrderEntity> holdOrderEntities = holdOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberId, symbol, 2); + MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeConvert.convertContractTypeToCoin(symbol)); + List<ContractHoldOrderEntity> holdOrderEntities = holdOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberId, symbol); if (CollUtil.isNotEmpty(holdOrderEntities)) { - // 多单开仓价 + BigDecimal totalSetPrice = BigDecimal.ZERO; + int totalCnt = 0; + + for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) { + BigDecimal forceSetPrice = getForceSetPrice(walletContract.getAvailableBalance().subtract(holdOrderEntity.getOpeningFeeAmount()), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCntSale(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity); + log.info("订单强平价 : {}, 订单ID : {}", forceSetPrice, holdOrderEntity.getId()); + totalSetPrice = totalSetPrice.add(forceSetPrice.multiply(BigDecimal.valueOf(holdOrderEntity.getSymbolCntSale()))); + totalCnt += holdOrderEntity.getSymbolCntSale(); + } + + BigDecimal forceSetPrice = totalSetPrice.divide(BigDecimal.valueOf(totalCnt), 8, BigDecimal.ROUND_DOWN); + log.info("强平价 : {}", forceSetPrice); + for (ContractHoldOrderEntity updateHoldOrder : holdOrderEntities) { + updateHoldOrder.setForceClosingPrice(forceSetPrice); + updateHoldOrder.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y); + holdOrderDao.updateById(updateHoldOrder); + + if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) { + sendOrderBombMsg(updateHoldOrder.getId(), updateHoldOrder.getOpeningType(), forceSetPrice, updateHoldOrder.getSymbol(), updateHoldOrder.getOperateNo()); + } + } + + } + } + + /* +// 多单开仓价 BigDecimal moreOpenPrice = BigDecimal.ZERO; // 多单张数 int moreCnt = 0; @@ -109,7 +135,6 @@ int lessCnt = 0; // 已实现盈亏 BigDecimal rewardAmount = BigDecimal.ZERO; - List<ContractHoldOrderEntity> updateHoldOrders = new ArrayList<>(); for (ContractHoldOrderEntity holdOrderEntity : holdOrderEntities) { if (holdOrderEntity.getOpeningType() == ContractHoldOrderEntity.OPENING_TYPE_MORE) { moreOpenPrice = holdOrderEntity.getOpeningPrice(); @@ -118,14 +143,8 @@ lessOpenPrice = holdOrderEntity.getOpeningPrice(); lessCnt = holdOrderEntity.getSymbolCntSale(); } - ContractHoldOrderEntity updateHoldOrder = new ContractHoldOrderEntity(); - updateHoldOrder.setOperateNo(holdOrderEntity.getOperateNo() + 1); - updateHoldOrder.setId(holdOrderEntity.getId()); - updateHoldOrder.setOpeningType(holdOrderEntity.getOpeningType()); - updateHoldOrder.setSymbol(holdOrderEntity.getSymbol()); - updateHoldOrders.add(updateHoldOrder); - rewardAmount = rewardAmount.add(holdOrderEntity.getRewardAmount()); + rewardAmount = rewardAmount.add(holdOrderEntity.getRewardAmount() == null ? BigDecimal.ZERO : holdOrderEntity.getRewardAmount()); log.info("rewardAmount : {}", rewardAmount); } @@ -146,19 +165,18 @@ BigDecimal forceSetPrice = divisor.divide(dividendOne.subtract(dividendTwo), 8, BigDecimal.ROUND_DOWN); log.info("forceSetPrice : {}", forceSetPrice); - for (ContractHoldOrderEntity updateHoldOrder : updateHoldOrders) { + for (ContractHoldOrderEntity updateHoldOrder : holdOrderEntities) { updateHoldOrder.setForceClosingPrice(forceSetPrice); + updateHoldOrder.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y); holdOrderDao.updateById(updateHoldOrder); - sendOrderBombMsg(updateHoldOrder.getId(), updateHoldOrder.getOpeningType(), forceSetPrice, updateHoldOrder.getSymbol(), updateHoldOrder.getOperateNo()); + if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) { + sendOrderBombMsg(updateHoldOrder.getId(), updateHoldOrder.getOpeningType(), forceSetPrice, updateHoldOrder.getSymbol(), updateHoldOrder.getOperateNo()); + } } - } else { - throw new GlobalException("强平价异常"); - } - return null; - } + */ private static void sendOrderBombMsg(Long id, int type, BigDecimal forceClosingPrice, String symbol, int operateNo) { OrderModel model = null; -- Gitblit v1.9.1