From 3ca949646fead4b3de0656f6ad57c49f0728d629 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 11 Dec 2025 17:09:30 +0800
Subject: [PATCH] feat(coin): 移除EOS币种支持
---
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 100 +++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 86 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 92327d5..497edff 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
@@ -474,6 +474,11 @@
// canAddMaxBond = BigDecimal.ZERO;
// }
BigDecimal canReduceMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount());
+
+ if (rewardRatio.compareTo(BigDecimal.ZERO) < 0) {
+ canReduceMaxBond = canReduceMaxBond.add(rewardRatio);
+ }
+
if (canReduceMaxBond.compareTo(BigDecimal.ZERO) < 0) {
canReduceMaxBond = BigDecimal.ZERO;
}
@@ -482,6 +487,10 @@
holdOrderListVo.setCanAddMaxBond(walletContractEntity.getAvailableBalance());
holdOrderListVo.setReturnRate(returnRate);
holdOrderListVo.setProfitOrLoss(rewardRatio);
+ if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) {
+ BigDecimal forcePrice = CalculateUtil.getForceSetPriceForWhole(holdOrderEntity.getSymbol(), memberEntity);
+ holdOrderListVo.setForceClosingPrice(forcePrice);
+ }
resultList.add(holdOrderListVo);
totalProfitOrLoss = totalProfitOrLoss.add(rewardRatio);
}
@@ -704,6 +713,33 @@
if (holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount()).subtract(changeBondDto.getAmount()).compareTo(BigDecimal.ZERO) < 0) {
return Result.fail("超出保证金最大减少金额");
}
+ BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderEntity.getSymbol())));
+
+ BigDecimal rewardRatio = BigDecimal.ZERO;
+ // 开多
+ if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
+ // (最新价-开仓价)*规格*张数
+ rewardRatio = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(holdOrderEntity.getSymbolSku()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt()));
+ // 开空
+ } else {
+ // (开仓价-最新价)*规格*张数
+ rewardRatio = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(holdOrderEntity.getSymbolSku()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt()));
+ }
+
+ if (memberEntity.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
+ PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
+ if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
+ rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
+ }
+ }
+
+ if (rewardRatio.compareTo(BigDecimal.ZERO) < 0) {
+ BigDecimal canReduceMax = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount()).add(rewardRatio);
+ if (canReduceMax.subtract(changeBondDto.getAmount()).compareTo(BigDecimal.ZERO) < 0) {
+ return Result.fail("超出保证金最大减少金额");
+ }
+ }
+
memberWalletContractDao.increaseWalletContractBalanceById(changeBondDto.getAmount(), null, null, walletContract.getId());
holdOrderEntity.setBondAmount(holdOrderEntity.getBondAmount().subtract(changeBondDto.getAmount()));
}
@@ -729,18 +765,18 @@
PlatformTradeSettingEntity tradeSetting = cacheSettingUtils.getTradeSetting();
BigDecimal newPriceSymbol = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(symbol)));
- List<ContractEntrustOrderEntity> entrustOrderEntities;
- List<ContractHoldOrderEntity> holdOrderEntities;
+ List<ContractEntrustOrderEntity> entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
+ List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
- if (memberEntity.getContractPositionType().equals(ContractEntrustOrderEntity.POSITION_TYPE_ADD)) {
- // 当前合约委托单
- entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
- // 当前持仓列表
- holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
- } else {
- entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol);
- holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberEntity.getId(), symbol);
- }
+// if (memberEntity.getContractPositionType().equals(ContractEntrustOrderEntity.POSITION_TYPE_ADD)) {
+// // 当前合约委托单
+// entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberId(memberEntity.getId());
+// // 当前持仓列表
+// holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId());
+// } else {
+// entrustOrderEntities = contractEntrustOrderDao.selectEntrustOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol);
+// holdOrderEntities = contractHoldOrderDao.selectHoldOrderListForWholeByMemberIdAndSymbol(memberEntity.getId(), symbol);
+// }
// 冻结保证金 -- 即委托单中的保证金之和
BigDecimal frozenBondAmount = BigDecimal.ZERO;
@@ -765,10 +801,10 @@
BigDecimal profitOrLess = BigDecimal.ZERO;
// 开多
if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) {
- profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber);
+ profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
// 开空
} else {
- profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber);
+ profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber);
}
if (MemberEntity.IS_PROFIT_Y == memberEntity.getIsProfit()) {
@@ -788,6 +824,9 @@
ContractMoneyInfoVo contractMoneyInfoVo = new ContractMoneyInfoVo();
// 权益
BigDecimal equity = walletContractEntity.getTotalBalance().add(totalProfitOrLess);
+ if (equity.compareTo(BigDecimal.ZERO) <= 0) {
+ equity = BigDecimal.ZERO;
+ }
contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount);
contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount);
@@ -889,7 +928,7 @@
} else {
BigDecimal available = walletContractEntity.getAvailableBalance();
BigDecimal lessAmount = thisTimeHold.subtract(available);
- MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getId());
+ MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId());
memberWalletContractDao.increaseWalletContractBalanceById(available.negate(), available.negate(), null, walletContractEntity.getId());
BigDecimal newBondAmount = holdOrderEntity.getBondAmount().subtract(lessAmount);
@@ -944,4 +983,37 @@
}
return Result.fail(MessageSourceUtils.getString("member_service_0041"));
}
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void calHoldFeeAmountForBondAmount() {
+ List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectAllHoldOrder();
+ PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
+
+ if (CollUtil.isNotEmpty(list)) {
+ for (ContractHoldOrderEntity holdOrderEntity : list) {
+ BigDecimal holdAmount = holdOrderEntity.getHoldAmount();
+ if (holdAmount == null) {
+ holdAmount = BigDecimal.ZERO;
+ }
+
+ BigDecimal thisTimeHold = holdOrderEntity.getBondAmount().multiply(tradeSettingEntity.getDoingRatio());
+ log.info("订单编号:{}, 持仓费:{}", holdOrderEntity.getOrderNo(), thisTimeHold);
+
+ MemberEntity memberEntity = memberDao.selectById(holdOrderEntity.getMemberId());
+ BigDecimal subBond = holdOrderEntity.getBondAmount().subtract(thisTimeHold);
+
+ BigDecimal newForcePrice = CalculateUtil.getForceSetPrice(subBond.subtract(holdOrderEntity.getOpeningFeeAmount()), holdOrderEntity.getOpeningPrice(), holdOrderEntity.getSymbolCnt(), holdOrderEntity.getSymbolSku(), holdOrderEntity.getOpeningType(), memberEntity);
+ holdAmount = holdAmount.add(thisTimeHold);
+ holdOrderEntity.setBondAmount(subBond);
+ holdOrderEntity.setHoldAmount(holdAmount);
+ holdOrderEntity.setForceClosingPrice(newForcePrice);
+ holdOrderEntity.setOperateNo(holdOrderEntity.getOperateNo() + 1);
+ contractHoldOrderDao.updateById(holdOrderEntity);
+
+ // 发送爆仓消息
+ sendOrderBombMsg(holdOrderEntity.getId(), holdOrderEntity.getOpeningType(), newForcePrice, holdOrderEntity.getSymbol(), holdOrderEntity.getOperateNo(), holdOrderEntity.getMemberId());
+ }
+ }
+ }
}
--
Gitblit v1.9.1