| | |
| | | package com.xcong.excoin.quartz.job; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import com.xcong.excoin.modules.contract.dao.ContractOrderDao; |
| | | import com.xcong.excoin.modules.contract.entity.ContractOrderEntity; |
| | | import com.xcong.excoin.modules.documentary.dao.FollowFollowerOrderRelationDao; |
| | | import com.xcong.excoin.modules.documentary.dao.FollowFollowerProfitDao; |
| | | import com.xcong.excoin.modules.documentary.dao.FollowTraderInfoDao; |
| | | import com.xcong.excoin.modules.documentary.dao.FollowTraderProfitInfoDao; |
| | | import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; |
| | | import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.scheduling.annotation.Scheduled; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * |
| | |
| | | * @author wzy |
| | | * @date 2020-08-06 |
| | | **/ |
| | | @Slf4j |
| | | @Component |
| | | @ConditionalOnProperty(prefix = "app", name = "loop-job", havingValue = "true") |
| | | public class FollowProfitUpdateJob { |
| | | |
| | | @Resource |
| | | private FollowTraderInfoDao followTraderInfoDao; |
| | | @Resource |
| | | private FollowFollowerProfitDao followFollowerProfitDao; |
| | | @Resource |
| | | private ContractOrderDao contractOrderDao; |
| | | @Resource |
| | | private FollowFollowerOrderRelationDao followFollowerOrderRelationDao; |
| | | @Resource |
| | | private FollowTraderProfitInfoDao followTraderProfitInfoDao; |
| | | |
| | | //@Scheduled(cron = "0 0/30 * * * ? ") |
| | | @Scheduled(cron = "0 0/5 * * * ?") |
| | | public void traderProfitUpdate() { |
| | | log.info("交易员定时任务执行"); |
| | | // 查询所有交易员信息 |
| | | List<FollowTraderInfoEntity> allTraders = followTraderInfoDao.selectAllTraderInfo(); |
| | | if (CollUtil.isNotEmpty(allTraders)) { |
| | | for (FollowTraderInfoEntity trader : allTraders) { |
| | | Long tradeMemberId = trader.getMemberId(); |
| | | FollowTraderProfitInfoEntity traderInfoProfit = followTraderProfitInfoDao.selectTraderInfoProfitByMemberId(tradeMemberId); |
| | | // 累计收益率 |
| | | BigDecimal totalProfitRatio = contractOrderDao.selectFollowOrderTotalProfitByMemberId(tradeMemberId); |
| | | traderInfoProfit.setTotalProfitRatio(totalProfitRatio); |
| | | // 带单总收益 |
| | | BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfit(tradeMemberId); |
| | | traderInfoProfit.setTotalProfit(totalProfit); |
| | | // 交易笔数 |
| | | List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderByMemberId(tradeMemberId); |
| | | traderInfoProfit.setTotalOrderCnt(CollUtil.isNotEmpty(orders) ? orders.size() : 0); |
| | | // 近三周胜率 |
| | | Integer winCnt = contractOrderDao.selectFollowOrderCntForWinRate(tradeMemberId, 1); |
| | | Integer allCnt = contractOrderDao.selectFollowOrderCntForWinRate(tradeMemberId, null); |
| | | |
| | | if (winCnt != null && allCnt != null && allCnt!=0) { |
| | | BigDecimal winRate = BigDecimal.valueOf(winCnt).divide(BigDecimal.valueOf(allCnt), 4, BigDecimal.ROUND_DOWN); |
| | | traderInfoProfit.setWinRate(winRate); |
| | | } |
| | | |
| | | // 跟随者总收益 |
| | | BigDecimal followerProfit = followFollowerProfitDao.selectAllFollowerProfit(tradeMemberId); |
| | | traderInfoProfit.setFollowerTotalProfit(followerProfit); |
| | | // 累计跟随人数 |
| | | int followerCnt = followFollowerProfitDao.selectFollowerCntByTradeMemberId(tradeMemberId); |
| | | traderInfoProfit.setTotalFollowerCnt(followerCnt); |
| | | |
| | | followTraderProfitInfoDao.updateById(traderInfoProfit); |
| | | } |
| | | } |
| | | } |
| | | } |