xiaoyong931011
2021-04-06 d76ed8abc8f31e210f4e93f173f41bc2861870dd
20210406  交易员列表查询
7 files modified
116 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java 22 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/FollowTraderProfitInfoVo.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/documentary/vo/TradeProfitInfoVo.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/quartz/job/FollowProfitUpdateJob.java 23 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/contract/ContractOrderDao.xml 37 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/contract/dao/ContractOrderDao.java
@@ -6,9 +6,13 @@
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.contract.parameter.dto.OrderListDto;
import com.xcong.excoin.modules.contract.parameter.vo.OrderListVo;
import cn.hutool.core.date.DateTime;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
@@ -37,4 +41,20 @@
    public List<ContractOrderEntity> selectFollowOrderListByMemberId(@Param("tradeMemberId")Long tradeMemberId);
    public String selectOrderNoByOrderIds(@Param("orderId")Long orderId);
}
    public BigDecimal selectThirtyTotalCntByMemberId(@Param("memberId")Long tradeMemberId, @Param("date")Date date, @Param("offsetDay")DateTime offsetDay);
    public BigDecimal selectThirtyWinCntByMemberId(@Param("memberId")Long tradeMemberId, @Param("date")Date date, @Param("offsetDay")DateTime offsetDay);
    public BigDecimal selectThirtyMaxRatioByMemberId(@Param("memberId")Long tradeMemberId, @Param("date")Date date, @Param("offsetDay")DateTime offsetDay);
    public BigDecimal selectThirtyMinRatioByMemberId(@Param("memberId")Long tradeMemberId, @Param("date")Date date, @Param("offsetDay")DateTime offsetDay);
}
src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java
@@ -43,6 +43,14 @@
     */
    private BigDecimal followerTotalProfit;
    /**
     * 三十天胜率
     */
    private BigDecimal thirtyProfitRatio;
    /**
     * 三十天最大回撤率
     */
    private BigDecimal thirtyRatio;
    /**
     * 胜率
     */
    private BigDecimal winRate;
src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java
@@ -1032,7 +1032,11 @@
            tradeProfitInfoVo.setTotalFollowerCnt(totalFollowerCnt);
            BigDecimal totalOrderCnt = followTraderProfitInfoVo.getTotalOrderCnt();
            tradeProfitInfoVo.setTotalOrderCnt(totalOrderCnt);
        }
            BigDecimal thirtyProfitRatio = followTraderProfitInfoVo.getThirtyProfitRatio();
            tradeProfitInfoVo.setThirtyProfitRatio(thirtyProfitRatio);
            BigDecimal thirtyRatio = followTraderProfitInfoVo.getThirtyRatio();
            tradeProfitInfoVo.setThirtyRatio(thirtyRatio);
        }
        return Result.ok(tradeProfitInfoVo);
    }
src/main/java/com/xcong/excoin/modules/documentary/vo/FollowTraderProfitInfoVo.java
@@ -48,6 +48,16 @@
     */
    @ApiModelProperty("胜率")
    private BigDecimal winRate;
    /**
     * 三十天胜率
     */
    @ApiModelProperty("三十天胜率")
    private BigDecimal thirtyProfitRatio;
    /**
     * 三十天最大回撤率
     */
    @ApiModelProperty("三十天最大回撤率")
    private BigDecimal thirtyRatio;
    /**
     * 累计跟随人数
     */
src/main/java/com/xcong/excoin/modules/documentary/vo/TradeProfitInfoVo.java
@@ -30,6 +30,16 @@
    @ApiModelProperty("胜率")
    private BigDecimal winRate;
    /**
     * 三十天胜率
     */
    @ApiModelProperty("三十天胜率")
    private BigDecimal thirtyProfitRatio;
    /**
     * 三十天最大回撤率
     */
    @ApiModelProperty("三十天最大回撤率")
    private BigDecimal thirtyRatio;
    /**
     * 累计跟随人数
     */
    @ApiModelProperty("累计跟随人数")
