From 665aae9e293c4e97be597ddc4f21b4c1b1edca61 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 20 Aug 2020 18:11:45 +0800
Subject: [PATCH] modify
---
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java | 2
src/test/java/com/xcong/excoin/WholeTest.java | 29 +++++++++
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 29 +++++++--
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java | 23 +++++++
src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java | 2
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | 22 +++---
src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java | 8 ++
src/main/resources/mapper/member/MemberDao.xml | 5 +
src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitCloseEntrustDto.java | 4 +
src/main/java/com/xcong/excoin/modules/contract/service/ContractEntrustOrderService.java | 3 +
src/main/java/com/xcong/excoin/utils/CalculateUtil.java | 5 -
src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java | 2
12 files changed, 109 insertions(+), 25 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java b/src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java
index c7fa80c..05685f9 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/controller/ContractEntrustOrderController.java
@@ -65,6 +65,6 @@
@ApiOperation(value = "全仓模式 -- 提交平仓委托单", notes = "平仓委托单")
@PostMapping(value = "/submitCloseEntrustOrder")
public Result submitCloseEntrustOrder(@RequestBody SubmitCloseEntrustDto submitCloseEntrustDto) {
- return Result.ok("提交成功");
+ return contractEntrustOrderService.addCloseContractEntrustOrder(submitCloseEntrustDto);
}
}
diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitCloseEntrustDto.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitCloseEntrustDto.java
index 7c03c3c..e94162d 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitCloseEntrustDto.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/SubmitCloseEntrustDto.java
@@ -31,4 +31,8 @@
@ApiModelProperty(value = "币种数量", example = "1")
private int symbolCnt;
+ @NotNull
+ @ApiModelProperty(value = "币种", example = "BTC/USDT")
+ private String symbol;
+
}
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/ContractEntrustOrderService.java b/src/main/java/com/xcong/excoin/modules/contract/service/ContractEntrustOrderService.java
index 2e27705..c26d2d1 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/ContractEntrustOrderService.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/ContractEntrustOrderService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
+import com.xcong.excoin.modules.contract.parameter.dto.SubmitCloseEntrustDto;
import com.xcong.excoin.modules.contract.parameter.dto.SubmitEntrustDto;
import java.util.List;
@@ -20,4 +21,6 @@
public List<ContractEntrustOrderEntity> selectEntrustOrderListByIds( List<Long> list);
+ Result addCloseContractEntrustOrder(SubmitCloseEntrustDto submitCloseEntrustDto);
+
}
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
index cda4dcf..956948d 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -8,10 +8,13 @@
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.common.system.service.CommonService;
import com.xcong.excoin.modules.contract.dao.ContractEntrustOrderDao;
+import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
import com.xcong.excoin.modules.contract.entity.ContractEntrustOrderEntity;
+import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.contract.mapper.ContractEntrustOrderEntityMapper;
+import com.xcong.excoin.modules.contract.parameter.dto.SubmitCloseEntrustDto;
import com.xcong.excoin.modules.contract.parameter.dto.SubmitEntrustDto;
import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto;
import com.xcong.excoin.modules.contract.parameter.vo.ContractEntrustVo;
@@ -61,6 +64,9 @@
@Resource
private OrderProducer producer;
+
+ @Resource
+ private ContractHoldOrderDao contractHoldOrderDao;
@Resource
private ContractHoldOrderService contractHoldOrderService;
@@ -207,4 +213,21 @@
public List<ContractEntrustOrderEntity> selectEntrustOrderListByIds(List<Long> list) {
return contractEntrustOrderDao.selectEntrustOrderListByIds(list);
}
+
+ @Override
+ public Result addCloseContractEntrustOrder(SubmitCloseEntrustDto submitCloseEntrustDto) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+ ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(member.getId(), submitCloseEntrustDto.getId());
+ if (holdOrderEntity == null) {
+ return Result.fail("订单不存在");
+ }
+
+ if(holdOrderEntity.getSymbolCntSale() - submitCloseEntrustDto.getSymbolCnt() < 0) {
+ return Result.fail("可平张数不足");
+ }
+
+ // 获取最新价
+ BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(submitCloseEntrustDto.getSymbol())));
+ return null;
+ }
}
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 4fb9319..0419bc5 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);
@@ -750,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 = new ArrayList<>();
+ List<ContractHoldOrderEntity> holdOrderEntities = new ArrayList<>();
+ MemberWalletContractEntity walletContractEntity = null;
+ 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;
@@ -796,8 +811,6 @@
totalProfitOrLess = totalProfitOrLess.add(profitOrLess);
}
}
-
- MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
MemberLevelRateEntity rateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), symbol);
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
index 48a7aec..beb8f51 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -261,7 +261,7 @@
MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId());
- MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(holdOrderEntity.getMemberId(), CoinTypeEnum.USDT.name());
+ MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(holdOrderEntity.getMemberId(), CoinTypeConvert.convertContractTypeToCoin(symbol));
if (walletContract != null) {
BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(symbol);
// 盈亏
diff --git a/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java b/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
index b7e285a..ad95e15 100644
--- a/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
+++ b/src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
@@ -21,4 +21,6 @@
public List<NeedMoneyMemberVo> selectAllNeedMoneyMember(@Param("list") List<String> list);
+ public List<MemberEntity> selectAllMember();
+
}
diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
index e317ffa..97b4f6a 100644
--- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -185,16 +185,6 @@
member.setRefererIds(ids);
memberDao.updateById(member);
- //初始化合约钱包
- MemberWalletContractEntity walletContract = new MemberWalletContractEntity();
- walletContract.setMemberId(member.getId());
- walletContract.setAvailableBalance(AppContants.INIT_MONEY);
- walletContract.setFrozenBalance(AppContants.INIT_MONEY);
- walletContract.setTotalBalance(AppContants.INIT_MONEY);
- walletContract.setBorrowedFund(AppContants.INIT_MONEY);
- walletContract.setWalletCode(CoinTypeEnum.USDT.name());
- memberWalletContractDao.insert(walletContract);
-
MemberWalletContractSimulateEntity walletContractSimulate = new MemberWalletContractSimulateEntity();
walletContractSimulate.setMemberId(member.getId());
walletContractSimulate.setAvailableBalance(new BigDecimal(AppContants.INIT_SIMULATE_MONEY));
@@ -205,8 +195,18 @@
memberWalletContractSimulateDao.insert(walletContractSimulate);
- // 初始化币币钱包
for (CoinTypeEnum coinTypeEnum : CoinTypeEnum.values()) {
+ //初始化合约钱包
+ MemberWalletContractEntity walletContract = new MemberWalletContractEntity();
+ walletContract.setMemberId(member.getId());
+ walletContract.setAvailableBalance(AppContants.INIT_MONEY);
+ walletContract.setFrozenBalance(AppContants.INIT_MONEY);
+ walletContract.setTotalBalance(AppContants.INIT_MONEY);
+ walletContract.setBorrowedFund(AppContants.INIT_MONEY);
+ walletContract.setWalletCode(coinTypeEnum.name());
+ memberWalletContractDao.insert(walletContract);
+
+ // 初始化币币钱包
MemberWalletCoinEntity walletCoin = new MemberWalletCoinEntity();
walletCoin.setWalletCode(coinTypeEnum.name());
walletCoin.setMemberId(member.getId());
diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
index 841beee..7d167ed 100644
--- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
+++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java
@@ -87,7 +87,6 @@
* 全仓模式 -- 预估强平价
* 面值*(多单张数*多单开仓价-空单张数*空单开仓价)-余额-已实现盈亏 / 面值*(多单张数-空单张数)-(维持保证金率+TAKER手续费)*面值*(开多张数+开空张数)
*
- * @return
*/
public static void getForceSetPriceForWhole(@NotNull String symbol, @NotNull MemberEntity memberEntity) {
ContractHoldOrderDao holdOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
@@ -97,7 +96,7 @@
Long memberId = memberEntity.getId();
BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(symbol);
PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
- MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name());
+ MemberWalletContractEntity walletContract = walletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeConvert.convertContractTypeToCoin(symbol));
List<ContractHoldOrderEntity> holdOrderEntities = holdOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberId, symbol);
if (CollUtil.isNotEmpty(holdOrderEntities)) {
// 多单开仓价
@@ -149,8 +148,6 @@
sendOrderBombMsg(updateHoldOrder.getId(), updateHoldOrder.getOpeningType(), forceSetPrice, updateHoldOrder.getSymbol(), updateHoldOrder.getOperateNo());
}
}
- } else {
- throw new GlobalException("强平价异常");
}
}
diff --git a/src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java b/src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java
index fc2dc6c..d9babcb 100644
--- a/src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java
+++ b/src/main/java/com/xcong/excoin/utils/CoinTypeConvert.java
@@ -47,4 +47,12 @@
return null;
}
}
+
+ public static String convertContractTypeToCoin(String symbol) {
+ if (symbol.indexOf("/") > 0) {
+ return symbol.substring(0, symbol.indexOf("/"));
+ } else {
+ return null;
+ }
+ }
}
diff --git a/src/main/resources/mapper/member/MemberDao.xml b/src/main/resources/mapper/member/MemberDao.xml
index 7debfd9..4a65303 100644
--- a/src/main/resources/mapper/member/MemberDao.xml
+++ b/src/main/resources/mapper/member/MemberDao.xml
@@ -44,4 +44,9 @@
#{item}
</foreach >
</select>
+
+
+ <select id="selectAllMember" resultType="com.xcong.excoin.modules.member.entity.MemberEntity">
+ select * from member
+ </select>
</mapper>
\ No newline at end of file
diff --git a/src/test/java/com/xcong/excoin/WholeTest.java b/src/test/java/com/xcong/excoin/WholeTest.java
index e685505..72454e6 100644
--- a/src/test/java/com/xcong/excoin/WholeTest.java
+++ b/src/test/java/com/xcong/excoin/WholeTest.java
@@ -1,10 +1,14 @@
package com.xcong.excoin;
+import com.xcong.excoin.common.contants.AppContants;
+import com.xcong.excoin.common.enumerates.CoinTypeEnum;
import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
import com.xcong.excoin.modules.contract.service.RabbitOrderService;
import com.xcong.excoin.modules.member.dao.MemberDao;
+import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.utils.CalculateUtil;
import com.xcong.excoin.utils.ThreadPoolUtils;
import org.junit.jupiter.api.Test;
@@ -30,6 +34,9 @@
@Autowired
private RabbitOrderService rabbitOrderService;
+ @Autowired
+ private MemberWalletContractDao memberWalletContractDao;
+
@Test
public void forceClosePriceTest() {
MemberEntity memberEntity = memberDao.selectById(5L);
@@ -47,5 +54,27 @@
rabbitOrderService.cancelHoldOrder(ids);
}
+ @Test
+ public void wholeContractWalletTest() {
+ List<MemberEntity> memberEntities = memberDao.selectAllMember();
+ for (MemberEntity member : memberEntities) {
+ CoinTypeEnum[] values = CoinTypeEnum.values();
+ for (CoinTypeEnum value : values) {
+ MemberWalletContractEntity walletContract = new MemberWalletContractEntity();
+ if (value.name().equals(CoinTypeEnum.USDT.name())) {
+ continue;
+ }
+
+ walletContract.setMemberId(member.getId());
+ walletContract.setAvailableBalance(AppContants.INIT_MONEY);
+ walletContract.setFrozenBalance(AppContants.INIT_MONEY);
+ walletContract.setTotalBalance(AppContants.INIT_MONEY);
+ walletContract.setBorrowedFund(AppContants.INIT_MONEY);
+ walletContract.setWalletCode(value.name());
+ memberWalletContractDao.insert(walletContract);
+ }
+ }
+ }
+
}
--
Gitblit v1.9.1