xiaoyong931011
2020-06-05 95da7870f87ec42dbd572aba040492c881fe0b9c
Merge branch 'master' of https://gitee.com/chonggaoxiao/new_excoin.git
5 files added
12 files modified
460 ■■■■ changed files
src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java 35 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/mapper/ContractHoldOrderEntityMapper.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/mapper/ContractOrderEntityMapper.java 28 ●●●●● 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 62 ●●●●● 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 72 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java 57 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/ContractHoldOrderService.java 13 ●●●●● 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 85 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java 15 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/contract/ContractOrderDao.xml 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/configurations/RabbitMqConfig.java
@@ -46,10 +46,10 @@
    public static final String QUEUE_COINOUT = "QUEUE_COINOUT_NEW";
    //价格操作
    public static final String QUEUE_PRICEOPERATE = "QUEUE_PRICEOPERATE";
    public static final String QUEUE_PRICEOPERATE = "QUEUE_PRICEOPERATE_NEW";
    // 平仓队列
    public static final String QUEUE_CLOSETRADE = "QUEUE_CLOSETRADE";
    public static final String QUEUE_CLOSETRADE = "QUEUE_CLOSETRADE_NEW";
    // 开多止盈路由键
src/main/java/com/xcong/excoin/modules/contract/controller/ContractOrderController.java
@@ -1,12 +1,10 @@
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.parameter.vo.OrderListVo;
import com.xcong.excoin.modules.contract.service.ContractHoldOrderService;
import com.xcong.excoin.modules.contract.service.ContractOrderService;
import com.xcong.excoin.rabbit.producer.OrderProducer;
@@ -48,10 +46,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,14 +72,17 @@
    @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() {
        return null;
    @ApiOperation(value = "分页查询历史订单列表")
    @ApiResponses({
            @ApiResponse(code = 0, message = "success", response = OrderListVo.class)
    })
    @PostMapping(value = "/findHistoryOrderList")
    public Result findHistoryOrderList(@RequestBody @Validated OrderListDto orderListDto) {
        return contractHoldOrderService.findOrderList(orderListDto);
    }
    @ApiOperation(value = "获取合约页面资产信息")
@@ -93,4 +94,16 @@
        return contractHoldOrderService.findContractMoneyInfo(symbol);
    }
    @ApiOperation(value = "调整杠杆")
    @PostMapping(value = "/changeLeverRate")
    public Result changeLeverRate(@RequestBody @Validated ChangeLeverRateDto changeLeverRateDto) {
        return contractHoldOrderService.changeLeverRate(changeLeverRateDto);
    }
    @ApiOperation(value = "查询历史委托订单详情")
    @GetMapping(value = "/findOrderDetailById")
    public Result findOrderDetailById(@ApiParam(name = "id", value = "订单id", required = true, example = "1") @RequestParam(value = "id") Long id) {
        return contractHoldOrderService.findOrderDetailById(id);
    }
}
src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java
@@ -1,10 +1,17 @@
package com.xcong.excoin.modules.contract.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import org.apache.ibatis.annotations.Param;
/**
 * @author helius
 */
public interface ContractOrderDao extends BaseMapper<ContractOrderEntity> {
    public IPage<ContractOrderEntity> selectContractOrderInPage(Page<ContractOrderEntity> page, Long memberId);
    public ContractOrderEntity selectOrderDetailByIdAndMemberId(@Param("id") Long id, @Param("memberId") Long memberId);
}
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;
@@ -16,7 +17,10 @@
    public static final ContractHoldOrderEntityMapper INSTANCE = Mappers.getMapper(ContractHoldOrderEntityMapper.class);
    @Mapping(target = "orderType", source = "openingType")
    @Mapping(target = "openingTime", source = "createTime")
    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/mapper/ContractOrderEntityMapper.java
New file
@@ -0,0 +1,28 @@
package com.xcong.excoin.modules.contract.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.contract.parameter.vo.OrderDetailVo;
import com.xcong.excoin.modules.contract.parameter.vo.OrderListVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
 * @author wzy
 * @date 2020-06-05
 **/
@Mapper
public abstract class ContractOrderEntityMapper {
    public static final ContractOrderEntityMapper INSTANCE = Mappers.getMapper(ContractOrderEntityMapper.class);
    public abstract OrderListVo orderEntityToOrderListVo(ContractOrderEntity orderEntity);
    public abstract List<OrderListVo> orderEntitiesToOrderListVo(List<ContractOrderEntity> orderEntities);
    public abstract Page<OrderListVo> pageEntityToPageVo(IPage<ContractOrderEntity> orderEntityIPage);
    public abstract OrderDetailVo entityToDetailVo(ContractOrderEntity orderEntity);
}
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,62 @@
package com.xcong.excoin.modules.contract.parameter.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @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;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("开仓时间")
    private Date openingTime;
    @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
