소스 검색

Merge branch 'Release' into 'Develop'

Release



See merge request !1078

menduo 5 년 전
부모
커밋
b32340e195

+ 8 - 3
mooctest-site-server/pom.xml

@@ -232,17 +232,22 @@
         <dependency>
             <groupId>cn.afterturn</groupId>
             <artifactId>easypoi-base</artifactId>
-            <version>3.0.1</version>
+            <version>3.0.3</version>
         </dependency>
         <dependency>
             <groupId>cn.afterturn</groupId>
             <artifactId>easypoi-web</artifactId>
-            <version>3.0.1</version>
+            <version>3.0.3</version>
         </dependency>
         <dependency>
             <groupId>cn.afterturn</groupId>
             <artifactId>easypoi-annotation</artifactId>
-            <version>3.0.1</version>
+            <version>3.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-collections4</artifactId>
+            <version>4.1</version>
         </dependency>
         <!--EasyExcel END-->
 

+ 12 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Competition.java

@@ -1,9 +1,12 @@
 package cn.iselab.mooctest.site.models;
 
+import javafx.util.converter.TimeStringConverter;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.bouncycastle.asn1.cms.TimeStampAndCRL;
 
 import javax.persistence.*;
+import java.sql.Timestamp;
 
 /**
  *
@@ -36,9 +39,18 @@ public class Competition {
     private Integer rankWeight;
     @Column(name="add_ons_editable")
     private Boolean addOnsEditable;
+    @Column(name="add_ons_teacher_editable")
+    private Boolean addOnsTeacherEditable;
+    @Column(name="add_ons_student_editable")
+    private Boolean addOnsStudentEditable;
     @Column(name="member_limit")
     private Integer memberLimit;
     @Column(name="mentor_limit")
     private Integer mentorLimit;
+
+    @Column(name="active_begin_time")
+    private Timestamp activeBeginTime;
+    @Column(name="active_end_time")
+    private Timestamp activeEndTime;
 }
 

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

@@ -38,6 +38,8 @@ public interface CompetitionService {
 
     Qualification createOrUpdateQualification(Qualification qualification);
 
+    Qualification removeOrUpdateQualification(Qualification qualification);
+
     List<Qualification> getQualificationByCompetitionIdAndIndex(Long competitionId, Integer status);
 
     List<Qualification> getNextRoundQualificationByCompetitionIdAndIndex(Long competitionId, Integer status);
@@ -100,4 +102,6 @@ public interface CompetitionService {
     List<UserVO> getSingleCompetitionStudents(long competitionId, long teacherId);
 
     List<List<UserVO>> getTeamCompetitionStudents(long competitionId, long teacherId);
+
+    Qualification getQualificationByCompetitionAndUserIdAndStatus(Long competitionId,Long userId,Integer status);
 }

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/application/impl/WechatServiceImpl.java

@@ -104,7 +104,7 @@ public class WechatServiceImpl implements WechatService {
         for (SubmitRecord submitRecord : submitRecordList) {
             Exam exam = examDao.findOne(submitRecord.getExamId());
             Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
-            if (exam.getEndTime().before(currentTimestamp)) {
+            if (exam.getStatus() == Exam.STATUS_FINISHED) {
                 JSONObject taskObj = new JSONObject();
                 taskObj.put("id", exam.getId());
                 taskObj.put("taskName", exam.getName());

+ 35 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/CompetitionServiceImpl.java

@@ -11,6 +11,8 @@ import java.math.BigInteger;
 import javax.jws.soap.SOAPBinding.Use;
 import org.apache.commons.collections.IteratorUtils;
 import org.apache.shiro.SecurityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -30,12 +32,16 @@ public class CompetitionServiceImpl implements CompetitionService {
     @Autowired
     QualificationDao qualificationDao;
     @Autowired
+    Exam2GroupDao exam2GroupDao;
+    @Autowired
+    Group2WorkerDao group2WorkerDao;
+    @Autowired
     AddOns2QualificationDao addOns2QualificationDao;
     @Autowired
     EventUtil eventUtil;
     @Autowired
     UserDao userDao;
-
+    private Logger LOG = LoggerFactory.getLogger(getClass());
     @Override
     public List<Competition> getActiveCompetitions() {
         return competitionDao.findByIsActiveOrderByRankWeightDesc(true);
@@ -96,6 +102,29 @@ public class CompetitionServiceImpl implements CompetitionService {
     }
 
     @Override
+    public Qualification removeOrUpdateQualification(Qualification qualification) {
+        //从qualification表中修改记录
+        Qualification newQualification = qualificationDao.findByCompetitionIdAndUserIdAndStatus(qualification.getCompetitionId(),
+                qualification.getUserId(), qualification.getStatus());
+        LOG.info("quali:"+qualification);
+        LOG.info("userId:"+qualification.getUserId());
+        LOG.info("status:"+qualification.getStatus());
+        LOG.info("next:"+qualification.getNextRound());
+        if (null != newQualification){
+            newQualification.setNextRound(false);
+            qualificationDao.save(newQualification);
+        }
+        //从addons表中删除
+        List<AddOns2Qualification> addOns2QualificationList = addOns2QualificationDao.findByQualificationId(qualification.getId());
+        if (null != addOns2QualificationList){
+            addOns2QualificationDao.delete(addOns2QualificationList);
+        }
+
+
+        return null;
+    }
+
+    @Override
     public List<Qualification> getQualificationByCompetitionIdAndIndex(Long competitionId, Integer status) {
         return qualificationDao.findByCompetitionIdAndStatus(competitionId, status);
     }
@@ -344,4 +373,9 @@ public class CompetitionServiceImpl implements CompetitionService {
 
         return teamList;
     }
+
+    @Override
+    public Qualification getQualificationByCompetitionAndUserIdAndStatus(Long competitionId, Long userId, Integer status) {
+        return qualificationDao.findByCompetitionIdAndUserIdAndStatus(competitionId,userId,status);
+    }
 }

+ 45 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CompetitionManagementController.java

@@ -6,11 +6,17 @@ import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.web.data.*;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.logic.CompetitionLogic;
+import com.google.gson.Gson;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.annotation.RequiresRoles;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
+import javax.management.Query;
+import java.lang.reflect.GenericSignatureFormatError;
 import java.util.List;
 
 /**
@@ -21,7 +27,7 @@ import java.util.List;
 
 @RestController
 public class CompetitionManagementController {
-
+    private Logger LOG = LoggerFactory.getLogger(getClass());
     @Autowired
     private CompetitionLogic competitionLogic;
 
@@ -71,7 +77,6 @@ public class CompetitionManagementController {
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/participant/batch", method = RequestMethod.POST)
     public void batchAddQualification4Task(@RequestBody QualificationRule dto) {
         competitionLogic.batchAddQualification4Task(dto);
-
     }
 
     //为指定比赛单个添加选手资格
@@ -81,6 +86,44 @@ public class CompetitionManagementController {
         competitionLogic.addQualification4Task(dto);
     }
 
+    /**
+     * 取消指定比赛单个选手的出线资格
+     * @param dto 选手的id及大赛id等信息
+     */
+    @RequiresRoles(value = "manager")
+    @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/remove/single", method = RequestMethod.POST)
+    public void removeQualification4Task(@RequestBody QualificationRule dto) {
+        competitionLogic.removeQualification4Task(dto);
+    }
+
+
+    /**
+     * 批量导入出线资格 预插入
+     * @param dto 比赛等信息
+     * @param file excel 文件
+     * @return excel表内队员的信息
+     * @throws Exception 异常信息
+     */
+    @RequiresRoles(value = "manager")
+    @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/add/excelBatchPre", method = RequestMethod.POST)
+    public List<QualificationVO> batchExcelAddQualificationPre(@RequestParam("qualificationRule") String dto,@RequestParam("file") MultipartFile file) throws Exception{
+        Gson gson = new Gson();
+        QualificationRule qualificationRule = gson.fromJson(dto,QualificationRule.class);
+        return competitionLogic.batchExcelAddQualificationPre(qualificationRule,file);
+    }
+
+    /**
+     * 批量导入出线资格 确认插入
+     * @param qualificationVOList 表内队员信息
+     * @return excel表内队员的信息
+     * @throws Exception 异常信息
+     */
+    @RequiresRoles(value = "manager")
+    @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/add/excelBatchConfirm", method = RequestMethod.POST)
+    public List<QualificationVO> batchExcelAddQualificationConfirm(@RequestBody List<QualificationVO> qualificationVOList) throws Exception{
+        return competitionLogic.batchExcelAddQualificationConfirm(qualificationVOList);
+    }
+
     //查看某个比赛赛后选手的资格
     @RequiresRoles(value = "manager")
     @RequestMapping(value = UrlConstants.API + "management/competition/{competitionId}/participant/{index}", method = RequestMethod.GET)

