From 5b6e276420c04be1bc5b841e0f3174a20ddc270d Mon Sep 17 00:00:00 2001 From: tianea Date: Wed, 29 Mar 2023 12:20:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../competitiion/job/biz/RankingBiz.java | 59 +++++++++++++++---- .../repository/CompetitionMemberDao.java | 7 ++- 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java index d17a782..95865c8 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/RankingBiz.java @@ -270,16 +270,38 @@ public class RankingBiz { } }); computeScore(rankingList,currentTask,competition,baseRatio); - if(competition.getTeamMaxCount() == null){ - computeRanking(rankingList,currentTask,1,now); - }else{ - computeRanking(rankingList,currentTask,competition.getTeamMaxCount(),now); - } - +// if(competition.getTeamMaxCount() == null){ +// computeRanking(rankingList,currentTask,1,now); +// }else{ +// computeRanking(rankingList,currentTask,competition.getTeamMaxCount(),now); +// } + computeRanking(rankingList,currentTask,competition.getTeamMaxCount(),now); + computeMemberRank(currentTask.getCompetitionId(),currentTask.getStageId(),competition.getTeamMaxCount()); competition.setUpdateRankDate(now); competitionDao.save(competition); } + public void computeMemberRank(Long compId,Integer stageId,Integer memberCount){ + List memberList = memberDao.findAllByCompetitionIdAndStageId(compId,stageId); + CompetitionTask task = taskDao.getByCompetitionIdAndStageId(compId,stageId); + if(memberList == null || task == null || memberList.size() == 0 ){ + return ; + } + memberList.forEach(member->{ + Double combineScore = computeCombineScore(task,member.getExamScore(),member.getFinanceScore()); + member.setCombineScore(combineScore); + memberDao.updateComineScore(combineScore,member.getId()); + }); + memberList.sort(Comparator.comparing(CompetitionMember::getCombineScore).reversed()); + for(int i = 0;i rankingList, CompetitionTask currentTask,Competition competition,Double baseRatio){ Double maxPnlRaito = rankingList.stream().mapToDouble(rank->{ return rank.getPnlRatio() == null?0d:rank.getPnlRatio(); }).max().orElse(0D); @@ -302,7 +324,7 @@ public class RankingBiz { } } } - memberDao.updateRankingMemberData(ranking.getReportId(),financeScore,combineScore,baseRatio,ranking.getAvailable(), + memberDao.updateRankingMemberData(ranking.getReportId(),maxPnlRaito,financeScore,combineScore,baseRatio,ranking.getAvailable(), ranking.getNav(),ranking.getCloseCount(),ranking.getOpenCount(),ranking.getCumCommission(),ranking.getPnlRatio(), ranking.getCalmarRatio(),ranking.getSharpRatio(),ranking.getPnlRatioAnnual(),ranking.getProfitLoss(),ranking.getMaxDrawdown(), ranking.getMarketValue(),ranking.getUserNo(),ranking.getCompId(),ranking.getStageId()); @@ -412,12 +434,12 @@ public class RankingBiz { }); }); - rankingList.sort(Comparator.comparing(Ranking::getFinanceScore).reversed()); + rankingList.sort(Comparator.comparing(Ranking::getCombineScore).reversed()); for(int i = 0;i tcrMap = sortMapByValues(teamCombineRank); @@ -433,7 +455,7 @@ public class RankingBiz { // // } rankingDao.saveAll(rankingList); - memberDao.updateTeamRank(task.getStageId(),task.getCompetitionId(),memberCount); +// memberDao.updateTeamRank(task.getStageId(),task.getCompetitionId(),memberCount); memberDao.updateTeamRank2(now); } @@ -458,10 +480,13 @@ public class RankingBiz { * @param financeScore * @return */ - private double computeCombineScore(CompetitionTask task,Double examScore,double financeScore){ + private double computeCombineScore(CompetitionTask task,Double examScore,Double financeScore){ if(examScore == null){ examScore =0d; } + if( financeScore == null ){ + financeScore = 0d; + } Long power = task.getExamPower(); if(power == null){ power = 0L; @@ -479,7 +504,17 @@ public class RankingBiz { * @return */ private double computeFinaceScore(CompetitionTask task,double userRatio,double baseRatio,double maxUserRatio){ - double score = task.getFinanceBasePower() + ((userRatio - baseRatio) /(maxUserRatio -baseRatio))* task.getFinanceProfitPower(); +// double score = task.getFinanceBasePower() + ((userRatio - baseRatio) /(maxUserRatio -baseRatio))* task.getFinanceProfitPower(); +// double score = task.getFinanceProfitPower() + ((userRatio - baseRatio) /(maxUserRatio -baseRatio))* task.getFinanceBasePower(); + double score = 0d; + if(maxUserRatio>=0) { + score = task.getFinanceProfitPower() + (userRatio /maxUserRatio)* task.getFinanceBasePower(); + } else { + if(userRatio == 0 ) { + return task.getFinanceProfitPower(); + } + score = task.getFinanceProfitPower() + (maxUserRatio/userRatio)* task.getFinanceBasePower(); + } return score; } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java index af651f8..2fc6d35 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java @@ -113,14 +113,19 @@ public interface CompetitionMemberDao extends JpaRepository