From faa81566316ada6dbd0d5d5f8b7100032f57d51c Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Wed, 26 Aug 2020 12:04:36 +0800
Subject: [PATCH] modify entrust close order
---
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 46 ++++++++++++++++++++++++++++++++--------------
1 files changed, 32 insertions(+), 14 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 cc77bc4..b69eaad 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
@@ -131,7 +131,7 @@
log.info("全仓逻辑");
// 获取最新价
BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitOrderDto.getSymbol())));
- MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
+ MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(submitOrderDto.getSymbol()));
PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
MemberSettingEntity memberSetting = memberSettingDao.selectMemberSettingByMemberId(memberEntity.getId());
@@ -161,6 +161,12 @@
BigDecimal subBondAmount = bondAmount.subtract(wholeHoldOrder.getBondAmount());
log.info("保证金差值:{}", subBondAmount);
+
+ if (subBondAmount.compareTo(walletContract.getAvailableBalance()) > -1) {
+ // 可用余额不足
+ return Result.fail(MessageSourceUtils.getString("member_service_0085"));
+ }
+
// BigDecimal forceClosingPrice = CalculateUtil.getForceSetPriceForWhole(submitOrderDto.getSymbol(), memberEntity);
// log.info("新预估强平价:{}", forceClosingPrice);
@@ -556,14 +562,18 @@
return Result.fail("可平张数不足");
}
+ log.info("--->{},{}", holdOrderEntity.getSymbolCntSale(), wholeCloseOrderDto.getCount());
+ int sub = holdOrderEntity.getSymbolCntSale() - wholeCloseOrderDto.getCount();
+ log.info("剩余张数:{}", sub);
// 判断当前持仓张数是否等于平仓张数,若等于则直接更新该订单为不可平状态,否则更新可平张数
- if (wholeCloseOrderDto.getCount() == holdOrderEntity.getSymbolCntSale()) {
- contractHoldOrderDao.updateHoldOrderIsCanClosingById(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N, wholeCloseOrderDto.getId());
- } else {
- // 更新可平张数
- holdOrderEntity.setSymbolCntSale(holdOrderEntity.getSymbolCntSale() - wholeCloseOrderDto.getCount());
- contractHoldOrderDao.updateById(holdOrderEntity);
+ if (sub == 0) {
+ holdOrderEntity.setIsCanClosing(ContractHoldOrderEntity.ORDER_CAN_CLOSING_N);
}
+
+ // 更新可平张数
+ holdOrderEntity.setSymbolCntSale(sub);
+ holdOrderEntity.setSymbolCnt(sub);
+ contractHoldOrderDao.updateById(holdOrderEntity);
// 将待平张数放入缓存
redisUtils.set(AppContants.CLOSING_ORDER_PREFIX + holdOrderEntity.getId(), wholeCloseOrderDto.getCount());
@@ -746,11 +756,20 @@
PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
BigDecimal newPriceSymbol = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol)));
- // 当前合约委托单
- List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
-
- // 当前持仓列表
- List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
+ List<ContractEntrustOrderEntity> entrustOrderEntities;
+ List<ContractHoldOrderEntity> holdOrderEntities;
+ MemberWalletContractEntity walletContractEntity;
+ if (memberEntity.getContractPositionType().equals(ContractEntrustOrderEntity.POSITION_TYPE_ADD)) {
+ // 当前合约委托单
+ entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
+ // 当前持仓列表
+ holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
+ walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
+ } else {
+ entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol);
+ holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberEntity.getId(), symbol);
+ walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeConvert.convertContractTypeToCoin(symbol));
+ }
// 冻结保证金 -- 即委托单中的保证金之和
BigDecimal frozenBondAmount = BigDecimal.ZERO;
@@ -792,8 +811,6 @@
totalProfitOrLess = totalProfitOrLess.add(profitOrLess);
}
}
-
- MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
MemberLevelRateEntity rateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), symbol);
@@ -945,6 +962,7 @@
updateEntity.setId(member.getId());
int i = memberDao.updateById(updateEntity);
if (i > 0) {
+ member.setContractPositionType(positionType);
LoginUserUtils.resetAppLoginUser(member);
return Result.ok(MessageSourceUtils.getString("member_service_0040"));
}
--
Gitblit v1.9.1