+ 6 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/CompetitionVO.java

@@ -2,6 +2,7 @@ package cn.iselab.mooctest.site.web.data;
 
 import lombok.Data;
 
+import java.sql.Timestamp;
 import java.util.List;
 
 /**
@@ -21,10 +22,14 @@ public class CompetitionVO {
     private Boolean allowEnter;
     private Boolean allowQuit;
     private Integer rankWeight;
-    private Boolean addOnsEditable;
+    private Boolean addOnsTeacherEditable;
+    private Boolean addOnsStudentEditable;
     private Integer memberLimit;
     private Integer mentorLimit;
 
+    private Timestamp activeBeginTime;
+    private Timestamp activeEndTime;
+
     private List<AddonsVO> addonsList;
 
     private ExamVO nowTask;

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

@@ -4,6 +4,7 @@ import cn.iselab.mooctest.site.models.Qualification;
 import cn.iselab.mooctest.site.web.data.*;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 import java.util.Map;
@@ -48,6 +49,27 @@ public interface CompetitionLogic {
 
     void addQualification4Task(QualificationRule qualificationRule);
 
+    /**
+     * 取消指定学生的出线资格
+     * @param qualificationRule 学生信息及大赛信息等
+     */
+    void removeQualification4Task(QualificationRule qualificationRule);
+
+    /**
+     * 通过Excel表格批量导入出线学生 预插入
+     * @param qualificationRule 大赛信息等,此处不存放学生信息
+     * @param file excel文件
+     */
+    List<QualificationVO> batchExcelAddQualificationPre(QualificationRule qualificationRule, MultipartFile file) throws Exception;
+
+    /**
+     * 通过Excel表格批量导入出线学生 确认插入
+     * @param qualificationVOList 学生信息
+     * @return 学生信息
+     * @throws Exception 异常信息
+     */
+    List<QualificationVO> batchExcelAddQualificationConfirm(List<QualificationVO> qualificationVOList) throws Exception;
+
     List<QualificationVO> getAllQualification4Task(Long competitionId, Integer index);
 
     void addParticipant2TaskByQualification(Long competitionId, Integer index);

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/asyncProgress/impl/MutationProgressLogicImpl.java

