From 1b3c4f0a4ae5f9d8426c9e06ef58065f964d61ea Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Fri, 05 Jun 2020 10:06:19 +0800
Subject: [PATCH] fix

---
 /dev/null                                                                                         |   11 --
 src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java          |    6 -
 src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java               |   56 ++++++++++++++
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java    |   56 ++++++++++---
 src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java         |    3 
 src/main/java/com/xcong/excoin/modules/contract/parameter/dto/ChangeLeverRateDto.java             |   24 ++++++
 src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java |    2 
 src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java                 |    7 +
 src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java           |   19 ++--
 src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java             |    9 +-
 src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java                   |   27 ++++++
 11 files changed, 178 insertions(+), 42 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java b/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
index 3a8a0a6..4593860 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
@@ -1,10 +1,7 @@
 package com.xcong.excoin.modules.contract.controller;
 
 import com.xcong.excoin.common.response.Result;
-import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto;
-import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto;
-import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto;
-import com.xcong.excoin.modules.contract.parameter.dto.SymbolDto;
+import com.xcong.excoin.modules.contract.parameter.dto.*;
 import com.xcong.excoin.modules.contract.parameter.vo.ContractMoneyInfoVo;
 import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo;
 import com.xcong.excoin.modules.contract.service.ContractHoldOrderService;
@@ -48,10 +45,10 @@
         return contractHoldOrderService.findHoldOrderList(symbol);
     }
 
-    @ApiOperation(value = "未完成--根据Id查询订单详情")
+    @ApiOperation(value = "根据Id查询持仓订单详情")
     @GetMapping(value = "/findHoldOrderDetail")
     public Result findHoldOrderDetail(@ApiParam(name = "id", value = "持仓ID", required = true, example = "1") @RequestParam(value = "id") Long id) {
-        return null;
+        return contractHoldOrderService.findHoldOrderDetailById(id);
     }
 
     @ApiOperation(value = "根据Id平仓")
@@ -74,13 +71,13 @@
 
     @ApiOperation(value = "调整保证金")
     @PostMapping(value = "/changeBond")
-    public Result changeBond(ChangeBondDto changeBondDto) {
+    public Result changeBond(@RequestBody @Validated ChangeBondDto changeBondDto) {
         return contractHoldOrderService.changeBond(changeBondDto);
     }
 
     @ApiOperation(value = "未完成--分页查询历史订单列表")
     @GetMapping(value = "/findHistoryOrderList")
-    public Result findHistoryOrderList() {
+    public Result findHistoryOrderList(@RequestBody @Validated OrderListDto orderListDto) {
         return null;
     }
 
@@ -93,4 +90,10 @@
         return contractHoldOrderService.findContractMoneyInfo(symbol);
     }
 
+    @ApiOperation(value = "调整杠杆")
+    @GetMapping(value = "/changeLeverRate")
+    public Result changeLeverRate(@RequestBody @Validated ChangeLeverRateDto changeLeverRateDto) {
+        return contractHoldOrderService.changeLeverRate(changeLeverRateDto);
+    }
+
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java b/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java
index 6843d63..1f43211 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java
@@ -2,6 +2,7 @@
 
 import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
 import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
+import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderDetailVo;
 import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
@@ -19,4 +20,6 @@
     public abstract ContractOrderEntity holdOrderToOrder(ContractHoldOrderEntity holdOrderEntity);
 
     public abstract HoldOrderListVo holdOrderToDto(ContractHoldOrderEntity holdOrderEntity);
+
+    public abstract HoldOrderDetailVo holdOrderToOrderDetailVo(ContractHoldOrderEntity holdOrderEntity);
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/ChangeLeverRateDto.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/ChangeLeverRateDto.java
new file mode 100644
index 0000000..4ba4265
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/ChangeLeverRateDto.java
@@ -0,0 +1,24 @@
+package com.xcong.excoin.modules.contract.parameter.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author wzy
+ * @Date 2020/6/5
+ **/
+@Data
+@ApiModel(value = "ChangeLeverRateDto", description = "调整杠杆接口接收参数类")
+public class ChangeLeverRateDto {
+
+    @NotNull
+    @ApiModelProperty(value = "杠杆", example = "100")
+    private int leverRate;
+
+    @NotNull
+    @ApiModelProperty(value = "币种", example = "BTC/USDT")
+    private String symbol;
+}
diff --git a/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java
new file mode 100644
index 0000000..6a35286
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java
@@ -0,0 +1,27 @@
+package com.xcong.excoin.modules.contract.parameter.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Author wzy
+ * @Date 2020/6/5
+ **/
+@Data
+@ApiModel(value = "OrderListDto", description = "历史委托订单列表接口参数接受类")
+public class OrderListDto {
+
+    @NotNull
+    @Min(1)
+    @ApiModelProperty(value = "第几页", example = "1")
+    private int pageNum;
+
+    @NotNull
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private int pageSize;
+
+}
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
new file mode 100644
index 0000000..8245d48
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java
@@ -0,0 +1,56 @@
+package com.xcong.excoin.modules.contract.parameter.vo;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author wzy
+ * @date 2020-06-01
+ **/
+@Data
+@ApiModel(value = "HoldOrderDetailVo", description = "获取持仓订单详情接口返回类")
+public class HoldOrderDetailVo {
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty("交易类型 1-市价2-限价")
+    private int tradeType;
+
+    @ApiModelProperty("币种")
+    private String symbol;
+
+    @ApiModelProperty("张数")
+    private int symbolCnt;
+
+    @ApiModelProperty("规格")
+    private BigDecimal symbolSku;
+
+    @ApiModelProperty("开仓价")
+    private BigDecimal openingPrice;
+
+    @ApiModelProperty("开仓类型 1-开多 2-开空")
+    private int openingType;
+
+    @ApiModelProperty("开仓手续费")
+    private BigDecimal openingFeeAmount;
+
+    @ApiModelProperty("保证金")
+    private BigDecimal bondAmount;
+
+    @ApiModelProperty("持仓费")
+    private BigDecimal holdAmount;
+
+    @ApiModelProperty("预估强平价")
+    private BigDecimal forceClosingPrice;
+
+    @ApiModelProperty("止损价")
+    private BigDecimal stopLossPrice;
+
+    @ApiModelProperty("止盈价")
+    private BigDecimal stopProfitPrice;
+}
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 bdaef3e..86a2dbb 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
@@ -54,6 +54,9 @@
     @ApiModelProperty(value = "可增加的最大保证金")
     private BigDecimal canAddMaxBond;
 
+    @ApiModelProperty(value = "可减少最大保证金")
+    private BigDecimal canReduceMaxBond;
+
     public BigDecimal getOpeningPrice() {
         return openingPrice.setScale(4, BigDecimal.ROUND_DOWN);
     }
@@ -69,4 +72,8 @@
     public BigDecimal getCanAddMaxBond() {
         return canAddMaxBond.setScale(4, BigDecimal.ROUND_DOWN);
     }
+
+    public BigDecimal getCanReduceMaxBond() {
+        return canReduceMaxBond.setScale(4, BigDecimal.ROUND_DOWN);
+    }
 }
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
deleted file mode 100644
index f0ca3df..0000000
--- a/src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.xcong.excoin.modules.contract.parameter.vo;
-
-import lombok.Data;
-
-/**
- * @author wzy
- * @date 2020-06-01
- **/
-@Data
-public class OrderDetailVo {
-}
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java b/src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java
index 78cea15..0e54fbc 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java
@@ -3,10 +3,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.xcong.excoin.common.response.Result;
 import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
