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