From 7dcfa12372a6cbaee0c36fd9e532e3df0a43c2ac Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Fri, 04 Mar 2022 15:12:45 +0800 Subject: [PATCH] Merge branch 'bea' of http://120.27.238.55:7000/r/exchange into bea --- src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java | 14 +++++++ src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java | 6 +++ src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java | 39 ++++++++++++++++--- src/test/java/com/xcong/excoin/TradeTest.java | 14 +++++++ src/main/java/com/xcong/excoin/modules/contract/parameter/vo/ContractMoneyInfoVo.java | 12 ++++++ src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java | 3 - src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java | 10 ++-- src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java | 6 +++ src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java | 3 + src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java | 1 src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java | 2 src/main/resources/application-prod.yml | 2 12 files changed, 96 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java b/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java index 3039c5e..d2176e7 100644 --- a/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java +++ b/src/main/java/com/xcong/excoin/modules/coin/controller/OrderCoinController.java @@ -68,11 +68,11 @@ @PostMapping(value="/submitSalesWalletCoinOrder") @SubmitRepeat public Result submitSalesWalletCoinOrder(@RequestBody @Valid SubmitSalesWalletCoinOrderDto submitSalesWalletCoinOrderDto) { - log.debug("买卖单参数[{}]", JSONObject.toJSONString(submitSalesWalletCoinOrderDto)); - String status = redisUtils.getString("bea_start"); - if ("1".equals(status)) { - return Result.fail("暂未开放"); - } + log.info("买卖单参数[{}]", JSONObject.toJSONString(submitSalesWalletCoinOrderDto)); +// String status = redisUtils.getString("bea_start"); +// if ("1".equals(status)) { +// return Result.fail("暂未开放"); +// } String symbol = submitSalesWalletCoinOrderDto.getSymbol(); Integer type = submitSalesWalletCoinOrderDto.getType(); Integer tradeType = submitSalesWalletCoinOrderDto.getTradeType(); diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/ContractMoneyInfoVo.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/ContractMoneyInfoVo.java index 8ae1d67..b4fd04d 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/ContractMoneyInfoVo.java +++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/ContractMoneyInfoVo.java @@ -17,6 +17,12 @@ @ApiModelProperty(value = "占用保证金") private BigDecimal beUsedBondAmount; + @ApiModelProperty(value = "开多占用保证金") + private BigDecimal moreBondAmount; + + @ApiModelProperty(value = "开空占用保证金") + private BigDecimal lessBondAmount; + @ApiModelProperty(value = "冻结保证金") private BigDecimal frozenBondAmount; @@ -41,6 +47,12 @@ @ApiModelProperty(value = "规格") private BigDecimal symbolSku; + @ApiModelProperty("涨跌幅") + private BigDecimal upOrDown; + + @ApiModelProperty(value = "未实现盈亏") + private BigDecimal profitOrLess; + public BigDecimal getBeUsedBondAmount() { return beUsedBondAmount.setScale(4, BigDecimal.ROUND_DOWN); } diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java index 66f370b..fd2027b 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java +++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java @@ -23,12 +23,18 @@ @ApiModelProperty("交易类型 1-市价2-限价") private int tradeType; + @ApiModelProperty("仓位类型 1-逐仓 2-全仓") + private int positionType; + @ApiModelProperty("币种") private String symbol; @ApiModelProperty("张数") private int symbolCnt; + @ApiModelProperty(value = "可平张数") + private int symbolCntSale; + @ApiModelProperty("规格") private BigDecimal symbolSku; diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java index e06bff3..700eafd 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java +++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java @@ -20,6 +20,9 @@ @ApiModelProperty(value = "订单ID", example = "1") private Long id; + @ApiModelProperty(value = "仓位类型 1-逐仓 2-全仓") + private Integer positionType; + @ApiModelProperty(value = "开仓均价", example = "9000.00") private BigDecimal openingPrice; @@ -47,6 +50,9 @@ @ApiModelProperty(value = "张数") private int symbolCnt; + @ApiModelProperty(value = "可平张数") + private int symbolCntSale; + @ApiModelProperty(value = "回报率") private BigDecimal returnRate; diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java index 2939331..b35f899 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java +++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java @@ -22,6 +22,9 @@ @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空") private int orderType; + @ApiModelProperty("仓位类型 1-逐仓 2-全仓") + private int positionType; + @ApiModelProperty("订单编号") private String orderNo; diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java index 24701bb..8977562 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java +++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java @@ -1,5 +1,6 @@ package com.xcong.excoin.modules.contract.parameter.vo; +import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -21,6 +22,9 @@ @ApiModelProperty("订单类型 1开多,2开空,3平多,4平空") private int orderType; + + @ApiModelProperty("仓位类型 1-逐仓 2-全仓") + private int positionType; @ApiModelProperty("订单状态 1成交 2撤单") private int orderStatus; @@ -63,6 +67,16 @@ @ApiModelProperty(value = "交易类型 1-市价 2-限价") private Integer tradeType; + @ApiModelProperty(value = "杠杆倍率") + private Integer leverRatio; + + @ApiModelProperty(value = "订单编号") + private String orderNo; + + public String getOrderNo() { + return StrUtil.isNotBlank(orderNo) ? orderNo.substring(orderNo.length() - 6) : ""; + } + public String getOpeningFeeAmount() { return openingFeeAmount == null ? "" : openingFeeAmount.setScale(4, BigDecimal.ROUND_DOWN).toPlainString(); } diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java index 6e4a42d..a699ab2 100644 --- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.huobi.client.model.Candlestick; import com.xcong.excoin.common.LoginUserUtils; import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; @@ -149,6 +150,7 @@ holdOrderEntity.setTradeType(ContractHoldOrderEntity.TRADE_TYPE_MARK); holdOrderEntity.setSymbol(submitOrderDto.getSymbol()); holdOrderEntity.setSymbolCnt(submitOrderDto.getSymbolCnt()); + holdOrderEntity.setSymbolCntSale(submitOrderDto.getSymbolCnt()); holdOrderEntity.setSymbolSku(lotNumber); holdOrderEntity.setLeverRatio(submitOrderDto.getLeverRatio()); holdOrderEntity.setForceClosingPrice(forceClosingPrice); @@ -467,6 +469,8 @@ // 当前持仓列表 List<ContractHoldOrderEntity> holdOrderEntities = contractHoldOrderDao.selectHoldOrderListByMemberId(memberEntity.getId()); + MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); + // 冻结保证金 -- 即委托单中的保证金之和 BigDecimal frozenBondAmount = BigDecimal.ZERO; if (CollUtil.isNotEmpty(entrustOrderEntities)) { @@ -477,6 +481,8 @@ // 占用保证金 -- 即持仓单中的保证金之和 BigDecimal beUsedBondAmount = BigDecimal.ZERO; + BigDecimal moreBondAmount = BigDecimal.ZERO; + BigDecimal lessBondAmount = BigDecimal.ZERO; // 总盈利 BigDecimal totalProfitOrLess = BigDecimal.ZERO; if (CollUtil.isNotEmpty(holdOrderEntities)) { @@ -490,10 +496,12 @@ BigDecimal profitOrLess = BigDecimal.ZERO; // 开多 if (ContractHoldOrderEntity.OPENING_TYPE_MORE == holdOrderEntity.getOpeningType()) { - profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber); + moreBondAmount = moreBondAmount.add(holdOrderEntity.getBondAmount()); + profitOrLess = newPrice.subtract(holdOrderEntity.getOpeningPrice()).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber); // 开空 } else { - profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCnt())).multiply(lotNumber); + lessBondAmount = lessBondAmount.add(holdOrderEntity.getBondAmount()); + profitOrLess = holdOrderEntity.getOpeningPrice().subtract(newPrice).multiply(new BigDecimal(holdOrderEntity.getSymbolCntSale())).multiply(lotNumber); } if (MemberEntity.IS_PROFIT_Y == memberEntity.getIsProfit()) { @@ -508,23 +516,42 @@ } } - MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name()); - MemberLevelRateEntity rateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), symbol); + ContractMoneyInfoVo contractMoneyInfoVo = new ContractMoneyInfoVo(); // 权益 BigDecimal equity = walletContractEntity.getTotalBalance().add(totalProfitOrLess); + if (equity.compareTo(BigDecimal.ZERO) <= 0) { + equity = BigDecimal.ZERO; + } - ContractMoneyInfoVo contractMoneyInfoVo = new ContractMoneyInfoVo(); - contractMoneyInfoVo.setAvailableBalance(walletContractEntity.getAvailableBalance()); + BigDecimal available = walletContractEntity.getAvailableBalance(); +// if (ContractEntrustOrderEntity.POSITION_TYPE_ALL == memberEntity.getContractPositionType()) { +// if (totalProfitOrLess.compareTo(BigDecimal.ZERO) <= 0) { +// available = available.add(totalProfitOrLess); +// if (available.compareTo(BigDecimal.ZERO) <= 0) { +// available = BigDecimal.ZERO; +// } +// } +// } + + // 获取当日k线的开盘价 + Candlestick symbolObject = (Candlestick) redisUtils.get(symbol); + BigDecimal openPrice = symbolObject.getOpen(); + BigDecimal upOrDown = newPriceSymbol.subtract(openPrice).divide(openPrice, 8, BigDecimal.ROUND_HALF_UP); contractMoneyInfoVo.setBeUsedBondAmount(beUsedBondAmount); contractMoneyInfoVo.setFrozenBondAmount(frozenBondAmount); contractMoneyInfoVo.setEquity(equity); + contractMoneyInfoVo.setAvailableBalance(available); contractMoneyInfoVo.setFeeRatio(tradeSetting.getFeeRatio()); contractMoneyInfoVo.setLeverAgeRatio(tradeSetting.getLeverageRatio()); contractMoneyInfoVo.setNewPrice(newPriceSymbol); + contractMoneyInfoVo.setUpOrDown(upOrDown); contractMoneyInfoVo.setSymbolSku(cacheSettingUtils.getSymbolSku(symbol)); contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp()); + contractMoneyInfoVo.setMoreBondAmount(moreBondAmount); + contractMoneyInfoVo.setLessBondAmount(lessBondAmount); + contractMoneyInfoVo.setProfitOrLess(totalProfitOrLess); return Result.ok(contractMoneyInfoVo); } diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java index 6e98b44..45ff0f7 100644 --- a/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java +++ b/src/main/java/com/xcong/excoin/rabbit/consumer/OperateOrderPriceConsumer.java @@ -17,8 +17,7 @@ * @author helius */ @Component -@Deprecated -@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job-contract", havingValue = "true") +@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job", havingValue = "true") public class OperateOrderPriceConsumer { diff --git a/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java b/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java index ffbc2be..b959b0e 100644 --- a/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java +++ b/src/main/java/com/xcong/excoin/rabbit/consumer/WebsocketPriceConsumer.java @@ -24,7 +24,6 @@ */ @Slf4j @Component -@Deprecated @ConditionalOnProperty(prefix = "app", name = "rabbit-consumer", havingValue = "true") public class WebsocketPriceConsumer { 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 662cd9a..d4e957b 100644 --- a/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java +++ b/src/main/java/com/xcong/excoin/rabbit/init/OrderProducerInit.java @@ -27,7 +27,7 @@ */ @Slf4j @Component -@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job-contract", havingValue = "true") +@ConditionalOnProperty(prefix = "app", name = "newest-price-update-job", havingValue = "true") @Deprecated public class OrderProducerInit { diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index dab3352..d5cbcb8 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -98,7 +98,7 @@ exchange-trade: true day-line: true other-job: true - loop-job: false + loop-job: true rabbit-consumer: true block-job: true diff --git a/src/test/java/com/xcong/excoin/TradeTest.java b/src/test/java/com/xcong/excoin/TradeTest.java index 7d71966..03fe413 100644 --- a/src/test/java/com/xcong/excoin/TradeTest.java +++ b/src/test/java/com/xcong/excoin/TradeTest.java @@ -5,11 +5,13 @@ import com.xcong.excoin.modules.coin.entity.OrderCoinsEntity; import com.xcong.excoin.modules.coin.service.OrderCoinService; import com.xcong.excoin.trade.CoinTrader; +import com.xcong.excoin.trade.CoinTraderFactory; import com.xcong.excoin.utils.CoinTypeConvert; import com.xcong.excoin.utils.RedisUtils; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; @@ -45,4 +47,16 @@ public void gbz() { System.out.println(redisUtils.getString(CoinTypeConvert.convertToKey("GBZ"+"/USDT"))); } + + + @Resource + private CoinTraderFactory factory; + + @Test + public void traderTest() { + OrderCoinsEntity coinsEntity = orderCoinsDao.selectById(19); + String symbol = coinsEntity.getSymbol(); + CoinTrader trader = factory.getTrader(symbol); + trader.trade(coinsEntity); + } } -- Gitblit v1.9.1