xiaoyong931011
2021-03-05 b6c814cb99193bd203ed55aa3ebf4b2093bb6d78
src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
@@ -1,11 +1,25 @@
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;
import com.xcong.excoin.utils.SpringContextHolder;
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;
@@ -131,15 +145,60 @@
        }
    }
    public static void wholePriceDataOperation(WholePriceDataModel wholePriceData) {
    /**
     * 全仓价格处理
     *
     * @param memberId
     */
    public static void wholePriceDataOperation(Long memberId) {
        Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
        log.info("操作前:{}", dataModelMap);
        RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
        WholePriceDataModel isExistData = dataModelMap.get(wholePriceData.getMemberId().toString());
        if (isExistData != null) {
            dataModelMap.remove(wholePriceData.getMemberId().toString());
        ContractHoldOrderDao contractHoldOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
        ContractEntrustOrderDao contractEntrustOrderDao = SpringContextHolder.getBean(ContractEntrustOrderDao.class);
        MemberWalletContractDao memberWalletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class);
        List<ContractHoldOrderEntity> holdOrders = contractHoldOrderDao.selectHoldOrderListByMemberId(memberId);
        log.info("持仓数量:{}", holdOrders.size());
        if (CollUtil.isEmpty(holdOrders)) {
            if (dataModelMap.get(memberId.toString()) != null) {
                log.info("平仓后执行");
                dataModelMap.remove(memberId.toString());
                redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
            }
            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(memberId);
        BigDecimal totalAmount = BigDecimal.ZERO;
        if (CollUtil.isNotEmpty(entrustOrder)) {
            for (ContractEntrustOrderEntity contractEntrustOrderEntity : entrustOrder) {
                totalAmount = totalAmount.add(contractEntrustOrderEntity.getEntrustAmount());
            }
        }
        wholePriceData.setBalance(wallet.getTotalBalance().subtract(totalAmount));
        wholePriceData.setMemberId(memberId);
        dataModelMap.put(wholePriceData.getMemberId().toString(), wholePriceData);
        redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
        log.info("dataModelMap为:{}", dataModelMap);
    }
}