xiaoyong931011
2020-07-30 7fdce27927b4dfee1e1c8bfd0755e1e5dd28ce93
20200730  代码提交
5 files added
8 files modified
640 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java 78 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerSettingDao.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dto/CancelDocumentaryOrderSetDto.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dto/DocumentaryOrderSetDto.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dto/UpdateDocumentaryOrderSetDto.java 38 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java 356 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderInfoVo.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderSetInfoVo.java 32 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml 10 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/documentary/FollowFollowerSettingDao.xml 18 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java
@@ -12,13 +12,19 @@
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
import com.xcong.excoin.modules.coin.parameter.vo.MemberAgentIntoInfoVo;
import com.xcong.excoin.modules.documentary.dto.CancelDocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.dto.FollowRecordsDto;
import com.xcong.excoin.modules.documentary.dto.HistoryOrderRecordsDto;
import com.xcong.excoin.modules.documentary.dto.MyFollowOrderDto;
import com.xcong.excoin.modules.documentary.dto.MyFollowTraderInfoDto;
import com.xcong.excoin.modules.documentary.dto.UpdateDocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.service.DocumentaryService;
import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderInfoVo;
import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderSetInfoVo;
import com.xcong.excoin.modules.documentary.vo.FollowInfoVo;
import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo;
import com.xcong.excoin.modules.documentary.vo.FollowTraderProfitInfoVo;
import com.xcong.excoin.modules.documentary.vo.MemberIsTradeVo;
import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo;
import com.xcong.excoin.modules.documentary.vo.MyFollowTraderInfoVo;
@@ -52,7 +58,7 @@
     *  交易员列表
     */
    @ApiOperation(value="交易员列表", notes="交易员列表")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = MemberIsTradeVo.class)})
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = FollowTraderProfitInfoVo.class)})
    @PostMapping(value = "/getFollowTraderProfitInfo")
    public Result  getFollowTraderProfitInfo(@RequestBody @Valid RecordsPageDto recordsPageDto) {
        return documentaryService.getFollowTraderProfitInfo(recordsPageDto);
@@ -91,14 +97,25 @@
    }
    
    /**
     *  我的跟单--我的跟单
     *  我的跟单--我的跟单--当前跟单
     * @return
     */
    @ApiOperation(value="我的跟单--我的跟单", notes="我的跟单--我的跟单")
    @ApiOperation(value="我的跟单--我的跟单--当前跟单", notes="我的跟单--我的跟单--当前跟单")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = MyFollowOrderVo.class)})
    @PostMapping(value = "/getMyFollowOrderRecords")
    public Result  getMyFollowOrderRecords(@RequestBody @Valid MyFollowOrderDto myFollowOrderDto) {
        return documentaryService.getMyFollowOrderRecords(myFollowOrderDto);
    @PostMapping(value = "/getNowMyFollowOrderRecords")
    public Result  getNowMyFollowOrderRecords(@RequestBody @Valid MyFollowOrderDto myFollowOrderDto) {
        return documentaryService.getNowMyFollowOrderRecords(myFollowOrderDto);
    }
    /**
     *  我的跟单--我的跟单--历史跟单
     * @return
     */
    @ApiOperation(value="我的跟单--我的跟单--历史跟单", notes="我的跟单--我的跟单--历史跟单")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = MyFollowOrderVo.class)})
    @PostMapping(value = "/getHistoryMyFollowOrderRecords")
    public Result  getHistoryMyFollowOrderRecords(@RequestBody @Valid MyFollowOrderDto myFollowOrderDto) {
        return documentaryService.getHistoryMyFollowOrderRecords(myFollowOrderDto);
    }
    
    /**
@@ -111,6 +128,55 @@
        return documentaryService.getMyFollowTraderInfo(myFollowTraderInfoDto);
    }
    
    /**
     *  跟单---跟单设置--跟单合约
     */
    @ApiOperation(value="跟单---跟单设置--跟单合约", notes="跟单---跟单设置--跟单合约")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = DocumentaryOrderInfoVo.class)})
    @GetMapping(value = "/getDocumentaryOrderInfo")
    public Result  getDocumentaryOrderInfo() {
        return documentaryService.getDocumentaryOrderInfo();
    }
    /**
     *  跟单---跟单设置
     */
    @ApiOperation(value="跟单---跟单设置", notes="跟单---跟单设置")
    @PostMapping(value = "/getDocumentaryOrderSet")
    public Result  getDocumentaryOrderSet(@RequestBody @Valid DocumentaryOrderSetDto documentaryOrderSetDto) {
        return documentaryService.getDocumentaryOrderSet(documentaryOrderSetDto);
    }
    /**
     *  跟单---跟单设置--进入编辑
     */
    @ApiOperation(value="跟单---跟单设置--进入编辑", notes="跟单---跟单设置--进入编辑")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = DocumentaryOrderSetInfoVo.class)})
    @GetMapping(value = "/getDocumentaryOrderSetInfo")
    public Result  getDocumentaryOrderSetInfo() {
        return documentaryService.getDocumentaryOrderSetInfo();
    }
    /**
     *  跟单---跟单设置--取消跟随
     */
    @ApiOperation(value="跟单---跟单设置--取消跟随", notes="跟单---跟单设置--取消跟随")
    @PostMapping(value = "/cancelDocumentaryOrderSetInfo")
    public Result  cancelDocumentaryOrderSetInfo(@RequestBody @Valid CancelDocumentaryOrderSetDto cancelDocumentaryOrderSetDto) {
        return documentaryService.cancelDocumentaryOrderSetInfo(cancelDocumentaryOrderSetDto);
    }
    /**
     *  跟单---跟单设置--更新
     */
    @ApiOperation(value="跟单---跟单设置--更新", notes="跟单---跟单设置--更新")
    @PostMapping(value = "/updateDocumentaryOrderSetInfo")
    public Result  updateDocumentaryOrderSetInfo(@RequestBody @Valid UpdateDocumentaryOrderSetDto updateDocumentaryOrderSetDto) {
        return documentaryService.updateDocumentaryOrderSetInfo(updateDocumentaryOrderSetDto);
    }
    
    
    
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java
@@ -30,5 +30,7 @@
    IPage<FollowFollowerProfitEntity> selectFollowFollowerProfitEntitys(Page<FollowFollowerProfitEntity> page,
            @Param("memberId")Long memberId);
    FollowFollowerProfitEntity selectDocumentaryOrderSetInfoBymemberIdAndTradeId(@Param("memberId")Long memberId, @Param("traderId")Long traderId);
    
}
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerSettingDao.java
@@ -3,8 +3,14 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity;
import io.lettuce.core.dynamic.annotation.Param;
/**
 * @author helius
 */
