Helius
2021-01-29 27e305d2548498ef7747b389d74fa0335275bd97
src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
@@ -1,9 +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;
@@ -51,25 +67,25 @@
        Long orderId = order.getOrderId();
        queue.add(new DescBigDecimal(price));
        log.info("原有:{}", JSONObject.toJSONString(orderMap));
//        log.info("原有:{}", JSONObject.toJSONString(orderMap));
        removeExistOrder(type, orderId, orderMap);
        log.info("删除后:{}", JSONObject.toJSONString(orderMap));
//        log.info("删除后:{}", JSONObject.toJSONString(orderMap));
        if (orderMap.containsKey(price)) {
            // 有这个价的key
            List<OrderModel> list = orderMap.get(price);
            // 判断这个单的这个类型是否有
//            if (CollectionUtils.isNotEmpty(list)) {
                // 新增
                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
                list.add(orderModel);
//            }
        } else {
            List<OrderModel> list = new ArrayList<OrderModel>();
            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
            list.add(orderModel);
            orderMap.put(price, list);
        }
        log.info("调整后:{}", JSONObject.toJSONString(orderMap));
//        log.info("调整后:{}", JSONObject.toJSONString(orderMap));
    }
@@ -85,26 +101,26 @@
        int type = order.getType();
        Long orderId = order.getOrderId();
        queue.add(new AscBigDecimal(price));
        log.info("原有:{}", JSONObject.toJSONString(orderMap));
//        log.info("原有:{}", JSONObject.toJSONString(orderMap));
        // 需要找到这个订单的原始的单进行处理
        removeExistOrder(type, orderId, orderMap);
        log.info("删除后:{}", JSONObject.toJSONString(orderMap));
//        log.info("删除后:{}", JSONObject.toJSONString(orderMap));
        if (orderMap.containsKey(price)) {
            // 有这个价的key
            List<OrderModel> list = orderMap.get(price);
            // 判断这个单的这个类型是否有
//            if (CollectionUtils.isNotEmpty(list)) {
                // 新增
                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
                OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
                list.add(orderModel);
//            }
        } else {
            List<OrderModel> list = new ArrayList<OrderModel>();
            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo());
            OrderModel orderModel = new OrderModel(orderId, type, price, null,order.getOperateNo(), order.getMemberId());
            list.add(orderModel);
            orderMap.put(price, list);
        }
        log.info("调整后:{}", JSONObject.toJSONString(orderMap));
//        log.info("调整后:{}", JSONObject.toJSONString(orderMap));
    }
    private static void removeExistOrder(Integer type, Long orderId, Map<String, List<OrderModel>> orderMap) {
@@ -129,4 +145,57 @@
        }
    }
    /**
     * 全仓价格处理
     *
     * @param memberId
     */
    public static void wholePriceDataOperation(Long memberId) {
        Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
        RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
        ContractHoldOrderDao contractHoldOrderDao = SpringContextHolder.getBean(ContractHoldOrderDao.class);
        ContractEntrustOrderDao contractEntrustOrderDao = SpringContextHolder.getBean(ContractEntrustOrderDao.class);
        MemberWalletContractDao memberWalletContractDao = SpringContextHolder.getBean(MemberWalletContractDao.class);
        List<ContractHoldOrderEntity> holdOrders = contractHoldOrderDao.selectHoldOrderListByMemberId(memberId);
        if (CollUtil.isEmpty(holdOrders)) {
            if (dataModelMap.get(memberId.toString()) != null) {
                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(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);
        dataModelMap.put(wholePriceData.getMemberId().toString(), wholePriceData);
        redisUtils.set(AppContants.WHOLE_BOMB_MAP, JSONObject.toJSONString(dataModelMap));
    }
}