From 5677479567a47c14ee091770170e4c7e01bbf31c Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Sat, 29 Aug 2020 17:17:04 +0800 Subject: [PATCH] modify --- src/test/java/com/xcong/excoin/WholeTest.java | 19 +++++++++ src/main/resources/mapper/contract/ContractHoldOrderDao.xml | 9 ++++ src/main/java/com/xcong/excoin/modules/contract/dao/ContractHoldOrderDao.java | 3 + src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java | 62 ++++++++++++++++++++++++------- src/main/java/com/xcong/excoin/utils/CalculateUtil.java | 2 - 5 files changed, 79 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/contract/dao/ContractHoldOrderDao.java b/src/main/java/com/xcong/excoin/modules/contract/dao/ContractHoldOrderDao.java index 9994454..aecc049 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/dao/ContractHoldOrderDao.java +++ b/src/main/java/com/xcong/excoin/modules/contract/dao/ContractHoldOrderDao.java @@ -6,6 +6,7 @@ import org.apache.ibatis.annotations.Param; import org.web3j.abi.datatypes.Int; +import java.util.HashMap; import java.util.List; /** @@ -51,4 +52,6 @@ public List<ContractHoldOrderEntity> selectHoldOrderListForWholeByMemberIdAndSymbol(@Param("memberId") Long memberId, @Param("symbol") String symbol); + public List<HashMap<String, Object>> selectAllWholeOrderMemberIdAndSymbol(); + } diff --git a/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java b/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java index ad8f3e0..94d6e76 100644 --- a/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java +++ b/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java @@ -1,13 +1,17 @@ package com.xcong.excoin.rabbit.init; +import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; 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.member.dao.MemberDao; +import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.rabbit.pricequeue.OrderModel; import com.xcong.excoin.rabbit.producer.OrderProducer; +import com.xcong.excoin.utils.CalculateUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +22,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.HashMap; import java.util.List; /** @@ -38,6 +43,8 @@ @Resource private OrderProducer producer; + @Resource + private MemberDao memberDao; @PostConstruct public void initOrder() { @@ -56,13 +63,15 @@ // 9:止盈平多10:止盈平空11:止损平多12:止损平空 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == openingType) { // 开多 发送开多止损 止盈 爆仓 - // 爆仓价 - BigDecimal forceSetPrice = order.getForceClosingPrice(); - if (forceSetPrice != null) { - if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) { - OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceSetPrice.toPlainString(), - order.getSymbol(), order.getOperateNo()); - producer.sendPriceOperate(JSONObject.toJSONString(model)); + if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + // 爆仓价 + BigDecimal forceSetPrice = order.getForceClosingPrice(); + if (forceSetPrice != null) { + if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) { + OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_MORE_BOMB.getValue(), forceSetPrice.toPlainString(), + order.getSymbol(), order.getOperateNo()); + producer.sendPriceOperate(JSONObject.toJSONString(model)); + } } } // 止损 @@ -85,12 +94,14 @@ } else { // 开空 发送开空止损 止盈 爆仓 // 爆仓价 - BigDecimal forceSetPrice = order.getForceClosingPrice(); - if (forceSetPrice != null) { - if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) { - OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceSetPrice.toPlainString(), - order.getSymbol(), order.getOperateNo()); - producer.sendPriceOperate(JSONObject.toJSONString(model)); + if (order.getPositionType() == ContractEntrustOrderEntity.POSITION_TYPE_ADD) { + BigDecimal forceSetPrice = order.getForceClosingPrice(); + if (forceSetPrice != null) { + if (forceSetPrice.compareTo(BigDecimal.ZERO) >= 0) { + OrderModel model = new OrderModel(order.getId(), RabbitPriceTypeEnum.CLOSE_LESS_BOMB.getValue(), forceSetPrice.toPlainString(), + order.getSymbol(), order.getOperateNo()); + producer.sendPriceOperate(JSONObject.toJSONString(model)); + } } } // 止损 @@ -114,6 +125,21 @@ } } + // 全仓持仓 + List<HashMap<String, Object>> wholeHoldOrders = contractHoldOrderDao.selectAllWholeOrderMemberIdAndSymbol(); + if (CollUtil.isNotEmpty(wholeHoldOrders)) { + MemberEntity memberEntity = null; + for (HashMap<String, Object> wholeHoldOrder : wholeHoldOrders) { + Long memberId = (Long) wholeHoldOrder.get("member_id"); + String symbol = (String) wholeHoldOrder.get("symbol"); + if (memberEntity == null || !memberId.equals(memberEntity.getId())) { + memberEntity = memberDao.selectById(memberId); + } + + CalculateUtil.getForceSetPriceForWhole(symbol, memberEntity); + } + } + if (CollectionUtils.isNotEmpty(entrustOrderEntities)) { for (ContractEntrustOrderEntity order : entrustOrderEntities) { // 开多1,开空 2 @@ -127,10 +153,18 @@ entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); - } else { + } else if (ContractEntrustOrderEntity.ENTRUST_TYPE_OPEN_LESS == entrustType){ model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_OPEN_LESS.getValue(), entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), order.getSymbol()); + } else if (ContractEntrustOrderEntity.ENTRUST_TYPE_CLOSE_MORE == entrustType) { + model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_MORE.getValue(), + entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), + order.getSymbol()); + } else { + model = new OrderModel(order.getId(), RabbitPriceTypeEnum.ENTRUST_CLOSE_LESS.getValue(), + entrustPrice.setScale(8, RoundingMode.HALF_UP).toPlainString(), + order.getSymbol()); } producer.sendPriceOperate(JSONObject.toJSONString(model)); } diff --git a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java index 73e8392..8f24589 100644 --- a/src/main/java/com/xcong/excoin/utils/CalculateUtil.java +++ b/src/main/java/com/xcong/excoin/utils/CalculateUtil.java @@ -118,13 +118,11 @@ subCnt = maxCnt - holdOrderEntity.getSymbolCntSale(); } - log.info("--{}, {}, {}, {}", maxCnt, subCnt, openPrice, type); feeAmount = feeAmount.add(holdOrderEntity.getOpeningFeeAmount()); sku = holdOrderEntity.getSymbolSku(); } BigDecimal forceSetPrice = BigDecimal.ZERO; if (subCnt != 0) { - log.info("--->{}, {}, {}, {}, {}", openPrice, subCnt, sku, type, maxCnt); forceSetPrice = getForceSetPrice(walletContract.getTotalBalance().subtract(feeAmount), openPrice, subCnt, sku, type, memberEntity); } diff --git a/src/main/resources/mapper/contract/ContractHoldOrderDao.xml b/src/main/resources/mapper/contract/ContractHoldOrderDao.xml index 463ccbf..d52e599 100644 --- a/src/main/resources/mapper/contract/ContractHoldOrderDao.xml +++ b/src/main/resources/mapper/contract/ContractHoldOrderDao.xml @@ -65,4 +65,13 @@ and position_type=2 order by create_time desc </select> + + <select id="selectAllWholeOrderMemberIdAndSymbol" resultType="java.util.HashMap"> + select + member_id, + symbol + from contract_hold_order + where position_type=2 + group by member_id, symbol + </select> </mapper> \ No newline at end of file diff --git a/src/test/java/com/xcong/excoin/WholeTest.java b/src/test/java/com/xcong/excoin/WholeTest.java index 567ee1c..8c1ab3a 100644 --- a/src/test/java/com/xcong/excoin/WholeTest.java +++ b/src/test/java/com/xcong/excoin/WholeTest.java @@ -1,5 +1,6 @@ package com.xcong.excoin; +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; @@ -22,7 +23,9 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author wzy @@ -119,4 +122,20 @@ CalculateUtil.getForceSetPriceForWhole("BTC/USDT", memberEntity); } + @Test + public void initOrderTest() { + List<HashMap<String, Object>> wholeHoldOrders = contractHoldOrderDao.selectAllWholeOrderMemberIdAndSymbol(); + if (CollUtil.isNotEmpty(wholeHoldOrders)) { + MemberEntity memberEntity = null; + for (HashMap<String, Object> wholeHoldOrder : wholeHoldOrders) { + Long memberId = (Long) wholeHoldOrder.get("member_id"); + String symbol = (String) wholeHoldOrder.get("symbol"); + if (memberEntity == null || !memberId.equals(memberEntity.getId())) { + memberEntity = memberDao.selectById(memberId); + } + System.out.println(memberId + "-----" + symbol); + } + } + } + } -- Gitblit v1.9.1