public interface FollowFollowerSettingDao extends BaseMapper<FollowFollowerSettingEntity> {
    FollowFollowerSettingEntity selectDocumentaryOrderSetInfoBymemberId(@Param("memberId")Long memberId);
    FollowFollowerSettingEntity selectOneBymemberIdAndTradeId(@Param("memberId")Long memberId, @Param("traderId")Long traderId);
}
src/main/java/com/xcong/excoin/modules/documentary/dto/CancelDocumentaryOrderSetDto.java
New file
@@ -0,0 +1,17 @@
package com.xcong.excoin.modules.documentary.dto;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "CancelDocumentaryOrderSetDto", description = "参数接受类")
public class CancelDocumentaryOrderSetDto {
    @NotNull
    @ApiModelProperty(value = "交易员ID", example = "1")
    private Long traderId;
}
src/main/java/com/xcong/excoin/modules/documentary/dto/DocumentaryOrderSetDto.java
New file
@@ -0,0 +1,40 @@
package com.xcong.excoin.modules.documentary.dto;
import java.math.BigDecimal;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "DocumentaryOrderSetDto", description = "参数接受类")
public class DocumentaryOrderSetDto {
    @NotNull
    @ApiModelProperty(value = "交易员ID", example = "1")
    private Long traderId;
    @NotNull
    @ApiModelProperty(value = "跟单合约(多个,且逗号隔开)", example = "BTC/USDT")
    private String symbols;
    @NotNull
    @ApiModelProperty(value = "杠杆", example = "50")
    private int levelRate;
    @NotNull
    @ApiModelProperty(value = "跟单方式类型1:固定张数2:固定比例", example = "1")
    private Integer followType;
    @NotNull
    @ApiModelProperty(value = "跟单张数或比例", example = "2")
    private Integer followCnt;
    @NotNull
    @ApiModelProperty(value = "跟单最大持仓张数数量", example = "2")
    private int maxFollowCnt;
}
src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java
@@ -24,8 +24,4 @@
    @ApiModelProperty(value = "会员ID", example = "12543")
    private Long memberId;
    
    @NotNull
    @ApiModelProperty(value = "类型 1:当前跟单2:历史跟单", example = "1")
    private int orderType;
}
src/main/java/com/xcong/excoin/modules/documentary/dto/UpdateDocumentaryOrderSetDto.java
New file
@@ -0,0 +1,38 @@
package com.xcong.excoin.modules.documentary.dto;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "UpdateDocumentaryOrderSetDto", description = "参数接受类")
public class UpdateDocumentaryOrderSetDto {
    @NotNull
    @ApiModelProperty(value = "交易员ID", example = "1")
    private Long traderId;
    @NotNull
    @ApiModelProperty(value = "跟单合约(多个,且逗号隔开)", example = "BTC/USDT")
    private String symbols;
    @NotNull
    @ApiModelProperty(value = "杠杆", example = "50")
    private int levelRate;
    @NotNull
    @ApiModelProperty(value = "跟单方式类型1:固定张数2:固定比例", example = "1")
    private Integer followType;
    @NotNull
    @ApiModelProperty(value = "跟单张数或比例", example = "2")
    private Integer followCnt;
    @NotNull
    @ApiModelProperty(value = "跟单最大持仓张数数量", example = "2")
    private int maxFollowCnt;
}
src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java
@@ -5,10 +5,13 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
import com.xcong.excoin.modules.documentary.dto.CancelDocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.dto.FollowRecordsDto;
import com.xcong.excoin.modules.documentary.dto.HistoryOrderRecordsDto;
import com.xcong.excoin.modules.documentary.dto.MyFollowOrderDto;
import com.xcong.excoin.modules.documentary.dto.MyFollowTraderInfoDto;
import com.xcong.excoin.modules.documentary.dto.UpdateDocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity;
public interface DocumentaryService extends IService<FollowTraderProfitInfoEntity> {
@@ -23,8 +26,20 @@
    public Result getFollowInfo();
    public Result getMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto);
    public Result getNowMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto);
    public Result getHistoryMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto);
    public Result getMyFollowTraderInfo(@Valid MyFollowTraderInfoDto myFollowTraderInfoDto);
    public Result getDocumentaryOrderInfo();
    public Result getDocumentaryOrderSet(@Valid DocumentaryOrderSetDto documentaryOrderSetDto);
    public Result getDocumentaryOrderSetInfo();
    public Result cancelDocumentaryOrderSetInfo(@Valid CancelDocumentaryOrderSetDto cancelDocumentaryOrderSetDto);
    public Result updateDocumentaryOrderSetInfo(@Valid UpdateDocumentaryOrderSetDto updateDocumentaryOrderSetDto);
}
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java
@@ -1,6 +1,7 @@
package com.xcong.excoin.modules.documentary.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -10,6 +11,7 @@
import javax.validation.Valid;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -22,17 +24,24 @@
import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.documentary.dao.FollowFollowerProfitDao;
import com.xcong.excoin.modules.documentary.dao.FollowFollowerSettingDao;
import com.xcong.excoin.modules.documentary.dao.FollowTraderInfoDao;
import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitDetailDao;
import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitInfoDao;
import com.xcong.excoin.modules.documentary.dto.CancelDocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.dto.DocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.dto.FollowRecordsDto;
import com.xcong.excoin.modules.documentary.dto.HistoryOrderRecordsDto;
import com.xcong.excoin.modules.documentary.dto.MyFollowOrderDto;
import com.xcong.excoin.modules.documentary.dto.MyFollowTraderInfoDto;
import com.xcong.excoin.modules.documentary.dto.UpdateDocumentaryOrderSetDto;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity;
import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity;
import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity;
import com.xcong.excoin.modules.documentary.service.DocumentaryService;
import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderInfoVo;
import com.xcong.excoin.modules.documentary.vo.DocumentaryOrderSetInfoVo;
import com.xcong.excoin.modules.documentary.vo.FollowInfoVo;
import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo;
import com.xcong.excoin.modules.documentary.vo.FollowTraderProfitInfoVo;
@@ -41,10 +50,15 @@
import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo;
import com.xcong.excoin.modules.documentary.vo.MyFollowTraderInfoVo;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.dao.MemberLevelRateDao;
import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberLevelRateEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
import com.xcong.excoin.modules.platform.entity.PlatformTradeSettingEntity;
import com.xcong.excoin.utils.CacheSettingUtils;
import com.xcong.excoin.utils.CoinTypeConvert;
import com.xcong.excoin.utils.MessageSourceUtils;
import com.xcong.excoin.utils.RedisUtils;
import cn.hutool.core.collection.CollUtil;
@@ -73,6 +87,13 @@
    private CacheSettingUtils cacheSettingUtils;
    @Resource
    private ContractHoldOrderDao contractHoldOrderDao;
    @Resource
    private MemberLevelRateDao memberLevelRateDao;
    @Resource
    private MemberWalletContractDao memberWalletContractDao;
    @Resource
    private FollowFollowerSettingDao followFollowerSettingDao;
    
    @Override
    public Result getMemberIsTradeInfo() {
@@ -172,35 +193,6 @@
                totalPrincipals = totalPrincipals.add(totalPrincipal);
                BigDecimal totalProfit = followFollowerProfitEntity.getTotalProfit();
                totalProfits = totalProfits.add(totalProfit);
                //当前跟单
                List<ContractHoldOrderEntity> contractHoldOrderEntitys = followFollowerProfitDao.getFollowOrderNowRecords(memberId);
                if(CollUtil.isNotEmpty(contractHoldOrderEntitys)) {
                    for(ContractHoldOrderEntity contractHoldOrderEntity : contractHoldOrderEntitys) {
                        // 获取最新价
                        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
                        BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol());
                        // 盈亏
                        BigDecimal rewardRatio = BigDecimal.ZERO;
                        // 开多
                        if (contractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) {
                            // (最新价-开仓价)*规格*张数
                            rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                            // 开空
                        } else {
                            // (开仓价-最新价)*规格*张数
                            rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                        }
                        if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
                            PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
                            if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
                                rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
                            }
                        }
                        totalProfits = totalProfits.add(rewardRatio);
                    }
                }
            }
        }
        followInfoVo.setTotalPrincipal(totalPrincipals.setScale(4, BigDecimal.ROUND_DOWN));
