Bläddra i källkod

Merge branch 'feature-competition' of http://git.mooctest.net/summer/main-site into feature-competition

chensc 7 år sedan
förälder
incheckning
d38f917ae3

+ 18 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/AddTask2CompetitionEvent.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.site.common.event;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Created by tangshanshan on 2018/3/19.
+ */
+@Getter
+@AllArgsConstructor
+public class AddTask2CompetitionEvent implements Event {
+    private Long competitionId;
+    private Long taskId;
+    @Override
+    public String getDescription() {
+        return "add task to competition";
+    }
+}

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EnterCompetitionEvent.java

@@ -9,8 +9,8 @@ import lombok.Getter;
 @Getter
 @AllArgsConstructor
 public class EnterCompetitionEvent implements Event{
-    Long userId;
-    Long competitionId;
+    private Long userId;
+    private Long competitionId;
 
     @Override
     public String getDescription() {

+ 5 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java

@@ -63,6 +63,11 @@ public class EventsListener implements InitializingBean {
     }
 
     @Subscribe
+    public void afterAddTask2Competition(AddTask2CompetitionEvent event) throws Exception {
+        instructorService.addContestMentorPermission(event.getCompetitionId(),event.getTaskId());
+    }
+
+    @Subscribe
     public void publicityTarget(PublicityTargetEvent publicityTargetEvent) throws Exception {
         targetService.publicityTarget(publicityTargetEvent.getTargetId());
     }

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AddOns2QualificationDao.java

@@ -17,6 +17,9 @@ public interface AddOns2QualificationDao  extends CrudRepository<AddOns2Qualific
 
     List<AddOns2Qualification> findByQualificationIdAndAddonsType(Long qualificationId, Integer type);
 
+    @Query("select aq from AddOns2Qualification aq,Qualification q where q.competitionId=:competitionId and aq.qualificationId= q.id")
+    List<AddOns2Qualification> findByCompetitionId(@Param("competitionId")Long competitionId);
+
     @Query("select count(aq) from AddOns2Qualification aq, User u , Qualification q " +
             "where u.id=:userId and u.email=aq.email and q.competitionId=:competitionId and q.id=aq.qualificationId and aq.addonsType=:addonsType")
     int countByUserIdAndCompetitionIdAndType(@Param("userId")Long userId, @Param("competitionId")Long competitionId, @Param("addonsType")Integer addonsType);

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/ContestMentorService.java

@@ -12,4 +12,5 @@ public interface ContestMentorService {
 
     void checkAndAddContestMentorPermission(User user);
 
+    void addContestMentorPermission(Long competitionId, Long taskId);
 }

+ 11 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/ContestMentorServiceImpl.java

@@ -13,6 +13,7 @@ import cn.iselab.mooctest.site.service.instancePermission.TaskPermissionService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -50,6 +51,16 @@ public class ContestMentorServiceImpl implements ContestMentorService {
         competitionIds.stream().forEach(competitionId->updateTaskViewPermission(user.getId(), competitionId));
     }
 
+    @Override
+    public void addContestMentorPermission(Long competitionId, Long taskId) {
+        List<AddOns2Qualification> addons = addOns2QualificationDao.findByCompetitionId(competitionId);
+        List<String> contestMentorEmails = addons.stream().filter(aq -> aq.getAddonsType()==AddOns2Qualification.ADDONS_TYPE_TEACHER)
+                                                     .map(AddOns2Qualification::getEmail).collect(Collectors.toList());
+        List<Long> contestMentorIds = userDao.findIdByEmail(contestMentorEmails);
+        List<Long> taskIds = new ArrayList<>(); taskIds.add(taskId);
+        contestMentorIds.stream().forEach(contestMentorId->taskPermissionService.grantViewPermission(contestMentorId,taskIds));
+    }
+
     private void updateTaskViewPermission(Long userId, Long competitionId) {
         List<Competition2Task> competition2Tasks = competitionService.getAllTasksOfCompetition(competitionId);
         List<Long> examIds = competition2Tasks.stream().map(Competition2Task::getTaskId).collect(Collectors.toList());

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

@@ -1,5 +1,6 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
+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.models.*;
@@ -104,6 +105,7 @@ public class CompetitionLogicImpl implements CompetitionLogic {
             return null;
         }
         Competition2Task competition2Task = competitionService.addTask2Competition(competitionId, taskId);
+        eventUtil.post(new AddTask2CompetitionEvent(competitionId,taskId));
         return competition2TaskVOWrapper.wrap(competition2Task);
     }