Prechádzať zdrojové kódy

Merge branch 'Release' into 'Test'

Release



See merge request !1033

huangyong 6 rokov pred
rodič
commit
f53e700f53

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

@@ -21,4 +21,5 @@ public interface QualificationDao extends CrudRepository<Qualification, Long> {
     //获取状态最新的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);
+    List<Qualification> findByCompetitionId(Long competitionId);
 }

+ 4 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/CompetitionService.java

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

+ 77 - 17
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CompetitionServiceImpl.java

@@ -7,15 +7,17 @@ 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.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
- *
  * @author tangshanshan
  * @date 2017/11/3
  */
@@ -61,7 +63,7 @@ public class CompetitionServiceImpl implements CompetitionService {
 
     @Override
     public Qualification getQualification(Long competitionId, Long userId) {
-        return qualificationDao.findLatestQulificationByCompetitionIdAndUserId(competitionId,userId);
+        return qualificationDao.findLatestQulificationByCompetitionIdAndUserId(competitionId, userId);
     }
 
     //    @Override
@@ -78,7 +80,7 @@ public class CompetitionServiceImpl implements CompetitionService {
         Qualification qualification1 = qualificationDao.findByCompetitionIdAndUserIdAndStatus(qualification.getCompetitionId(),
                 qualification.getUserId(), qualification.getStatus());
         //System.out.println(qualification1.toString());
-        if(qualification1 == null) {
+        if (qualification1 == null) {
             //修改原有数据
 
             //插入新数据
@@ -91,6 +93,7 @@ public class CompetitionServiceImpl implements CompetitionService {
         }
         return qualification1;
     }
+
     @Override
     public List<Qualification> getQualificationByCompetitionIdAndIndex(Long competitionId, Integer status) {
         return qualificationDao.findByCompetitionIdAndStatus(competitionId, status);
@@ -123,7 +126,7 @@ public class CompetitionServiceImpl implements CompetitionService {
         competition2Exam.setCompetitionId(competitionId);
         int index = 1;
         ArrayList<Competition2Exam> competition2Exams = competition2ExamDao.findByCompetitionIdOrderByIndexDesc(competitionId);
-        if (competition2Exams.size()>0) {
+        if (competition2Exams.size() > 0) {
             index = competition2Exams.get(0).getIndex() + 1;
         }
         competition2Exam.setIndex(index);
@@ -139,15 +142,15 @@ public class CompetitionServiceImpl implements CompetitionService {
 
     @Override
     public List<AddOns2Qualification> updateAddons(List<AddOns2Qualification> addonsList, Long qualificationId, Integer type) {
-        List<AddOns2Qualification> deletedAddons = addOns2QualificationDao.findByQualificationIdAndAddonsType(qualificationId,type);
+        List<AddOns2Qualification> deletedAddons = addOns2QualificationDao.findByQualificationIdAndAddonsType(qualificationId, type);
         addOns2QualificationDao.delete(deletedAddons);
 
         List<AddOns2Qualification> savedAddons = IteratorUtils.toList(addOns2QualificationDao.save(addonsList).iterator());
 
         List<String> changedAddons = deletedAddons.stream().map(AddOns2Qualification::getEmail).collect(Collectors.toList());
         changedAddons.addAll(savedAddons.stream().map(AddOns2Qualification::getEmail).collect(Collectors.toList()));
-        if(type == AddOns2Qualification.ADDONS_TYPE_TEACHER){
-            eventUtil.post(new UpdateContestMentorEvent(qualificationId,changedAddons));
+        if (type == AddOns2Qualification.ADDONS_TYPE_TEACHER) {
+            eventUtil.post(new UpdateContestMentorEvent(qualificationId, changedAddons));
         }
         return savedAddons;
     }
@@ -164,6 +167,7 @@ public class CompetitionServiceImpl implements CompetitionService {
         competition2ExamDao.save(result);
         return result;
     }
+
     @Override
     public Competition2Exam getCompetition2TaskbyCompetitionIdAndIndex(Long competitionId, Integer index) {
         return competition2ExamDao.findByCompetitionIdAndIndex(competitionId, index);
@@ -172,7 +176,7 @@ public class CompetitionServiceImpl implements CompetitionService {
     @Override
     public Competition2Exam updateCompetition2TaskbyCompetitionIdAndIndex(Long competitionId, Integer index, boolean activeStatusAfterUpdating) {
         Competition2Exam result = competition2ExamDao.findByCompetitionIdAndIndex(competitionId, index);
-        if(result.isActive() ==  activeStatusAfterUpdating) {
+        if (result.isActive() == activeStatusAfterUpdating) {
             return result;
         }
         result.setActive(activeStatusAfterUpdating);
@@ -180,12 +184,26 @@ public class CompetitionServiceImpl implements CompetitionService {
         return result;
 
     }
+
     @Override
-    public boolean checkAddons(List<AddonsVO> addonsList, Long qualificationId, Integer type) {
-        if (type == null)
-            return false;
-        if (type == 0)
-            return true;
+    public Map<String, Object> checkAddons(List<AddonsVO> addonsList, Long qualificationId, Integer type) {
+        Map<String, Object> res = new HashMap<>();
+//        if (type == null)
+//            return false;
+//        if (type == 0)
+//            return true;
+        if (type == null) {
+            res.put("code", 1);
+            res.put("message", "类型出错");
+            return res;
+        }
+        if (type == 0) {
+            res.put("code", 0);
+            res.put("message", "修改成功");
+            return res;
+        }
+        //获取当前用户信息
+        Long currentUserId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
         //获取当前队伍比赛信息
         Qualification qualification = qualificationDao.findOne(qualificationId);
         //获取所有参加当前比赛的队伍
@@ -199,7 +217,10 @@ public class CompetitionServiceImpl implements CompetitionService {
                     for (AddonsVO currAddons : addonsList) {
                         //如果信息已存在则返回错误
                         if (currAddons.getEmail().equals(addons.getEmail())) {
-                            return false;
+                            res.put("code", 2);
+                            res.put("message", "修改失败,队员'"+addons.getEmail()+"'已加入其它队伍!");
+                            return res;
+                            //return false;
                         }
                     }
                 }
@@ -209,15 +230,54 @@ public class CompetitionServiceImpl implements CompetitionService {
         for (AddonsVO addonsVO : addonsList) {
             User user = userDao.findByEmail(addonsVO.getEmail());
             if (null != user) {
+                //查看添加的队员是否为当前登录用户
+                if (user.getId().equals(currentUserId)){
+                    res.put("code", 4);
+                    res.put("message", "修改失败,队员'"+user.getEmail()+"'已是队长,无法添加为队员");
+                    return res;
+                }
                 for (Qualification temp : qualifications) {
                     if (temp.getUserId().equals(user.getId())) {
-                        return false;
+                        res.put("code", 3);
+                        res.put("message", "修改失败,队员'"+user.getEmail()+"'已是其他队伍的队长");
+                        return res;
                     }
                 }
             }
         }
-        //默认返回
-        return true;
+        res.put("code", 0);
+        res.put("message", "修改成功");
+        return res;
     }
 
+    @Override
+    public Map<String, Object> checkEnterCompetition(Long competitionId, Long userId){
+        //获取所有competitionId与当前参加的比赛id相同的队伍
+        List<Qualification> qualifications = qualificationDao.findByCompetitionId(competitionId);
+        //获取当前用户信息
+        User user = userDao.findById(userId);
+        Map<String, Object> res = new HashMap<>();
+        for (Qualification qualification : qualifications){
+            Long captainId = qualification.getUserId();
+            //当队长id与参赛的id相同,说明该用户已经是其他队伍的队长,返回错误信息
+            if (captainId.equals(userId)){
+                res.put("code", 1);
+                res.put("message", "您(" + user.getEmail() + ")已参加该比赛,无法再次报名");
+                return res;
+            }
+            //获取该队伍的所有队员信息
+            List<AddOns2Qualification> addOns2Qualifications = addOns2QualificationDao.findByQualificationId(qualification.getId());
+            //遍历所有队员信息,如果存在队员邮箱与当前用户邮箱相同,说明该用户已加入其他队伍,返回错误信息
+            for (AddOns2Qualification addOns2Qualification:addOns2Qualifications){
+                if (addOns2Qualification.getEmail().equals(user.getEmail())){
+                    res.put("code", 2);
+                    res.put("message", "您(" + user.getEmail() + ")已加入其他队伍,无法再次报名");
+                    return res;
+                }
+            }
+        }
+        res.put("code", 0);
+        res.put("message", "加入成功");
+        return res;
+    }
 }

+ 36 - 12
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionController.java

@@ -1,8 +1,6 @@
 package cn.iselab.mooctest.site.web.ctrl;
 
 import cn.iselab.mooctest.site.common.constant.UrlConstants;
-import cn.iselab.mooctest.site.models.Qualification;
-import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.web.data.AddonsVO;
 import cn.iselab.mooctest.site.web.data.CompetitionVO;
 import cn.iselab.mooctest.site.web.logic.CompetitionLogic;
@@ -11,7 +9,9 @@ import org.apache.shiro.authz.annotation.RequiresRoles;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by tangshanshan on 2017/11/3.
@@ -39,26 +39,50 @@ public class CompetitionController {
     }
 
     @RequestMapping(value = UrlConstants.API + "competition/enter/{competitionId}", method = RequestMethod.POST)
-    public Qualification enterContest(@PathVariable("competitionId") Long competitionId) {
+    public Map<String, Object> enterContest(@PathVariable("competitionId") Long competitionId) {
         Long userId = (Long) SecurityUtils.getSubject().getSession().getAttribute("userId");
         return competitionLogic.enterCompetition(competitionId, userId);
     }
 
+    //    @RequestMapping(value = UrlConstants.API + "competition/addons/{qualificationId}/{type}", method = RequestMethod.POST)
+//    public List<AddonsVO> updateAddons(@PathVariable("qualificationId") Long qualificationId,
+//                                       @PathVariable("type") Integer type,
+//                                       @RequestBody List<AddonsVO> addonsVOList) {
+//        //TODO 校验addonsVOList的大小是否超过上限
+//        for(int i=0;i<addonsVOList.size();i++){
+//            if(!addonsVOList.get(i).getAddonsType().equals(type)
+//                    || !addonsVOList.get(i).getQualificationId().equals(qualificationId)){
+//                throw new IllegalArgumentException("different type or qualificationId");
+//            }
+//        }
+//        if(!competitionLogic.checkAddons(addonsVOList,qualificationId,type)){
+//            return null;
+//        }
+//        return competitionLogic.updateAddons(addonsVOList, qualificationId, type);
+//    }
     @RequestMapping(value = UrlConstants.API + "competition/addons/{qualificationId}/{type}", method = RequestMethod.POST)
-    public List<AddonsVO> updateAddons(@PathVariable("qualificationId") Long qualificationId,
-                                       @PathVariable("type") Integer type,
-                                       @RequestBody List<AddonsVO> addonsVOList) {
+    public Map<String, Object> updateAddons(@PathVariable("qualificationId") Long qualificationId,
+                                            @PathVariable("type") Integer type,
+                                            @RequestBody List<AddonsVO> addonsVOList) {
         //TODO 校验addonsVOList的大小是否超过上限
-        for(int i=0;i<addonsVOList.size();i++){
-            if(!addonsVOList.get(i).getAddonsType().equals(type)
-                    || !addonsVOList.get(i).getQualificationId().equals(qualificationId)){
+        Map<String, Object> map = new HashMap<>();
+        for (int i = 0; i < addonsVOList.size(); i++) {
+            if (!addonsVOList.get(i).getAddonsType().equals(type)
+                    || !addonsVOList.get(i).getQualificationId().equals(qualificationId)) {
                 throw new IllegalArgumentException("different type or qualificationId");
             }
         }
-        if(!competitionLogic.checkAddons(addonsVOList,qualificationId,type)){
-            return null;
+        Map<String, Object> addOnCheck = competitionLogic.checkAddons(addonsVOList, qualificationId, type);
+        if (!addOnCheck.get("code").equals(0)) {
+            map.put("code", 1);
+            map.put("message", addOnCheck.get("message"));
+            return map;
         }
-        return competitionLogic.updateAddons(addonsVOList, qualificationId, type);
+        List<AddonsVO> addonsVOS = competitionLogic.updateAddons(addonsVOList, qualificationId, type);
+        map.put("code", 0);
+        map.put("data", addonsVOS);
+        map.put("message", "修改成功");
+        return map;
     }
 
 }

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

@@ -6,6 +6,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  *
@@ -15,7 +16,7 @@ import java.util.List;
 public interface CompetitionLogic {
     List<CompetitionVO> getCompetitionList(Long userId);
 
-    Qualification enterCompetition(Long competitionId, Long userId);
+    Map<String, Object> enterCompetition(Long competitionId, Long userId);
 
     List<AddonsVO> updateAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type);
 
@@ -55,5 +56,5 @@ public interface CompetitionLogic {
 
     String updateAnnouncement(String announcement);
 
-    boolean checkAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type);
+    Map<String, Object> checkAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type);
 }

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

@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -64,9 +65,13 @@ public class CompetitionLogicImpl implements CompetitionLogic {
     }
 
     @Override
-    public Qualification enterCompetition(Long competitionId, Long userId) {
+    public Map<String, Object> enterCompetition(Long competitionId, Long userId) {
         Competition competition = competitionService.getCompetiton(competitionId);
         Qualification qualification = competitionService.getQualification(competitionId, userId);
+        Map<String, Object> res = competitionService.checkEnterCompetition(competitionId, userId);
+        if (res == null || !res.get("code").equals(0)){
+            return res;
+        }
         if (qualification == null) {
             qualification = new Qualification();
             qualification.setCompetitionId(competitionId);
@@ -75,14 +80,18 @@ public class CompetitionLogicImpl implements CompetitionLogic {
         qualification.setStatus(competition.getStatus());
         Qualification savedQualification = competitionService.createOrUpdateQualification(qualification);
         eventUtil.post(new EnterCompetitionEvent(userId,competitionId));
-        return savedQualification;
+        //return savedQualification;
+        res.put("code",0);
+        res.put("data",savedQualification);
+        res.put("message","报名成功");
+        return res;
     }
 
     @Override
     public List<AddonsVO> updateAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type) {
         List<AddOns2Qualification> addOns2Qualifications = addonsVOWrapper.unwrap(addonsVOList);
         List<AddOns2Qualification> addons = competitionService.updateAddons(addOns2Qualifications, qualificationId, type);
-        
+
         return addonsVOWrapper.wrap(addons);
     }
 
@@ -272,7 +281,7 @@ public class CompetitionLogicImpl implements CompetitionLogic {
     }
 
     @Override
-    public boolean checkAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type) {
+    public Map<String, Object> checkAddons(List<AddonsVO> addonsVOList, Long qualificationId, Integer type) {
         return competitionService.checkAddons(addonsVOList,qualificationId,type);
     }
 

+ 3 - 2
mooctest-site-server/src/test/java/cn/iselab/mooctest/site/web/logic/impl/CompetitionLogicImplTest.java

@@ -32,6 +32,7 @@ import org.springframework.test.context.web.WebAppConfiguration;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 
 import static org.junit.Assert.*;
 import static org.mockito.Matchers.*;
@@ -173,8 +174,8 @@ public class CompetitionLogicImplTest {
         when(competitionService.getCompetiton(30L)).thenReturn(competition);
         when(competitionService.getQualification(30L,1L)).thenReturn(null);
         when(competitionService.createOrUpdateQualification(any())).thenReturn(qualification);
-        Qualification result = competitionLogic.enterCompetition(30L, 1L);
-        Assert.assertEquals(30L, result.getCompetitionId(), 0);
+        Map<String,Object> result = competitionLogic.enterCompetition(30L, 1L);
+        Assert.assertEquals(30L, ((Qualification)result.get("data")).getCompetitionId(), 0);
     }
 
     @Test