@@ -210,16 +202,12 @@
    }
    @Override
    public Result getMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto) {
    public Result getHistoryMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        int type = myFollowOrderDto.getOrderType();
        Page<MyFollowOrderVo> result = new Page<>();
        List<MyFollowOrderVo> myFollowOrderVos = result.getRecords();
        //历史跟单
        if(type == 2) {
            Page<ContractOrderEntity> page = new Page<>(myFollowOrderDto.getPageNum(), myFollowOrderDto.getPageSize());
            IPage<ContractOrderEntity> contractOrderEntitys = followFollowerProfitDao.getMyFollowOrderHistoryRecords(page, memberId);
            
@@ -254,64 +242,73 @@
                    myFollowOrderVos.add(myFollowOrderVo);
                }
            }
        }else {
        //当前跟单
            Page<ContractHoldOrderEntity> page = new Page<>(myFollowOrderDto.getPageNum(), myFollowOrderDto.getPageSize());
            IPage<ContractHoldOrderEntity> contractHoldOrderEntitys = followFollowerProfitDao.getMyFollowOrderNowRecords(page, myFollowOrderDto.getMemberId());
            List<ContractHoldOrderEntity> records = contractHoldOrderEntitys.getRecords();
            if(CollUtil.isNotEmpty(records)) {
                for(ContractHoldOrderEntity contractHoldOrderEntity : records) {
                    MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo();
                    String symbol = contractHoldOrderEntity.getSymbol();
                    myFollowOrderVo.setSymbol(symbol);
                    int orderType = contractHoldOrderEntity.getOpeningType();
                    myFollowOrderVo.setOrderType(orderType);
                    int leverRatio = contractHoldOrderEntity.getLeverRatio();
                    myFollowOrderVo.setLeverRatio(leverRatio);
                    int symbolCnt = contractHoldOrderEntity.getSymbolCnt();
                    myFollowOrderVo.setSymbolCnt(symbolCnt);
                    BigDecimal bondAmount = contractHoldOrderEntity.getBondAmount().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setBondAmount(bondAmount);
                    BigDecimal openingPrice = contractHoldOrderEntity.getOpeningPrice().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setOpeningPrice(openingPrice);
                    String orderNo = contractHoldOrderEntity.getOrderNo();
                    myFollowOrderVo.setOrderNo(orderNo);
                    Date openingTime = contractHoldOrderEntity.getCreateTime();
                    myFollowOrderVo.setOpeningTime(openingTime);
                    // 获取最新价
                    BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
                    BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol());
                    // 盈亏
                    BigDecimal rewardRatio = BigDecimal.ZERO;
                    // 开多
                    if (contractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) {
                        // (最新价-开仓价)*规格*张数
                        rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                        // 开空
                    } else {
                        // (开仓价-最新价)*规格*张数
                        rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                    }
                    if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
                        PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
                        if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
                            rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
                        }
                    }
                    myFollowOrderVo.setRewardAmount(rewardRatio.setScale(4, BigDecimal.ROUND_DOWN));
                    // 回报率
                    BigDecimal returnRate = rewardRatio.divide(contractHoldOrderEntity.getBondAmount().subtract(contractHoldOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setRewardRatio(returnRate.setScale(4, BigDecimal.ROUND_DOWN));
                    myFollowOrderVos.add(myFollowOrderVo);
                }
            }
        }
        return Result.ok(myFollowOrderVos);
    }
    @Override
    public Result getNowMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        Page<MyFollowOrderVo> result = new Page<>();
        List<MyFollowOrderVo> myFollowOrderVos = result.getRecords();
            //当前跟单
            Page<ContractHoldOrderEntity> page = new Page<>(myFollowOrderDto.getPageNum(), myFollowOrderDto.getPageSize());
            IPage<ContractHoldOrderEntity> contractHoldOrderEntitys = followFollowerProfitDao.getMyFollowOrderNowRecords(page, myFollowOrderDto.getMemberId());
            List<ContractHoldOrderEntity> records = contractHoldOrderEntitys.getRecords();
            if(CollUtil.isNotEmpty(records)) {
                for(ContractHoldOrderEntity contractHoldOrderEntity : records) {
                    MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo();
                    String symbol = contractHoldOrderEntity.getSymbol();
                    myFollowOrderVo.setSymbol(symbol);
                    int orderType = contractHoldOrderEntity.getOpeningType();
                    myFollowOrderVo.setOrderType(orderType);
                    int leverRatio = contractHoldOrderEntity.getLeverRatio();
                    myFollowOrderVo.setLeverRatio(leverRatio);
                    int symbolCnt = contractHoldOrderEntity.getSymbolCnt();
                    myFollowOrderVo.setSymbolCnt(symbolCnt);
                    BigDecimal bondAmount = contractHoldOrderEntity.getBondAmount().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setBondAmount(bondAmount);
                    BigDecimal openingPrice = contractHoldOrderEntity.getOpeningPrice().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setOpeningPrice(openingPrice);
                    String orderNo = contractHoldOrderEntity.getOrderNo();
                    myFollowOrderVo.setOrderNo(orderNo);
                    Date openingTime = contractHoldOrderEntity.getCreateTime();
                    myFollowOrderVo.setOpeningTime(openingTime);
                    // 获取最新价
                    BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
                    BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol());
                    // 盈亏
                    BigDecimal rewardRatio = BigDecimal.ZERO;
                    // 开多
                    if (contractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) {
                        // (最新价-开仓价)*规格*张数
                        rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                        // 开空
                    } else {
                        // (开仓价-最新价)*规格*张数
                        rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                    }
                    if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
                        PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
                        if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
                            rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
                        }
                    }
                    myFollowOrderVo.setRewardAmount(rewardRatio.setScale(4, BigDecimal.ROUND_DOWN));
                    // 回报率
                    BigDecimal returnRate = rewardRatio.divide(contractHoldOrderEntity.getBondAmount().subtract(contractHoldOrderEntity.getOpeningFeeAmount()), 8, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setRewardRatio(returnRate.setScale(4, BigDecimal.ROUND_DOWN));
                    myFollowOrderVos.add(myFollowOrderVo);
                }
            }
        return Result.ok(myFollowOrderVos);
        
    }
