xiaoyong931011
2021-01-29 33a69c65e1f6701bd29ef74d0681dbbe9a21cea7
Merge branch 'whole_new' of https://gitee.com/chonggaoxiao/new_excoin.git into whole_new
6 files modified
43 ■■■■ changed files
src/main/java/com/xcong/excoin/common/contants/AppContants.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/rabbit/pricequeue/WebsocketPriceService.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/CalculateUtil.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java 16 ●●●●● patch | view | raw | blame | history
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);