@@ -1,11 +1,81 @@
package com.xcong.excoin.modules.contract.parameter.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @author wzy
 * @date 2020-06-01
 * @date 2020-06-05
 **/
@Data
@ApiModel(value = "OrderDetailVo", description = "历史委托订单详情接口返回参数类")
public class OrderDetailVo {
    @ApiModelProperty("交易类型 1-市价2-限价")
    private int tradeType;
    @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空")
    private int orderType;
    @ApiModelProperty("订单编号")
    private String orderNo;
    @ApiModelProperty("委托开仓价")
    private BigDecimal entrustOpeningPrice;
    @ApiModelProperty("委托时间")
    private Date entrustTime;
    @ApiModelProperty("币种")
    private String symbol;
    @ApiModelProperty("张数")
    private int symbolCnt;
    @ApiModelProperty("平仓价")
    private BigDecimal closingPrice;
    @ApiModelProperty("平仓手续费")
    private BigDecimal closingFeeAmount;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("平仓时间")
    private Date closingTime;
    @ApiModelProperty("平仓类型 2平多3平空4爆仓平多5爆仓平空6止盈平多7止盈平空8止损平多9止损平空")
    private int closingType;
    @ApiModelProperty("止损价")
    private BigDecimal stopLosePrice;
    @ApiModelProperty("止盈价")
    private BigDecimal stopProfitPrice;
    @ApiModelProperty("盈亏金额")
    private BigDecimal rewardAmount;
    @ApiModelProperty("盈亏比例")
    private BigDecimal rewardRatio;
    @ApiModelProperty("开仓价")
    private BigDecimal openingPrice;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("开仓时间")
    private Date openingTime;
    @ApiModelProperty("开仓手续费")
    private BigDecimal openingFeeAmount;
    @ApiModelProperty("保证金")
    private BigDecimal bondAmount;
    @ApiModelProperty("持仓费")
    private BigDecimal holdAmount;
}
src/main/java/com/xcong/excoin/modules/contract/parameter/vo/OrderListVo.java
New file
@@ -0,0 +1,57 @@
package com.xcong.excoin.modules.contract.parameter.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @author wzy
 * @date 2020-06-05
 **/
@Data
@ApiModel(value = "OrderListVo", description = "历史委托订单接口返回参数类")
public class OrderListVo {
    @ApiModelProperty("订单ID")
    private Long id;
    @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空")
    private int orderType;
    @ApiModelProperty("开仓均价")
    private BigDecimal openingPrice;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("开仓价")
    private Date openingTime;
    @ApiModelProperty("开仓手续费")
    private BigDecimal openingFeeAmount;
    @ApiModelProperty("保证金")
    private BigDecimal bondAmount;
    @ApiModelProperty("张数")
    private int symbolCnt;
    @ApiModelProperty("已实现盈亏")
    private BigDecimal rewardRatio;
    @ApiModelProperty("平仓类型 2平多3平空4爆仓平多5爆仓平空6止盈平多7止盈平空8止损平多9止损平空")
    private int closingType;
    @ApiModelProperty("平仓手续费")
    private BigDecimal closingFeeAmount;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("平仓时间")
    private Date closingTime;
    @ApiModelProperty("强平价")
    private BigDecimal forceClosingPrice;
}
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,12 @@
    public Result findContractMoneyInfo(String symbol);
    public Result changeLeverRate(ChangeLeverRateDto changeLeverRateDto);
    public Result findHoldOrderDetailById(Long id);
    public Result findOrderList(OrderListDto orderListDto);
    public Result findOrderDetailById(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
@@ -3,6 +3,8 @@
import cn.hutool.core.collection.CollUtil;
import com.alibaba.druid.sql.visitor.functions.If;
import com.alibaba.fastjson.JSONObject;
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.xcong.excoin.common.LoginUserUtils;
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
@@ -16,12 +18,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.vo.ContractMoneyInfoVo;
import com.xcong.excoin.modules.contract.parameter.vo.HoldOrderListVo;
import com.xcong.excoin.modules.contract.mapper.ContractOrderEntityMapper;
import com.xcong.excoin.modules.contract.parameter.dto.*;
import com.xcong.excoin.modules.contract.parameter.vo.*;
import com.xcong.excoin.modules.contract.service.ContractHoldOrderService;
import com.xcong.excoin.modules.member.dao.MemberLevelRateDao;
import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
@@ -159,14 +158,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 +187,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 +227,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);
@@ -335,11 +339,11 @@
            if (stopProfitPrice != null) {
                if (newPrice.compareTo(openPrice) > 0) {
                    if (stopProfitPrice.compareTo(openPrice) > 0) {
                        return Result.fail("止损价必须低于开仓价");
                        return Result.fail("止盈价必须低于开仓价");
                    }
                } else {
                    if (stopProfitPrice.compareTo(newPrice) > 0) {
                        return Result.fail("止损价必须低于当前价");
                        return Result.fail("止盈价必须低于当前价");
                    }
                }
            }
