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