xiaoyong931011
2020-07-29 e08d29b508b4bbed9434328284d9939e6ad8b3ce
20200729 代码提交
5 files added
6 files modified
613 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java 55 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java 18 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java 31 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowTraderInfoDto.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java 275 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/FollowInfoVo.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/FollowRecordsVo.java 19 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/MyFollowOrderVo.java 54 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/MyFollowTraderInfoVo.java 46 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml 46 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java
@@ -4,6 +4,7 @@
import javax.validation.Valid;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -13,9 +14,14 @@
import com.xcong.excoin.modules.coin.parameter.vo.MemberAgentIntoInfoVo;
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.service.DocumentaryService;
import com.xcong.excoin.modules.documentary.vo.FollowInfoVo;
import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo;
import com.xcong.excoin.modules.documentary.vo.MemberIsTradeVo;
import com.xcong.excoin.modules.documentary.vo.MyFollowOrderVo;
import com.xcong.excoin.modules.documentary.vo.MyFollowTraderInfoVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -43,11 +49,11 @@
    }
    
    /**
     *  交易员收益信息列表
     *  交易员列表
     */
    @ApiOperation(value="getFollowTraderProfitInfo", notes="交易员收益信息列表")
    @ApiOperation(value="getFollowTraderProfitInfo", notes="交易员列表")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = MemberIsTradeVo.class)})
    @GetMapping(value = "/getFollowTraderProfitInfo")
    @PostMapping(value = "/getFollowTraderProfitInfo")
    public Result  getFollowTraderProfitInfo(@RequestBody @Valid RecordsPageDto recordsPageDto) {
        return documentaryService.getFollowTraderProfitInfo(recordsPageDto);
    }
@@ -58,7 +64,7 @@
     */
    @ApiOperation(value="getHistoryOrderRecords", notes="历史带单")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = MemberAgentIntoInfoVo.class)})
    @GetMapping(value = "/getHistoryOrderRecords")
    @PostMapping(value = "/getHistoryOrderRecords")
    public Result  getHistoryOrderRecords(@RequestBody @Valid HistoryOrderRecordsDto historyOrderRecordsDto) {
        return documentaryService.getHistoryOrderRecords(historyOrderRecordsDto);
    }
@@ -69,11 +75,50 @@
     */
    @ApiOperation(value="getFollowRecords", notes="跟随者")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = FollowRecordsVo.class)})
    @GetMapping(value = "/getFollowRecords")
    @PostMapping(value = "/getFollowRecords")
    public Result  getFollowRecords(@RequestBody @Valid FollowRecordsDto followRecordsDto) {
        return documentaryService.getFollowRecords(followRecordsDto);
    }
    
    /**
     *  我的跟单--头部
     */
    @ApiOperation(value="getFollowInfo", notes="我的跟单--头部")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = FollowInfoVo.class)})
    @GetMapping(value = "/getFollowInfo")
    public Result  getFollowInfo() {
        return documentaryService.getFollowInfo();
    }
    /**
     *  我的跟单--我的跟单
     * @return
     */
    @ApiOperation(value="getFollowRecords", notes="我的跟单--我的跟单")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = MyFollowOrderVo.class)})
    @PostMapping(value = "/getMyFollowOrderRecords")
    public Result  getMyFollowOrderRecords(@RequestBody @Valid MyFollowOrderDto myFollowOrderDto) {
        return documentaryService.getMyFollowOrderRecords(myFollowOrderDto);
    }
    /**
     *  我的跟单--我的交易员
     */
    @ApiOperation(value="getMyFollowTraderInfo", notes="我的跟单--我的交易员")
    @ApiResponses({@ApiResponse( code = 200, message = "success", response = MyFollowTraderInfoVo.class)})
    @PostMapping(value = "/getMyFollowTraderInfo")
    public Result  getMyFollowTraderInfo(@RequestBody @Valid MyFollowTraderInfoDto myFollowTraderInfoDto) {
        return documentaryService.getMyFollowTraderInfo(myFollowTraderInfoDto);
    }
    
    
    
src/main/java/com/xcong/excoin/modules/documentary/dao/FollowFollowerProfitDao.java
@@ -1,10 +1,14 @@
package com.xcong.excoin.modules.documentary.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
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.ContractHoldOrderEntity;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity;
import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo;
@@ -13,6 +17,18 @@
 */
