Prechádzať zdrojové kódy

空白卷标记,平均分非零进一,部分评卷员打回,导出缺考名单

xiaof 5 rokov pred
rodič
commit
c4905ec142

+ 16 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ScoreApi.java

@@ -321,4 +321,20 @@ public class ScoreApi {
         });
         return new PageableDTO(paperDTOs, paperPage.getTotalElements(), paperPage.getTotalPages(), pageable.getPageNumber());
     }
+
+    /**
+     * 标记缺考
+     * @param id
+     * @return
+     */
+    @PostMapping("/missing/{id}")
+    public ResponseEntity doMissing(@PathVariable("id") Long id){
+        //更新为缺考
+        Paper paper = paperRepo.findOne(id);
+        paper.setIsMissing(true);
+
+        paperRepo.save(paper);
+
+        return ResponseEntity.ok(null);
+    }
 }

+ 28 - 4
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/UserExporter.java

@@ -2,15 +2,16 @@ package cn.com.qmth.stmms.ms.admin.exporter;
 
 import cn.com.qmth.stmms.ms.admin.assembler.MarkUserAssembler;
 import cn.com.qmth.stmms.ms.admin.dto.MarkUserDTO;
+import cn.com.qmth.stmms.ms.admin.dto.PaperCounter;
+import cn.com.qmth.stmms.ms.admin.dto.StudentDTO;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExportUtils;
+import cn.com.qmth.stmms.ms.core.domain.Work;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
+import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
-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.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
@@ -28,6 +29,9 @@ public class UserExporter {
     @Autowired
     private MarkUserRepo markUserRepo;
 
+    @Autowired
+    private StudentRepo studentRepo;
+
     @Autowired
     private MarkUserAssembler markUserAssembler;
 
@@ -44,4 +48,24 @@ public class UserExporter {
         String fileName = "用户列表";
         ExportUtils.exportEXCEL(fileName,MarkUserDTO.class,markUserDTOs,response);
     }
+
+    @RequestMapping(value = "{work}/{subject}/export",method = RequestMethod.GET)
+    public void countGropuByQuestion(@PathVariable Work work, @PathVariable Subject subject, HttpServletResponse response){
+        if(work != null) {
+            List<StudentDTO> list = new ArrayList<>();
+            List<Object[]> result = studentRepo.listMissingBySubject(work.getId(), subject.toString());
+            result.forEach(i -> {
+                StudentDTO studentDTO = new StudentDTO();
+                studentDTO.setExamNumber(String.valueOf(i[0]));
+                studentDTO.setName(String.valueOf(i[1]));
+                studentDTO.setAreaName(String.valueOf(i[2]));
+                studentDTO.setAreaCode(String.valueOf(i[3]));
+                studentDTO.setExamRoom(String.valueOf(i[4]));
+                studentDTO.setSourceName(String.valueOf(i[5]));
+                list.add(studentDTO);
+            });
+            String fileName =subject.toString()+ "缺考名单";
+            ExportUtils.exportEXCEL(fileName,StudentDTO.class,list,response);
+        }
+    }
 }

+ 13 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java

