From 36d59c12794849c1b6fbbcbd41f97ea2fe71b09c Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 04 Mar 2021 11:10:19 +0800
Subject: [PATCH] modify
---
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 61 ++++++++++++++++++++++++------
1 files changed, 48 insertions(+), 13 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 11d154e..5a3f774 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
@@ -197,9 +197,6 @@
if (i > 0) {
memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId());
- // 全仓爆仓
- ThreadPoolUtils.sendWholePrice(memberEntity.getId());
-
// 发送预估强平价
ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity);
// 计算佣金
@@ -211,6 +208,9 @@
} else {
LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), prePaymentAmount, walletContract.getAvailableBalance().subtract(prePaymentAmount), submitOrderDto.getSymbol(), "买跌持仓", "买跌:" + submitOrderDto.getSymbol());
}
+
+ // 全仓爆仓
+ ThreadPoolUtils.sendWholePrice(memberEntity.getId());
// 提交成功
return Result.ok(MessageSourceUtils.getString("member_service_0024"));
@@ -233,7 +233,7 @@
holdOrderEntity.setOpeningPrice(openingPrice);
holdOrderEntity.setOpeningType(submitOrderDto.getOrderType());
holdOrderEntity.setMarkPrice(newPrice);
- holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N);
+ holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_Y);
holdOrderEntity.setPrePaymentAmount(prePaymentAmount);
holdOrderEntity.setBondAmount(bondAmount.add(openFeePrice));
holdOrderEntity.setOperateNo(1);
@@ -250,9 +250,6 @@
if (i > 0) {
memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId());
- // 全仓爆仓
- ThreadPoolUtils.sendWholePrice(memberEntity.getId());
-
// 发送预估强平价
ThreadPoolUtils.sendWholeForceClosingPrice(submitOrderDto.getSymbol(), memberEntity);
// 计算佣金
@@ -264,6 +261,9 @@
} else {
LogRecordUtils.insertMemberAccountFlow(memberEntity.getId(), prePaymentAmount, walletContract.getAvailableBalance().subtract(prePaymentAmount), submitOrderDto.getSymbol(), "买跌持仓", "买跌:" + submitOrderDto.getSymbol());
}
+
+ // 全仓爆仓
+ ThreadPoolUtils.sendWholePrice(memberEntity.getId());
// 提交成功
return Result.ok(MessageSourceUtils.getString("member_service_0024"));
@@ -320,7 +320,7 @@
FollowTraderInfoEntity tradeInfo = null;
if (MemberEntity.IS_TRADER_Y.equals(memberEntity.getIsTrader())) {
tradeInfo = followTraderInfoDao.selectTraderInfoByMemberId(memberEntity.getId());
- if (tradeInfo.getIsOpen().equals(FollowTraderInfoEntity.ISOPEN_Y)) {
+ if (FollowTraderInfoEntity.ISOPEN_Y.equals(tradeInfo.getIsOpen())) {
isOpenFollow = true;
}
}
@@ -443,12 +443,18 @@
@Override
public Result findHoldOrderList(String symbol, int type) {
MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+ List<ContractHoldOrderEntity> list = null;
-// List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol, type);
- List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbolTest(memberEntity.getId(),type);
+ if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
+ list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbolTest(memberEntity.getId(), type);
+ } else {
+ list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol, type);
+ }
+
MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
if (CollUtil.isNotEmpty(list)) {
BigDecimal totalProfitOrLoss = BigDecimal.ZERO;
+ BigDecimal totalHoldBond = BigDecimal.ZERO;
List<HoldOrderListVo> resultList = new ArrayList<>();
for (ContractHoldOrderEntity holdOrderEntity : list) {
HoldOrderListVo holdOrderListVo = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToDto(holdOrderEntity);
@@ -510,9 +516,22 @@
}
resultList.add(holdOrderListVo);
totalProfitOrLoss = totalProfitOrLoss.add(rewardRatio);
+ totalHoldBond = totalHoldBond.add(holdOrderEntity.getHoldBond() == null ? BigDecimal.ZERO : holdOrderEntity.getHoldBond());
}
Map<String, Object> result = new HashMap<>();
+ if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
+ List<ContractEntrustOrderEntity> entrustOrder = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
+ BigDecimal totalEntrustAmount = BigDecimal.ZERO;
+ if (CollUtil.isNotEmpty(entrustOrder)) {
+ for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) {
+ totalEntrustAmount = totalEntrustAmount.add(contractEntrustOrderEntity.getEntrustAmount());
+ }
+ }
+ BigDecimal riskRatio = totalHoldBond.divide(walletContractEntity.getTotalBalance().add(totalProfitOrLoss).subtract(totalEntrustAmount), 4, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100));
+ result.put("riskRatio", riskRatio);
+ }
+
result.put("hold", resultList);
result.put("totalProfitOrLoss", totalProfitOrLoss.setScale(4, BigDecimal.ROUND_DOWN).toPlainString());
return Result.ok(result);
@@ -805,6 +824,8 @@
// 占用保证金 -- 即持仓单中的保证金之和
BigDecimal beUsedBondAmount = BigDecimal.ZERO;
+ BigDecimal moreBondAmount = BigDecimal.ZERO;
+ BigDecimal lessBondAmount = BigDecimal.ZERO;
// 总盈利
BigDecimal totalProfitOrLess = BigDecimal.ZERO;
if (CollUtil.isNotEmpty(holdOrderEntities)) {
@@ -818,9 +839,11 @@
BigDecimal profitOrLess = BigDecimal.ZERO;
// 开多
if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
+ moreBondAmount = moreBondAmount.add(holdOrderEntity.getBondAmount());
profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
// 开空
} else {
+ lessBondAmount = lessBondAmount.add(holdOrderEntity.getBondAmount());
profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
}
@@ -845,6 +868,14 @@
equity = BigDecimal.ZERO;
}
+ BigDecimal available = walletContractEntity.getAvailableBalance();
+ if (totalProfitOrLess.compareTo(BigDecimal.ZERO) <= 0) {
+ available = available.add(totalProfitOrLess);
+ if (available.compareTo(BigDecimal.ZERO) <= 0) {
+ available = BigDecimal.ZERO;
+ }
+ }
+
// 获取当日k线的开盘价
Candlestick symbolObject = (Candlestick) redisUtils.get(symbol);
BigDecimal openPrice = symbolObject.getOpen();
@@ -852,13 +883,15 @@
contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount);
contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount);
contractMoneyInfoVo.setEquity(equity);
- contractMoneyInfoVo.setAvailableBalance(walletContractEntity.getAvailableBalance());
+ contractMoneyInfoVo.setAvailableBalance(available);
contractMoneyInfoVo.setFeeRatio(tradeSetting.getFeeRatio());
contractMoneyInfoVo.setLeverAgeRatio(tradeSetting.getLeverageRatio());
contractMoneyInfoVo.setNewPrice(newPriceSymbol);
contractMoneyInfoVo.setUpOrDown(upOrDown);
contractMoneyInfoVo.setSymbolSku(cacheSettingUtils.getSymbolSku(symbol));
contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp());
+ contractMoneyInfoVo.setMoreBondAmount(moreBondAmount);
+ contractMoneyInfoVo.setLessBondAmount(lessBondAmount);
return Result.ok(contractMoneyInfoVo);
}
@@ -1042,8 +1075,10 @@
holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1);
contractHoldOrderDao.updateById(holdOrderEntity);
- // 发送爆仓消息
- sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
+ if (ContractEntrustOrderEntity.POSITION_TYPE_ADD == holdOrderEntity.getPositionType()) {
+ // 发送爆仓消息
+ sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
+ }
}
}
}
--
Gitblit v1.9.1