소스 검색

美术阅卷10月新增需求-新增一些功能

wangliang 5 년 전
부모
커밋
2aa9d0960f

+ 1 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -256,7 +256,7 @@ public class DataUploadService {
         Long random = 0L;
         while (true) {
             random = RandomUtil.randomMap.get(workId).get(new Random().nextInt(RandomUtil.randomMap.get(workId).size()));
-            result = paperRepo.countByWorkIdAndExamNumberAndRandomReq(workId, examNumber, random);
+            result = paperRepo.countByWorkIdAndExamNumberAndRandomSeq(workId, examNumber, random);
             if (result == 0 && random != Long.parseLong(examNumber.substring(3, examNumber.length()))) {
                 break;
             } else {

+ 12 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/ExamQuestion.java

@@ -84,4 +84,16 @@ public class ExamQuestion implements Serializable{
 	public void setAreaName(String areaName) {
 		this.areaName = areaName;
 	}
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getWorkId() {
+        return workId;
+    }
+
+    public void setWorkId(Long workId) {
+        this.workId = workId;
+    }
 }

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

@@ -118,7 +118,7 @@ public class Paper implements Serializable {
      */
     private boolean isMissing;
 
-    private Long randomReq;
+    private Long randomSeq;
 
     public static long getSerialVersionUID() {
         return serialVersionUID;
@@ -132,15 +132,15 @@ public class Paper implements Serializable {
         this.isMissing = isMissing;
     }
 
-    public Long getRandomReq() {
-        return randomReq;
+    public Long getRandomSeq() {
+        return randomSeq;
     }
 
-    public void setRandomReq(Long randomReq) {
-        this.randomReq = randomReq;
+    public void setRandomSeq(Long randomSeq) {
+        this.randomSeq = randomSeq;
     }
 
-    public Paper(Long workId, Long idx, Subject subject, ExamQuestion examQuestion, Student student, boolean isManual, Long randomReq) {
+    public Paper(Long workId, Long idx, Subject subject, ExamQuestion examQuestion, Student student, boolean isManual, Long randomSeq) {
         this.workId = workId;
         this.idx = idx;
         this.studentName = student.getName();
@@ -153,8 +153,8 @@ public class Paper implements Serializable {
         this.questionName = examQuestion.getName();
         //随机号生成修改规则
 //        this.secretNumber = subject.ordinal() + examQuestion.getAreaCode() + examNumber.substring(3, examNumber.length());
-        this.secretNumber = subject.ordinal() + examQuestion.getAreaCode() + randomReq;
-        this.randomReq = randomReq;
+        this.secretNumber = subject.ordinal() + examQuestion.getAreaCode() + randomSeq;
+        this.randomSeq = randomSeq;
         this.isManual = isManual;
         this.uploadedOn = new Date();
     }

+ 27 - 11
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/task/MarkTask.java

@@ -7,7 +7,6 @@ import cn.com.qmth.stmms.ms.core.vo.Subject;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
-
 import java.io.Serializable;
 import java.util.Date;
 
@@ -17,7 +16,7 @@ import java.util.Date;
  */
 @Entity
 @Table(indexes = {
-        @Index(name = "idx_mark_task_paper_id",columnList = "paperId")})
+        @Index(name = "idx_mark_task_paper_id", columnList = "paperId")})
 public class MarkTask implements Serializable {
 
     private static final long serialVersionUID = -1095989485341316938L;
@@ -74,7 +73,21 @@ public class MarkTask implements Serializable {
      */
     private String secretNumber;
 
-    public MarkTask(MarkUser marker, Paper paper, MarkStage stage){
+    private Long randomSeqNew;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getRandomSeqNew() {
+        return randomSeqNew;
+    }
+
+    public void setRandomSeqNew(Long randomSeqNew) {
+        this.randomSeqNew = randomSeqNew;
+    }
+
+    public MarkTask(MarkUser marker, Paper paper, MarkStage stage, Long randomSeqNew) {
         this.markerId = marker.getId();
         this.markerName = marker.getName();
         this.subject = marker.getSubject();
@@ -83,7 +96,10 @@ public class MarkTask implements Serializable {
         this.questionId = paper.getQuestionId();
         this.stage = stage;
         this.createdOn = new Date();
-        this.secretNumber = marker.getId() + subject.ordinal() + paper.getAreaCode() + paper.getExamNumber().substring(3, paper.getExamNumber().length());
+        //随机号生成修改规则
+//        this.secretNumber = marker.getId() + subject.ordinal() + paper.getAreaCode() + paper.getExamNumber().substring(3, paper.getExamNumber().length());
+        this.secretNumber = marker.getId() + subject.ordinal() + paper.getAreaCode() + randomSeqNew;
+        this.randomSeqNew = randomSeqNew;
     }
 
     public MarkTask() {
@@ -209,12 +225,12 @@ public class MarkTask implements Serializable {
         this.randomSeq = randomSeq;
     }
 
-	public String getSecretNumber() {
-		return secretNumber;
-	}
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
 
-	public void setSecretNumber(String secretNumber) {
-		this.secretNumber = secretNumber;
-	}
-    
 }

+ 1 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/ExamQuestionRepo.java

@@ -22,5 +22,5 @@ public interface ExamQuestionRepo extends JpaRepository<ExamQuestion, Long> {
 
     void deleteByWorkId(Long workId);
 
-    List<ExamQuestion> findAllByAreaCodeAndSubject(String areaCode, Subject subject);
+    List<ExamQuestion> findAllByAreaCodeAndSubjectAndWorkId(String areaCode, Subject subject,Long workId);
 }

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

@@ -14,6 +14,8 @@ import java.util.List;
  */
 public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecificationExecutor {
 
+    int countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(Long markerId, Long paperId, Long randomSeqNew, Long workId);
+
     /**
      * 查询指定阶段试卷的评卷任务
      *

+ 1 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java

@@ -18,7 +18,7 @@ import java.util.List;
  */
 public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationExecutor<Paper> {
 
-    int countByWorkIdAndExamNumberAndRandomReq(Long workId, String examNumber, Long randomReq);
+    int countByWorkIdAndExamNumberAndRandomSeq(Long workId, String examNumber, Long randomSeq);
 
     List<Paper> findByWorkIdAndSubject(Long workId, Subject subject);
 

+ 9 - 4
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MakrerApi.java

@@ -22,7 +22,10 @@ import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -114,7 +117,7 @@ public class MakrerApi {
             throw new Exception("当前考试试卷为空");
         }
         //获取当前考试当前科目所在地区的所有questionId
-        List<ExamQuestion> examQuestionList = examQuestionRepo.findAllByAreaCodeAndSubject(examQuestion.getAreaCode(), examQuestion.getSubject());
+        List<ExamQuestion> examQuestionList = examQuestionRepo.findAllByAreaCodeAndSubjectAndWorkId(examQuestion.getAreaCode(), examQuestion.getSubject(), examQuestion.getWorkId());
         List<Long> questionIds = examQuestionList.stream()
                 .map(m -> m.getId())
                 .collect(Collectors.toList());
@@ -173,11 +176,13 @@ public class MakrerApi {
 //        long kdtotal = markTaskRepo.countByMarkerIdAndQuestionId(marker.getId(), questionId);
         long kdtotal = markTaskRepo.countByQuestionIdIn(questionIds);
         //当前老师所有的评档次数(不分档位)
-//        long total = markTaskRepo.countByMarkerId(marker.getId());
-        long total = markTaskRepo.countByQuestionId(questionId);
+        long total = markTaskRepo.countByMarkerId(marker.getId());
+//        long total = markTaskRepo.countByQuestionId(questionId);
 
         levelStatDTOs.forEach(o -> {
             if (o.getId() != null) {
+                o.setPt(levelMap.get(o.getId()).getPt());
+                o.setKdpt(levelMap.get(o.getId()).getKdpt());
                 double p = (double) o.getCount() / total;
                 BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
                 o.setPercent(bd.doubleValue());

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

@@ -235,7 +235,7 @@ public class MarkSubjectApi {
      * @param markSubject 评卷科目id
      */
     @RequestMapping(value = "{markSubject}", method = RequestMethod.PATCH)
-    public void goNext(@PathVariable MarkSubject markSubject) {
+    public void goNext(@PathVariable MarkSubject markSubject) throws Exception {
         stageControlService.goNext(markSubject);
     }
 }

+ 20 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/LevelStatDTO.java

@@ -15,11 +15,30 @@ public class LevelStatDTO implements Serializable {
     private Integer rejected;
     private Integer arbitrated;
     private Double percent;
-    private int pt;
+    /**
+     * 占比阈值。percent thredhold,0-100
+     */
+    private int pt = 0;
 
     private int gpt;//全局的pt
     private Double gpercent;//全局的percent
     private Integer gcount;//全局的count
+    /**
+     * 考点阀值
+     */
+    private int kdpt = 0;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public int getKdpt() {
+        return kdpt;
+    }
+
+    public void setKdpt(int kdpt) {
+        this.kdpt = kdpt;
+    }
 
     public Object getId() {
         return id;

+ 47 - 18
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/AssignTaskService.java

@@ -1,22 +1,21 @@
 package cn.com.qmth.stmms.ms.marking.service;
 
-import java.util.*;
-import java.util.stream.Collectors;
-
+import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroup;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkerGroupRepo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 评卷任务分配
@@ -42,7 +41,7 @@ public class AssignTaskService {
      * @param markers
      */
     @Transactional
-    public void assignForAll(List<Paper> papers, Iterable<MarkUser> markers, MarkSubject markSubject) {
+    public void assignForAll(List<Paper> papers, Iterable<MarkUser> markers, MarkSubject markSubject) throws Exception {
         List<MarkTask> markTasks = new ArrayList<>();
         int paperCount = papers.size();
         int randomBundleCount = paperCount / randomBundleSize;
@@ -65,7 +64,9 @@ public class AssignTaskService {
                 Collections.shuffle(markerPaperList);//乱序
 
                 for (int j = 0; j < markerPaperList.size(); j++) {
-                    MarkTask markTask = new MarkTask(marker, markerPaperList.get(j), markSubject.getStage());
+                    Paper paper = markerPaperList.get(j);
+                    Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber());
+                    MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage(), random);
                     markTask.setRandomSeq(i * randomBundleSize + j + 1);
                     markTasks.add(markTask);
                 }
@@ -94,7 +95,7 @@ public class AssignTaskService {
      * @param markerGroups
      */
     @Transactional
-    public void assignForGrouping(List<Paper> papers, List<MarkerGroup> markerGroups, MarkSubject markSubject) {
+    public void assignForGrouping(List<Paper> papers, List<MarkerGroup> markerGroups, MarkSubject markSubject) throws Exception {
         markerGroups = markerGroups.stream().filter(m -> m.getMarkers().size() > 0).collect(Collectors.toList());
         int groupSize = markerGroups.size();
         int idx = 0;
@@ -105,18 +106,46 @@ public class AssignTaskService {
             }
             Paper paper = iterator.next();
             for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
-                MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage());
+                Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber());
+                MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage(), random);
                 markTaskRepo.save(markTask);
             }
             idx++;
         }
         //进入分档阶段后,清空当前分组,以便打分阶段前重新分组
-        if(MarkStage.LEVEL.equals(markSubject.getStage())){
-        	for (MarkerGroup markerGroup : markerGroups) {
-        		markerGroup.setMarkers(null);
-			}
-        	markerGroupRepo.delete(markerGroups);
+        if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+            for (MarkerGroup markerGroup : markerGroups) {
+                markerGroup.setMarkers(null);
+            }
+            markerGroupRepo.delete(markerGroups);
         }
     }
 
+    /**
+     * 获取随机号
+     *
+     * @param markerId
+     * @param paperId
+     * @param workId
+     * @param examNumber
+     * @return
+     * @throws Exception
+     */
+    public Long getRandom(Long markerId, Long paperId, Long workId, String examNumber) throws Exception {
+        int count = 0, result = 0;
+        Long random = 0L;
+        while (true) {
+            random = RandomUtil.randomMap.get(workId).get(new Random().nextInt(RandomUtil.randomMap.get(workId).size()));
+            result = markTaskRepo.countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(markerId, paperId, workId, random);
+            if (result == 0 && random != Long.parseLong(examNumber.substring(3, examNumber.length()))) {
+                break;
+            } else {
+                count++;
+            }
+            if (count > 100) {
+                throw new Exception("重复几率较高,建议重新生成随机号");
+            }
+        }
+        return random;
+    }
 }

+ 3 - 3
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

@@ -57,7 +57,7 @@ public class StageControlService {
      * @param markSubject
      */
     @Transactional
-    public void goNext(MarkSubject markSubject) {
+    public void goNext(MarkSubject markSubject) throws Exception {
         if (statusMap.get(markSubject.getId()) != null && statusMap.get(markSubject.getId())) {
             return;
         }
@@ -94,7 +94,7 @@ public class StageControlService {
      *
      * @param markSubject
      */
-    private void enterLevelStage(MarkSubject markSubject) {
+    private void enterLevelStage(MarkSubject markSubject) throws Exception {
         Long workId = markSubject.getWorkId();
         Subject subject = markSubject.getSubject();
         List<Level> levels = levelRepo.findByWorkId(workId);
@@ -129,7 +129,7 @@ public class StageControlService {
      *
      * @param markSubject
      */
-    private void enterScoreStage(MarkSubject markSubject) {
+    private void enterScoreStage(MarkSubject markSubject) throws Exception {
         Long workId = markSubject.getWorkId();
         Subject subject = markSubject.getSubject();
         List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.MARKER);