@@ -112,6 +112,11 @@ public class Paper implements Serializable {
     //裁切图MD5
     @Column(name="slice_md5")
     private String sliceMD5;
+
+    /**
+     * 是否缺考
+     */
+    private boolean isMissing;
     
     public Paper(Long workId, Long idx, Subject subject, ExamQuestion examQuestion, Student student, boolean isManual) {
         this.workId = workId;
@@ -411,5 +416,12 @@ public class Paper implements Serializable {
 	public void setSliceMD5(String sliceMD5) {
 		this.sliceMD5 = sliceMD5;
 	}
-    
+
+    public boolean getIsMissing() {
+        return isMissing;
+    }
+
+    public void setIsMissing(boolean isMissing) {
+        this.isMissing = isMissing;
+    }
 }

+ 2 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/StudentRepo.java

@@ -21,4 +21,6 @@ public interface StudentRepo extends JpaRepository<Student, Long>, JpaSpecificat
 
     List<Student> findByWorkId(Long workId);
 
+    @Query(value = "select s.exam_number, s.name, s.area_name , s.area_code, s.exam_room, s.source_name from paper p join student s on p.work_id = s.work_id and p.exam_number = s.exam_number and p.area_code = s.area_code where p.work_id = ? and p.subject = ? and p.is_missing = true", nativeQuery = true)
+    List<Object[]> listMissingBySubject(Long workId, String subject);
 }

+ 3 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java

@@ -208,13 +208,15 @@ public class PaperApi {
         String action = body.get("action");
         String level = body.get("level");
         String tagged = body.get("tagged");
+        //需要打回的评卷员
+        String ranges = body.get("range");
         if (action != null && level != null) {
             if (action.equals("leveling")) {
                 markingService.levelMarkPaper(paper, level,false);
             } else if (action.equals("sampling")) {
                 markingService.levelMarkPaper(paper, level,true);
             } else if (action.equals("reject")) {
-                markingService.reject(paper, level);
+                markingService.reject(paper, level, ranges);
             }
         }
         if (tagged != null) {

+ 1 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskAssembler.java

@@ -23,6 +23,7 @@ public class MarkTaskAssembler {
             markTaskDTO = new MarkTaskDTO();
             markTaskDTO.setId(markTask.getId());
             markTaskDTO.setRejected(markTask.isRejected());
+            markTaskDTO.setMarkerId(markTask.getMarkerId());
             markTaskDTO.setMarker(markTask.getMarkerName());
             markTaskDTO.setUpdatedOn(markTask.getUpdatedOn());
             markTaskDTO.setResult(markTask.getResult());

+ 1 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/PaperAssembler.java

@@ -45,6 +45,7 @@ public class PaperAssembler {
             paperDTO.setImgSrc(imgSrc);
             paperDTO.setThumbSrc(thumbSrc);
             paperDTO.setAreaCode(paper.getAreaCode());
+            paperDTO.setMissing(paper.getIsMissing());
             if (paper.getInspectScore() != null) {
                 paperDTO.setInspectScore(paper.getInspectScore().intValue());
             }

+ 15 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/config/MarkingConfig.java

@@ -26,6 +26,13 @@ public class MarkingConfig {
      */
     private boolean majority;
 
+    /**
+     * 平均分是否非零进一
+     * 是: 湖北
+     * 否:其它省(暂定)
+     */
+    private boolean roundUp;
+
     public int getDeviation() {
         return deviation;
     }
@@ -49,5 +56,12 @@ public class MarkingConfig {
 	public void setMajority(boolean majority) {
 		this.majority = majority;
 	}
-    
+
+    public boolean isRoundUp() {
+        return roundUp;
+    }
+
+    public void setRoundUp(boolean roundUp) {
+        this.roundUp = roundUp;
+    }
 }

+ 9 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkTaskDTO.java

@@ -18,6 +18,7 @@ public class MarkTaskDTO implements Serializable{
     private Object result;
     private String originLevel;
     private boolean isRejected;
+    private Long markerId;
     private String marker;
     private Date updatedOn;
     private String imgSrc;;
@@ -149,5 +150,12 @@ public class MarkTaskDTO implements Serializable{
 	public void setMarkByLeader(boolean markByLeader) {
 		this.markByLeader = markByLeader;
 	}
-	
+
+    public Long getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Long markerId) {
+        this.markerId = markerId;
+    }
 }

+ 9 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/PaperDTO.java

@@ -34,6 +34,7 @@ public class PaperDTO implements Serializable{
     private String inspectLevel;
     private Long inspector;
     private String sheetSrc;
+    private boolean isMissing;
 
     private List<MarkTaskDTO> markResults = new ArrayList<>();
 
@@ -216,4 +217,12 @@ public class PaperDTO implements Serializable{
 	public void setMarkByLeader(boolean markByLeader) {
 		this.markByLeader = markByLeader;
 	}
+
+    public boolean isMissing() {
+        return isMissing;
+    }
+
+    public void setMissing(boolean missing) {
+        isMissing = missing;
+    }
 }

+ 17 - 5
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.marking.service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.OptionalDouble;
 
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
@@ -168,19 +169,29 @@ public class MarkingService {
      * 更新试卷状态
      * 更新评卷任务状态为打回
      * 如果评卷任务的档位和建议档位一致,不打回该任务
-     *
-     * @param paper
+     *  @param paper
      * @param redoLevel 建议重评档位
+     * @param ranges
      */
     @Transactional
-    public Paper reject(Paper paper, String redoLevel) {
+    public Paper reject(Paper paper, String redoLevel, String ranges) {
         paper.reject(redoLevel);
         List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
         for (MarkTask markTask : markTasks) {
-            if (markTask.getResult() != null && !markTask.getResult().toString().equals(redoLevel)) {
+            /*if (markTask.getResult() != null && !markTask.getResult().toString().equals(redoLevel)) {
                 markTask.setRejected(true);
                 markTask.setOriginLevel(markTask.getResult());
                 markTask.setResult(null);
+            }*/
+            String[] range = ranges.split(",");
+            if(range.length > 0){
+                for (String r : range) {
+                    if(Objects.equals(String.valueOf(markTask.getMarkerId()), r)){
+                        markTask.setRejected(true);
+                        markTask.setOriginLevel(markTask.getResult());
+                        markTask.setResult(null);
+                    }
+                }
             }
         }
         markTaskRepo.save(markTasks);
@@ -210,7 +221,8 @@ public class MarkingService {
         if (leftCount == 0) {
             OptionalDouble finalScore = markTasks.stream().map(m -> m.getResult())
                     .mapToInt(Integer::valueOf).average();
-            double fs = Math.round(finalScore.orElse(0));
+            //湖北省,平均分非零进一
+            double fs = markingConfig.isRoundUp() ? Math.ceil(finalScore.orElse(0)) : Math.round(finalScore.orElse(0));
             paper.setScore(fs);
             paperRepo.save(paper);
         }