@@ -320,7 +317,6 @@
    public Result getMyFollowTraderInfo(@Valid MyFollowTraderInfoDto myFollowTraderInfoDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        
        Page<MyFollowTraderInfoVo> result = new Page<>();
        List<MyFollowTraderInfoVo> myFollowOrderVos = result.getRecords();
@@ -340,44 +336,148 @@
                myFollowTraderInfoVo.setNickname(nickname);
                BigDecimal totalPrincipal = FollowFollowerProfitEntity.getTotalPrincipal();
                myFollowTraderInfoVo.setTotalPrincipal(totalPrincipal);
                BigDecimal totalProfit = BigDecimal.ZERO;
                Map<String, Object> columnMap = new HashMap<>();
                columnMap.put("member_id", memberId);
                contractHoldOrderDao.selectByMap(columnMap );
                List<ContractHoldOrderEntity> contractHoldOrderEntitys = contractHoldOrderDao.selectByMap(columnMap );
                if(CollUtil.isNotEmpty(contractHoldOrderEntitys)) {
                    for(ContractHoldOrderEntity contractHoldOrderEntity : contractHoldOrderEntitys) {
                        // 获取最新价
                        BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(contractHoldOrderEntity.getSymbol())));
                        BigDecimal lotNumber = cacheSettingUtils.getSymbolSku(contractHoldOrderEntity.getSymbol());
                        // 盈亏
                        BigDecimal rewardRatio = BigDecimal.ZERO;
                        // 开多
                        if (ContractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) {
                            // (最新价-开仓价)*规格*张数
                            rewardRatio = newPrice.subtract(contractHoldOrderEntity.getOpeningPrice()).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                            // 开空
                        } else {
                            // (开仓价-最新价)*规格*张数
                            rewardRatio = contractHoldOrderEntity.getOpeningPrice().subtract(newPrice).multiply(lotNumber).multiply(new BigDecimal(contractHoldOrderEntity.getSymbolCnt()));
                        }
                        if (member.getIsProfit() == MemberEntity.IS_PROFIT_Y) {
                            PlatformTradeSettingEntity tradeSettingEntity = cacheSettingUtils.getTradeSetting();
                            if (rewardRatio.compareTo(BigDecimal.ZERO) > -1) {
                                rewardRatio = rewardRatio.multiply(BigDecimal.ONE.subtract(tradeSettingEntity.getProfitParam()));
                            }
                        }
                        totalProfit = totalProfit.add(rewardRatio);
                    }
                    myFollowTraderInfoVo.setTotalProfit(totalProfit.setScale(4, BigDecimal.ROUND_DOWN));
                }
                myFollowOrderVos.add(myFollowTraderInfoVo);
            }
                BigDecimal totalProfit = FollowFollowerProfitEntity.getTotalProfit();
                myFollowTraderInfoVo.setTotalProfit(totalProfit.setScale(4, BigDecimal.ROUND_DOWN));
                myFollowOrderVos.add(myFollowTraderInfoVo);
            }
        }
        return Result.ok(result);
    }
    @Override
    public Result getDocumentaryOrderInfo() {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("member_id", memberId);
        List<DocumentaryOrderInfoVo> list = new ArrayList<>();
        //获取对应的杠杆等信息和可用余额
        BigDecimal availableBalance  = BigDecimal.ZERO;
        List<MemberWalletContractEntity> selectByMap = memberWalletContractDao.selectByMap(columnMap);
        if(CollUtil.isNotEmpty(selectByMap)) {
            for(MemberWalletContractEntity MemberWalletContractEntity : selectByMap) {
                availableBalance = MemberWalletContractEntity.getAvailableBalance();
            }
        }
        List<MemberLevelRateEntity> memberLevelRateEntitys = memberLevelRateDao.selectByMap(columnMap);
        if(CollUtil.isNotEmpty(memberLevelRateEntitys)) {
            for(MemberLevelRateEntity memberLevelRateEntity : memberLevelRateEntitys) {
                DocumentaryOrderInfoVo documentaryOrderInfoVo = new DocumentaryOrderInfoVo();
                String symbol = memberLevelRateEntity.getSymbol();
                documentaryOrderInfoVo.setSymbol(symbol);
                int levelRateDown = memberLevelRateEntity.getLevelRateDown();
                documentaryOrderInfoVo.setLevelRate(levelRateDown);
                documentaryOrderInfoVo.setAvaliableCoin(availableBalance);
                list.add(documentaryOrderInfoVo);
            }
        }
        return Result.ok(list);
    }
    @Override
    @Transactional
    public Result getDocumentaryOrderSet(@Valid DocumentaryOrderSetDto documentaryOrderSetDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        //新增【跟随者设置】数据
        FollowFollowerSettingEntity followFollowerSettingEntity = new FollowFollowerSettingEntity();
        followFollowerSettingEntity.setMemberId(memberId);
        Long traderId = documentaryOrderSetDto.getTraderId();
        followFollowerSettingEntity.setTradeId(traderId);
        FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(traderId);
        Long traderMemberId = followTraderInfoEntity.getMemberId();
        followFollowerSettingEntity.setTradeMemberId(traderMemberId);
        followFollowerSettingEntity.setSymbols(documentaryOrderSetDto.getSymbols());
        followFollowerSettingEntity.setFollowType(documentaryOrderSetDto.getFollowType());
        followFollowerSettingEntity.setFollowCnt(documentaryOrderSetDto.getFollowCnt());
        followFollowerSettingEntity.setMaxFollowCnt(documentaryOrderSetDto.getMaxFollowCnt());
        followFollowerSettingDao.insert(followFollowerSettingEntity);
        //更新【跟随者收益】数据
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("member_id", memberId);
        List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap);
        if(CollUtil.isNotEmpty(selectByMap)) {
            FollowFollowerProfitEntity followFollowerProfitEntity = selectByMap.get(0);
            followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y);
            followFollowerProfitDao.updateById(followFollowerProfitEntity);
        }else {
            FollowFollowerProfitEntity followFollowerProfitEntity = new FollowFollowerProfitEntity();
            followFollowerProfitEntity.setMemberId(memberId);
            followFollowerProfitEntity.setTradeId(traderId);
            followFollowerProfitEntity.setTradeMemberId(traderMemberId);
            followFollowerProfitEntity.setTotalPrincipal(BigDecimal.ZERO);
            followFollowerProfitEntity.setTotalProfit(BigDecimal.ZERO);
            followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_Y);
            followFollowerProfitDao.insert(followFollowerProfitEntity);
        }
        return Result.ok(MessageSourceUtils.getString("member_service_0024"));
    }
    @Override
    public Result getDocumentaryOrderSetInfo() {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        DocumentaryOrderSetInfoVo documentaryOrderSetInfoVo = new DocumentaryOrderSetInfoVo();
        //获取【跟随者设置】数据
        FollowFollowerSettingEntity followFollowerSettingEntity = followFollowerSettingDao.selectDocumentaryOrderSetInfoBymemberId(memberId);
        Long tradeId = followFollowerSettingEntity.getTradeId();
        documentaryOrderSetInfoVo.setTraderId(tradeId);
        FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId);
        String avatar = followTraderInfoEntity.getAvatar();
        documentaryOrderSetInfoVo.setAvatar(avatar);
        String nickname = followTraderInfoEntity.getNickname();
        documentaryOrderSetInfoVo.setNickname(nickname);
        String symbols = followFollowerSettingEntity.getSymbols();
        documentaryOrderSetInfoVo.setSymbols(symbols);
        Integer followType = followFollowerSettingEntity.getFollowType();
        documentaryOrderSetInfoVo.setFollowType(followType);
        Integer followCnt = followFollowerSettingEntity.getFollowCnt();
        documentaryOrderSetInfoVo.setFollowCnt(followCnt);
        Integer maxFollowCnt = followFollowerSettingEntity.getMaxFollowCnt();
        documentaryOrderSetInfoVo.setMaxFollowCnt(maxFollowCnt);
        return Result.ok(documentaryOrderSetInfoVo);
    }
    @Override
    @Transactional
    public Result cancelDocumentaryOrderSetInfo(@Valid CancelDocumentaryOrderSetDto cancelDocumentaryOrderSetDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        Long traderId = cancelDocumentaryOrderSetDto.getTraderId();
        //删除【跟随者设置】数据
        FollowFollowerSettingEntity followFollowerSettingEntity = followFollowerSettingDao.selectOneBymemberIdAndTradeId(memberId,traderId);
        followFollowerSettingDao.deleteById(followFollowerSettingEntity.getId());
        //更新【跟随者收益】数据
        FollowFollowerProfitEntity followFollowerProfitEntity = followFollowerProfitDao.selectDocumentaryOrderSetInfoBymemberIdAndTradeId(memberId,traderId);
        followFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_N);
        followFollowerProfitDao.updateById(followFollowerProfitEntity);
        return null;
    }
    @Override
    @Transactional
    public Result updateDocumentaryOrderSetInfo(@Valid UpdateDocumentaryOrderSetDto updateDocumentaryOrderSetDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        Long traderId = updateDocumentaryOrderSetDto.getTraderId();
        //更新【跟随者设置】数据
        FollowFollowerSettingEntity followFollowerSettingEntity = followFollowerSettingDao.selectOneBymemberIdAndTradeId(memberId, traderId);
        followFollowerSettingEntity.setSymbols(updateDocumentaryOrderSetDto.getSymbols());
        followFollowerSettingEntity.setFollowType(updateDocumentaryOrderSetDto.getFollowType());
        followFollowerSettingEntity.setFollowCnt(updateDocumentaryOrderSetDto.getFollowCnt());
        followFollowerSettingEntity.setMaxFollowCnt(updateDocumentaryOrderSetDto.getMaxFollowCnt());
        followFollowerSettingDao.updateById(followFollowerSettingEntity);
        return Result.ok(MessageSourceUtils.getString("member_service_0024"));
    }
    
    
    
