From 4a94887b911cdc0b78ffd5c728981ef83eb6990f Mon Sep 17 00:00:00 2001 From: tianea Date: Fri, 1 Apr 2022 10:54:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/common/core/tools/JWTUtil.java | 2 +- .../api/ApiCompetitionMemberController.java | 34 ++++ .../api/ApiCompetitionRankingController.java | 10 + .../api/ApiCompetitionTaskController.java | 28 +++ .../api/CompetitionExamController.java | 1 + .../api/CompetitionIndexControll.java | 17 +- .../api/biz/CompetitionExamBiz.java | 92 +++++---- .../api/biz/CompetitionIndexBiz.java | 85 +++++++-- .../api/biz/CompetitionMemberBiz.java | 108 +++++++++++ .../api/biz/CompetitionTaskBiz.java | 37 ++++ .../competitiion/api/dto/CompetitionDTO.java | 10 +- .../api/dto/CompetitionMemberDTO.java | 49 +++++ .../api/dto/CompetitionTaskDTO.java | 21 ++ .../competitiion/api/dto/ExamPaperDTO.java | 16 ++ .../competitiion/api/dto/GroupDTO.java | 16 ++ .../api/dto/ListCompetitionTaskDTO.java | 11 ++ .../competitiion/api/dto/ListGroupDTO.java | 11 ++ .../competitiion/api/dto/ListRankingDTO.java | 12 ++ .../competitiion/api/dto/RankingDTO.java | 8 + .../competitiion/api/dto/SubmitResultDTO.java | 2 +- .../competitiion/job/CompetitionJob.java | 12 +- .../competitiion/job/biz/RankingBiz.java | 180 ++++++++++++++++-- .../competitiion/pc/biz/PCGroupBiz.java | 9 +- .../platform/competitiion/pc/dto/TaskDTO.java | 1 + .../platform/competitiion/pc/vo/TaskVO.java | 2 + .../com/tz/platform/config/MyRedisConfig.java | 41 ++++ .../com/tz/platform/entity/Competition.java | 1 + .../tz/platform/entity/CompetitionMember.java | 52 +++-- .../tz/platform/entity/CompetitionTask.java | 2 + .../com/tz/platform/entity/ExamPaper.java | 6 +- .../java/com/tz/platform/entity/Ranking.java | 61 ++++-- .../com/tz/platform/juejin/JueJinApi.java | 21 +- .../repository/CompetitionGroupDao.java | 1 - .../repository/CompetitionMemberDao.java | 9 +- .../repository/CompetitionTaskDao.java | 4 + .../tz/platform/repository/ExamPaperDao.java | 1 + .../tz/platform/repository/RankingDao.java | 3 + .../java/com/tz/platform/entity/LoginLog.java | 2 +- .../java/com/tz/platform/entity/User.java | 4 + .../tz/platform/repository/LoginLogDao.java | 11 ++ .../user/api/UserLoginController.java | 10 +- .../user/api/biz/ApiUserLoginBiz.java | 32 +++- .../platform/user/api/dto/UserLoginDTO.java | 11 ++ .../user/auth/UserInfoController.java | 6 + .../user/auth/biz/AuthUserInfoBiz.java | 32 ++++ .../tz/platform/user/auth/vo/EditUserVO.java | 11 ++ 46 files changed, 964 insertions(+), 131 deletions(-) create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionMemberController.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionTaskController.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionMemberBiz.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionTaskBiz.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionMemberDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionTaskDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ExamPaperDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/GroupDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListCompetitionTaskDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListGroupDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListRankingDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/config/MyRedisConfig.java create mode 100644 tz/user/user-service/src/main/java/com/tz/platform/user/auth/vo/EditUserVO.java diff --git a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java index 592d163..f0059ff 100644 --- a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java +++ b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java @@ -18,7 +18,7 @@ public class JWTUtil { private static final String ISSUER = "TIANZE"; public static final String USERNO = "userNo"; public static final String USERTYPE= "userType"; - public static final Long DATE = 30 * 24 * 3600 * 1000L; // 1个月 + public static final Long DATE = 7* 24 * 3600 * 1000L; // 7天 /** * @param userNo diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionMemberController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionMemberController.java new file mode 100644 index 0000000..68dc044 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionMemberController.java @@ -0,0 +1,34 @@ +package com.tz.platform.competitiion.api; + +import com.tz.platform.common.core.base.BaseController; +import com.tz.platform.common.core.base.Result; +import com.tz.platform.competitiion.api.biz.CompetitionMemberBiz; +import com.tz.platform.competitiion.api.dto.CompetitionMemberDTO; +import com.tz.platform.competitiion.api.dto.ExamPaperDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/auth/competition/member") +public class ApiCompetitionMemberController extends BaseController { + + @Autowired + private CompetitionMemberBiz memberBiz; + + + @GetMapping(value = "paper") + public Result getPaper(@RequestParam("compId")Long compId, @RequestParam("stageId") Integer stageId){ + return memberBiz.getExamPaper(compId,stageId,getUserNo()); + } + + + @GetMapping(value = "get") + public Result get(@RequestParam("compId") Long compId,@RequestParam("stageId") Integer stageId){ + return memberBiz.get(compId,stageId,getUserNo()); + } + +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java new file mode 100644 index 0000000..ccfc8ee --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionRankingController.java @@ -0,0 +1,10 @@ +package com.tz.platform.competitiion.api; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/api/competition/ranking") +public class ApiCompetitionRankingController { + +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionTaskController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionTaskController.java new file mode 100644 index 0000000..50af977 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/ApiCompetitionTaskController.java @@ -0,0 +1,28 @@ +package com.tz.platform.competitiion.api; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.competitiion.api.biz.CompetitionTaskBiz; +import com.tz.platform.competitiion.api.dto.CompetitionTaskDTO; +import com.tz.platform.competitiion.api.dto.ListCompetitionTaskDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping(value = "auth/competition/task") +public class ApiCompetitionTaskController { + + @Autowired + private CompetitionTaskBiz taskBiz; + + @RequestMapping(value = "list") + public Result list(@RequestParam("compId") Long compId){ + return taskBiz.list(compId); + } + + @RequestMapping(value = "get") + public Result get(@RequestParam("compId") Long compId, @RequestParam("stageId") Integer stageId){ + return taskBiz.get(compId,stageId); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionExamController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionExamController.java index 713e9f4..4aa9fc3 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionExamController.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionExamController.java @@ -38,4 +38,5 @@ public class CompetitionExamController extends BaseController { return examBiz.startExam(compId,stageId,getUserNo()); } + } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java index e2e15ee..dbc0015 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java @@ -6,6 +6,8 @@ import com.tz.platform.common.core.base.Result; import com.tz.platform.competitiion.api.biz.CompetitionIndexBiz; import com.tz.platform.competitiion.api.dto.CompetitionDTO; import com.tz.platform.competitiion.api.dto.IndexListCompetitionDTO; +import com.tz.platform.competitiion.api.dto.ListGroupDTO; +import com.tz.platform.competitiion.api.dto.ListRankingDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -21,7 +23,6 @@ public class CompetitionIndexControll extends BaseController { return competitionIndexBiz.list(pageNo,type); } - @GetMapping(value = "get") public Result get(@RequestParam("compId") Long compId){ return competitionIndexBiz.get(compId); @@ -32,8 +33,18 @@ public class CompetitionIndexControll extends BaseController { return competitionIndexBiz.position(getUserNo(),cmpId,stageId); } - @GetMapping(value = "system") - public Result getSystemInfo(){ + @GetMapping(value = "content") + public Result getContent(@RequestParam("type") Integer type){ return Result.error("failed"); } + + @GetMapping(value = "sysRanking") + public Result sysRanking(@RequestParam("pageNO") Integer pageNo,@RequestParam("pageSize") Integer pageSize, @RequestParam("date") String date,@RequestParam("key") String key,@RequestParam("compId") Long compId, @RequestParam("stageId")Integer stageId){ + return competitionIndexBiz.listRanKing(pageNo,pageSize,date,key,compId,stageId); + } + + @GetMapping(value = "group") + public Result getGroup(@RequestParam("compId") Long compId,@RequestParam("stageId") Integer stageId){ + return competitionIndexBiz.getGroup(compId); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java index 3216e92..a8e6338 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionExamBiz.java @@ -9,10 +9,7 @@ import com.tz.platform.competitiion.api.dto.ExamDTO; import com.tz.platform.competitiion.api.dto.SubmitResultDTO; import com.tz.platform.competitiion.api.vo.SubmitQuestionVO; import com.tz.platform.competitiion.api.vo.SubmitVo; -import com.tz.platform.entity.CompetitionGroup; -import com.tz.platform.entity.CompetitionMember; -import com.tz.platform.entity.CompetitionTask; -import com.tz.platform.entity.ExamPaper; +import com.tz.platform.entity.*; import com.tz.platform.feign.exam.IFeignExam; import com.tz.platform.feign.exam.qo.CacheQuestionQO; import com.tz.platform.feign.exam.vo.QuestionVo; @@ -23,6 +20,7 @@ import com.tz.platform.repository.CompetitionMemberDao; import com.tz.platform.repository.CompetitionTaskDao; import com.tz.platform.repository.ExamPaperDao; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -52,30 +50,50 @@ public class CompetitionExamBiz { @Autowired private IFeignExam feignExam; + @Autowired + private RedisTemplate template; + public List getExamQuestion(Long compId,Integer stageId,Long userId){ UserVo currentUser = feignUser.getByUserNo(userId); - CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId,stageId); - List groupList = groupDao.findByCompetitionId(compId); - //学生层次限制 - List limitList = groupList.stream().filter(g->g.getLimitType() == 1).collect(Collectors.toList()); - List ids = new ArrayList<>(); - task.getQuestionList().forEach(taskQuestion -> { - if(taskQuestion.getGroupId().equals(0)){ - ids.addAll(taskQuestion.getQuestionIds()); - }else{ - //不同学生层次不同案例题 - CompetitionGroup group = limitList.stream().filter(g->g.getId() .equals(taskQuestion.getGroupId())).findFirst().orElse(null); - if(group!=null) { - GroupCat groupCat = group.getCatList().stream().filter(groupCat1 -> groupCat1.getId().equals(currentUser.getLevelId())).findFirst().orElse(null); - if (groupCat != null) { - ids.addAll(taskQuestion.getQuestionIds()); + String key = "questionList_"+compId+"_"+stageId+"_"+currentUser.getLevelId(); + Object questListObj = template.opsForValue().get(key); + List questionVos = null; + if(questListObj!=null){ + questionVos = ( List) questListObj; + }else{ + CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId,stageId); + List groupList = groupDao.findByCompetitionId(compId); + //学生层次限制 + List limitList = groupList.stream().filter(g->g.getLimitType() == 1).collect(Collectors.toList()); + List ids = new ArrayList<>(); + task.getQuestionList().forEach(taskQuestion -> { + if(taskQuestion.getGroupId().equals(0)){ + ids.addAll(taskQuestion.getQuestionIds()); + }else{ + //不同学生层次不同案例题 + CompetitionGroup group = limitList.stream().filter(g->g.getId() .equals(taskQuestion.getGroupId())).findFirst().orElse(null); + if(group!=null) { + GroupCat groupCat = group.getCatList().stream().filter(groupCat1 -> groupCat1.getId().equals(currentUser.getLevelId())).findFirst().orElse(null); + if (groupCat != null) { + ids.addAll(taskQuestion.getQuestionIds()); + } } } + }); + CacheQuestionQO qo = new CacheQuestionQO(); + qo.setIds(ids); + questionVos = feignExam.listQusetion(qo); + } + + questionVos.forEach(questionVo -> { + if(questionVo.getType() == 0){ + questionVo.setAnswerId(new ArrayList<>()); + }else{ + questionVo.getChildren().forEach(child->{ + child.setAnswerId(new ArrayList<>()); + }); } }); - CacheQuestionQO qo = new CacheQuestionQO(); - qo.setIds(ids); - List questionVos = feignExam.listQusetion(qo); return questionVos; } @@ -88,18 +106,23 @@ public class CompetitionExamBiz { @Transactional public Result startExam(Long compId, Integer stageId, Long userNo){ CompetitionMember member = competitionMemberDao.getByCompetitionIdAndStageIdAndUserId(compId,stageId,userNo); + CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId,stageId); if(member == null){ return Result.error("未报名该大赛或赛段"); } + + if(task.getExamDuration() == null){ + return Result.error("试卷设置错误"); + } if(member.getExamStartTime()!=null){ ExamDTO dto = new ExamDTO(); dto.setStartTime(member.getExamStartTime()); - dto.setEndTime(DateUtil.addHours(member.getExamStartTime(),1)); + dto.setEndTime(DateUtil.addHours(member.getExamStartTime(),task.getExamDuration())); return Result.success(dto); } Date examStartTime = new Date(); - Date examEndTime = DateUtil.addHours(examStartTime,1); + Date examEndTime = DateUtil.addHours(examStartTime,task.getExamDuration()); int affect = competitionMemberDao.updateExamStartTime(userNo,stageId,compId,examStartTime); if(affect>0){ ExamDTO dto = new ExamDTO(); @@ -131,7 +154,7 @@ public class CompetitionExamBiz { SubmitResultDTO dto = new SubmitResultDTO(); List questionVoList = getExamQuestion(vo.getCompId(),vo.getStageId(),vo.getUserNo()); - Long score = computeScore(questionVoList,vo.getQList()); + Double score = computeScore(questionVoList,vo.getQList()); competitionMemberDao.updateScore(vo.getUserNo(),vo.getStageId(),vo.getCompId(),score); competitionMemberDao.updateExamEndTimeAndCostTime(vo.getUserNo(),vo.getStageId(),vo.getCompId(),now,costTime); ExamPaper paper = BeanUtils.copyProperties(vo,ExamPaper.class); @@ -142,8 +165,8 @@ public class CompetitionExamBiz { } //计算得分 - private Long computeScore(List questionVoList, List submitQuestionVOS){ - Long totalScore = 0L; + private Double computeScore(List questionVoList, List submitQuestionVOS){ + Double totalScore = 0D; for(int j = 0;j< submitQuestionVOS.size();j++) { SubmitQuestionVO submitQuestionVO = submitQuestionVOS.get(j); @@ -154,19 +177,6 @@ public class CompetitionExamBiz { if(checkCorrect(q.getAnswerId(),submitQuestionVO.getIds())){ totalScore += q.getScore(); } -// if(q.getAnswerId().size() == submitQuestionVO.getIds().size()){ -// boolean crorrect = true; -// for(int i = 0 ;i subQuestionVO1.getId().intValue() == submitQuestionVO.getSubId()).findFirst().orElse(null); @@ -182,7 +192,7 @@ public class CompetitionExamBiz { } private boolean checkCorrect(List answerId,List checkList){ - if(checkList ==null&&checkList.size() == 0) {return false;} + if(checkList ==null||checkList.size() == 0) {return false;} if(answerId.size() == checkList.size()){ boolean correct = true; for(int i = 0 ;i template; + public Result list(int pageNo,int type){ int pageSize = 20; pageNo = pageNo - 1; @@ -55,6 +61,9 @@ public class CompetitionIndexBiz { pageNo = 0; } pageNo =pageNo* pageSize; + + String compListKey = "competition_list_"+type+"_"+pageNo; + Pageable pageable = PageRequest.of(pageNo,pageSize); Page competitionList = competitionDao.findAllByStatus(type,pageable); IndexListCompetitionDTO dto = new IndexListCompetitionDTO(); @@ -64,7 +73,15 @@ public class CompetitionIndexBiz { } public Result get(Long compId){ - Competition competition = competitionDao.getById(compId); + String compKey = "competition_"+compId; + Object compObj = template.opsForValue().get(compKey); + Competition competition = null; + if(compObj == null){ + competition = competitionDao.getById(compId); + template.opsForValue().set(compKey,competition,5, TimeUnit.MINUTES); + }else{ + competition = (Competition) compObj; + } CompetitionDTO dto = BeanUtils.copyProperties(competition,CompetitionDTO.class); return Result.success(dto); } @@ -122,4 +139,46 @@ public class CompetitionIndexBiz { return Result.error("获取数据失败"); } + + public Result listRanKing( Integer pageNo, Integer pageSize,String date,String key, Long compId, Integer stageId){ + + String redisKey = "system_ranking_"+compId+"_"+stageId+"_"+date; + Object rankListObj = template.opsForValue().get(redisKey); + List rankingList = null; + if(rankListObj == null){ + if(StringUtils.isEmpty(date)){ + Competition competition = competitionDao.getById(compId); + date = competition.getUpdateRankDate(); + } + rankingList = rankingDao.findAllByCompIdAndStageIdAndUpdateTime(compId,stageId,date); + rankingList.sort(Comparator.comparingInt(Ranking::getPersonalRank)); + template.opsForValue().set(redisKey,rankingList,1,TimeUnit.HOURS); + }else{ + rankingList = ( List)rankListObj; + } + List onPage = filterRank(pageNo,pageSize,key,rankingList); + List rankingDTOList = BeanUtils.copyProperties(onPage,RankingDTO.class); + ListRankingDTO dto = new ListRankingDTO(); + dto.setTotal(rankingList.size()); + dto.setList(rankingDTOList); + return Result.success(dto); + } + + private List filterRank(Integer pageNo,Integer pageSize,String key,List rankingList){ + List tempList = rankingList.stream().filter(ranking -> ranking.getName().contains(key)||ranking.getSchool().contains(key)||ranking.getTeamName().contains(key)).collect(Collectors.toList()); + int fromIndex = pageNo - 1; + if(fromIndex <0){ + fromIndex = 0; + } + int toIndex = fromIndex+pageSize; + return tempList.subList(fromIndex,toIndex); + } + + public Result getGroup(Long compId){ + List group = groupDao.findByCompetitionId(compId); + List groupDTOList = BeanUtils.copyProperties(group,GroupDTO.class); + ListGroupDTO dto = new ListGroupDTO(); + dto.setList(groupDTOList); + return Result.success(dto); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionMemberBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionMemberBiz.java new file mode 100644 index 0000000..57d8dfa --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionMemberBiz.java @@ -0,0 +1,108 @@ +package com.tz.platform.competitiion.api.biz; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.tools.BeanUtils; +import com.tz.platform.competitiion.api.dto.CompetitionMemberDTO; +import com.tz.platform.competitiion.api.dto.ExamPaperDTO; +import com.tz.platform.entity.CompetitionMember; +import com.tz.platform.entity.CompetitionTask; +import com.tz.platform.entity.ExamPaper; +import com.tz.platform.entity.JueJinToken; +import com.tz.platform.juejin.JueJinApi; +import com.tz.platform.juejin.bo.AccountInfo; +import com.tz.platform.repository.CompetitionMemberDao; +import com.tz.platform.repository.CompetitionTaskDao; +import com.tz.platform.repository.ExamPaperDao; +import com.tz.platform.repository.JueJinTokenDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.concurrent.TimeUnit; + +@Component +public class CompetitionMemberBiz { + + @Autowired + private CompetitionMemberDao memberDao; + + @Autowired + private CompetitionTaskDao competitionTaskDao; + + @Autowired + private JueJinTokenDao jueJinTokenDao; + + @Autowired + private ExamPaperDao examPaperDao; + + @Autowired + private RedisTemplate template; + + + public Result getExamPaper(Long compId, Integer stageId,Long userNo){ + ExamPaper paper = examPaperDao.getByUserNoAndCompIdAndStageId(userNo,compId,stageId); + if(paper!= null){ + return Result.success(BeanUtils.copyProperties(paper,ExamPaperDTO.class)); + } + return Result.error("failed"); + } + + public Result get(Long compId,Integer stageId,Long userNo){ + CompetitionMember member = memberDao.getByCompetitionIdAndStageIdAndUserId(compId,stageId,userNo); + if(member == null){ + return Result.error("未参赛"); + } + if(StringUtils.isEmpty(member.getAccountId())){ + return initSystem(compId,stageId,userNo); + } + CompetitionMemberDTO dto= BeanUtils.copyProperties(member,CompetitionMemberDTO.class); + return Result.success(dto); + } + + private Result initSystem(Long compId,Integer stageId,Long userNo){ + CompetitionMember member = memberDao.getByCompetitionIdAndStageIdAndUserId(compId,stageId,userNo); + if(member == null){ + return Result.error("未报名参赛"); + } + if(StringUtils.hasText(member.getAccountId())){ + return Result.success(BeanUtils.copyProperties(member,CompetitionMemberDTO.class)); + } + + String competitionTaskKey = "competition_task_"+compId+"_"+stageId; + Object taskObj = template.opsForValue().get(competitionTaskKey); + CompetitionTask competitionTask = null; + if(taskObj == null){ + competitionTask = competitionTaskDao.getByCompetitionIdAndStageId(compId,stageId); + template.opsForValue().set(competitionTaskKey,competitionTask,5, TimeUnit.MINUTES); + }else{ + competitionTask = (CompetitionTask) taskObj; + } + + //未开赛后不生成交易系统权限 + if(competitionTask.getOperationStartTime().getTime()> System.currentTimeMillis()){ + return Result.success(BeanUtils.copyProperties(member,CompetitionMemberDTO.class)); + } + + String juejinTokenKey = "juejin_token"; + JueJinToken jueJinToken = null; + Object jtObj = template.opsForValue().get(juejinTokenKey); + if(jtObj == null){ + jueJinToken =jueJinTokenDao.getById(1); + template.opsForValue().set(juejinTokenKey,jueJinToken,1, TimeUnit.DAYS); + }else{ + jueJinToken = (JueJinToken) jtObj; + } + + JueJinApi jueJinApi = new JueJinApi(jueJinToken.getToken()); + Integer tradeType = 1; + if(competitionTask.getTradeType() != 1){ + tradeType =4; + } + AccountInfo accountInfo = jueJinApi.createAccount(member.getName(),competitionTask.getInitCapital(),tradeType); + member.setAccountId(accountInfo.getAccount_id()); + member.setAccountPwd(jueJinToken.getToken()); + memberDao.save(member); + return Result.success( BeanUtils.copyProperties(member,CompetitionMemberDTO.class)); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionTaskBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionTaskBiz.java new file mode 100644 index 0000000..349c109 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionTaskBiz.java @@ -0,0 +1,37 @@ +package com.tz.platform.competitiion.api.biz; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.tools.BeanUtils; +import com.tz.platform.competitiion.api.dto.CompetitionTaskDTO; +import com.tz.platform.competitiion.api.dto.ListCompetitionTaskDTO; +import com.tz.platform.entity.CompetitionTask; +import com.tz.platform.repository.CompetitionTaskDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class CompetitionTaskBiz { + @Autowired + private CompetitionTaskDao taskDao; + + public Result list(Long compId){ + List taskList = taskDao.findAllByCompetitionId(compId); + if(taskList == null || taskList.size() == 0){ + return Result.error("无赛段数据"); + } + List rs =BeanUtils.copyProperties(taskList, CompetitionTaskDTO.class); + ListCompetitionTaskDTO dto = new ListCompetitionTaskDTO(); + dto.setList(rs); + return Result.success(dto); + } + + public Result get(Long compId,Integer stageId){ + CompetitionTask tak = taskDao.getByCompetitionIdAndStageId(compId,stageId); + if(tak==null){ + return Result.error("赛段数据获取失败"); + } + return Result.success(BeanUtils.copyProperties(tak,CompetitionTaskDTO.class)); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionDTO.java index 6d71585..ef0701e 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionDTO.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionDTO.java @@ -1,8 +1,9 @@ package com.tz.platform.competitiion.api.dto; +import com.tz.platform.common.core.bo.CompetitionNews; +import com.tz.platform.common.core.bo.Rotation; import com.tz.platform.common.core.bo.Stage; import lombok.Data; - import java.io.Serializable; import java.util.Date; import java.util.List; @@ -23,4 +24,11 @@ public class CompetitionDTO implements Serializable { private Integer peopleCount; private Integer teamCount; private List stageList; + + private List bannerList; + private String summary; + private String rule; + private String prize; + private List news; + private List schoolNews; } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionMemberDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionMemberDTO.java new file mode 100644 index 0000000..9596734 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionMemberDTO.java @@ -0,0 +1,49 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class CompetitionMemberDTO implements Serializable { + private Integer id; + private Long competitionId; + private Long userId; + private Integer stageId; + private String studentNo; + private String name; + private String school; + private Integer teamId; + private String teamName; + private String accountId; + private String accountPwd; + private String teacher; + private Double examScore; + private Double financeScore; + private Double combineScore; + private Integer personalRank; + private Integer teamRank; + private Date examStartTime; + private Date examEndTime; + private Double examCostTime; + private Integer levelId; + private Double initFounds; + private Double totalFounds; + private Double availableFounds; + private Double marketValue; + private Double currentRatio; + private Double highestRatio; + private Double overRatio; + private Double commission; + private Double totalRatio; + private Double baseRatio; + private Double yearRatio; + private Double maxDrawDown; + private String kammaRatio; + private String sharpRatio; + private Integer openCount; + private Integer closeCount; + private Double winRatio; + private Integer reportId; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionTaskDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionTaskDTO.java new file mode 100644 index 0000000..ac23fd0 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/CompetitionTaskDTO.java @@ -0,0 +1,21 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class CompetitionTaskDTO implements Serializable { + private Integer id; + private Long competitionId; + private Integer stageId; + private Date operationStartTime; + private Date operationEndTime; + private Date examStartTime; + private Date examEndTime; + private Integer tradeType; + private Long initCapital; + private String operationLogo; + private String examLogo; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ExamPaperDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ExamPaperDTO.java new file mode 100644 index 0000000..800e9ac --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ExamPaperDTO.java @@ -0,0 +1,16 @@ +package com.tz.platform.competitiion.api.dto; + +import com.tz.platform.competitiion.api.vo.SubmitQuestionVO; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class ExamPaperDTO implements Serializable { + private String id; + private Long userNo; + private Long compId; + private Integer stageId; + private List qList; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/GroupDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/GroupDTO.java new file mode 100644 index 0000000..949d428 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/GroupDTO.java @@ -0,0 +1,16 @@ +package com.tz.platform.competitiion.api.dto; + +import com.tz.platform.common.core.bo.GroupCat; +import lombok.Data; + +import java.util.List; +@Data +public class GroupDTO { + private Integer id; + private String name; + /** + * 1 为层次限制;2为区域限制 + */ + private Integer limitType; + private List catList; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListCompetitionTaskDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListCompetitionTaskDTO.java new file mode 100644 index 0000000..168b5ba --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListCompetitionTaskDTO.java @@ -0,0 +1,11 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class ListCompetitionTaskDTO implements Serializable { + private List list; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListGroupDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListGroupDTO.java new file mode 100644 index 0000000..a35681f --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListGroupDTO.java @@ -0,0 +1,11 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class ListGroupDTO implements Serializable { + List list; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListRankingDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListRankingDTO.java new file mode 100644 index 0000000..60e8ce4 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/ListRankingDTO.java @@ -0,0 +1,12 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class ListRankingDTO implements Serializable { + List list; + Integer total; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java new file mode 100644 index 0000000..361bd13 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/RankingDTO.java @@ -0,0 +1,8 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +@Data +public class RankingDTO { + +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/SubmitResultDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/SubmitResultDTO.java index a835124..4ef2bba 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/SubmitResultDTO.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/SubmitResultDTO.java @@ -6,5 +6,5 @@ import java.io.Serializable; @Data public class SubmitResultDTO implements Serializable { - private Long score; + private Double score; } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java index 0d4ff49..eea6c5b 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java @@ -54,7 +54,11 @@ public class CompetitionJob { } } -// @Scheduled(cron = "*/5 * * * * ?") + /** + * 每天零晨2点执行 + */ + @Scheduled(cron = "0 0 2 1 * ?") +// @Scheduled(cron = "10 * * * * ?") public void fetchRanking(){ String jobName = "rankingJob"; boolean lock = lock(jobName,ms); @@ -74,7 +78,13 @@ public class CompetitionJob { String jobName = "picJob"; boolean lock = lock(jobName,ms); if(lock){ + try{ + }catch (Exception ex){ + + }finally { + unLock(jobName); + } } } 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 79ca38f..766940e 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 @@ -1,6 +1,5 @@ package com.tz.platform.competitiion.job.biz; -import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.tz.platform.common.core.tools.DateUtil; @@ -12,8 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Component @Slf4j @@ -35,18 +34,21 @@ public class RankingBiz { @Autowired private RankingDao rankingDao; + public void fetchRanking(){ JueJinToken jueJinToken = jueJinTokenDao.getById(1); if(jueJinToken == null) {return;} JueJinApi jueJinApi = new JueJinApi(jueJinToken.getToken()); List competitionList = competitionDao.findAllByStatus(1); String endTime = DateUtil.format(new Date()); + String now = DateUtil.format(new Date()); competitionList.forEach(competition -> { try { CompetitionTask currentTask = taskDao.getByCompetitionIdAndStageId(competition.getId(), competition.getCurrentStage()); String startTime = DateUtil.format(currentTask.getOperationStartTime()); - String baseRatio = jueJinApi.getBaseRatio(startTime, endTime); + Double baseRatio = jueJinApi.getBaseRatio(startTime, endTime); List memberList = memberDao.findAllByCompetitionIdAndStageId(competition.getId(), competition.getCurrentStage()); + List rankingList = new ArrayList<>(); memberList.forEach(member -> { if (StringUtils.hasText(member.getAccountId())) { String jsonStr = jueJinApi.createReport(member.getAccountId(), endTime); @@ -56,24 +58,180 @@ public class RankingBiz { JSONObject jsonObject = JSONUtil.parseObj(jsonStr); if(jsonObject.containsKey("report_id")){ Integer reportId =jsonObject.getInt("report_id"); -// JSONArray jsonArray = jsonObject.getJSONArray("indicator_durations"); +// memberDao.updateReportId(member.getUserId(),currentTask.getStageId(),currentTask.getCompetitionId(),reportId); + member.setReportId(reportId); String contentStr = jueJinApi.getReport(reportId.toString()); - Ranking ranking = new Ranking(); - ranking.setAccountId(member.getAccountId()); -// ranking.setTotalRatio(baseRatio); - rankingDao.save(ranking); + JSONObject rankingObj = JSONUtil.parseObj(contentStr); + if(rankingObj.containsKey("data")){ + JSONObject dataObj = (JSONObject)rankingObj.getJSONArray("data").get(0); + JSONObject cashObj =dataObj.getJSONObject("cash"); + //可用资金 + Double available = cashObj.getDouble("available"); + //累计手续费 + Double cumCommission = cashObj.getDouble("cum_commission"); + //浮动盈亏 + Double fpnl = cashObj.getDouble("fpnl"); + //收益 + Double pnl = cashObj.getDouble("pnl"); + //总资产 + Double nav = cashObj.getDouble("nav"); + + JSONObject indicatorObj = dataObj.getJSONObject("indicator"); + //累计收益率 + Double pnlRatio = indicatorObj.getDouble("pnl_ratio"); + //年化收益率 + Double pnlRatioAnnual = indicatorObj.getDouble("pnl_ratio_annual"); + //夏普比例 + Double sharpRatio = indicatorObj.getDouble("sharp_ratio"); + //卡玛比例 + Double calmarRatio = indicatorObj.getDouble("calmar_ratio"); + //最大回测 + Double maxDrawdown = indicatorObj.getDouble("max_drawdown"); + //开仓次数 + Integer openCount = indicatorObj.getInt("open_count"); + //平仓次数 + Integer closeCount = indicatorObj.getInt("close_count"); + //胜率 + Double winRatio = indicatorObj.getDouble("win_ratio"); + if(member.getHighestRatio() == null){ + member.setHighestRatio(pnlRatio); + } + Double maxRatio = member.getHighestRatio(); + if(pnlRatio>member.getHighestRatio()){ + maxRatio = pnlRatio; + member.setHighestRatio(maxRatio); + } + Ranking ranking = new Ranking(); + ranking.setUserNo(member.getId().longValue()); + ranking.setCompId(competition.getId()); + ranking.setName(member.getName()); + ranking.setSchool(member.getSchool()); + ranking.setTeamName(member.getTeamName()); + ranking.setStageId(currentTask.getStageId()); + ranking.setTeamId(member.getTeamId()); + ranking.setId(now+"_"+member.getAccountId()); + ranking.setAccountId(member.getAccountId()); + ranking.setBaseRatio(baseRatio); + ranking.setPnlRatio(pnlRatio); + ranking.setProfitLoss(pnl - cumCommission); + ranking.setAvailable(available); + ranking.setCalmarRatio(calmarRatio); + ranking.setNav(nav); + ranking.setSharpRatio(sharpRatio); + ranking.setCloseCount(closeCount); + ranking.setOpenCount(openCount); + ranking.setCumCommission(cumCommission); + ranking.setFpnl(fpnl); + ranking.setMarketValue(nav-available); + ranking.setWinRatio(winRatio); + ranking.setUpdateTime(now); + ranking.setPnlRatioAnnual(pnlRatioAnnual); + ranking.setMaxDrawdown(maxDrawdown); + ranking.setLevelId(member.getLevelId()); + ranking.setRegionId(member.getReportId()); + double finaceScore = computeFinaceScore(currentTask,pnlRatio,baseRatio,maxRatio); + double combineScore = computeCombineScore(currentTask,member.getExamScore(),finaceScore); + member.setReportId(reportId); + member.setFinanceScore(finaceScore); + member.setCombineScore(combineScore); + member.setBaseRatio(baseRatio); + member.setAvailableFounds(available); + member.setTotalFounds(nav); + member.setCloseCount(closeCount); + member.setOpenCount(openCount); + member.setCommission(cumCommission); + member.setCurrentRatio(pnlRatio); + member.setKammaRatio(calmarRatio.toString()); + member.setSharpRatio(sharpRatio.toString()); + member.setYearRatio(pnlRatioAnnual); + member.setOverRatio(fpnl); + member.setMaxDrawDown(maxDrawdown); + member.setMarketValue(ranking.getMarketValue()); + memberDao.save(member); + ranking.setFinanceScore(finaceScore); + ranking.setCombineScore(combineScore); +// rankingDao.save(ranking); + rankingList.add(ranking); + } } } }); + + computeRanking(rankingList,currentTask); + competition.setUpdateRankDate(now); + competitionDao.save(competition); + }catch (Exception ex){ log.error("排行榜数据获取失败:{}",competition.getId(),ex); } }); } - private Long computeCombineScore(CompetitionTask task){ + /** + * 排名 + * @param rankingList + * @param task + */ + private void computeRanking(List rankingList ,CompetitionTask task){ + Map> map = rankingList.stream().collect(Collectors.groupingBy(Ranking::getTeamId)); + map.forEach((k,v)->{ + Double teamRatio = v.stream().mapToDouble((r)-> { + Double t = r.getProfitLoss(); + if(t == null){ + return 0D; + } + return t; + }).sum(); + + Double teamCombineScore = v.stream().mapToDouble((r)-> { + Double t = r.getCombineScore(); + if(t == null){ + return 0D; + } + return t; + }).sum(); + + v.forEach(ranking -> { + ranking.setTeamRatio(teamRatio); + ranking.setTeamCombineScore(teamCombineScore); + }); + }); + rankingList.sort(Comparator.comparing(Ranking::getFinanceScore)); + for(int i = 0;i get(Long cpId){ - CompetitionGroup group = groupDao.getByCompetitionId(cpId); - GroupDTO dto = new GroupDTO(); - BeanUtils.copyProperties(group,dto); - return Result.success(dto); +// CompetitionGroup group = groupDao.getByCompetitionId(cpId); +// GroupDTO dto = new GroupDTO(); +// BeanUtils.copyProperties(group,dto); +// return Result.success(dto); + return Result.error("接口未实现"); } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/dto/TaskDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/dto/TaskDTO.java index a921596..0ba250d 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/dto/TaskDTO.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/dto/TaskDTO.java @@ -19,6 +19,7 @@ public class TaskDTO implements Serializable { private Integer tradeType; private Long initCapital; private String operationLogo; + private String examLogo; private Long financeBasePower; private Long financeProfitPower; } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/TaskVO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/TaskVO.java index 2b3f8ea..f6162f5 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/TaskVO.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/TaskVO.java @@ -18,9 +18,11 @@ public class TaskVO implements Serializable { private Date operationEndTime; private Date examStartTime; private Date examEndTime; + private Integer examDuration; private Integer tradeType; private Long initCapital; private String operationLogo; + private String examLogo; private Long financeBasePower; private Long financeProfitPower; private List questionList; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/config/MyRedisConfig.java b/tz/competition/competition-service/src/main/java/com/tz/platform/config/MyRedisConfig.java new file mode 100644 index 0000000..31911f1 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/config/MyRedisConfig.java @@ -0,0 +1,41 @@ +package com.tz.platform.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +public class MyRedisConfig { + @Bean(name = "template") + public RedisTemplate template(RedisConnectionFactory factory) { + // 创建RedisTemplate对象 + RedisTemplate template = new RedisTemplate<>(); + // 配置连接工厂 + template.setConnectionFactory(factory); + // 定义Jackson2JsonRedisSerializer序列化对象 + Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper om = new ObjectMapper(); + // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会报异常 + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSeial.setObjectMapper(om); + StringRedisSerializer stringSerial = new StringRedisSerializer(); + // redis key 序列化方式使用stringSerial + template.setKeySerializer(stringSerial); + // redis value 序列化方式使用jackson + template.setValueSerializer(jacksonSeial); + // redis hash key 序列化方式使用stringSerial + template.setHashKeySerializer(stringSerial); + // redis hash value 序列化方式使用jackson + template.setHashValueSerializer(jacksonSeial); + template.afterPropertiesSet(); + return template; + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java index b009af7..2dea061 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java @@ -29,6 +29,7 @@ public class Competition { private Integer status; private Integer peopleCount; private Integer teamCount; + private String updateRankDate; private boolean enableSignup; @Column(columnDefinition = "TIMESTAMP") private Date startTime; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java index 1904d03..57ccf85 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java @@ -24,31 +24,49 @@ public class CompetitionMember { private String accountId; private String accountPwd; private String teacher; - private Long examScore; - private Long financeScore; - private Long combineScore; + @Column(columnDefinition = "double(10,3) default '0.00'") + private Double examScore; + @Column(columnDefinition = "double(10,3) default '0.00'") + private Double financeScore; + @Column(columnDefinition = "double(10,3) default '0.00'") + private Double combineScore; + private Integer personalRank; private Integer teamRank; + private Date examStartTime; private Date examEndTime; - private Long examCostTime; + private Double examCostTime; private Integer levelId; - private Long initFounds; - private Long totalFounds; - private Long availableFounds; - private Long marketValue; - private Long currentRatio; - private Long highestRatio; - private Long overRatio; - private Long commission; - private Long totalRatio; - private Long baseRatio; - private Long yearRatio; - private Long maxDrawDown; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double initFounds; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double totalFounds; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double availableFounds; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double marketValue; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double currentRatio; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double highestRatio; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double overRatio; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double commission; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double totalRatio; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double baseRatio; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double yearRatio; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double maxDrawDown; private String kammaRatio; private String sharpRatio; private Integer openCount; private Integer closeCount; - private Long winRatio; + @Column(columnDefinition = "double(11,3) default '0.00'") + private Double winRatio; private Integer reportId; } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionTask.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionTask.java index 89d6e1d..f5a05c7 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionTask.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionTask.java @@ -26,9 +26,11 @@ public class CompetitionTask { private Date operationEndTime; private Date examStartTime; private Date examEndTime; + private Integer examDuration; private Integer tradeType; private Long initCapital; private String operationLogo; + private String examLogo; private Long financeBasePower; private Long financeProfitPower; @Type(type = "json") diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/ExamPaper.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/ExamPaper.java index 0edacb7..8779faa 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/ExamPaper.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/ExamPaper.java @@ -6,13 +6,12 @@ import lombok.Data; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; +import javax.persistence.*; import java.util.List; @Data @Entity +@Table(indexes={ @Index(columnList = "userNo,compId,stageId")}) @TypeDef(name = "json", typeClass = JsonStringType.class) public class ExamPaper { @Id @@ -20,7 +19,6 @@ public class ExamPaper { private Long userNo; private Long compId; private Integer stageId; - @Type(type = "json") @Column(columnDefinition = "json") private List qList; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java index e9fe9a7..34544aa 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java @@ -1,15 +1,14 @@ package com.tz.platform.entity; import lombok.Data; +import org.springframework.stereotype.Indexed; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import javax.persistence.*; import java.util.Date; @Data @Entity +@Table(indexes = {@Index(columnList = "compId,stageId,updateTime")}) public class Ranking { @Id private String id; @@ -19,47 +18,47 @@ public class Ranking { /** * 总资产 */ - private Long nav; + private Double nav; /** * 可用资产 */ - private Long available; + private Double available; /** * 市值 */ - private Long marketValue; + private Double marketValue; /** * 累计盈亏 */ - private Long totalRatio; + private Double profitLoss; /** * 累计手续费 */ - private Long cumCommission; + private Double cumCommission; /** * 浮动盈亏 */ - private Long fpnl; + private Double fpnl; /** * 累计收益率 */ - private Long pnlRation; + private Double pnlRatio; /** * 基准收益率 */ - private Long baseRatio; + private Double baseRatio; /** * 团队收益率 */ - private Long teamRatio; + private Double teamRatio; /** * 个人排名 @@ -75,17 +74,17 @@ public class Ranking { /** * 最大回测 */ - private Long maxDrawdown; + private Double maxDrawdown; /** * 卡玛比率 */ - private Long calmarRatio; + private Double calmarRatio; /** * 夏普比率 */ - private Long sharpRatio; + private Double sharpRatio; /** * 开仓次数 @@ -100,12 +99,38 @@ public class Ranking { /** * 年化收益率 */ - private Long pnlRatioAnnual; + private Double pnlRatioAnnual; /** *胜率 */ - private Long winRatio; + private Double winRatio; + + private Long userNo; + private Long compId; + private Integer stageId; + private Integer teamId; + + private String name; + private String teamName; + private String school; + private Integer levelId; + private Integer regionId; + + /** + * 综合得分 + */ + private Double combineScore; + + /** + * 团队综合得分 + */ + private Double teamCombineScore; + + /** + * 交易得分 + */ + private Double financeScore; /** * 更新时间 diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java index 3924a2e..d9ae0b4 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; +import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; @@ -101,7 +102,7 @@ public class JueJinApi { * 基准收益率 * @return */ - public String getBaseRatio(String start,String end){ + public Double getBaseRatio(String start,String end){ String url = baseUrl +"/ds-history-rpcgw/v3/data-history/benchmark-return?symbol=SHSE.000300&frequency=1d&start_time="+start+"&end_time="+end+"&adjust=0"; String content = HttpUtil.get(url,headers); @@ -110,10 +111,12 @@ public class JueJinApi { JSONArray jsonArray = jsonObject.getJSONArray("data"); JSONObject ratioObj = (JSONObject) jsonArray.get(jsonArray.size()-1); logger.info("基准收益率:{}",ratioObj.get("ratio").toString()); - return ratioObj.get("ratio").toString(); + BigDecimal ratioDec = new BigDecimal(ratioObj.get("ratio").toString()); + + return ratioDec.doubleValue(); } - return ""; + return 0D; } /** @@ -164,6 +167,16 @@ public class JueJinApi { return content; } + /** + * 获取所有账户业绩报告 + * @return + */ + public String listReport(int pageNo,int pageSize){ + String url =baseUrl+ "/api/v1/reports?page="+pageNo+"&size="+pageSize; + String content = HttpUtil.get(url,headers); + return content; + } + public String test(){ String url = "https://sim.sztzjy.com/sim?acc=2e41a913-9dc1-11ec-89b3-00163e0e6ad0"; @@ -190,7 +203,7 @@ public class JueJinApi { // api.test(); // api.createReport(accountId,"report"+ System.currentTimeMillis()); // api.getCashInfo(accountId); - api.getReport("489327"); + api.getReport("2794345"); // api.getStockInfo("SHSE.600547,SHSE.603160"); // api.getProfit("2022-03-11","2022-03-15"); // api.getHeavy(accountId,start,end); diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionGroupDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionGroupDao.java index 3a3842a..9fa2773 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionGroupDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionGroupDao.java @@ -9,6 +9,5 @@ import java.util.List; @Repository public interface CompetitionGroupDao extends JpaRepository { List findByCompetitionId(Long competitionId); - CompetitionGroup getByCompetitionId(Long competitionId); int deleteAllByCompetitionIdAndIdNotIn(Long competition,List ids); } 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 90f9b30..8dc7841 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 @@ -36,7 +36,7 @@ public interface CompetitionMemberDao extends JpaRepository { CompetitionTask getById(Integer id); List findAllByCompetitionId(Long competitionId); + CompetitionTask getByCompetitionIdAndStageId(Long cmpId,Integer stageId); + + } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/ExamPaperDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/ExamPaperDao.java index e8ab826..b63869d 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/ExamPaperDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/ExamPaperDao.java @@ -6,4 +6,5 @@ import org.springframework.stereotype.Repository; @Repository public interface ExamPaperDao extends JpaRepository { + ExamPaper getByUserNoAndCompIdAndStageId(Long userNo,Long compId,Integer stageId); } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java index 3bd4826..fcb2fd4 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/RankingDao.java @@ -4,6 +4,9 @@ import com.tz.platform.entity.Ranking; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface RankingDao extends JpaRepository { + List findAllByCompIdAndStageIdAndUpdateTime(Long compId,Integer stageId,String updateTime); } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/entity/LoginLog.java b/tz/user/user-service/src/main/java/com/tz/platform/entity/LoginLog.java index 7f1c980..8a16784 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/entity/LoginLog.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/entity/LoginLog.java @@ -12,7 +12,6 @@ import java.util.Date; @Entity public class LoginLog { @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private Date loginDate; @@ -20,4 +19,5 @@ public class LoginLog { private String clientType; private String location; private Integer loginStatus; + private String lastTime; } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/entity/User.java b/tz/user/user-service/src/main/java/com/tz/platform/entity/User.java index 2f54d25..79e5c50 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/entity/User.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/entity/User.java @@ -39,6 +39,10 @@ public class User implements Serializable { private Integer regionId; private Integer levelId; + private String email; + + private Boolean complete; + @JsonIgnore private String mobileSalt; diff --git a/tz/user/user-service/src/main/java/com/tz/platform/repository/LoginLogDao.java b/tz/user/user-service/src/main/java/com/tz/platform/repository/LoginLogDao.java index 512ca63..5430e20 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/repository/LoginLogDao.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/repository/LoginLogDao.java @@ -2,8 +2,19 @@ package com.tz.platform.repository; import com.tz.platform.entity.LoginLog; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; @Repository public interface LoginLogDao extends JpaRepository { + + @Transactional + @Modifying + @Query(value = "update login_log set login_status = 2 where id=:userNo ",nativeQuery = true) + int updateLoginOut(@Param("userNo") Long userNo); + + LoginLog getById(Long id); } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java b/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java index c0f3fc2..5b326ae 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/api/UserLoginController.java @@ -6,10 +6,7 @@ import com.tz.platform.user.api.biz.ApiUserLoginBiz; import com.tz.platform.user.api.bo.UserLoginPasswordBO; import com.tz.platform.user.api.dto.UserLoginDTO; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/user/login") @@ -22,4 +19,9 @@ public class UserLoginController extends BaseController { public Result loginPassword(@RequestBody UserLoginPasswordBO userLoginPasswordBO){ return apiUserLoginBiz.loginPassword(userLoginPasswordBO); } + + @GetMapping(path = "out") + public Result loginOut(){ + return apiUserLoginBiz.loginOut(getUserNo()); + } } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java index 8216855..fe24f9f 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java @@ -3,6 +3,7 @@ package com.tz.platform.user.api.biz; import cn.hutool.crypto.digest.DigestUtil; import com.tz.platform.common.core.base.Result; import com.tz.platform.common.core.enmus.LoginStatusEnum; +import com.tz.platform.common.core.tools.DateUtil; import com.tz.platform.common.core.tools.JWTUtil; import com.tz.platform.entity.LoginLog; import com.tz.platform.entity.User; @@ -15,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import java.util.Date; @@ -64,7 +66,7 @@ public class ApiUserLoginBiz { return Result.error("账号或者密码不正确"); } // 登录日志 - loginLog(LoginStatusEnum.SUCCESS, userLoginPasswordBO.getIp(),user.getUsername(), userLoginPasswordBO.getClient()); + LoginLog loginLog = loginLog(LoginStatusEnum.SUCCESS, userLoginPasswordBO.getIp(),user.getUsername(), userLoginPasswordBO.getClient(),user.getId()); UserLoginDTO dto = new UserLoginDTO(); dto.setUserNo(user.getId()); @@ -72,22 +74,42 @@ public class ApiUserLoginBiz { dto.setName(user.getName()); dto.setSchool(user.getSchool()); dto.setLevelId(user.getLevelId()); + dto.setEmail(user.getEmail()); + dto.setMobile(user.getMobile()); + dto.setIp(loginLog.getIp()); + dto.setComplete(user.getComplete()); + dto.setLocation(loginLog.getLocation()); + dto.setLastLoginTime(loginLog.getLastTime()); dto.setToken(JWTUtil.create(user.getId(),user.getUserType(), JWTUtil.DATE)); // 登录成功,存入缓存,单点登录使用 -// redisTemplate.opsForValue().set(dto.getUserNo().toString(), dto.getToken(), 1, TimeUnit.DAYS); - template.opsForValue().set(dto.getUserNo().toString(),dto,1,TimeUnit.DAYS); +// template.opsForValue().set(dto.getUserNo().toString(),dto,1,TimeUnit.DAYS); return Result.success(dto); } - private void loginLog(LoginStatusEnum loginStatusEnum, String ip,String username,String clientType){ - LoginLog loginLog = new LoginLog(); + private LoginLog loginLog(LoginStatusEnum loginStatusEnum, String ip,String username,String clientType,Long userNo){ + LoginLog loginLog = loginLogDao.getById(userNo); + String lastTime = ""; + if(loginLog == null){ + loginLog = new LoginLog(); + }else{ + lastTime = loginLog.getLastTime(); + } + loginLog.setId(userNo); loginLog.setIp(ip); loginLog.setUsername(username); loginLog.setLoginDate(new Date()); loginLog.setClientType(clientType); loginLog.setLoginStatus(loginStatusEnum.getCode()); + loginLog.setLastTime(DateUtil.getDateTime(new Date())); loginLog.setLocation( IPSeeker.getInstance().getAddress(ip)); loginLogDao.save(loginLog); + loginLog.setLastTime(lastTime); + return loginLog; + } + + public Result loginOut(Long userNo){ + loginLogDao.updateLoginOut(userNo); + return Result.success("success"); } } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/api/dto/UserLoginDTO.java b/tz/user/user-service/src/main/java/com/tz/platform/user/api/dto/UserLoginDTO.java index 2f531a5..f9841f3 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/api/dto/UserLoginDTO.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/api/dto/UserLoginDTO.java @@ -30,6 +30,17 @@ public class UserLoginDTO implements Serializable { private String name; private Integer levelId; + + private String email; + + private String mobile; + + private String location; + private String ip; + private String lastLoginTime; + + private Boolean complete; + /** * token,设置有效期为1天 */ diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/auth/UserInfoController.java b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/UserInfoController.java index 7424b12..7a208b6 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/auth/UserInfoController.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/UserInfoController.java @@ -5,6 +5,7 @@ import com.tz.platform.common.core.base.Result; import com.tz.platform.repository.UserDao; import com.tz.platform.user.auth.biz.AuthUserInfoBiz; import com.tz.platform.user.auth.dto.AuthUserInfoDTO; +import com.tz.platform.user.auth.vo.EditUserVO; import com.tz.platform.user.auth.vo.UserInfoVo; import jdk.nashorn.internal.objects.annotations.Getter; import org.springframework.beans.factory.annotation.Autowired; @@ -25,4 +26,9 @@ public class UserInfoController extends BaseController { public Result info(@RequestBody UserInfoVo userInfoVo){ return authUserInfoBiz.info(userInfoVo.getUserNo()); } + + @PostMapping(path = "complete") + public Result complete(@RequestBody EditUserVO vo){ + return authUserInfoBiz.complete(vo); + } } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java index 1088f59..c6f92da 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/biz/AuthUserInfoBiz.java @@ -1,13 +1,18 @@ package com.tz.platform.user.auth.biz; +import cn.hutool.crypto.digest.DigestUtil; import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.config.SystemUtil; +import com.tz.platform.common.core.tools.StrUtil; import com.tz.platform.entity.User; import com.tz.platform.repository.UserDao; import com.tz.platform.user.auth.dto.AuthUserInfoDTO; +import com.tz.platform.user.auth.vo.EditUserVO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; @Component @Slf4j @@ -23,4 +28,31 @@ public class AuthUserInfoBiz { BeanUtils.copyProperties(user,authUserInfoDTO); return Result.success(authUserInfoDTO); } + + public Result complete(EditUserVO vo){ + if(StringUtils.isEmpty(vo.getEmail())){ + return Result.error("邮箱不能为空"); + } + if(StringUtils.isEmpty(vo.getMobile())){ + return Result.error("手机不能为空"); + } + + User user = userDao.getById(vo.getUserNo()); + if(user ==null){ + return Result.error("用户不存在"); + } + + user.setEmail(vo.getEmail()); + user.setMobile(vo.getMobile()); + if(StringUtils.hasText(vo.getPassword())){ + if(vo.getPassword().length()<6){ + return Result.error("密码长度不能小于6位"); + } + user.setMobileSalt(StrUtil.get32UUID()); + user.setMobilePsw(DigestUtil.sha1Hex(user.getMobileSalt() + vo.getPassword())); + } + user.setComplete(true); + userDao.save(user); + return Result.success(user.getComplete()); + } } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/auth/vo/EditUserVO.java b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/vo/EditUserVO.java new file mode 100644 index 0000000..f234b77 --- /dev/null +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/auth/vo/EditUserVO.java @@ -0,0 +1,11 @@ +package com.tz.platform.user.auth.vo; + +import lombok.Data; + +@Data +public class EditUserVO { + private Long userNo; + private String mobile; + private String email; + private String password; +}