Selaa lähdekoodia

更新打回类型逻辑

yin 14 tuntia sitten
vanhempi
commit
8d91aff87c
21 muutettua tiedostoa jossa 313 lisäystä ja 130 poistoa
  1. 12 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/RejectHistoryVo.java
  2. 13 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamServiceImpl.java
  3. 9 2
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/MarkLibraryDao.java
  4. 10 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkLibrary.java
  5. 10 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/RejectHistory.java
  6. 9 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/query/MarkLibrarySearchQuery.java
  7. 9 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/query/RejectHistorySearchQuery.java
  8. 3 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkLibraryServiceImpl.java
  9. 60 48
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java
  10. 3 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/RejectHistoryServiceImpl.java
  11. 11 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/RejectTypeServiceImpl.java
  12. 4 4
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/MarkService.java
  13. 2 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/RejectTypeService.java
  14. 9 0
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/RejectResult.java
  15. 2 2
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ArbitrateController.java
  16. 1 1
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java
  17. 3 2
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/LibraryController.java
  18. 1 1
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ProblemHistoryController.java
  19. 2 1
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/LibraryController.java
  20. 1 1
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/ProblemHistoryController.java
  21. 139 68
      stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/RejectController.java

+ 12 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/RejectHistoryVo.java

@@ -34,6 +34,10 @@ public class RejectHistoryVo {
     @ApiModelProperty("密号")
     private String secretNumber;
 
+    @ExcelField(title = "打回类型", align = 2, sort = 50)
+    @ApiModelProperty("打回类型")
+    private String rejectType;
+
     @ExcelField(title = "打回原因", align = 2, sort = 50)
     @ApiModelProperty("打回原因")
     private String reason;
@@ -158,6 +162,14 @@ public class RejectHistoryVo {
         this.rejectTime = rejectTime;
     }
 
+    public String getRejectType() {
+        return rejectType;
+    }
+
+    public void setRejectType(String rejectType) {
+        this.rejectType = rejectType;
+    }
+
     public static RejectHistoryVo of(RejectHistory from) {
         if (from == null) {
             return null;

+ 13 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamServiceImpl.java

@@ -9,6 +9,8 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
+import cn.com.qmth.stmms.biz.mark.model.RejectType;
+import cn.com.qmth.stmms.biz.mark.service.RejectTypeService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -44,6 +46,9 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
     @Value("${exam.problem.type2}")
     private String problemType2;
 
+    @Autowired
+    private RejectTypeService rejectTypeService;
+
     @Override
     @Transactional
     // @CachePut(value = "exam_cache", key = "#exam.id", condition =
@@ -60,6 +65,14 @@ public class ExamServiceImpl extends BaseQueryService<Exam> implements ExamServi
             ProblemType p2 = new ProblemType(exam.getId(), problemType2, false);
             problemService.save(p1);
             problemService.save(p2);
+            RejectType r1 = new RejectType(exam.getId(), "给分较高", false);
+            RejectType r2 = new RejectType(exam.getId(), "给分较低", false);
+            RejectType r3 = new RejectType(exam.getId(), "给分错误", false);
+            RejectType r4 = new RejectType(exam.getId(), "其它", false);
+            rejectTypeService.save(r1);
+            rejectTypeService.save(r2);
+            rejectTypeService.save(r3);
+            rejectTypeService.save(r4);
         }
         return exam;
     }

+ 9 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/MarkLibraryDao.java

@@ -125,9 +125,9 @@ public interface MarkLibraryDao extends JpaRepository<MarkLibrary, Integer>, Jpa
 
     @Modifying(clearAutomatically = true)
     @Query("update MarkLibrary l set l.status=?2, l.markerId=?3, l.markerScore=?4, l.markerScoreList=?5, l.markerTime=?6, "
-            + "l.markerSpent=?7, l.rejectReason=?8, l.headerId=?9, l.headerTime=?10, l.headerScore=?11, l.headerScoreList=?12  where l.id=?1 and l.status in (?13) and (l.markerId=null or l.markerId=?3)")
+            + "l.markerSpent=?7,l.rejectTypeId=?8, l.rejectReason=?9, l.headerId=?10, l.headerTime=?11, l.headerScore=?12, l.headerScoreList=?13  where l.id=?1 and l.status in (?14) and (l.markerId=null or l.markerId=?3)")
     int updateMarkerResult(Integer id, LibraryStatus newStatus, Integer markerId, Double markerScore,
-            String markerScoreList, Date markerTime, Integer spent, String resson, Integer rejecterId, Date rejectTime,
+            String markerScoreList, Date markerTime, Integer spent,Integer rejectTypeId, String resson, Integer rejecterId, Date rejectTime,
                            Double headerScore,String headerScoreList,LibraryStatus... previousStatus);
 
     @Query("select m.markerScore ,count(m) from MarkLibrary m where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3 and m.markerId=?4 and m.markerScore != -1 and m.status in (?5)  group by m.markerScore ")
@@ -169,4 +169,11 @@ public interface MarkLibraryDao extends JpaRepository<MarkLibrary, Integer>, Jpa
     @Modifying(clearAutomatically = true)
     @Query("update MarkLibrary m set m.markerId=?2 where m.id=?1")
 	void assigned(Integer libraryId, Integer userId);
