fix
Helius
2020-06-05 1b3c4f0a4ae5f9d8426c9e06ef58065f964d61ea
fix
3 files added
1 files deleted
7 files modified
220 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/parameter/dto/ChangeLeverRateDto.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/parameter/dto/OrderListDto.java 27 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderDetailVo.java 56 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/parameter/vo/HoldOrderListVo.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderDetailVo.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractEntrustOrderServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/ContractHoldOrderServiceImpl.java 56 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java 6 ●●●●● patch | view | raw | blame | history
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());
        // 计算佣金
        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);
    }
}
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);
        }