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"; } 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); } 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)); } } 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)); 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)); } } 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);