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); } } 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); } src/main/java/com/xcong/excoin/modules/contract/parameter/dto/ChangeLeverRateDto.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java
New file @@ -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; } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java
New file @@ -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; } 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); } } src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java
File was deleted 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); } 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) { // 发送委托单队列消息 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()); if (i > 0) { memberWalletContractDao.increaseWalletContractBalanceById(prePaymentAmount.negate(), openFeePrice.negate(), null, walletContract.getId()); // 计算佣金 ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getOpeningFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_OPEN); if (i > 0) { return Result.ok("success"); 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); } } 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); }