xiaoyong931011
2021-01-29 9816994a2d9b48c6ae0e429b3d6d86a89caa5bd5
Merge branch 'whole_new' of https://gitee.com/chonggaoxiao/new_excoin.git into whole_new
4 files modified
112 ■■■■■ changed files
src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java 3 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java 54 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java 46 ●●●●● patch | view | raw | blame | history
src/test/java/com/xcong/excoin/WholeTest.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java
@@ -46,10 +46,9 @@
    @RabbitListener(queues = RabbitMqConfig.QUEUE_WHOLE_PRICE)
    public void onMessageWholePrice(Message message, Channel channel) {
        String content = new String(message.getBody());
        WholePriceDataModel wholePriceData = JSONObject.parseObject(content, WholePriceDataModel.class);
        log.info("我收到了用户的全仓价格消息 : {}", content);
        OrderOperatePriceService.wholePriceDataOperation(wholePriceData);
        OrderOperatePriceService.wholePriceDataOperation(Long.parseLong(content));
    }
src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
@@ -1,7 +1,17 @@
package com.xcong.excoin.rabbit.pricequeue;
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.entity.ContractEntrustOrderEntity;
import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper;
import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.rabbit.pricequeue.whole.HoldOrderDataModel;
import com.xcong.excoin.rabbit.pricequeue.whole.WholeDataQueue;
import com.xcong.excoin.rabbit.pricequeue.whole.WholePriceDataModel;
import com.xcong.excoin.utils.RedisUtils;
@@ -9,6 +19,7 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -134,16 +145,49 @@
        }
    }
    public static void wholePriceDataOperation(WholePriceDataModel wholePriceData) {
    /**
     * 全仓价格处理
     *
     * @param memberId
     */
    public static void wholePriceDataOperation(Long memberId) {
        RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
        Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
        ContractHoldOrderDao contractHoldOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
        ContractEntrustOrderDao contractEntrustOrderDao = SpringContextHolder.getBean(ContractEntrustOrderDao.class);
        WholePriceDataModel isExistData = dataModelMap.get(wholePriceData.getMemberId().toString());
        if (isExistData != null) {
            dataModelMap.remove(wholePriceData.getMemberId().toString());
        MemberWalletContractDao memberWalletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class);
        List<ContractHoldOrderEntity> holdOrders = contractHoldOrderDao.selectHoldOrderListByMemberId(memberId);
        if (CollUtil.isEmpty(holdOrders)) {
            return;
        }
        MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name());
        WholePriceDataModel wholePriceData = new WholePriceDataModel();
        List<HoldOrderDataModel> holdOrderDataModels = ContractHoldOrderEntityMapper.INSTANCE.entitiesToDataModels(holdOrders);
        wholePriceData.setList(holdOrderDataModels);
        BigDecimal totalHoldBond = BigDecimal.ZERO;
        for (ContractHoldOrderEntity holdOrder : holdOrders) {
            totalHoldBond = totalHoldBond.add(holdOrder.getHoldBond() == null ? BigDecimal.ZERO : holdOrder.getHoldBond());
        }
        wholePriceData.setHoldBond(totalHoldBond);
        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);
        Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
        dataModelMap.put(wholePriceData.getMemberId().toString(), wholePriceData);
        redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
src/main/java/com/xcong/excoin/utils/ThreadPoolUtils.java
@@ -108,48 +108,8 @@
     * @param memberId
     */
    public static void sendWholePrice(@NotNull Long memberId) {
        EXECUTOR.execute(new Runnable() {
            @Override
            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);
                if (CollUtil.isEmpty(holdOrders)) {
                    return;
                }
                MemberWalletContractEntity wallet = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, CoinTypeEnum.USDT.name());
                WholePriceDataModel wholePriceData = new WholePriceDataModel();
                List<HoldOrderDataModel> holdOrderDataModels = ContractHoldOrderEntityMapper.INSTANCE.entitiesToDataModels(holdOrders);
                wholePriceData.setList(holdOrderDataModels);
                BigDecimal totalHoldBond = BigDecimal.ZERO;
                for (ContractHoldOrderEntity holdOrder : holdOrders) {
                    totalHoldBond = totalHoldBond.add(holdOrder.getHoldBond() == null ? BigDecimal.ZERO : holdOrder.getHoldBond());
                }
                wholePriceData.setHoldBond(totalHoldBond);
                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);
                orderProducer.sendWholePrice(JSONObject.toJSONString(wholePriceData));
            }
        });
        log.info("全仓操作价格");
        OrderProducer orderProducer = SpringContextHolder.getBean(OrderProducer.class);
        orderProducer.sendWholePrice(memberId.toString());
    }
}
src/test/java/com/xcong/excoin/WholeTest.java
@@ -174,4 +174,13 @@
        websocketPriceService.wholeBomb();
    }
    @Test
    public void wholeForceTest() {
        // 3153.33181635
//        System.out.println(new BigDecimal("9921.69458495").subtract(new BigDecimal("6768.36276860")));
        // 33684.14725218
    }
}