-import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto;
-import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto;
-import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto;
-import com.xcong.excoin.modules.contract.parameter.dto.SymbolDto;
+import com.xcong.excoin.modules.contract.parameter.dto.*;
 import com.xcong.excoin.rabbit.pricequeue.OrderModel;
 import org.apache.ibatis.annotations.Param;
 
@@ -37,4 +34,8 @@
 
     public Result findContractMoneyInfo(String symbol);
 
+    public Result changeLeverRate(ChangeLeverRateDto changeLeverRateDto);
+
+    public Result findHoldOrderDetailById(Long id);
+
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
index 3e6f326..7bfdde4 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java
@@ -121,7 +121,7 @@
 
             int i = contractEntrustOrderDao.insert(entrustOrderEntity);
 
-            memberWalletContractDao.increaseWalletContractBalanceById(entrustTotalAmount.negate(), null, entrustTotalAmount, walletContract.getId());
+            memberWalletContractDao.increaseWalletContractBalanceById(entrustTotalAmount.negate(), null, entrustOrderEntity.getBondAmount(), walletContract.getId());
             if (i > 0) {
 
                 // 发送委托单队列消息
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 f6c8e47..f8b8a19 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
@@ -16,11 +16,9 @@
 import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
 import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
 import com.xcong.excoin.modules.contract.mapper.ContractHoldOrderEntityMapper;
-import com.xcong.excoin.modules.contract.parameter.dto.ChangeBondDto;
-import com.xcong.excoin.modules.contract.parameter.dto.ProfitOrLessDto;
-import com.xcong.excoin.modules.contract.parameter.dto.SubmitOrderDto;
-import com.xcong.excoin.modules.contract.parameter.dto.SymbolDto;
+import com.xcong.excoin.modules.contract.parameter.dto.*;
 import com.xcong.excoin.modules.contract.parameter.vo.ContractMoneyInfoVo;
+import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderDetailVo;
 import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo;
 import com.xcong.excoin.modules.contract.service.ContractHoldOrderService;
 import com.xcong.excoin.modules.member.dao.MemberLevelRateDao;
@@ -159,14 +157,13 @@
         contractOrderEntity.setOpeningTime(new Date());
         contractHoldOrderDao.insert(holdOrderEntity);
         int i = contractOrderDao.insert(contractOrderEntity);
-        memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), null, null, walletContract.getId());
-
-        // 计算佣金
-        ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
         if (i > 0) {
-            return Result.ok("success");
+            memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId());
+            // 计算佣金
+            ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN);
+            return Result.ok("提交成功");
         }