public interface FollowFollowerProfitDao extends BaseMapper<FollowFollowerProfitEntity> {
    IPage<FollowRecordsVo> selectFollowRecords(Page<FollowRecordsVo> page, @Param("tradeMemberId")Long tradeMemberId);
    IPage<FollowRecordsVo> selectFollowRecords(Page<FollowRecordsVo> page,
            @Param("tradeMemberId")Long tradeMemberId);
    IPage<ContractOrderEntity> getMyFollowOrderHistoryRecords(Page<ContractOrderEntity> page,
            @Param("memberId")Long memberId);
    IPage<ContractHoldOrderEntity> getMyFollowOrderNowRecords(Page<ContractHoldOrderEntity> page,
            @Param("memberId")Long memberId);
    List<ContractHoldOrderEntity> getFollowOrderNowRecords(@Param("memberId")Long memberId);
    IPage<FollowFollowerProfitEntity> selectFollowFollowerProfitEntitys(Page<FollowFollowerProfitEntity> page,
            @Param("memberId")Long memberId);
    
}
src/main/java/com/xcong/excoin/modules/documentary/dto/MyFollowOrderDto.java
New file
@@ -0,0 +1,31 @@
package com.xcong.excoin.modules.documentary.dto;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "MyFollowOrderDto", description = "参数接受类")
public class MyFollowOrderDto {
    @NotNull
    @Min(1)
    @ApiModelProperty(value = "第几页", example = "1")
    private int pageNum;
    @NotNull
    @ApiModelProperty(value = "每页数量", example = "10")
    private int pageSize;
    @NotNull
    @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/MyFollowTraderInfoDto.java
New file
@@ -0,0 +1,22 @@
package com.xcong.excoin.modules.documentary.dto;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "MyFollowTraderInfoDto", description = "参数接受类")
public class MyFollowTraderInfoDto {
    @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/documentary/service/DocumentaryService.java
@@ -7,6 +7,8 @@
import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
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.entity.FollowTraderProfitInfoEntity;
public interface DocumentaryService extends IService<FollowTraderProfitInfoEntity> {
@@ -19,4 +21,10 @@
    public Result getFollowRecords(@Valid FollowRecordsDto followRecordsDto);
    public Result getFollowInfo();
    public Result getMyFollowOrderRecords(@Valid MyFollowOrderDto myFollowOrderDto);
    public Result getMyFollowTraderInfo(@Valid MyFollowTraderInfoDto myFollowTraderInfoDto);
}
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java
@@ -1,6 +1,10 @@
package com.xcong.excoin.modules.documentary.service.impl;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.validation.Valid;
@@ -14,23 +18,37 @@
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.modules.coin.dao.OrderCoinsDao;
import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao;
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.FollowTraderInfoDao;
import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitDetailDao;
import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitInfoDao;
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.entity.FollowFollowerProfitEntity;
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.FollowInfoVo;
import com.xcong.excoin.modules.documentary.vo.FollowRecordsVo;
import com.xcong.excoin.modules.documentary.vo.FollowTraderProfitInfoVo;
import com.xcong.excoin.modules.documentary.vo.HistoryOrderRecordsVo;
import com.xcong.excoin.modules.documentary.vo.MemberIsTradeVo;
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.entity.MemberEntity;
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.RedisUtils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -49,6 +67,12 @@
    private FollowFollowerProfitDao followFollowerProfitDao;
    @Resource
    private OrderCoinsDao orderCoinsDao;
    @Resource
    private RedisUtils redisUtils;
    @Resource
    private CacheSettingUtils cacheSettingUtils;
    @Resource
    private ContractHoldOrderDao contractHoldOrderDao;
    
    @Override
    public Result getMemberIsTradeInfo() {
@@ -106,9 +130,260 @@
        
        Page<FollowRecordsVo> page = new Page<>(followRecordsDto.getPageNum(), followRecordsDto.getPageSize());
        IPage<FollowRecordsVo> historyOrderRecordsVoList = followFollowerProfitDao.selectFollowRecords(page, followRecordsDto.getTradeMemberId());
        List<FollowRecordsVo> records = historyOrderRecordsVoList.getRecords();
        if(CollUtil.isNotEmpty(records)) {
            for(FollowRecordsVo followRecordsVo : records) {
                Long memberId =followRecordsVo.getMemberId();
                MemberEntity member = memberDao.selectById(memberId);
                String email = member.getEmail();
                String phone = member.getPhone();
                if(StrUtil.isNotEmpty(email)) {
                    followRecordsVo.setAccount(email);
                }else {
                    followRecordsVo.setAccount(phone);
                }
            }
        }
        return Result.ok(historyOrderRecordsVoList);
    }
    
