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,6 +1032,10 @@ 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>