@@ -18,6 +18,7 @@ import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.asyncProgress.MutationProgressLogic;
 import cn.iselab.mooctest.site.web.logic.fromDev.PluginLogic;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.map.HashedMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,6 +31,7 @@ import java.util.stream.Collectors;
 /**
  * Created by tangshanshan on 2018/3/1.
  */
+@Slf4j
 @Service
 public class MutationProgressLogicImpl extends BaseLogic implements MutationProgressLogic {
 
@@ -145,6 +147,7 @@ public class MutationProgressLogicImpl extends BaseLogic implements MutationProg
             triggerMutation(examId, caseId);
             return true;
         }catch (Exception e){
+            log.error("重试失败", e);
             return false;
         }
     }

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

@@ -1,13 +1,22 @@
 package cn.iselab.mooctest.site.web.logic.impl;
+import	java.awt.Transparency;
+import	java.util.Queue;
+import java.util.*;
+import	java.util.concurrent.CompletableFuture;
+import java.io.IOException;
 
 import cn.iselab.mooctest.site.common.event.AddTask2CompetitionEvent;
 import cn.iselab.mooctest.site.common.event.EnterCompetitionEvent;
 import cn.iselab.mooctest.site.common.event.EventUtil;
 import cn.iselab.mooctest.site.common.event.QuitCompetitionEvent;