src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderInfoVo.java
New file
@@ -0,0 +1,22 @@
package com.xcong.excoin.modules.documentary.vo;
import java.math.BigDecimal;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "DocumentaryOrderInfoVo", description = "参数返回类")
public class DocumentaryOrderInfoVo {
    @ApiModelProperty("币种")
    private String symbol;
    @ApiModelProperty("杠杆")
    private int levelRate;
    @ApiModelProperty("可用余额")
    private BigDecimal avaliableCoin;
}
src/main/java/com/xcong/excoin/modules/documentary/vo/DocumentaryOrderSetInfoVo.java
New file
@@ -0,0 +1,32 @@
package com.xcong.excoin.modules.documentary.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "DocumentaryOrderSetInfoVo", description = "参数返回类")
public class DocumentaryOrderSetInfoVo {
    @ApiModelProperty(value = "交易员ID", example = "1")
    private Long traderId;
    @ApiModelProperty("头像")
    private String avatar;
    @ApiModelProperty("名称")
    private String nickname;
    @ApiModelProperty(value = "跟单合约(多个,且逗号隔开)", example = "BTC/USDT")
    private String symbols;
    @ApiModelProperty(value = "跟单方式类型1:固定张数2:固定比例", example = "1")
    private Integer followType;
    @ApiModelProperty(value = "跟单张数或比例", example = "2")
    private Integer followCnt;
    @ApiModelProperty(value = "跟单最大持仓张数数量", example = "2")
    private int maxFollowCnt;
}
src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml
@@ -63,5 +63,15 @@
            and contract_type = 2
        order by opening_time desc
    </select>
    <select id="selectDocumentaryOrderSetInfoBymemberIdAndTradeId" resultType="com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity">
        SELECT
            *
        FROM
            follow_follower_profit
        WHERE
            member_id = #{memberId}
            and trade_id = #{traderId}
    </select>
</mapper>
src/main/resources/mapper/documentary/FollowFollowerSettingDao.xml
@@ -1,5 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xcong.excoin.modules.documentary.dao.FollowFollowerSettingDao">
    <select id="selectDocumentaryOrderSetInfoBymemberId" resultType="com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity">
        SELECT
            *
        FROM
            follow_follower_setting
        WHERE
            member_id = #{memberId}
    </select>
    <select id="selectOneBymemberIdAndTradeId" resultType="com.xcong.excoin.modules.documentary.entity.FollowFollowerSettingEntity">
        SELECT
            *
        FROM
            follow_follower_setting
        WHERE
            member_id = #{memberId}
            and trader_id = #{traderId}
    </select>
</mapper>