+
+    @Modifying(clearAutomatically = true)
+    @Query("update MarkLibrary l set l.status=?2, l.markerId=?3, l.markerScore=?4, l.markerScoreList=?5, l.markerTime=?6, "
+            + "l.markerSpent=?7,l.rejectTypeId=?8, l.rejectReason=?9, l.headerId=?10, l.headerTime=?11, l.headerScore=?12, l.headerScoreList=?13  where l.id=?1 and l.status in (?14) and (l.markerId=null or l.markerId=?3)")
+    int reject(Integer id, LibraryStatus newStatus, Integer markerId, Double markerScore,
+                           String markerScoreList, Date markerTime, Integer spent,Integer rejectTypeId, String resson, Integer rejecterId, Date rejectTime,
+                           Double headerScore,String headerScoreList,LibraryStatus... previousStatus);
 }

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkLibrary.java

@@ -142,6 +142,9 @@ public class MarkLibrary implements Serializable {
     @Column(name = "reject_reason", nullable = true)
     private String rejectReason;
 
+    @Column(name = "reject_type_id", nullable = true)
+    private Integer rejectTypeId;
+
     @Transient
     private String markerLoginName;
 
@@ -404,4 +407,11 @@ public class MarkLibrary implements Serializable {
         this.subject = subject;
     }
 
+    public Integer getRejectTypeId() {
+        return rejectTypeId;
+    }
+
+    public void setRejectTypeId(Integer rejectTypeId) {
+        this.rejectTypeId = rejectTypeId;
+    }
 }

+ 10 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/RejectHistory.java

@@ -105,6 +105,9 @@ public class RejectHistory implements Serializable {
     @Column(name = "reason", nullable = true)
     private String reason;
 
+    @Column(name = "reject_type_id", nullable = true)
+    private Integer rejectTypeId;
+
     /**
      * 创建时间
      */
@@ -320,4 +323,11 @@ public class RejectHistory implements Serializable {
         this.subject = subject;
     }
 
+    public Integer getRejectTypeId() {
+        return rejectTypeId;
+    }
+
+    public void setRejectTypeId(Integer rejectTypeId) {
+        this.rejectTypeId = rejectTypeId;
+    }
 }

+ 9 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/query/MarkLibrarySearchQuery.java

@@ -55,6 +55,8 @@ public class MarkLibrarySearchQuery extends BaseQuery<MarkLibrary> {
 
     private Integer headerId;
 
+    private Integer rejectTypeId;
+
     private String rejectReason;
 
     private String subjectCodeIn;
@@ -224,4 +226,11 @@ public class MarkLibrarySearchQuery extends BaseQuery<MarkLibrary> {
         this.status = status;
     }
 
+    public Integer getRejectTypeId() {
+        return rejectTypeId;
+    }
+
+    public void setRejectTypeId(Integer rejectTypeId) {
+        this.rejectTypeId = rejectTypeId;
+    }
 }

+ 9 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/query/RejectHistorySearchQuery.java

@@ -30,6 +30,8 @@ public class RejectHistorySearchQuery extends BaseQuery<RejectHistory> {
 
     private String rejectReason;
 
+    private Integer rejectTypeId;
+
     public void orderByIdDesc() {
         setSort(new Sort(Direction.DESC, "id"));
     }
@@ -122,4 +124,11 @@ public class RejectHistorySearchQuery extends BaseQuery<RejectHistory> {
         this.rejectReason = rejectReason;
     }
 
+    public Integer getRejectTypeId() {
+        return rejectTypeId;
+    }
+
+    public void setRejectTypeId(Integer rejectTypeId) {
+        this.rejectTypeId = rejectTypeId;
+    }
 }

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkLibraryServiceImpl.java

@@ -167,6 +167,9 @@ public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implem
                 if (query.getHeaderId() != null && query.getHeaderId() > 0) {
                     predicates.add(cb.equal(root.get("headerId"), query.getHeaderId()));
                 }
+                if (query.getRejectTypeId()!=null) {
+                    predicates.add(cb.equal(root.get("rejectTypeId"), query.getRejectTypeId()));
+                }
                 if (StringUtils.isNotBlank(query.getRejectReason())) {
                     predicates.add(cb.like(root.get("rejectReason").as(String.class), query.getRejectReason() + "%"));
                 }