-        return Result.fail("fail");
+        return Result.fail("提交失败");
     }
 
     @Override
@@ -189,6 +186,7 @@
         MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
 
         List<ContractHoldOrderEntity> list = contractHoldOrderDao.selectHoldOrderListByMemberIdAndSymbol(memberEntity.getId(), symbol);
+        MemberWalletContractEntity walletContractEntity = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberEntity.getId(), CoinTypeEnum.USDT.name());
         if (CollUtil.isNotEmpty(list)) {
             BigDecimal totalProfitOrLoss = BigDecimal.ZERO;
             List<HoldOrderListVo> resultList = new ArrayList<>();
@@ -228,12 +226,17 @@
                         .divide(new BigDecimal(holdOrderEntity.getLeverRatio()), 8, BigDecimal.ROUND_DOWN);
 
                 // 可增加最大保证金
-                BigDecimal canAddMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).subtract(costPrice);
-                if (canAddMaxBond.compareTo(BigDecimal.ZERO) < 0) {
-                    canAddMaxBond = BigDecimal.ZERO;
+//                BigDecimal canAddMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).subtract(costPrice);
+//                if (canAddMaxBond.compareTo(BigDecimal.ZERO) < 0) {
+//                    canAddMaxBond = BigDecimal.ZERO;
+//                }
+                BigDecimal canReduceMaxBond = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getPrePaymentAmount());
+                if (canReduceMaxBond.compareTo(BigDecimal.ZERO) < 0) {
+                    canReduceMaxBond = BigDecimal.ZERO;
                 }
 
-                holdOrderListVo.setCanAddMaxBond(canAddMaxBond);
+                holdOrderListVo.setCanReduceMaxBond(canReduceMaxBond);
+                holdOrderListVo.setCanAddMaxBond(walletContractEntity.getAvailableBalance());
                 holdOrderListVo.setReturnRate(returnRate);
                 holdOrderListVo.setProfitOrLoss(rewardRatio);
                 resultList.add(holdOrderListVo);
@@ -509,4 +512,29 @@
         contractMoneyInfoVo.setLeverRate(rateEntity.getLevelRateUp());
         return Result.ok(contractMoneyInfoVo);
     }
+
+    @Override
+    public Result changeLeverRate(ChangeLeverRateDto changeLeverRateDto) {
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        MemberLevelRateEntity levelRateEntity = memberLevelRateDao.selectLeverRateByMemberIdAndSymbol(memberEntity.getId(), changeLeverRateDto.getSymbol());
+        levelRateEntity.setLevelRateUp(changeLeverRateDto.getLeverRate());
+        levelRateEntity.setLevelRateDown(changeLeverRateDto.getLeverRate());
+        int i = memberLevelRateDao.updateById(levelRateEntity);
+        if (i > 0) {
+            return Result.ok("调整成功");
+        }
+        return Result.fail("调整失败");
+    }
+
+    @Override
+    public Result findHoldOrderDetailById(Long id) {
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        ContractHoldOrderEntity holdOrderEntity = contractHoldOrderDao.selectHoldOrderByMemberIdAndId(memberEntity.getId(), id);
+        if (holdOrderEntity == null) {
+            return Result.fail("订单不存在");
+        }
+
+        HoldOrderDetailVo holdOrderDetailVo = ContractHoldOrderEntityMapper.INSTANCE.holdOrderToOrderDetailVo(holdOrderEntity);
+        return Result.ok(holdOrderDetailVo);
+    }
 }
diff --git a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
index 0baac30..ebba922 100644
--- a/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -134,11 +134,9 @@
             contractOrderDao.insert(contractOrderEntity);
 
             // 计算盈利或亏损后可用金额和总金额应该增加或减少的
-            BigDecimal addMoney = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningPrice()).add(profitOrLoss);
-            log.info("平仓增加金额:{}", addMoney);
+            BigDecimal addMoney = holdOrderEntity.getBondAmount().subtract(holdOrderEntity.getOpeningFeeAmount()).add(profitOrLoss);
 
-            memberWalletContractDao.increaseWalletContractBalanceById(addMoney, profitOrLoss.subtract(holdOrderEntity.getOpeningPrice()), null, walletContract.getId());
-
+            memberWalletContractDao.increaseWalletContractBalanceById(addMoney, profitOrLoss.subtract(contractOrderEntity.getOpeningFeeAmount()), null, walletContract.getId());
             // 计算佣金
             ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getClosingFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE);
         }

--
Gitblit v1.9.1