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