From 33a69c65e1f6701bd29ef74d0681dbbe9a21cea7 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Fri, 29 Jan 2021 11:19:08 +0800 Subject: [PATCH] Merge branch 'whole_new' of https://gitee.com/chonggaoxiao/new_excoin.git into whole_new --- src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java | 5 ++--- src/main/java/com/xcong/excoin/common/contants/AppContants.java | 1 + src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java | 7 +++++++ src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java | 16 +++++++++++++++- src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java | 10 ++++++---- src/main/java/com/xcong/excoin/utils/CalculateUtil.java | 4 ++-- 6 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/xcong/excoin/common/contants/AppContants.java b/src/main/java/com/xcong/excoin/common/contants/AppContants.java index 57fb115..2cb1b13 100644 --- a/src/main/java/com/xcong/excoin/common/contants/AppContants.java +++ b/src/main/java/com/xcong/excoin/common/contants/AppContants.java @@ -88,5 +88,6 @@ public static final String WHOLE_BOMB_PREFIX = "whole_bomb_"; public static final String HOLD_BOND_RATIO = "hold_bond_ratio"; + public static final String WHOLE_BOMB_MAP = "whole_bomb_map"; } 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 c2011f0..b2fd665 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 @@ -500,9 +500,9 @@ BigDecimal rewardRatio = holdOrderDataModel.getRewardAmount().divide(holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN); contractOrderEntity.setRewardRatio(rewardRatio); - contractOrderEntity.setRewardAmount(holdOrderDataModel.getRewardAmount()); + contractOrderEntity.setRewardAmount(holdOrderDataModel.getRewardAmount().add(contractOrderEntity.getBondAmount().negate())); contractOrderEntity.setClosingPrice(holdOrderDataModel.getClosingPrice()); - contractOrderEntity.setForceClosingPrice(holdOrderDataModel.getClosingPrice()); +// contractOrderEntity.setForceClosingPrice(holdOrderDataModel.getClosingPrice()); // 订单状态转换 if (ContractOrderEntity.ORDER_TYPE_OPEN_MORE == contractOrderEntity.getOrderType()) { @@ -511,7 +511,6 @@ contractOrderEntity.setOrderType(ContractOrderEntity.ORDER_TYPE_CLOSE_LESS); } contractOrderEntity.setClosingTime(new Date()); - contractOrderEntity.setClosingFeeAmount(holdOrderEntity.getOpeningFeeAmount()); contractOrderDao.insert(contractOrderEntity); } diff --git a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java index b74d21f..3609764 100644 --- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java +++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java @@ -1,8 +1,11 @@ package com.xcong.excoin.rabbit.pricequeue; import com.alibaba.fastjson.JSONObject; +import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.rabbit.pricequeue.whole.WholeDataQueue; import com.xcong.excoin.rabbit.pricequeue.whole.WholePriceDataModel; +import com.xcong.excoin.utils.RedisUtils; +import com.xcong.excoin.utils.SpringContextHolder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -132,6 +135,8 @@ } public static void wholePriceDataOperation(WholePriceDataModel wholePriceData) { + RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); + Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP; WholePriceDataModel isExistData = dataModelMap.get(wholePriceData.getMemberId().toString()); @@ -140,6 +145,8 @@ } dataModelMap.put(wholePriceData.getMemberId().toString(), wholePriceData); + + redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap)); } } diff --git a/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java b/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java index 3d1a49a..1df8876 100644 --- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java +++ b/src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java @@ -21,6 +21,7 @@ import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; @@ -282,6 +283,7 @@ } } + @Transactional(rollbackFor = Exception.class) public void wholeBomb() { Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP; if (CollUtil.isEmpty(dataModelMap)) { @@ -297,9 +299,8 @@ Map<String, BigDecimal> prices = new HashMap<>(); for (HoldOrderDataModel holdOrderData : list) { String price = redisUtils.getString(CoinTypeConvert.convertToKey(holdOrderData.getSymbol())); -// BigDecimal newPrice = new BigDecimal(price); - BigDecimal newPrice = new BigDecimal("29958.46627789"); - + BigDecimal newPrice = new BigDecimal(price); +// BigDecimal newPrice = new BigDecimal("29958.46627789"); BigDecimal rewardRatio = null; if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderData.getOpeningType()) { @@ -323,7 +324,8 @@ } dataModelMap.remove(entry.getKey()); - System.out.println("触发"); + redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap)); + log.info("全仓爆仓触发:{}", JSONObject.toJSONString(wholePriceData)); wholePriceData.setPrices(prices); contractHoldOrderDao.updateMemberAllHoldOrderClosingStatus(wholePriceData.getMemberId()); orderProducer.sendWholeBomb(JSONObject.toJSONString(wholePriceData)); diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java index 183a4a4..b097cd3 100644 --- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java +++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java @@ -275,7 +275,7 @@ /** * 全仓模式下,维持保证金 - * 维持保证金 = 持仓价值*维持保证金率= 面值*张数*开仓价格*维持保证金率 + * 维持保证金 = 持仓价值*维持保证金率= 面值*张数*开仓价格*(1/杠杆倍率)*维持保证金率 * @param contractHoldOrder * @return */ @@ -289,6 +289,6 @@ redisUtils.set(AppContants.HOLD_BOND_RATIO, tradeSetting.getHoldBondRatio()); } - return contractHoldOrder.getOpeningPrice().multiply(new BigDecimal(contractHoldOrder.getSymbolCntSale())).multiply(holdBondRatio).multiply(contractHoldOrder.getSymbolSku()); + return contractHoldOrder.getOpeningPrice().multiply(new BigDecimal(contractHoldOrder.getSymbolCntSale())).multiply(holdBondRatio).multiply(contractHoldOrder.getSymbolSku()).multiply(BigDecimal.ONE.divide(new BigDecimal(contractHoldOrder.getLeverRatio()), 2, BigDecimal.ROUND_DOWN)); } } diff --git a/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java b/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java index 1f89588..de3abb7 100644 --- a/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java +++ b/src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java @@ -2,9 +2,12 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONObject; +import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.enumerates.CoinTypeEnum; +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.ContractHoldOrderEntityMapper; @@ -110,6 +113,8 @@ public void run() { log.info("全仓操作价格"); ContractHoldOrderDao contractHoldOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class); + ContractEntrustOrderDao contractEntrustOrderDao = SpringContextHolder.getBean(ContractEntrustOrderDao.class); + RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); MemberWalletContractDao memberWalletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class); List<ContractHoldOrderEntity> holdOrders = contractHoldOrderDao.selectHoldOrderListByMemberId(memberId); @@ -128,7 +133,16 @@ } wholePriceData.setHoldBond(totalHoldBond); - wholePriceData.setBalance(wallet.getTotalBalance()); + + List<ContractEntrustOrderEntity> entrustOrder = contractEntrustOrderDao.selectEntrustOrderListByMemberId(wholePriceData.getMemberId()); + BigDecimal totalAmount = BigDecimal.ZERO; + if (CollUtil.isNotEmpty(entrustOrder)) { + for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) { + totalAmount.add(contractEntrustOrderEntity.getEntrustAmount()); + } + } + + wholePriceData.setBalance(wallet.getTotalBalance().subtract(totalAmount)); wholePriceData.setMemberId(memberId); OrderProducer orderProducer = SpringContextHolder.getBean(OrderProducer.class); -- Gitblit v1.9.1