From ff92fb89be1203befbaeb3037aab5b09a79abfe6 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 28 Aug 2020 18:46:42 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 29 ++++++++--------------------- 1 files changed, 8 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java index d22f6a1..baea777 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java @@ -164,23 +164,10 @@ if (wholeHoldOrder != null) { BigDecimal totalPrice = openingPrice.multiply(BigDecimal.valueOf(submitOrderDto.getSymbolCnt())); // (当前开仓价*张数 + 原开仓价 * 原可平张数) / (张数 + 原可平张数) - BigDecimal newOpenPrice = totalPrice.add(wholeHoldOrder.getOpeningPrice().multiply(BigDecimal.valueOf(wholeHoldOrder.getSymbolCnt()))).divide(BigDecimal.valueOf(submitOrderDto.getSymbolCnt() + wholeHoldOrder.getSymbolCntSale()), 8, BigDecimal.ROUND_DOWN); + BigDecimal newOpenPrice = totalPrice.add(wholeHoldOrder.getOpeningPrice().multiply(BigDecimal.valueOf(wholeHoldOrder.getSymbolCntSale()))).divide(BigDecimal.valueOf(submitOrderDto.getSymbolCnt() + wholeHoldOrder.getSymbolCntSale()), 8, BigDecimal.ROUND_DOWN); log.info("计算后开仓价:{}", newOpenPrice); -// BigDecimal bondAmount = CalculateUtil.getBondAmount(newOpenPrice, lotNumber, submitOrderDto.getSymbolCnt() + wholeHoldOrder.getSymbolCntSale(), submitOrderDto.getLeverRatio()); -// log.info("新保证金:{}", bondAmount); BigDecimal fee = openFeePrice.add(wholeHoldOrder.getOpeningFeeAmount()); log.info("手续费相加:{}", fee); -// BigDecimal prePaymentAmount = bondAmount.add(fee).add(fee); -// -// BigDecimal subBondAmount = bondAmount.subtract(wholeHoldOrder.getBondAmount()).subtract(wholeHoldOrder.getOpeningFeeAmount()); -// log.info("保证金差值:{}", subBondAmount); -// -// if (subBondAmount.compareTo(walletContract.getAvailableBalance()) > -1) { -// // 可用余额不足 -// return Result.fail(MessageSourceUtils.getString("member_service_0085")); -// } - - ContractOrderEntity contractOrderEntity = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrder(wholeHoldOrder); contractOrderEntity.setBondAmount(bondAmount.add(openFeePrice)); @@ -231,7 +218,6 @@ holdOrderEntity.setSymbolCntSale(submitOrderDto.getSymbolCnt()); holdOrderEntity.setSymbolSku(lotNumber); holdOrderEntity.setLeverRatio(submitOrderDto.getLeverRatio()); -// holdOrderEntity.setForceClosingPrice(forceClosingPrice); holdOrderEntity.setOpeningFeeAmount(openFeePrice); holdOrderEntity.setOpeningPrice(openingPrice); holdOrderEntity.setOpeningType(submitOrderDto.getOrderType()); @@ -251,11 +237,8 @@ if (i > 0) { memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); - // 发送爆仓消息 -// sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), forceClosingPrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo()); // 发送预估强平价 ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity); - // 计算佣金 ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); @@ -460,11 +443,11 @@ // 开多 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { // (最新价-开仓价)*规格*张数 - rewardRatio = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())); + rewardRatio = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())); // 开空 } else { // (开仓价-最新价)*规格*张数 - rewardRatio = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())); + rewardRatio = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())); } if (memberEntity.getIsProfit() == MemberEntity.IS_PROFIT_Y) { @@ -563,7 +546,6 @@ // 更新可平张数 holdOrderEntity.setSymbolCntSale(sub); - holdOrderEntity.setSymbolCnt(sub); contractHoldOrderDao.updateById(holdOrderEntity); // 将待平张数放入缓存 @@ -824,6 +806,11 @@ @Override public Result changeLeverRate(ChangeLeverRateDto changeLeverRateDto) { MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + + List<ContractHoldOrderEntity> holdOrders = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberEntity.getId(), changeLeverRateDto.getSymbol()); + if (CollUtil.isNotEmpty(holdOrders)) { + return Result.fail("存在持仓, 无法调整杠杆"); + } MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), changeLeverRateDto.getSymbol()); levelRateEntity.setLevelRateUp(changeLeverRateDto.getLeverRate()); levelRateEntity.setLevelRateDown(changeLeverRateDto.getLeverRate()); -- Gitblit v1.9.1