From d23645e976981bc9b670eea1d469fe8a36be309c Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Wed, 17 Apr 2024 17:19:53 +0800
Subject: [PATCH] 55测试环境

---
 src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java |   94 +++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 83 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java b/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
index d936325..120acf3 100644
--- a/src/main/java/com/xcong/excoin/rabbit/pricequeue/OrderOperatePriceService.java
+++ b/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;
@@ -26,7 +42,7 @@
         // 【1:买入委托2:开多3:开空4:平多5:平空6:爆仓平多7:爆仓平空8:撤单9:止盈平多10:止盈平空11:止损平多12:止损平空】
         int type = orderModel.getType();
         Map<String, List<OrderModel>> orderMap = PricePriorityQueue.getOrderMap(orderModel.getSymbol(), type);
-        if (type == 12 || type == 9 || type == 7 || type == 3) {
+        if (type == 12 || type == 9 || type == 7 || type == 3 || type == 4) {
             // 需要价格涨的
             PriorityBlockingQueue<AscBigDecimal> queue = PricePriorityQueue.getQueueAsc(orderModel.getSymbol());
             dealPriceAsc(orderModel, orderMap, queue);
@@ -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,60 @@
         }
     }
 
+    /**
+     * 全仓价格处理
+     *
+     * @param memberId
+     */
+    public static void wholePriceDataOperation(Long memberId) {
+        Map<String, WholePriceDataModel> dataModelMap = WholeDataQueue.MAP;
+        log.info("操作前:{}", dataModelMap);
+        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);
+        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);
+    }
+
 }

--
Gitblit v1.9.1