    @Override
    public Result getFollowInfo() {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        FollowInfoVo followInfoVo = new FollowInfoVo();
        followInfoVo.setMemberId(memberId);
        String email = member.getEmail();
        String phone = member.getPhone();
        if(StrUtil.isNotEmpty(email)) {
            followInfoVo.setNickname(email);
        }else {
            followInfoVo.setNickname(phone);
        }
        BigDecimal totalPrincipals =  BigDecimal.ZERO;
        BigDecimal totalProfits =  BigDecimal.ZERO;
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("member_id", memberId);
        List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitDao.selectByMap(columnMap);
        if(CollUtil.isNotEmpty(selectByMap)) {
            for(FollowFollowerProfitEntity followFollowerProfitEntity : selectByMap) {
                BigDecimal totalPrincipal = followFollowerProfitEntity.getTotalPrincipal();
                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));
        followInfoVo.setTotalProfit(totalProfits.setScale(4, BigDecimal.ROUND_DOWN));
        return Result.ok(followInfoVo);
    }
    @Override
    public Result getMyFollowOrderRecords(@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);
            List<ContractOrderEntity> records = contractOrderEntitys.getRecords();
            if(CollUtil.isNotEmpty(records)) {
                for(ContractOrderEntity contractOrderEntity : records) {
                    MyFollowOrderVo myFollowOrderVo = new MyFollowOrderVo();
                    String symbol = contractOrderEntity.getSymbol();
                    myFollowOrderVo.setSymbol(symbol);
                    int orderType = contractOrderEntity.getOrderType();
                    myFollowOrderVo.setOrderType(orderType);
                    int leverRatio = contractOrderEntity.getLeverRatio();
                    myFollowOrderVo.setLeverRatio(leverRatio);
                    BigDecimal rewardAmount = contractOrderEntity.getRewardAmount().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setRewardAmount(rewardAmount);
                    BigDecimal rewardRatio = contractOrderEntity.getRewardRatio().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setRewardRatio(rewardRatio);
                    int symbolCnt = contractOrderEntity.getSymbolCnt();
                    myFollowOrderVo.setSymbolCnt(symbolCnt);
                    BigDecimal bondAmount = contractOrderEntity.getBondAmount().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setBondAmount(bondAmount);
                    BigDecimal openingPrice = contractOrderEntity.getOpeningPrice().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setOpeningPrice(openingPrice);
                    BigDecimal closingPrice = contractOrderEntity.getClosingPrice().setScale(4, BigDecimal.ROUND_DOWN);
                    myFollowOrderVo.setClosingPrice(closingPrice);
                    Date openingTime = contractOrderEntity.getOpeningTime();
                    myFollowOrderVo.setOpeningTime(openingTime);
                    Date closingTime = contractOrderEntity.getClosingTime();
                    myFollowOrderVo.setClosingTime(closingTime);
                    String orderNo = contractOrderEntity.getOrderNo();
                    myFollowOrderVo.setOrderNo(orderNo);
                    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 getMyFollowTraderInfo(@Valid MyFollowTraderInfoDto myFollowTraderInfoDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        Page<FollowFollowerProfitEntity> page = new Page<>(myFollowTraderInfoDto.getPageNum(), myFollowTraderInfoDto.getPageSize());
        IPage<FollowFollowerProfitEntity> followFollowerProfitEntitys = followFollowerProfitDao.selectFollowFollowerProfitEntitys(page, memberId);
        List<FollowFollowerProfitEntity> records = followFollowerProfitEntitys.getRecords();
        if(CollUtil.isNotEmpty(records)) {
            Page<MyFollowTraderInfoVo> result = new Page<>();
            List<MyFollowTraderInfoVo> myFollowOrderVos = result.getRecords();
            for(FollowFollowerProfitEntity FollowFollowerProfitEntity : records) {
                MyFollowTraderInfoVo myFollowTraderInfoVo = new MyFollowTraderInfoVo();
                Long tradeId = FollowFollowerProfitEntity.getTradeId();
                FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoDao.selectById(tradeId);
                String avatar = followTraderInfoEntity.getAvatar();
                myFollowTraderInfoVo.setAvatar(avatar);
                String nickname = followTraderInfoEntity.getNickname();
                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);
            }
        }
        return null;
    }
    
    
    
src/main/java/com/xcong/excoin/modules/documentary/vo/FollowInfoVo.java
New file
@@ -0,0 +1,39 @@
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 = "FollowInfoVo", description = "我的跟单--首页")
public class FollowInfoVo {
    /**
     * 跟随者ID
     */
    @ApiModelProperty(value = "跟随者ID")
    private Long memberId;
    /**
     * 头像
     */
    @ApiModelProperty("头像")
    private String avatar;
    /**
     * 名称
     */
    @ApiModelProperty("名称")
    private String nickname;
    /**
     * 累计跟随本金
     */
    @ApiModelProperty(value = "累计跟随本金")
    private BigDecimal totalPrincipal;
    /**
     * 累计收益
     */
    @ApiModelProperty(value = "累计收益")
    private BigDecimal totalProfit;
}
src/main/java/com/xcong/excoin/modules/documentary/vo/FollowRecordsVo.java
@@ -28,16 +28,9 @@
     */
    @ApiModelProperty(value = "跟随者ID")
    private Long memberId;
    /**
     * 交易员ID
     */
    @ApiModelProperty(value = "交易员ID")
    private Long tradeId;
    /**
     * 交易员会员ID
     */
    @ApiModelProperty(value = "交易员会员ID")
    private Long tradeMemberId;
    @ApiModelProperty(value = "跟随者账号")
    private String account;
    /**
     * 累计跟随本金
     */
@@ -48,9 +41,5 @@
     */
    @ApiModelProperty(value = "累计收益")
    private BigDecimal totalProfit;
    /**
     * 是否跟随 1-是 2-否
     */
    @ApiModelProperty(value = "是否跟随 1-是 2-否")
    private Integer isFollow;
}
src/main/java/com/xcong/excoin/modules/documentary/vo/MyFollowOrderVo.java
New file
@@ -0,0 +1,54 @@
package com.xcong.excoin.modules.documentary.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "MyFollowOrderVo", description = "返回类")
public class MyFollowOrderVo {
    @ApiModelProperty("币种")
    private String symbol;
    @ApiModelProperty("订单类型 -1撤单,1开多,2开空,3平多,4平空")
    private int orderType;
    @ApiModelProperty("杠杆")
    private int leverRatio;
    @ApiModelProperty("开仓价")
    private BigDecimal openingPrice;
    @ApiModelProperty("平仓价")
    private BigDecimal closingPrice;
    @ApiModelProperty("盈亏金额")
    private BigDecimal rewardAmount;
    @ApiModelProperty("张数")
    private BigDecimal rewardRatio;
    @ApiModelProperty("盈亏比例")
    private int symbolCnt;
    @ApiModelProperty("保证金")
    private BigDecimal bondAmount;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("开仓时间")
    private Date openingTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @ApiModelProperty("平仓时间")
    private Date closingTime;
    @ApiModelProperty("订单编号")
    private String orderNo;
}
src/main/java/com/xcong/excoin/modules/documentary/vo/MyFollowTraderInfoVo.java
New file
@@ -0,0 +1,46 @@
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 = "MyFollowTraderInfoVo", description = "返回类")
public class MyFollowTraderInfoVo {
    /**
     * 跟随者ID
     */
    @ApiModelProperty(value = "跟随者ID")
    private Long memberId;
    @ApiModelProperty(value = "交易员ID")
    private Long tradeId;
    @ApiModelProperty(value = "交易员会员ID")
    private Long tradeMemberId;
    /**
     * 头像
     */
    @ApiModelProperty("头像")
    private String avatar;
    /**
     * 名称
     */
    @ApiModelProperty("名称")
    private String nickname;
    /**
     * 累计跟随本金
     */
    @ApiModelProperty(value = "累计跟随本金")
    private BigDecimal totalPrincipal;
    /**
     * 累计收益
     */
    @ApiModelProperty(value = "累计收益")
    private BigDecimal totalProfit;
}
src/main/resources/mapper/documentary/FollowFollowerProfitDao.xml
@@ -15,7 +15,53 @@
            follow_follower_profit 
        WHERE 
            trade_member_id = #{tradeMemberId} 
            and is_follow = 1
        order by create_time desc
    </select>
    <select id="selectFollowFollowerProfitEntitys" resultType="com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity">
        SELECT
            *
        FROM
            follow_follower_profit
        WHERE
            member_id = #{memberId}
            and is_follow = 1
        order by create_time desc
    </select>
    <select id="getMyFollowOrderHistoryRecords" resultType="com.xcong.excoin.modules.contract.entity.ContractOrderEntity">
        SELECT
            *
        FROM
            contract_order
        WHERE
            member_id = #{memberId}
            and contract_type = 2
            and order_type in (3,4)
            and closing_type not in (4,5)
        order by opening_time desc
    </select>
    <select id="getMyFollowOrderNowRecords" resultType="com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity">
        SELECT
            *
        FROM
            contract_hold_order
        WHERE
            member_id = #{memberId}
            and contract_type = 2
        order by opening_time desc
    </select>
    <select id="getFollowOrderNowRecords" resultType="com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity">
        SELECT
            *
        FROM
            contract_hold_order
        WHERE
            member_id = #{memberId}
            and contract_type = 2
        order by opening_time desc
    </select>
</mapper>