Quellcode durchsuchen

ADD: export excel by examId

zhangxin vor 8 Jahren
Ursprung
Commit
3dab7bb4fb

+ 18 - 0
mooctest-site-server/pom.xml

@@ -178,6 +178,24 @@
         </dependency>
         <!-- MS framework dependencies end -->
 
+        <!--EasyExcel dependencies-->
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-base</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-web</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-annotation</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+        <!--EasyExcel END-->
+
         <!-- SMS dependency -->
         <dependency>
             <groupId>cn.iselab</groupId>

+ 17 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AssignedTask2UserInfoDao.java

@@ -0,0 +1,17 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.AssignedTask2UserInfo;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author sean
+ * @date 2017-10-25.
+ */
+@Transactional
+public interface AssignedTask2UserInfoDao extends CrudRepository<AssignedTask2UserInfo, Long>{
+
+    List<AssignedTask2UserInfo> findByTaskId(Long taskId);
+}

+ 103 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/AssignedTask2UserInfo.java

@@ -0,0 +1,103 @@
+package cn.iselab.mooctest.site.models;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * @author sean
+ * @date 2017-10-22.
+ */
+@Entity
+@Table(name = "assigned_task_user_info")
+@ExcelTarget("assigned_task_user_info")
+public class AssignedTask2UserInfo implements Serializable {
+
+    @Id
+    @Column(name = "id")
+    private Long id;
+
+    @Column(name = "task_id")
+    private Long taskId;
+
+    @Column(name = "name")
+    @Excel(name = "姓名", orderNum = "1", mergeVertical = true, isImportField = "name")
+    private String name;
+
+    @Column(name = "score")
+    @Excel(name = "成绩", orderNum = "2", mergeVertical = true, isImportField = "score")
+    private Double score;
+
+    @Column(name = "school")
+    @Excel(name = "学校", orderNum = "3", mergeVertical = true, isImportField = "school")
+    private String school;
+
+    @Column(name = "email")
+    @Excel(name = "邮箱", orderNum = "4", mergeVertical = true, isImportField = "email")
+    private String email;
+
+    @Column(name = "mobile")
+    @Excel(name = "手机", orderNum = "5", mergeVertical = true, isImportField = "mobile")
+    private String mobile;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(Long taskId) {
+        this.taskId = taskId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Double getScore() {
+        return score;
+    }
+
+    public void setScore(Double score) {
+        this.score = score;
+    }
+
+    public String getSchool() {
+        return school;
+    }
+
+    public void setSchool(String school) {
+        this.school = school;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+}

+ 14 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/AssignedTask2UserInfoService.java

@@ -0,0 +1,14 @@
+package cn.iselab.mooctest.site.service;
+
+import cn.iselab.mooctest.site.models.AssignedTask2UserInfo;
+
+import java.util.List;
+
+/**
+ * @author sean
+ * @date 2017-10-26.
+ */
+public interface AssignedTask2UserInfoService {
+
+    List<AssignedTask2UserInfo> getAssignedTaskUserInfoByExamId(Long examId) throws Exception;
+}

+ 26 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/AssignedTask2UserInfoServiceImpl.java

@@ -0,0 +1,26 @@
+package cn.iselab.mooctest.site.service.impl;
+
+import cn.iselab.mooctest.site.dao.AssignedTask2UserInfoDao;
+import cn.iselab.mooctest.site.models.AssignedTask2UserInfo;
+import cn.iselab.mooctest.site.service.AssignedTask2UserInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author sean
+ * @date 2017-10-26.
+ */
+@Service
+public class AssignedTask2UserInfoServiceImpl implements AssignedTask2UserInfoService {
+
+    @Autowired
+    private AssignedTask2UserInfoDao assignedTask2UserInfoDao;
+
+    @Override
+    public List<AssignedTask2UserInfo> getAssignedTaskUserInfoByExamId(Long examId) throws Exception {
+        return new ArrayList<>(assignedTask2UserInfoDao.findByTaskId(examId));
+    }
+}

+ 18 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/ExamController.java

@@ -22,6 +22,7 @@ import org.springframework.data.domain.Sort;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -57,9 +58,9 @@ public class ExamController extends BaseController {
         User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
         if (queryBy.equals("organizer")) {
             return examLogic.getExamList(user.getId(), type, status, keyword, new PageRequest(activePage - 1, rowsOnPage, sortById));
-        } else if(queryBy.equals("participant")) {
+        } else if (queryBy.equals("participant")) {
             return examLogic.getParticipantExamList(user.getId(), type, status, keyword, new PageRequest(activePage - 1, rowsOnPage, sortByStatus));
-        } else{
+        } else {
             return examLogic.getAssistManagerExamList(user.getId(), type, status, keyword, new PageRequest(activePage - 1, rowsOnPage, sortByStatus));
         }
     }
@@ -138,10 +139,10 @@ public class ExamController extends BaseController {
             throw new IllegalArgumentException("缺少分页信息");
         }
         Sort sort;
-        if(sortOrder.equals("desc"))
-            sort = new Sort(Sort.Direction.DESC,sortBy);
+        if (sortOrder.equals("desc"))
+            sort = new Sort(Sort.Direction.DESC, sortBy);
         else
-            sort = new Sort(Sort.Direction.ASC,sortBy);
+            sort = new Sort(Sort.Direction.ASC, sortBy);
 
         Pageable pageable = new PageRequest(Integer.parseInt(activePage) - 1, Integer.parseInt(rowsOnPage), sort);
 
@@ -153,7 +154,7 @@ public class ExamController extends BaseController {
     @RequestMapping(value = UrlConstants.API + "score", method = RequestMethod.GET)
     public ScoreVO getScoreByExamIdAndWorkerId(@RequestParam(name = "examId") Long examId) throws Exception {
         User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
-        examLogic.getExamByIdAndParticipantIdIfPermited(examId,user.getId());
+        examLogic.getExamByIdAndParticipantIdIfPermited(examId, user.getId());
         return examLogic.getScoreBy(examId, user.getId());
     }
 
@@ -186,4 +187,15 @@ public class ExamController extends BaseController {
         return examLogic.updateStatutsForAllTask();
     }
 
+    @RequestMapping(value = UrlConstants.API + "scoreExcel/{examId}", method = RequestMethod.GET)
+    public void getExamScoresOfExcel(@PathVariable("examId") Long examId, HttpServletRequest request,
+                                     HttpServletResponse response) throws Exception {
+        User user = (User) SecurityUtils.getSubject().getSession().getAttribute("User");
+        String permissionStr = user.getId().toString() + ":task:*:" + examId.toString();
+        if (!SecurityUtils.getSubject().isPermitted(new TaskPermission(permissionStr))) {
+            throw new UnauthorizedException("unauthorized");
+        }
+        examLogic.exportExcelByExamId(response, examId);
+    }
+
 }

+ 0 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/wrapper/AssignedTaskVOWrapper.java

@@ -28,5 +28,4 @@ public class AssignedTaskVOWrapper extends BaseWrapper<AssignedTaskVO, AssignedT
     public AssignedTask unwrap(AssignedTaskVO data) {
         return null;
     }
-
 }

+ 7 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/ExamLogic.java

@@ -9,13 +9,16 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
  * Created by major on 2017/6/15.
  */
 public interface ExamLogic {
+
     ExamVO getExamById(long examId);
+
     ExamVO getExamByIdAndParticipantIdIfPermited(Long examId, Long userId);
 
     Page<ExamVO> getExamList(Long organizerId, Byte type, Integer status, String keyword, Pageable pageable);
@@ -28,9 +31,10 @@ public interface ExamLogic {
 
     ExamVO updateExam(ExamVO examVO);
 
-    Page<AssignedTaskVO> getAssignedTasks(Long examId ,Boolean needFilter, Pageable pageable);
+    Page<AssignedTaskVO> getAssignedTasks(Long examId, Boolean needFilter, Pageable pageable);
 
     ScoreVO getScoreBy(long examId, long participantId) throws AssignedTaskNotExistException;
+
     List<Double> getScoreList(Long examId);
 
     List<ExamVO> getExamList(String username);
@@ -46,4 +50,6 @@ public interface ExamLogic {
     boolean updateStatutsForAllTask();
 
     public void clearAllSchedulers();
+
+    void exportExcelByExamId(HttpServletResponse response, Long examId) throws Exception;
 }

+ 36 - 8
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/ExamLogicImpl.java

@@ -1,5 +1,7 @@
 package cn.iselab.mooctest.site.web.logic.impl;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.models.instancePermission.TaskPermission;
 import cn.iselab.mooctest.site.service.*;
@@ -18,7 +20,7 @@ import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
 import cn.iselab.mooctest.site.web.exception.HttpNotFoundException;
 import cn.iselab.mooctest.site.web.logic.BaseLogic;
 import cn.iselab.mooctest.site.web.logic.ExamLogic;
-import org.apache.shiro.SecurityUtils;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.convert.converter.Converter;
 import org.springframework.data.domain.Page;
@@ -26,6 +28,9 @@ import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -77,6 +82,9 @@ public class ExamLogicImpl extends BaseLogic implements ExamLogic {
     ScoreVOWrapper scoreVOWrapper;
 
     @Autowired
+    AssignedTask2UserInfoService assignedTask2UserInfoService;
+
+    @Autowired
     private Task2AssistantManagerService task2AssistantManagerService;
 
     @Autowired
@@ -187,11 +195,11 @@ public class ExamLogicImpl extends BaseLogic implements ExamLogic {
     }
 
     @Override
-    public Page<AssignedTaskVO> getAssignedTasks(Long examId,Boolean needFilter, Pageable pageable) {
+    public Page<AssignedTaskVO> getAssignedTasks(Long examId, Boolean needFilter, Pageable pageable) {
         Page<AssignedTask> assignedTasks;
-        if(needFilter){
+        if (needFilter) {
             assignedTasks = assignedTaskService.getContestMentorAssignedTaskPage(examId, pageable);
-        }else{
+        } else {
             assignedTasks = assignedTaskService.getAssignedTaskPage(examId, pageable);
         }
         List<Long> userIds = assignedTasks.getContent().stream().map(AssignedTask::getParticipantId).
@@ -248,10 +256,10 @@ public class ExamLogicImpl extends BaseLogic implements ExamLogic {
 
     @Override
     public boolean checkTaskViewPermission(Long userId, Long taskId) throws Exception {
-        List<TaskPermission> taskPermissions = taskPermissionService.getByUserIdAndInstanceId(userId,taskId);
-        if(taskPermissions.size() != 0) {
+        List<TaskPermission> taskPermissions = taskPermissionService.getByUserIdAndInstanceId(userId, taskId);
+        if (taskPermissions.size() != 0) {
             return true;
-        }else if(examService.getExamByIdAndParticipantIdIfPermited(taskId,userId)!=null){
+        } else if (examService.getExamByIdAndParticipantIdIfPermited(taskId, userId) != null) {
             return true;
         }
         return false;
@@ -284,5 +292,25 @@ public class ExamLogicImpl extends BaseLogic implements ExamLogic {
         examSchedulerService.clearAllSchedulers();
     }
 
-
+    @Override
+    public void exportExcelByExamId(HttpServletResponse response, Long examId) throws Exception {
+        response.setHeader("content-Type", "application/vnd.ms-excel");
+        // 下载文件的默认名称
+        try {
+            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("IptvAccountList", "UTF-8") + ".xls");
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        //编码
+        response.setCharacterEncoding("UTF-8");
+        List<AssignedTask2UserInfo> list = assignedTask2UserInfoService.getAssignedTaskUserInfoByExamId(examId);
+        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), AssignedTask2UserInfo.class, list);
+        try {
+            workbook.write(response.getOutputStream());
+        } catch (IOException e) {
+        // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
 }