+ 60 - 48
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -569,7 +569,7 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     @Transactional
-    public void backArbitrate(Integer historyId, Integer userId, String reason) {
+    public void backArbitrate(Integer historyId, Integer userId,Integer rejectTypeId, String reason) {
         ArbitrateHistory history = arbitrateDao.findOne(historyId);
         List<Integer> questionIndexList = history.getQuestionIndexList();
         List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
@@ -594,25 +594,30 @@ public class MarkServiceImpl implements MarkService {
             }
             RejectHistory rejectHistory = new RejectHistory(library);
             rejectHistory.setUserId(userId);
+            rejectHistory.setRejectTypeId(rejectTypeId);
             rejectHistory.setReason(reason);
-
+            String markerScore = library.getMarkerScoreList();
             if (questionIndexList.isEmpty() || questionIndexList.size() == questions.size()) {
                 // 仲裁任务直接重置该分组下所有分数被打回也重置
                 markerService.updateRejectCountById(library.getMarkerId());
-                libraryDao.resetById(library.getId(), null, reason, userId, now, LibraryStatus.REJECTED,
-                        LibraryStatus.MARKED, LibraryStatus.PROBLEM, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED,
+//                libraryDao.resetById(library.getId(), null, reason, userId, now, LibraryStatus.REJECTED,
+//                        LibraryStatus.MARKED, LibraryStatus.PROBLEM, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED,
+//                        LibraryStatus.WAIT_ARBITRATE);
+                libraryDao.reject(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(), null,
+                        markerScore, null, null,rejectTypeId, reason, userId, now, null, null,
+                        LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED,
                         LibraryStatus.WAIT_ARBITRATE);
                 rejectHistoryDao.save(rejectHistory);
-                trackDao.deleteByLibraryId(library.getId());
-                specialTagDao.deleteByLibraryId(library.getId());
+//                trackDao.deleteByLibraryId(library.getId());
+//                specialTagDao.deleteByLibraryId(library.getId());
                 count++;
                 continue;
             } else {
                 List<ScoreItem> sList = library.getMarkerScoreItem();
                 for (Integer questionIndex : questionIndexList) {
                     ExamQuestion question = questions.get(questionIndex - 1);
-                    trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
-                            question.getMainNumber() + "." + question.getSubNumber());
+//                    trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
+//                            question.getMainNumber() + "." + question.getSubNumber());
                     scoreDao.updateRejected(library.getStudentId(), question.getMainNumber(), question.getSubNumber(),
                             true);
                     ScoreItem si = sList.get(questionIndex - 1);
@@ -627,8 +632,8 @@ public class MarkServiceImpl implements MarkService {
                         markerScoreList.add("#");
                     }
                 }
-                if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(), null,
-                        StringUtils.join(markerScoreList, ","), null, null, reason, userId, now, null, null,
+                if (libraryDao.reject(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(), null,
+                        markerScore, null, null, rejectTypeId,reason, userId, now, null, null,
                         LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED,
                         LibraryStatus.WAIT_ARBITRATE) == 1) {
                     markerService.updateRejectCountById(library.getMarkerId());
@@ -824,7 +829,7 @@ public class MarkServiceImpl implements MarkService {
         // 尝试提交评卷结果
         Date now = new Date();
         if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.MARKED, marker.getId(),
-                result.getMarkerScore(), result.getScoreList(), now, result.getSpent(), null, null, null, null, null,
+                result.getMarkerScore(), result.getScoreList(), now, result.getSpent(), null,null, null, null, null, null,
                 LibraryStatus.WAITING, LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.REJECTED) == 0) {
             // 条件不符更新失败,直接返回
             return false;
@@ -1054,24 +1059,27 @@ public class MarkServiceImpl implements MarkService {
      */
     @Override
     @Transactional
-    public boolean rejectLibrary(MarkLibrary library, Integer userId, String reason, boolean isRest) {
+    public boolean rejectLibrary(MarkLibrary library, Integer userId,Integer rejectTypeId, String reason, boolean isRest) {
         MarkGroup group = groupDao.findOne(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
         if (group.getStatus() == MarkStatus.FINISH) {
             return false;
         }
-        RejectHistory history = new RejectHistory(library);
-        history.setUserId(userId);
-        history.setReason(reason);
         Date now = new Date();
-        if (libraryDao.resetById(library.getId(), null, reason, userId, now,
-                isRest ? LibraryStatus.WAITING : LibraryStatus.REJECTED, LibraryStatus.MARKED, LibraryStatus.PROBLEM,
-                LibraryStatus.INSPECTED) > 0) {
+        if (libraryDao.reject(library.getId(), isRest ? LibraryStatus.WAITING : LibraryStatus.REJECTED, library.getMarkerId(),
+                null, isRest ? null:library.getMarkerScoreList(), null, null,rejectTypeId, reason, userId, now, null, null,
+                LibraryStatus.MARKED, LibraryStatus.PROBLEM, LibraryStatus.INSPECTED) > 0) {
             if (!isRest) {
                 markerService.updateRejectCountById(library.getMarkerId());
+                RejectHistory history = new RejectHistory(library);
+                history.setUserId(userId);
+                history.setRejectTypeId(rejectTypeId);
+                history.setReason(reason);
                 rejectHistoryDao.save(history);
             }
-            trackDao.deleteByLibraryId(library.getId());
-            specialTagDao.deleteByLibraryId(library.getId());
+            if(isRest){
+                trackDao.deleteByLibraryId(library.getId());
+                specialTagDao.deleteByLibraryId(library.getId());
+            }
             scoreDao.updateRejected(library.getStudentId(), library.getGroupNumber(), true);
             resetStudentGroup(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
                     library.getGroupNumber());
@@ -1952,7 +1960,7 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     @Transactional
-    public boolean rejectedStudent(ExamStudent student, MarkStepDTO[] markStepDTOs, Integer userId, String reason) {
+    public boolean rejectedStudent(ExamStudent student, MarkStepDTO[] markStepDTOs, Integer userId,Integer rejectTypeId, String reason) {
         Map<Integer, List<MarkStepDTO>> map = new HashMap<Integer, List<MarkStepDTO>>();
 
         for (MarkStepDTO markStepDTO : markStepDTOs) {
@@ -1989,34 +1997,36 @@ public class MarkServiceImpl implements MarkService {
                 }
                 RejectHistory history = new RejectHistory(library);
                 history.setUserId(userId);
+                history.setRejectTypeId(rejectTypeId);
                 history.setReason(reason);
 
-                if (library.getStatus().equals(LibraryStatus.ARBITRATED) || qList.size() == questions.size()) {
-                    // 仲裁任务直接重置 或者该分组下所有分数被打回也重置
+                if (library.getStatus().equals(LibraryStatus.ARBITRATED)) {
+                    // 仲裁任务直接重置
                     headerTagDao.deleteByStudentIdAndGroupNumber(library.getStudentId(), groupNumber);
                     headerTrackDao.deleteByPkStudentIdAndGroupNumber(library.getStudentId(), groupNumber);
                     arbitrateDao.deleteByStudentIdAndGroupNumber(student.getId(), groupNumber);
-                    if (!ArbitrateType.QUESTION.equals(group.getArbitrateType())) {
-                        // 仲裁任务直接重置 或者该分组下所有分数被打回也重置
-                        markerService.updateRejectCountById(library.getMarkerId());
-                        libraryDao.resetById(library.getId(), null, reason, userId, now, LibraryStatus.REJECTED,
-                                LibraryStatus.MARKED, LibraryStatus.PROBLEM, LibraryStatus.INSPECTED,
-                                LibraryStatus.ARBITRATED);
-                        rejectHistoryDao.save(history);
-                        trackDao.deleteByLibraryId(library.getId());
-                        specialTagDao.deleteByLibraryId(library.getId());
-                        count++;
-                        continue;
-                    }
+                }
+                if(qList.size() == questions.size()){
+                    //该分组下所有分数被打回时回到待评池
+                    markerService.updateRejectCountById(library.getMarkerId());
+//                    libraryDao.resetById(library.getId(), null, reason, userId, now, LibraryStatus.REJECTED,
+//                            LibraryStatus.MARKED,  LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
+                    libraryDao.reject(library.getId(), LibraryStatus.REJECTED,null,
+                            null, library.getMarkerScoreList(), null, null,rejectTypeId, reason, userId, now, null, null,
+                            LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED);
+                    rejectHistoryDao.save(history);
+//                    trackDao.deleteByLibraryId(library.getId());
+//                    specialTagDao.deleteByLibraryId(library.getId());
+                    count++;
+                    continue;
                 }
                 if (library.getStatus().equals(LibraryStatus.MARKED)
-                        || library.getStatus().equals(LibraryStatus.INSPECTED)
-                        || (library.getStatus().equals(LibraryStatus.ARBITRATED)
-                                && ArbitrateType.QUESTION.equals(group.getArbitrateType()))) {
+                        || library.getStatus().equals(LibraryStatus.INSPECTED) || library.getStatus().equals(LibraryStatus.ARBITRATED)) {
+                    String markerScore = library.getMarkerScoreList();
                     List<ScoreItem> sList = library.getMarkerScoreItem();
                     for (MarkStepDTO markStepDTO : qList) {
-                        trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
-                                markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
+//                        trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
+//                                markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
                         scoreDao.updateRejected(library.getStudentId(), markStepDTO.getMainNumber(),
                                 markStepDTO.getSubNumber(), true);
                         for (int i = 0; i < questions.size(); i++) {
@@ -2037,8 +2047,8 @@ public class MarkServiceImpl implements MarkService {
                             markerScoreList.add("#");
                         }
                     }
-                    if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(),
-                            null, StringUtils.join(markerScoreList, ","), null, null, reason, userId, now, null, null,
+                    if (libraryDao.reject(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(),
+                            null, markerScore, null, null,rejectTypeId, reason, userId, now, null, null,
                             LibraryStatus.MARKED, LibraryStatus.INSPECTED, LibraryStatus.ARBITRATED) == 1) {
                         markerService.updateRejectCountById(library.getMarkerId());
                         history.setRejectScoreList(StringUtils.join(markerScoreList, ","));
@@ -2116,11 +2126,11 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     @Transactional
-    public boolean rejectLibrary(MarkLibrary library, MarkStepDTO[] questionList, Integer userId, String reason) {
+    public boolean rejectLibrary(MarkLibrary library, MarkStepDTO[] questionList, Integer userId,Integer rejectTypeId, String reason) {
         List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
                 library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
         if (questionList.length == questions.size()) {
-            return rejectLibrary(library, userId, reason, false);
+            return rejectLibrary(library, userId, rejectTypeId,reason, false);
         }
         MarkGroup group = groupDao.findOne(library.getExamId(), library.getSubjectCode(), library.getGroupNumber());
         if (group.getStatus() == MarkStatus.FINISH) {
@@ -2128,13 +2138,15 @@ public class MarkServiceImpl implements MarkService {
         }
         RejectHistory history = new RejectHistory(library);
         history.setUserId(userId);
+        history.setRejectTypeId(rejectTypeId);
         history.setReason(reason);
 
         Date now = new Date();
         List<ScoreItem> sList = library.getMarkerScoreItem();
+        String markerScore = library.getMarkerScoreList();
         for (MarkStepDTO markStepDTO : questionList) {
-            trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
-                    markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
+//            trackDao.deleteByLibraryIdAndQuestionNumber(library.getId(),
+//                    markStepDTO.getMainNumber() + "." + markStepDTO.getSubNumber());
             scoreDao.updateRejected(library.getStudentId(), markStepDTO.getMainNumber(), markStepDTO.getSubNumber(),
                     true);
             for (int i = 0; i < questions.size(); i++) {
@@ -2158,8 +2170,8 @@ public class MarkServiceImpl implements MarkService {
             // markerScoreList.append(",");
             // }
         }
-        if (libraryDao.updateMarkerResult(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(), null,
-                StringUtils.join(markerScoreList, ","), null, null, reason, userId, now, null, null,
+        if (libraryDao.reject(library.getId(), LibraryStatus.REJECTED, library.getMarkerId(), null,
+                markerScore, null, null,rejectTypeId, reason, userId, now, null, null,
                 LibraryStatus.MARKED, LibraryStatus.INSPECTED) == 1) {
             markerService.updateRejectCountById(library.getMarkerId());
             history.setRejectScoreList(StringUtils.join(markerScoreList, ","));

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/RejectHistoryServiceImpl.java

@@ -83,6 +83,9 @@ public class RejectHistoryServiceImpl extends BaseQueryService<RejectHistory> im
                         predicates.add(cb.or(sub));
                     }
                 }
+                if (query.getRejectTypeId() != null) {
+                    predicates.add(cb.equal(root.get("rejectTypeId"), query.getRejectTypeId()));
+                }
                 return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
                         .size()]));
             }

+ 11 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/RejectTypeServiceImpl.java

@@ -1,6 +1,8 @@
 package cn.com.qmth.stmms.biz.mark.service.Impl;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -43,4 +45,13 @@ public class RejectTypeServiceImpl extends BaseQueryService<RejectType> implemen
         return rejectTypeDao.findByExamId(examId);
     }
 
+    @Override
+    public Map<Integer, RejectType> findMapByExamId(Integer examId) {
+        Map<Integer, RejectType> map =new HashMap<>();
+        for (RejectType r:findByExamId(examId)) {
+            map.put(r.getId(),r);
+        }
+        return map;
+    }
+
 }

+ 4 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/MarkService.java

@@ -124,7 +124,7 @@ public interface MarkService {
      * @param library
      * @return
      */
-    boolean rejectLibrary(MarkLibrary library, Integer userId, String reason, boolean isRest);
+    boolean rejectLibrary(MarkLibrary library, Integer userId,Integer rejectTypeId, String reason, boolean isRest);
 
     /**
      * 更新某个大题已评任务数量
@@ -217,7 +217,7 @@ public interface MarkService {
      * @param reason
      * @return
      */
-    boolean rejectedStudent(ExamStudent student, MarkStepDTO[] questionList, Integer userId, String reason);
+    boolean rejectedStudent(ExamStudent student, MarkStepDTO[] questionList, Integer userId,Integer rejectTypeId, String reason);
 
     /**
      * 删除某个小题
@@ -234,7 +234,7 @@ public interface MarkService {
      * @param userId
      * @return
      */
-    boolean rejectLibrary(MarkLibrary library, MarkStepDTO[] questionList, Integer userId, String reason);
+    boolean rejectLibrary(MarkLibrary library, MarkStepDTO[] questionList, Integer userId,Integer rejectTypeId, String reason);
 
     /**
      * 考生判断是否主观题全部评卷完成
@@ -253,5 +253,5 @@ public interface MarkService {
 
     void deleteMarker(Marker marker);
 
-    void backArbitrate(Integer historyId, Integer userId, String reason);
+    void backArbitrate(Integer historyId, Integer userId,Integer rejectTypeId, String reason);
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/RejectTypeService.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.stmms.biz.mark.service;
 
 import java.util.List;
+import java.util.Map;
 
 import cn.com.qmth.stmms.biz.mark.model.RejectType;
 
@@ -16,4 +17,5 @@ public interface RejectTypeService {
 
     List<RejectType> findByExamId(Integer examId);
 
+    Map<Integer, RejectType> findMapByExamId(Integer examId);
 }

+ 9 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/RejectResult.java

@@ -13,6 +13,8 @@ public class RejectResult {
 
     private MarkStepDTO[] questionList;
 
+    private Integer rejectTypeId;
+
     private String reason;
 
     public Integer getStudentId() {
@@ -47,4 +49,11 @@ public class RejectResult {
         this.reason = reason;
     }
 
+    public Integer getRejectTypeId() {
+        return rejectTypeId;
+    }
+
+    public void setRejectTypeId(Integer rejectTypeId) {
+        this.rejectTypeId = rejectTypeId;
+    }
 }

+ 2 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ArbitrateController.java

@@ -220,7 +220,7 @@ public class ArbitrateController extends BaseExamController {
     @RequestMapping(value = "/back", method = RequestMethod.POST)
     @ResponseBody
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
-    public JSONObject back(HttpServletRequest request, @RequestParam Integer[] ids,
+    public JSONObject back(HttpServletRequest request, @RequestParam Integer[] ids,@RequestParam Integer rejectTypeId,
             @RequestParam(required = false) String reason) {
         JSONObject obj = new JSONObject();
         WebUser wu = RequestUtils.getWebUser(request);
@@ -256,7 +256,7 @@ public class ArbitrateController extends BaseExamController {
                         lockService.watch(LockType.GROUP, history.getExamId(), history.getSubjectCode(),
                                 history.getGroupNumber());
                         lockService.waitlock(LockType.STUDENT, history.getStudentId());
-                        markService.backArbitrate(historyId, wu.getUser().getId(), reason);
+                        markService.backArbitrate(historyId, wu.getUser().getId(), rejectTypeId,reason);
                         releaseTask(history.getId());
                         count++;
                         // obj.accumulate("success", true);

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -484,7 +484,7 @@ public class InspectedController extends BaseExamController {
             try {
                 lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
                 lockService.waitlock(LockType.STUDENT, student.getId());
-                if (markService.rejectedStudent(student, rejectResult.getQuestionList(), wu.getId(),
+                if (markService.rejectedStudent(student, rejectResult.getQuestionList(), wu.getId(), rejectResult.getRejectTypeId(),
                         rejectResult.getReason())) {
                     inspectedService.releaseByStudent(student);
                     obj.accumulate("success", true);

+ 3 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/LibraryController.java

@@ -175,6 +175,7 @@ public class LibraryController extends BaseExamController {
 	@RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER, Role.COLLEGE_ADMIN })
 	public JSONObject reject(HttpServletRequest request, @RequestParam Integer id,
 			@RequestParam(required = false, defaultValue = "false") boolean isRest,
+							 @RequestParam Integer rejectTypeId,
 			@RequestParam(required = false) String reason) {
 		JSONObject obj = new JSONObject();
 		MarkLibrary library = libraryService.findById(id);
@@ -189,7 +190,7 @@ public class LibraryController extends BaseExamController {
 					if ((library.getStatus().equals(LibraryStatus.MARKED)
 							|| library.getStatus().equals(LibraryStatus.PROBLEM)
 							|| library.getStatus().equals(LibraryStatus.INSPECTED))
-							&& markService.rejectLibrary(library, wu.getId(), reason, isRest)) {
+							&& markService.rejectLibrary(library, wu.getId(), rejectTypeId,reason, isRest)) {
 						obj.accumulate("success", true);
 					} else {
 						obj.accumulate("success", false);
@@ -378,7 +379,7 @@ public class LibraryController extends BaseExamController {
 					if (((libraryService.hasApplied(library, wu.getId())
 							&& (library.getStatus().equals(LibraryStatus.MARKED))
 							|| library.getStatus().equals(LibraryStatus.INSPECTED))
-							&& markService.rejectLibrary(library, rejectResult.getQuestionList(), wu.getId(),
+							&& markService.rejectLibrary(library, rejectResult.getQuestionList(), wu.getId(),rejectResult.getRejectTypeId(),
 									rejectResult.getReason()))) {
 						libraryService.releaseByLibrary(library);
 						obj.accumulate("success", true);

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ProblemHistoryController.java

@@ -168,7 +168,7 @@ public class ProblemHistoryController extends BaseExamController {
                             library.getGroupNumber());
                     lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     if (library.getStatus().equals(LibraryStatus.PROBLEM)) {
-                        markService.rejectLibrary(library, wu.getId(), null, true);
+                        markService.rejectLibrary(library, wu.getId(), null,null, true);
                     }
                 } catch (Exception e) {
                     log.error("back library error", e);

+ 2 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/LibraryController.java

@@ -151,6 +151,7 @@ public class LibraryController extends BaseApiController {
     @ResponseBody
     public ResultMessage reject(@ApiParam("任务id") @RequestParam Integer id,
             @ApiParam("是否重置") @RequestParam(required = false, defaultValue = "false") boolean isRest,
+                                @ApiParam("打回类型") @RequestParam Integer rejectTypeId,
             @ApiParam("打回原因") @RequestParam(required = false) String reason) {
         MarkLibrary library = libraryService.findById(id);
         ApiUser wu = getApiUser();
@@ -164,7 +165,7 @@ public class LibraryController extends BaseApiController {
                     if ((library.getStatus().equals(LibraryStatus.MARKED)
                             || library.getStatus().equals(LibraryStatus.PROBLEM)
                             || library.getStatus().equals(LibraryStatus.INSPECTED))
-                            && markService.rejectLibrary(library, wu.getUser().getId(), reason, isRest)) {
+                            && markService.rejectLibrary(library, wu.getUser().getId(), rejectTypeId,reason, isRest)) {
                         return resultOk();
                     } else {
                         throw new StatusException("无法打回该评卷任务");

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/ProblemHistoryController.java

@@ -156,7 +156,7 @@ public class ProblemHistoryController extends BaseApiController {
                             library.getGroupNumber());
                     lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     if (library.getStatus().equals(LibraryStatus.PROBLEM)) {
-                        markService.rejectLibrary(library, wu.getUser().getId(), null, true);
+                        markService.rejectLibrary(library, wu.getUser().getId(),null, null, true);
                     }
                 } catch (Exception e) {
                     log.error("back library error", e);

+ 139 - 68
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/RejectController.java

@@ -6,17 +6,31 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.com.qmth.stmms.biz.exam.bean.RejectHistoryVo;
+import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
+import cn.com.qmth.stmms.biz.mark.model.RejectType;
+import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+import cn.com.qmth.stmms.biz.mark.service.RejectTypeService;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import com.qmth.boot.core.collection.PageResult;
@@ -71,14 +85,72 @@ public class RejectController extends BaseApiController {
 
     @Autowired
     private UserService userService;
+    @Autowired
+    private MarkLibraryService libraryService;
+
+    @Autowired
+    private RejectTypeService rejectTypeService;
 
     public static final String UN_SELECTIVE_SCORE = "-1";
 
+    @Logging(menu = "打回卷查询", type = LogType.QUERY)
+    @ApiOperation(value = "打回卷查询")
+    @RequestMapping(value = "/library/query", method = RequestMethod.POST)
+    @ResponseBody
+    public PageResult<RejectHistoryVo> list(MarkLibrarySearchQuery query) {
+        int examId = getSessionExamId();
+        ApiUser wu =getApiUser();
+        query.setExamId(examId);
+        query.addStatus(LibraryStatus.REJECTED);
+        if (wu.isSubjectHeader() && StringUtils.isBlank(query.getSubjectCode())) {
+            String subjectCodeIn = StringUtils.join(wu.getSubjectCodeSet(), ",");
+            query.setSubjectCodeIn(subjectCodeIn);
+        }
+        query = libraryService.findByQuery(query);
+        Map<String, String> subjectNames = new HashMap<>();
+        List<RejectHistoryVo> list = new ArrayList<>();
+        Map<Integer, RejectType> rejectTypeMap = rejectTypeService.findMapByExamId(examId);
+        for (MarkLibrary library : query.getResult()) {
+            RejectHistory h = rejectHistoryService.findLastByLibraryId(library.getId());
+            RejectHistoryVo vo = RejectHistoryVo.of(h);
+            vo.setRejectType(rejectTypeMap.get(h.getRejectTypeId()).getName());
+            if (library.getMarkerId() != null) {
+                Marker marker = markerService.findById(h.getMarkerId());
+                User user = userService.findById(marker.getUserId());
+                vo.setMarkerName(user.getLoginName() + "/" + user.getName());
+            }
+
+            User header = userService.findById(h.getUserId());
+            vo.setHeaderName(header.getLoginName() + "/" + header.getName());
+
+            vo.setSubjectName(getSubjectName(subjectNames, examId, h.getSubjectCode()));
+            vo.setSubjectText(vo.getSubjectCode() + "-" + vo.getSubjectName());
+            MarkGroup group = groupService.findOne(examId, h.getSubjectCode(), h.getGroupNumber());
+            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
+                    group.getSubjectCode(), false, group.getNumber()));
+            vo.setGroupName(group.getTitle());
+            vo.setGroupText(vo.getGroupNumber() + "-" + vo.getGroupName());
+
+            list.add(vo);
+        }
+        return PageUtil.of(list, query);
+    }
+
+    @RequestMapping("/header/list")
+    @ResponseBody
+    public List<User> query(@RequestParam String subjectCode,
+                           @RequestParam(required = false) Integer groupNumber) {
+        int examId = getSessionExamId();
+        List<User> headerList = rejectHistoryService.getUserIdByExamIdAndSubjectCode(examId, subjectCode);
+        return headerList;
+    }
+
+
     @Logging(menu = "打回统计查询", type = LogType.QUERY)
     @ApiOperation(value = "打回统计按科目查询")
-    @RequestMapping(value = "list/subject", method = RequestMethod.POST)
+    @RequestMapping(value = "/subject/query", method = RequestMethod.POST)
     @ResponseBody
-    public PageResult<SubjectRejectVo> listSubject(SubjectQualitySearchQuery query) {
+    public PageResult<SubjectRejectVo> querySubject(SubjectQualitySearchQuery query) {
         return pageSubject(query);
     }
 
@@ -111,7 +183,7 @@ public class RejectController extends BaseApiController {
 
     @ApiOperation(value = "打回统计按科目导出")
     @Logging(menu = "打回统计按科目导出", type = LogType.EXPORT)
-    @RequestMapping(value = "list/subject/export", method = RequestMethod.POST)
+    @RequestMapping(value = "/subject/export", method = RequestMethod.POST)
     public void exportSubjectFile(SubjectQualitySearchQuery query, HttpServletResponse response) {
         String fileName = "打回统计数据";
         query.setPageNumber(1);
@@ -141,65 +213,65 @@ public class RejectController extends BaseApiController {
         }
     }
 
-    @Logging(menu = "打回统计按分组查询", type = LogType.QUERY)
-    @ApiOperation(value = "打回统计按分组分页查询")
-    @RequestMapping(value = "list/group", method = RequestMethod.POST)
-    @ResponseBody
-    public PageResult<SubjectRejectVo> listGroup(SubjectQualitySearchQuery query) {
-        return pageGroup(query);
-    }
-
-    private PageResult<SubjectRejectVo> pageGroup(SubjectQualitySearchQuery query) {
-        int examId = getSessionExamId();
-        List<MarkGroup> gs = null;
-        if (StringUtils.isBlank(query.getSubjectCode())) {
-            gs = groupService.findByExam(examId);
-        } else {
-            gs = groupService.findByExamAndSubject(examId, query.getSubjectCode());
-        }
-        List<SubjectRejectVo> ret = new ArrayList<>();
-        query.setTotalCount(gs == null ? 0 : gs.size());
-        if (!CollectionUtils.isEmpty(gs)) {
-            Map<String, String> subjectNames = new HashMap<>();
-            List<MarkGroup> pageList = PageUtil.of(gs, query).getResult();
-            for (MarkGroup group : pageList) {
-                List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
-                        group.getSubjectCode(), false, group.getNumber());
-                group.setQuestionList(questions);
-                SubjectRejectVo vo = new SubjectRejectVo();
-                vo.setSubjectCode(group.getSubjectCode());
-                vo.setSubjectName(getSubjectName(subjectNames, examId, group.getSubjectCode()));
-                vo.setSubjectText(vo.getSubjectCode() + "-" + vo.getSubjectName());
-                vo.setGroupNumber(group.getNumber());
-                vo.setGroupName(group.getTitle());
-                vo.setGroupText(vo.getGroupNumber() + "-" + vo.getGroupName());
-                vo.setTotalCount(group.getLibraryCount());
-                vo.setFinishCount(group.getMarkedCount());
-                long rejectCount = rejectHistoryService.countDistinctByExamIdAndSubjectCodeAndGroup(group.getExamId(),
-                        group.getSubjectCode(), group.getNumber());
-                vo.setRejectCount(rejectCount);
-                vo.setRejectRatio(Calculator.percentage(vo.getRejectCount(), vo.getFinishCount(), 2));
-                ret.add(vo);
-            }
-        }
-        return PageUtil.of(ret, query);
-    }
-
-    @ApiOperation(value = "打回统计按分组导出")
-    @Logging(menu = "打回统计按分组导出", type = LogType.EXPORT)
-    @RequestMapping(value = "list/group/export", method = RequestMethod.POST)
-    public void exportGroupFile(SubjectQualitySearchQuery query, HttpServletResponse response) {
-        String fileName = "分组质量监控数据";
-        query.setPageNumber(1);
-        query.setPageSize(Integer.MAX_VALUE);
-        PageResult<SubjectRejectVo> page = pageGroup(query);
-        try {
-            new ExportExcel("分组质量监控数据", SubjectRejectVo.class).setDataList(page.getResult()).write(response, fileName)
-                    .dispose();
-        } catch (IOException e) {
-            throw new StatusException("分组质量监控数据导出出错", e);
-        }
-    }
+//    @Logging(menu = "打回统计按分组查询", type = LogType.QUERY)
+//    @ApiOperation(value = "打回统计按分组分页查询")
+//    @RequestMapping(value = "list/group", method = RequestMethod.POST)
+//    @ResponseBody
+//    public PageResult<SubjectRejectVo> listGroup(SubjectQualitySearchQuery query) {
+//        return pageGroup(query);
+//    }
+//
+//    private PageResult<SubjectRejectVo> pageGroup(SubjectQualitySearchQuery query) {
+//        int examId = getSessionExamId();
+//        List<MarkGroup> gs = null;
+//        if (StringUtils.isBlank(query.getSubjectCode())) {
+//            gs = groupService.findByExam(examId);
+//        } else {
+//            gs = groupService.findByExamAndSubject(examId, query.getSubjectCode());
+//        }
+//        List<SubjectRejectVo> ret = new ArrayList<>();
+//        query.setTotalCount(gs == null ? 0 : gs.size());
+//        if (!CollectionUtils.isEmpty(gs)) {
+//            Map<String, String> subjectNames = new HashMap<>();
+//            List<MarkGroup> pageList = PageUtil.of(gs, query).getResult();
+//            for (MarkGroup group : pageList) {
+//                List<ExamQuestion> questions = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
+//                        group.getSubjectCode(), false, group.getNumber());
+//                group.setQuestionList(questions);
+//                SubjectRejectVo vo = new SubjectRejectVo();
+//                vo.setSubjectCode(group.getSubjectCode());
+//                vo.setSubjectName(getSubjectName(subjectNames, examId, group.getSubjectCode()));
+//                vo.setSubjectText(vo.getSubjectCode() + "-" + vo.getSubjectName());
+//                vo.setGroupNumber(group.getNumber());
+//                vo.setGroupName(group.getTitle());
+//                vo.setGroupText(vo.getGroupNumber() + "-" + vo.getGroupName());
+//                vo.setTotalCount(group.getLibraryCount());
+//                vo.setFinishCount(group.getMarkedCount());
+//                long rejectCount = rejectHistoryService.countDistinctByExamIdAndSubjectCodeAndGroup(group.getExamId(),
+//                        group.getSubjectCode(), group.getNumber());
+//                vo.setRejectCount(rejectCount);
+//                vo.setRejectRatio(Calculator.percentage(vo.getRejectCount(), vo.getFinishCount(), 2));
+//                ret.add(vo);
+//            }
+//        }
+//        return PageUtil.of(ret, query);
+//    }
+//
+//    @ApiOperation(value = "打回统计按分组导出")
+//    @Logging(menu = "打回统计按分组导出", type = LogType.EXPORT)
+//    @RequestMapping(value = "list/group/export", method = RequestMethod.POST)
+//    public void exportGroupFile(SubjectQualitySearchQuery query, HttpServletResponse response) {
+//        String fileName = "分组质量监控数据";
+//        query.setPageNumber(1);
+//        query.setPageSize(Integer.MAX_VALUE);
+//        PageResult<SubjectRejectVo> page = pageGroup(query);
+//        try {
+//            new ExportExcel("分组质量监控数据", SubjectRejectVo.class).setDataList(page.getResult()).write(response, fileName)
+//                    .dispose();
+//        } catch (IOException e) {
+//            throw new StatusException("分组质量监控数据导出出错", e);
+//        }
+//    }
 
     private String getSubjectName(Map<String, String> subjectNames, int examId, String code) {
         String name = subjectNames.get(code);
@@ -213,7 +285,7 @@ public class RejectController extends BaseApiController {
 
     @ApiOperation(value = "打回历史查询")
     @Logging(menu = "打回历史查询", type = LogType.QUERY)
-    @RequestMapping(value = "list/history", method = RequestMethod.POST)
+    @RequestMapping(value = "/history/query", method = RequestMethod.POST)
     @ResponseBody
     public PageResult<RejectHistoryVo> listHistory(RejectHistorySearchQuery query) {
         return pageHistory(query);
@@ -221,7 +293,7 @@ public class RejectController extends BaseApiController {
 
     @ApiOperation(value = "打回历史导出")
     @Logging(menu = "打回历史导出", type = LogType.EXPORT)
-    @RequestMapping(value = "list/history/export", method = RequestMethod.POST)
+    @RequestMapping(value = "/history/export", method = RequestMethod.POST)
     public void exportHistoryFile(RejectHistorySearchQuery query, HttpServletResponse response) {
         String fileName = "打回历史数据";
         query.setPageNumber(1);
@@ -249,6 +321,7 @@ public class RejectController extends BaseApiController {
         }
         query = rejectHistoryService.findByQuery(query);
         List<RejectHistoryVo> list =new ArrayList<>();
+        Map<Integer, RejectType> rejectTypeMap = rejectTypeService.findMapByExamId(examId);
         Map<String, String> subjectNames = new HashMap<>();
         for (RejectHistory h : query.getResult()) {
             RejectHistoryVo vo = RejectHistoryVo.of(h);
@@ -266,10 +339,8 @@ public class RejectController extends BaseApiController {
                         group.getSubjectCode(), false, group.getNumber()));
             vo.setGroupName(group.getTitle());
             vo.setGroupText(vo.getGroupNumber() + "-" + vo.getGroupName());
-
-            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
-                    group.getSubjectCode(), false, group.getNumber()));
-            h.setTitle(group.getTitle());
+            vo.setRejectType(rejectTypeMap.get(h.getRejectTypeId()).getName());
+            list.add(vo);
         }
         return PageUtil.of(list, query);
     }