Browse Source

ADD:增加对团体赛报名时检查添加队员的身份的功能(如果该队员已加入其他队,则不能再添加)

sunjh 6 years ago
parent
commit
c87e626001

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/QualificationDao.java

@@ -17,7 +17,7 @@ public interface QualificationDao extends CrudRepository<Qualification, Long> {
     List<Qualification> findByCompetitionIdAndStatus(Long competitionId, Integer status);
     Qualification findByCompetitionIdAndUserIdAndStatus(Long competitionId, Long userId, Integer status);
     List<Qualification> findByCompetitionIdAndStatusAndNextRound(Long competitionId, Integer status, boolean nextround);
-
+    List<Qualification> findAll();
     //获取状态最新的qualification
     @Query(value="select * from qualification q where q.competition_id=:competitionId and q.user_id=:userId order by q.status desc limit 1",nativeQuery = true)
     Qualification findLatestQulificationByCompetitionIdAndUserId(@Param("competitionId")Long competitionId, @Param("userId")Long userId);

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/CompetitionService.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.service;
 
 import cn.iselab.mooctest.site.models.*;
+import cn.iselab.mooctest.site.web.data.AddonsVO;
 
 import java.util.List;
 
@@ -88,4 +89,5 @@ public interface CompetitionService {
 
     Competition2Exam updateCompetition2TaskNextStatus(Long competitionId, Integer Index, Integer nextIndex);
 
+    boolean checkAddons(List<AddonsVO> addonsList, Long qualificationId, Integer type);
 }

+ 39 - 5
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CompetitionServiceImpl.java

@@ -2,12 +2,10 @@ package cn.iselab.mooctest.site.service.impl;
 
 import cn.iselab.mooctest.site.common.event.EventUtil;
 import cn.iselab.mooctest.site.common.event.UpdateContestMentorEvent;
-import cn.iselab.mooctest.site.dao.AddOns2QualificationDao;
-import cn.iselab.mooctest.site.dao.Competition2ExamDao;
-import cn.iselab.mooctest.site.dao.CompetitionDao;
-import cn.iselab.mooctest.site.dao.QualificationDao;
+import cn.iselab.mooctest.site.dao.*;
 import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.service.CompetitionService;
+import cn.iselab.mooctest.site.web.data.AddonsVO;
 import org.apache.commons.collections.IteratorUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,6 +31,8 @@ public class CompetitionServiceImpl implements CompetitionService {
     AddOns2QualificationDao addOns2QualificationDao;
     @Autowired
     EventUtil eventUtil;
+    @Autowired
+    UserDao userDao;
 
     @Override
     public List<Competition> getActiveCompetitions() {
@@ -164,7 +164,6 @@ public class CompetitionServiceImpl implements CompetitionService {
         competition2ExamDao.save(result);
         return result;
     }
-
     @Override
     public Competition2Exam getCompetition2TaskbyCompetitionIdAndIndex(Long competitionId, Integer index) {
         return competition2ExamDao.findByCompetitionIdAndIndex(competitionId, index);
@@ -181,5 +180,40 @@ public class CompetitionServiceImpl implements CompetitionService {
         return result;
 
     }
+    @Override
+    public boolean checkAddons(List<AddonsVO> addonsList, Long qualificationId, Integer type) {
+        //获取当前队伍比赛信息
+        Qualification qualification = qualificationDao.findOne(qualificationId);
+        //获取所有参加当前比赛的队伍
+        List<Qualification> qualifications = qualificationDao.findByCompetitionIdAndStatus(qualification.getCompetitionId(), qualification.getStatus());
+        //查看队员是否为其他队的队员
+        for (Qualification temp : qualifications) {
+            if (!temp.getId().equals(qualificationId)) {
+                //获取当前所有参赛队伍的成员信息并与新增队员信息比较
+                List<AddOns2Qualification> addOns2Qualification = addOns2QualificationDao.findByQualificationId(temp.getId());
+                for (AddOns2Qualification addons : addOns2Qualification) {
+                    for (AddonsVO currAddons : addonsList) {
+                        //如果信息已存在则返回错误
+                        if (currAddons.getEmail().equals(addons.getEmail())) {
+                            return false;
+                        }
+                    }
+                }
+            }
+        }
+        //查看队员是否是其他队的队长
+        for (AddonsVO addonsVO : addonsList) {
+            User user = userDao.findByEmail(addonsVO.getEmail());
+            if (null != user) {
+                for (Qualification temp : qualifications) {
+                    if (temp.getUserId().equals(user.getId())) {
+                        return false;
+                    }
+                }
+            }
+        }
+        //默认返回
+        return true;
+    }
 
 }

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionController.java

@@ -55,6 +55,9 @@ public class CompetitionController {
                 throw new IllegalArgumentException("different type or qualificationId");
             }
         }
+        if(!competitionLogic.checkAddons(addonsVOList,qualificationId,type)){
+            return null;
+        }
         return competitionLogic.updateAddons(addonsVOList, qualificationId, type);
     }
 

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/CompetitionLogic.java

@@ -54,4 +54,6 @@ public interface CompetitionLogic {
     String getAnnouncement();
 
     String updateAnnouncement(String announcement);
+
+    boolean checkAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type);
 }

+ 6 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/CompetitionLogicImpl.java

@@ -268,6 +268,12 @@ public class CompetitionLogicImpl implements CompetitionLogic {
         Config config = new Config(Config.CONFIG_KEY_ANNOUNCEMENT,announcement);
         configdao.save(config);
         return announcement;
+
+    }
+
+    @Override
+    public boolean checkAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type) {
+        return competitionService.checkAddons(addonsVOList,qualificationId,type);
     }
 
 }