|  |  | 
 |  |  |     private FollowTraderLabelDao followTraderLabelDao; | 
 |  |  |     @Resource | 
 |  |  |     private MemberSettingDao memberSettingDao; | 
 |  |  | 	 | 
 |  |  |     @Test | 
 |  |  |     public void traderProfitUpdate() { | 
 |  |  |         log.info("交易员定时任务执行"); | 
 |  |  |         // 查询所有交易员信息 | 
 |  |  |         List<FollowTraderInfoEntity> allTraders = followTraderInfoDao.selectAllTraderInfo(); | 
 |  |  |         if (CollUtil.isNotEmpty(allTraders)) { | 
 |  |  |             for (FollowTraderInfoEntity trader : allTraders) { | 
 |  |  |                 Long tradeMemberId = trader.getMemberId(); | 
 |  |  |                 //获取交易员的当前跟随者 | 
 |  |  |                 Map<String, Object> hashMap = new HashMap<>(); | 
 |  |  |                 hashMap.put("trade_member_id", tradeMemberId); | 
 |  |  |                 hashMap.put("is_follow", FollowFollowerProfitEntity.IS_FOLLOW_Y); | 
 |  |  |                 List<FollowFollowerProfitEntity> followFollowerProfitEntityList = followFollowerProfitDao.selectByMap(hashMap); | 
 |  |  |                 if(CollUtil.isNotEmpty(followFollowerProfitEntityList)) { | 
 |  |  |                     for(FollowFollowerProfitEntity followFollowerProfitEntity : followFollowerProfitEntityList) { | 
 |  |  |                         //获取当前跟随者的跟随本金 | 
 |  |  |                         Long memberId = followFollowerProfitEntity.getMemberId(); | 
 |  |  |                         BigDecimal sumBondAmountBigDecimal = followFollowerProfitDao.selectSumBondAmountBymemberId(memberId,trader.getId()); | 
 |  |  |                         sumBondAmountBigDecimal = (sumBondAmountBigDecimal == null?BigDecimal.ZERO:sumBondAmountBigDecimal.setScale(2, BigDecimal.ROUND_DOWN)); | 
 |  |  |                         followFollowerProfitEntity.setTotalPrincipal(sumBondAmountBigDecimal); | 
 |  |  |                         //获取当前的盈亏 | 
 |  |  |                         BigDecimal sumRewardAmountBigDecimal = followFollowerProfitDao.selectSumRewardAmountByMemberId(memberId,trader.getId()); | 
 |  |  |                         sumRewardAmountBigDecimal = (sumRewardAmountBigDecimal == null?BigDecimal.ZERO:sumRewardAmountBigDecimal.setScale(2, BigDecimal.ROUND_DOWN)); | 
 |  |  |                         followFollowerProfitEntity.setTotalProfit(sumRewardAmountBigDecimal); | 
 |  |  |                         followFollowerProfitDao.updateById(followFollowerProfitEntity); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                 FollowTraderProfitInfoEntity traderInfoProfit = followTraderProfitInfoDao.selectTraderInfoProfitByMemberId(tradeMemberId); | 
 |  |  |                 // 累计收益率 | 
 |  |  |                 BigDecimal ljsyl = contractOrderDao.selectFollowOrderTotalProfitByMemberId(tradeMemberId); | 
 |  |  |                 BigDecimal totalProfitRatio = (ljsyl == null?BigDecimal.ZERO:ljsyl.setScale(2, BigDecimal.ROUND_DOWN)); | 
 |  |  |                 traderInfoProfit.setTotalProfitRatio(totalProfitRatio); | 
 |  |  |                 // 带单总收益,只查询交易员自己的带单总收益 | 
 |  |  |                 BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfitSelf(tradeMemberId); | 
 |  |  |                 //BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfit(tradeMemberId); | 
 |  |  |                 traderInfoProfit.setTotalProfit(totalProfit); | 
 |  |  |                 // 交易笔数 | 
 |  |  | //                List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderByMemberId(tradeMemberId); | 
 |  |  |                 List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderListByMemberId(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); | 
 |  |  |                 } | 
 |  |  |                 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); | 
 |  |  |                 // 当前跟随人数 | 
 |  |  |                 int followerCnt = followFollowerProfitDao.selectFollowerCntByTradeMemberId(tradeMemberId); | 
 |  |  |                 traderInfoProfit.setTotalFollowerCnt(followerCnt); | 
 |  |  |  | 
 |  |  |                 followTraderProfitInfoDao.updateById(traderInfoProfit); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | // | 
 |  |  | //    @Test | 
 |  |  | //    public void traderProfitUpdate() { | 
 |  |  | //        log.info("交易员定时任务执行"); | 
 |  |  | //        // 查询所有交易员信息 | 
 |  |  | //        List<FollowTraderInfoEntity> allTraders = followTraderInfoDao.selectAllTraderInfo(); | 
 |  |  | //        if (CollUtil.isNotEmpty(allTraders)) { | 
 |  |  | //            for (FollowTraderInfoEntity trader : allTraders) { | 
 |  |  | //                Long tradeMemberId = trader.getMemberId(); | 
 |  |  | //                //获取交易员的当前跟随者 | 
 |  |  | //                Map<String, Object> hashMap = new HashMap<>(); | 
 |  |  | //                hashMap.put("trade_member_id", tradeMemberId); | 
 |  |  | //                hashMap.put("is_follow", FollowFollowerProfitEntity.IS_FOLLOW_Y); | 
 |  |  | //                List<FollowFollowerProfitEntity> followFollowerProfitEntityList = followFollowerProfitDao.selectByMap(hashMap); | 
 |  |  | //                if(CollUtil.isNotEmpty(followFollowerProfitEntityList)) { | 
 |  |  | //                    for(FollowFollowerProfitEntity followFollowerProfitEntity : followFollowerProfitEntityList) { | 
 |  |  | //                        //获取当前跟随者的跟随本金 | 
 |  |  | //                        Long memberId = followFollowerProfitEntity.getMemberId(); | 
 |  |  | //                        BigDecimal sumBondAmountBigDecimal = followFollowerProfitDao.selectSumBondAmountBymemberId(memberId,trader.getId()); | 
 |  |  | //                        sumBondAmountBigDecimal = (sumBondAmountBigDecimal == null?BigDecimal.ZERO:sumBondAmountBigDecimal.setScale(2, BigDecimal.ROUND_DOWN)); | 
 |  |  | //                        followFollowerProfitEntity.setTotalPrincipal(sumBondAmountBigDecimal); | 
 |  |  | //                        //获取当前的盈亏 | 
 |  |  | //                        BigDecimal sumRewardAmountBigDecimal = followFollowerProfitDao.selectSumRewardAmountByMemberId(memberId,trader.getId()); | 
 |  |  | //                        sumRewardAmountBigDecimal = (sumRewardAmountBigDecimal == null?BigDecimal.ZERO:sumRewardAmountBigDecimal.setScale(2, BigDecimal.ROUND_DOWN)); | 
 |  |  | //                        followFollowerProfitEntity.setTotalProfit(sumRewardAmountBigDecimal); | 
 |  |  | //                        followFollowerProfitDao.updateById(followFollowerProfitEntity); | 
 |  |  | //                    } | 
 |  |  | //                } | 
 |  |  | // | 
 |  |  | // | 
 |  |  | //                FollowTraderProfitInfoEntity traderInfoProfit = followTraderProfitInfoDao.selectTraderInfoProfitByMemberId(tradeMemberId); | 
 |  |  | //                // 累计收益率 | 
 |  |  | //                BigDecimal ljsyl = contractOrderDao.selectFollowOrderTotalProfitByMemberId(tradeMemberId); | 
 |  |  | //                BigDecimal totalProfitRatio = (ljsyl == null?BigDecimal.ZERO:ljsyl.setScale(2, BigDecimal.ROUND_DOWN)); | 
 |  |  | //                traderInfoProfit.setTotalProfitRatio(totalProfitRatio); | 
 |  |  | //                // 带单总收益,只查询交易员自己的带单总收益 | 
 |  |  | //                BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfitSelf(tradeMemberId); | 
 |  |  | //                //BigDecimal totalProfit = followFollowerOrderRelationDao.selectTraderTotalProfit(tradeMemberId); | 
 |  |  | //                traderInfoProfit.setTotalProfit(totalProfit); | 
 |  |  | //                // 交易笔数 | 
 |  |  | ////                List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderByMemberId(tradeMemberId); | 
 |  |  | //                List<ContractOrderEntity> orders = contractOrderDao.selectFollowOrderListByMemberId(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); | 
 |  |  | //                } | 
 |  |  | //                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); | 
 |  |  | //                // 当前跟随人数 | 
 |  |  | //                int followerCnt = followFollowerProfitDao.selectFollowerCntByTradeMemberId(tradeMemberId); | 
 |  |  | //                traderInfoProfit.setTotalFollowerCnt(followerCnt); | 
 |  |  | // | 
 |  |  | //                followTraderProfitInfoDao.updateById(traderInfoProfit); | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  |  | 
 |  |  | } |