+import cn.iselab.mooctest.site.dao.Competition2ExamDao;
 import cn.iselab.mooctest.site.dao.ConfigDao;
 import cn.iselab.mooctest.site.dao.ContestMentorSubmitRecordDao;
+import cn.iselab.mooctest.site.dao.QualificationDao;
+import cn.iselab.mooctest.site.data.UserDTOForMT;
 import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.service.CompetitionService;
+import cn.iselab.mooctest.site.service.ExamService;
 import cn.iselab.mooctest.site.service.GroupService;
 import cn.iselab.mooctest.site.service.UserService;
 import cn.iselab.mooctest.site.web.data.*;
@@ -16,15 +25,18 @@ import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.logic.CompetitionLogic;
 import cn.iselab.mooctest.site.web.logic.ExamLogic;
 import cn.iselab.mooctest.site.util.data.Converter;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import javax.management.Query;
 import java.util.stream.Collectors;
 
 /**
@@ -244,6 +256,177 @@ public class CompetitionLogicImpl implements CompetitionLogic {
             competitionService.createOrUpdateQualification(qualification);
         }
     }
+    private Logger LOG = LoggerFactory.getLogger(getClass());
+    @Autowired
+    QualificationDao qualificationDao;
+    @Override
+    public void removeQualification4Task(QualificationRule qualificationRule) {
+        if (null != qualificationRule.getUserIds() && qualificationRule.getUserIds().size() > 0){
+            for(Long userId: qualificationRule.getUserIds()) {
+                Qualification qualification = competitionService.getQualification(qualificationRule.getCompetitionId(), userId);
+                //
+                if (qualification != null && !qualification.getStatus().equals(qualificationRule.getIndex())){
+                    qualificationDao.delete(qualification);
+                }
+                qualification = competitionService.getQualificationByCompetitionAndUserIdAndStatus(qualificationRule.getCompetitionId(),userId,qualificationRule.getIndex());
+                if(qualification != null) {
+                    competitionService.removeOrUpdateQualification(qualification);
+                }
+            }
+            //如果已经点了确认晋级,则还需要从班级中删除
+            Competition2Exam competition2Exam = competitionService.getCompetition2TaskbyCompetitionIdAndIndex(qualificationRule.getCompetitionId(), qualificationRule.getIndex());
+            Competition2Exam nextCompetition2Exam = competitionService.getCompetition2TaskbyCompetitionIdAndIndex(qualificationRule.getCompetitionId(), competition2Exam.getNextIndex());
+            if (null != nextCompetition2Exam){
+                //如果下一场比赛已添加
+                List<Long> groupList = examLogic.getExamById(nextCompetition2Exam.getExamId()).getGroupIds();
+                //如果已经为下一场比赛创建班级
+                if (null != groupList && groupList.size() > 0){
+                    Long groupId = groupList.get(0);
+                    //如果该选手已在班级中则删除
+                    if (groupService.isUserInGroup(qualificationRule.getUserIds().get(0),groupId)){
+                        groupService.deleteUserFromGroup(qualificationRule.getUserIds().get(0),groupId);
+                    }
+                }
+            }
+        }
+
+    }
+
+    /**
+     * 通过Excel表格批量导入出线学生 预插入
+     * @param qualificationRule 大赛信息等,此处不存放学生信息
+     * @param file excel文件
+     */
+    @Override
+    public List<QualificationVO> batchExcelAddQualificationPre(QualificationRule qualificationRule, MultipartFile file) throws Exception{
+        List<QualificationVO> qualificationVOList = transferExcel2Qualifications(file);
+        List<QualificationVO> retQualificationVOList = new LinkedList<>();
+        HashSet<String> set = new HashSet<>();
+        for (QualificationVO qualificationVO : qualificationVOList){
+            if (set.contains(qualificationVO.getUserEmail())){
+                continue;
+            }else{
+                set.add(qualificationVO.getUserEmail());
+            }
+            UserDTOForMT user = userService.getUserByEmail(qualificationVO.getUserEmail());
+            if (null == user){
+                throw new Exception("未找到邮箱为:"+qualificationVO.getUserName()+",姓名为:"+qualificationVO.getUserName()+" 的用户");
+            }else{
+                //构建返回列表
+                qualificationVO.setUserTelephone(user.getMobile());
+                qualificationVO.setUserId(user.getId());
+                qualificationVO.setCompetitionId(qualificationRule.getCompetitionId());
+                qualificationVO.setStatus(qualificationRule.getIndex());
+                qualificationVO.setNextRound(true);
+                retQualificationVOList.add(qualificationVO);
+            }
+        }
+        LOG.info("file:"+transferExcel2Qualifications(file));
+        return qualificationVOList;
+    }
+
+    /**
+     * 通过Excel表格批量导入出线学生 确认插入
+     * @param qualificationVOList 学生信息
+     * @return 学生信息
+     * @throws Exception 异常信息
+     */
+    @Override
+    public List<QualificationVO> batchExcelAddQualificationConfirm(List<QualificationVO> qualificationVOList) throws Exception {
+        List<Qualification> qualificationList = new LinkedList<>();
+        HashSet<String> set = new HashSet<>();
+        for (QualificationVO qualificationVO : qualificationVOList){
+            if (set.contains(qualificationVO.getUserEmail())){
+                continue;
+            }else{
+                set.add(qualificationVO.getUserEmail());
+            }
+            UserDTOForMT user = userService.getUserByEmail(qualificationVO.getUserEmail());
+            if (null == user){
+                throw new Exception("未找到邮箱为:"+qualificationVO.getUserName()+",姓名为:"+qualificationVO.getUserName()+" 的用户");
+            }else{
+                //如果已有qualification则update
+                Qualification qualification = competitionService.getQualificationByCompetitionAndUserIdAndStatus(qualificationVO.getCompetitionId(),qualificationVO.getUserId(),qualificationVO.getStatus());
+                if (null != qualification){
+                    qualification.setNextRound(true);
+                }else{
+                    //如果没有qualification则new
+                    qualification = new Qualification();
+                    qualification.setCompetitionId(qualificationVO.getCompetitionId());
+                    qualification.setUserId(user.getId());
+                    qualification.setNextRound(true);
+                    qualification.setStatus(qualificationVO.getStatus());
+                }
+                qualificationList.add(qualification);
+            }
+        }
+        qualificationDao.save(qualificationList);
+        return qualificationVOList;
+    }
+
+    /**
+     * 从excel表格中读取选手信息
+     * @param file excel文件
+     * @return 选手信息列表
+     */
+    private List<QualificationVO> transferExcel2Qualifications(MultipartFile file) throws Exception {
+        List<String> logList = new ArrayList<>();
+        List<QualificationVO> qualifications = new ArrayList<>();
+        Workbook workbook = null;
+        try {
+            if (file.getOriginalFilename().endsWith("xlsx")) {
+                workbook = new XSSFWorkbook(file.getInputStream());
+            } else if(file.getOriginalFilename().endsWith("xls")) {
+                workbook = new HSSFWorkbook(file.getInputStream());
+            } else {
+                throw new Exception("不是合法的Excel文件");
+            }
+        } catch (Exception e) {
+            throw new Exception("Excel读取出错,无法生成workbook");
+        }
+        Sheet sheet = workbook.getSheetAt(0);
+        if(sheet == null) {
+            throw new Exception("找不到标签页");
+        }
+        if(sheet.getPhysicalNumberOfRows() < 2) {
+            throw new Exception("数据内容为空,请重新编辑");
+        }
+        Row keyRow = sheet.getRow(0);
+        int cellCount = keyRow.getPhysicalNumberOfCells();
+        for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++ ){
+            QualificationVO qualificationVO = new QualificationVO();
+            Row row = sheet.getRow(i);
+            if (row == null){
+                logList.add("表中存在错误的单元格,请把与内容无关的单元格置空");
+                break;
+            }
+            for (int j = 0; j < cellCount; j++){
+                Cell cell = row.getCell(j);
+                if (cell == null ) {
+                    logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
+                    //log.error("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
+                    continue;
+                }
+                cell.setCellType(CellType.STRING);
+                //log.info("ROW: "+i+", COL: "+j +", DATA: "+ cell.getStringCellValue());
+                if (cell.getStringCellValue().trim().equals("")){
+                    logList.add("错误 - 行: " + (i + 1) + "; 列: " + (j + 1) + "; 原因: " + "单元格为空");
+                    continue;
+                }
+                switch (j){
+                    case 0:
+                        qualificationVO.setUserEmail(cell.getStringCellValue().trim());
+                        break;
+                    case 1:
+                        qualificationVO.setUserName(cell.getStringCellValue().trim());
+                        break;
+                }
+            }
+            qualifications.add(qualificationVO);
+            LOG.info("quli:"+qualifications);
+        }
+        return qualifications;
+    }
 
     @Override
     public List<QualificationVO> getAllQualification4Task(Long competitionId, Integer index) {

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

@@ -95,7 +95,8 @@ public class CompetitionLogicImplTest {
         competition.setDescription(null);
         competition.setAllowEnter(true);
         competition.setRankWeight(20);
-        competition.setAddOnsEditable(true);
+        competition.setAddOnsTeacherEditable(true);
+        competition.setAddOnsStudentEditable(true);
         competition.setMemberLimit(3);
         competitionList.add(competition);
 
@@ -108,7 +109,8 @@ public class CompetitionLogicImplTest {
         competition2.setDescription(null);
         competition2.setAllowEnter(true);
         competition2.setRankWeight(20);
-        competition2.setAddOnsEditable(true);
+        competition.setAddOnsTeacherEditable(true);
+        competition.setAddOnsStudentEditable(true);
         competition2.setMemberLimit(3);
 
         competitionVO = new CompetitionVO();
@@ -120,7 +122,8 @@ public class CompetitionLogicImplTest {
         competitionVO.setDescription(null);
         competitionVO.setAllowEnter(true);
         competitionVO.setRankWeight(20);
-        competitionVO.setAddOnsEditable(true);
+        competition.setAddOnsTeacherEditable(true);
+        competition.setAddOnsStudentEditable(true);
         competitionVO.setMemberLimit(3);
 
         competitionVO2 = new CompetitionVO();
@@ -132,7 +135,8 @@ public class CompetitionLogicImplTest {
         competitionVO2.setDescription(null);
         competitionVO2.setAllowEnter(true);
         competitionVO2.setRankWeight(20);
-        competitionVO2.setAddOnsEditable(true);
+        competition.setAddOnsTeacherEditable(true);
+        competition.setAddOnsStudentEditable(true);
         competitionVO2.setMemberLimit(3);
 
         qualification = new Qualification();