src/main/java/com/xcong/excoin/quartz/job/FollowProfitUpdateJob.java
@@ -1,6 +1,9 @@
package com.xcong.excoin.quartz.job;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.xcong.excoin.modules.contract.dao.ContractOrderDao;
import com.xcong.excoin.modules.contract.entity.ContractOrderEntity;
import com.xcong.excoin.modules.documentary.dao.FollowFollowerOrderRelationDao;
@@ -18,6 +21,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -96,7 +100,24 @@
                    BigDecimal winRate = BigDecimal.valueOf(winCnt).divide(BigDecimal.valueOf(allCnt), 4, BigDecimal.ROUND_DOWN);
                    traderInfoProfit.setWinRate(winRate);
                }
                Date date = new Date();
                DateTime offsetDay = DateUtil.offsetDay(new Date(), -30);
                //30天胜率(30天盈利总张数/30平仓总张数)
                BigDecimal thirtyTotalCnt = contractOrderDao.selectThirtyTotalCntByMemberId(tradeMemberId,date,offsetDay);
                BigDecimal thirtyWinCnt = contractOrderDao.selectThirtyWinCntByMemberId(tradeMemberId,date,offsetDay);
                BigDecimal thirtyTotalCntRatio = (thirtyTotalCnt == null?BigDecimal.ZERO:thirtyTotalCnt.setScale(2, BigDecimal.ROUND_DOWN));
                BigDecimal thirtyWinCntRatio = (thirtyWinCnt == null?BigDecimal.ZERO:thirtyWinCnt.setScale(2, BigDecimal.ROUND_DOWN));
                BigDecimal thirtyProfitRatio = BigDecimal.ZERO.setScale(2, BigDecimal.ROUND_DOWN);;
                if(thirtyTotalCnt.compareTo(BigDecimal.ZERO) > 0) {
                    thirtyProfitRatio = thirtyWinCntRatio.divide(thirtyTotalCntRatio, 2, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_DOWN);
                }
                traderInfoProfit.setThirtyProfitRatio(thirtyProfitRatio);
                //30天最大回撤率(30天最高收益率-30天最低收益率)
                BigDecimal thirtyMaxRatio = contractOrderDao.selectThirtyMaxRatioByMemberId(tradeMemberId,date,offsetDay);
                BigDecimal thirtyMinRatio = contractOrderDao.selectThirtyMinRatioByMemberId(tradeMemberId,date,offsetDay);
                BigDecimal thirtyRatio = (thirtyMaxRatio == null?BigDecimal.ZERO:thirtyMaxRatio.setScale(2, BigDecimal.ROUND_DOWN))
                        .subtract((thirtyMinRatio == null?BigDecimal.ZERO:thirtyMinRatio.setScale(2, BigDecimal.ROUND_DOWN)));
                traderInfoProfit.setThirtyRatio(thirtyRatio);
                // 当前跟随者总收益
                BigDecimal followerProfit = followFollowerProfitDao.selectAllFollowerProfit(tradeMemberId);
                traderInfoProfit.setFollowerTotalProfit(followerProfit);
src/main/resources/mapper/contract/ContractOrderDao.xml
@@ -126,4 +126,41 @@
            closing_type IN (4, 5)
            and member_id=#{memberId}
    </select>
    <select id="selectThirtyTotalCntByMemberId" resultType="java.math.BigDecimal">
        select sum(symbol_cnt)/2
        from contract_order
        where
              member_id=#{memberId}
          and contract_type=2
          and create_time BETWEEN #{offsetDay} and #{date}
    </select>
    <select id="selectThirtyWinCntByMemberId" resultType="java.math.BigDecimal">
        select sum(symbol_cnt)/2
        from contract_order
        where
        member_id=#{memberId}
        and contract_type=2
        and create_time BETWEEN #{offsetDay} and #{date}
        and reward_ratio > 0
    </select>
    <select id="selectThirtyMaxRatioByMemberId" resultType="java.math.BigDecimal">
        select MAX(reward_ratio)*100
        from contract_order
        where
        member_id=#{memberId}
        and contract_type=2
        and create_time BETWEEN #{offsetDay} and #{date}
    </select>
    <select id="selectThirtyMinRatioByMemberId" resultType="java.math.BigDecimal">
        select MIN(reward_ratio)*100
        from contract_order
        where
        member_id=#{memberId}
        and contract_type=2
        and create_time BETWEEN #{offsetDay} and #{date}
    </select>
</mapper>