@@ -384,7 +388,6 @@
            producer.sendPriceOperate(JSONObject.toJSONString(model));
            return Result.ok("设置成功");
        }
        return Result.fail("设置失败");
    }
@@ -509,4 +512,50 @@
        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);
    }
    @Override
    public Result findOrderList(OrderListDto orderListDto) {
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Page<ContractOrderEntity> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize());
        IPage<ContractOrderEntity> list = contractOrderDao.selectContractOrderInPage(page, memberEntity.getId());
        Page<OrderListVo> result = ContractOrderEntityMapper.INSTANCE.pageEntityToPageVo(list);
        return Result.ok(result);
    }
    @Override
    public Result findOrderDetailById(Long id) {
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        ContractOrderEntity contractOrderEntity = contractOrderDao.selectOrderDetailByIdAndMemberId(id, memberEntity.getId());
        if (contractOrderEntity == null) {
            return Result.fail("订单不存在");
        }
        OrderDetailVo orderDetailVo = ContractOrderEntityMapper.INSTANCE.entityToDetailVo(contractOrderEntity);
        return Result.ok(orderDetailVo);
    }
}
src/main/java/com/xcong/excoin/modules/contract/service/impl/RabbitOrderServiceImpl.java
@@ -134,13 +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);
            walletContract.setFrozenBalance(walletContract.getFrozenBalance().subtract(holdOrderEntity.getBondAmount()));
            walletContract.setAvailableBalance(walletContract.getAvailableBalance().add(addMoney));
            walletContract.setTotalBalance(walletContract.getTotalBalance().add(addMoney));
            memberWalletContractDao.increaseWalletContractBalanceById(addMoney, profitOrLoss.subtract(contractOrderEntity.getOpeningFeeAmount()), null, walletContract.getId());
            // 计算佣金
            ThreadPoolUtils.calReturnMoney(memberEntity.getId(), contractOrderEntity.getClosingFeeAmount(), contractOrderEntity, AgentReturnEntity.ORDER_TYPE_CLOSE);
        }
src/main/java/com/xcong/excoin/modules/home/service/impl/MemberQuickBuySaleServiceImpl.java
@@ -70,7 +70,7 @@
        MemberQuickBuySaleVo memberQuickBuySaleVo = new MemberQuickBuySaleVo();
        memberQuickBuySaleVo.setId(memberQuickBuySaleEntity.getId());
        // 返回前台付款方式
        return Result.ok(memberQuickBuySaleVo);
        return Result.ok("提交成功",memberQuickBuySaleVo);
    }
    @Override
@@ -183,19 +183,6 @@
        MemberQuickBuySaleEntity memberQuickBuySaleEntity = memberQuickBuySaleDao.selectByIdAndMemberId(member.getId(),id);
        memberQuickBuySaleEntity.setOrderStatus(MemberQuickBuySaleEntity.CHARGE_STATUS_CANCEL_USER);
        memberQuickBuySaleDao.updateById(memberQuickBuySaleEntity);
        // 判断是否存在足够余额
        MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
        boolean flag = true;
        while(flag) {
            walletCoin.setAvailableBalance(walletCoin.getAvailableBalance().add(memberQuickBuySaleEntity.getAmountUsdt()));
            walletCoin.setFrozenBalance(walletCoin.getFrozenBalance().subtract(memberQuickBuySaleEntity.getAmountUsdt()));
            int i = memberWalletCoinDao.updateById(walletCoin);
            if(i>0) {
                flag = false;
            }
            walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(),CoinTypeEnum.USDT.toString());
        }
        return Result.ok("成功");
    }
}
src/main/resources/mapper/contract/ContractOrderDao.xml
@@ -2,4 +2,14 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xcong.excoin.modules.contract.dao.ContractOrderDao">
    <select id="selectContractOrderInPage" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity">
        select * from contract_order where member_id=#{memberId}
        order by create_time desc
    </select>
    <select id="selectOrderDetailByIdAndMemberId" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity">
        select * from contract_order where id=#{id} and member_id=#{memberId}
    </select>
</mapper>