Kaynağa Gözat

联考版-v2.1.0

xiaof 3 yıl önce
ebeveyn
işleme
0d28759f7b

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

@@ -63,7 +63,7 @@ public class ParamSetting implements Serializable {
         paramSetting.setMajority(1);
         paramSetting.setLevelShowAllPaper(0);
         paramSetting.setRoundUp(1);
-        paramSetting.setRoundUp(0);
+        paramSetting.setClearData(0);
         paramSetting.setChangeStage(0);
         paramSetting.setScoreShowAllPaper(0);
         paramSetting.setPropDenominator(1);

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

@@ -448,5 +448,9 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     @Query("update Paper s set s.level = ?2, s.redoLevel = null where s.id = ?1")
     void updateLevelById(Long paperId, String originalLevel);
 
+    long countByWorkIdAndSubjectAndLevelAndTest(Long workId, Subject subject, String valueOf, int test);
+
+    long countByWorkIdAndQuestionIdAndIsMissingIsFalseAndTest(Long workId, Long questionId, int test);
+
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

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

@@ -154,9 +154,9 @@ public class MarkSubjectApi {
             }
         }
         //当前考区总数
-        long total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalse(markSubject.getWorkId(), questionId);
+        long total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalseAndTest(markSubject.getWorkId(), questionId, markSubject.getTest());
         //所有考区总数
-        long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalse(markSubject.getWorkId(), markSubject.getSubject());
+        long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
         levelStatDTOs.forEach(o -> {
             if (o.getId() != null) {
                 //当前考区档位占比
@@ -167,7 +167,7 @@ public class MarkSubjectApi {
                 Level level = levels.stream().filter(l -> l.getCode().equals(o.getId())).collect(Collectors.toList()).get(0);
                 o.setKdpt(level.getKdpt());
                 //所有考区档位数量
-                long gcount = paperRepo.countByWorkIdAndSubjectAndLevel(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()));
+                long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndTest(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), markSubject.getTest());
                 o.setGcount((int) gcount);
                 //所有考区档位占比
                 double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
@@ -203,7 +203,7 @@ public class MarkSubjectApi {
         }
         List<LevelStatDTO> levelStatDTOs = new ArrayList<>();
         List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
-//        if (CollectionUtils.isEmpty(paperIds)) {
+        if (CollectionUtils.isEmpty(paperIds)) {
             paperRepo.countGroupByLevelAll(questionId, markSubject.getTest())
                     .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
             for (Level level : levels) {
@@ -240,45 +240,45 @@ public class MarkSubjectApi {
                     o.setPt(level.getPt());
                 }
             });
-//        } else {
-//            paperRepo.countGroupByLevelAllAndIdIn(questionId, markSubject.getTest(), paperIds)
-//                    .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
-//            for (Level level : levels) {
-//                long count = levelStatDTOs.stream().filter(l -> String.valueOf(l.getId()).equals(level.getCode())).count();
-//                //没有该档位,新增
-//                if (count == 0) {
-//                    LevelStatDTO dto = new LevelStatDTO();
-//                    dto.setId(level.getCode());
-//                    dto.setCount(0);
-//                    dto.setPercent(0.0);
-//                    levelStatDTOs.add(dto);
-//                }
-//            }
-//            //当前考区总数
-//            long total = paperRepo.countByWorkIdAndQuestionIdAndIdIn(markSubject.getWorkId(), questionId, paperIds);
-//            //所有考区总数
-//            long gtotal = paperRepo.countByWorkIdAndSubjectAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), paperIds);
-//            List<Long> finalPaperIds = paperIds;
-//            levelStatDTOs.forEach(o -> {
-//                if (o.getId() != null) {
-//                    //当前考区档位占比
-//                    double p = total == 0 ? 0 : (double) o.getCount() / total * 100;
-//                    BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
-//                    o.setPercent(bd.doubleValue());
-//                    //考区阈值
-//                    Level level = levels.stream().filter(l -> l.getCode().equals(o.getId())).collect(Collectors.toList()).get(0);
-//                    o.setKdpt(level.getKdpt());
-//                    //所有考区档位数量
-//                    long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), finalPaperIds);
-//                    o.setGcount((int) gcount);
-//                    //所有考区档位占比
-//                    double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
-//                    BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
-//                    o.setGpercent(gbd.doubleValue());
-//                    o.setPt(level.getPt());
-//                }
-//            });
-//        }
+        } else {
+            paperRepo.countGroupByLevelAllAndIdIn(questionId, markSubject.getTest(), paperIds)
+                    .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
+            for (Level level : levels) {
+                long count = levelStatDTOs.stream().filter(l -> String.valueOf(l.getId()).equals(level.getCode())).count();
+                //没有该档位,新增
+                if (count == 0) {
+                    LevelStatDTO dto = new LevelStatDTO();
+                    dto.setId(level.getCode());
+                    dto.setCount(0);
+                    dto.setPercent(0.0);
+                    levelStatDTOs.add(dto);
+                }
+            }
+            //当前考区总数
+            long total = paperRepo.countByWorkIdAndQuestionIdAndIdIn(markSubject.getWorkId(), questionId, paperIds);
+            //所有考区总数
+            long gtotal = paperRepo.countByWorkIdAndSubjectAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), paperIds);
+            List<Long> finalPaperIds = paperIds;
+            levelStatDTOs.forEach(o -> {
+                if (o.getId() != null) {
+                    //当前考区档位占比
+                    double p = total == 0 ? 0 : (double) o.getCount() / total * 100;
+                    BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
+                    o.setPercent(bd.doubleValue());
+                    //考区阈值
+                    Level level = levels.stream().filter(l -> l.getCode().equals(o.getId())).collect(Collectors.toList()).get(0);
+                    o.setKdpt(level.getKdpt());
+                    //所有考区档位数量
+                    long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), finalPaperIds);
+                    o.setGcount((int) gcount);
+                    //所有考区档位占比
+                    double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
+                    BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
+                    o.setGpercent(gbd.doubleValue());
+                    o.setPt(level.getPt());
+                }
+            });
+        }
         Collections.sort(levelStatDTOs, (o1, o2) -> {
             if (o1.getId() == null || o2.getId() == null) {
                 return 1;

+ 16 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -39,6 +39,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.persistence.criteria.*;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -506,11 +507,13 @@ public class MarkTaskApi {
         List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
         List<Paper> papers;
         if (questionId == null) {
-            papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, TrialEnum.DEFAULT.getId());
+            papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
         } else {
-            papers = paperRepo.findByworkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, TrialEnum.DEFAULT.getId());
+            papers = paperRepo.findByworkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, markSubject.getTest());
         }
 
+
+        long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
         List<LevelDetailDTO> list = new ArrayList<>();
         for (Level level : levels) {
             LevelDetailDTO levelDetailDTO = new LevelDetailDTO();
@@ -542,6 +545,17 @@ public class MarkTaskApi {
             int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).intValue();
             levelDetailDTO.setAdjustmentCount(adjustment);
 
+            //考区阈值
+            levelDetailDTO.setKdpt(level.getKdpt());
+            levelDetailDTO.setPt(level.getPt());
+            //所有考区档位数量
+            long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndTest(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(level.getCode()), markSubject.getTest());
+            levelDetailDTO.setGcount((int) gcount);
+            //所有考区档位占比
+            double gp = gtotal == 0 ? 0 : (double) levelDetailDTO.getGcount() / gtotal * 100;
+            BigDecimal gbd = new BigDecimal(gp).setScale(2, RoundingMode.HALF_EVEN);
+            levelDetailDTO.setGpercent(gbd.doubleValue());
+
             list.add(levelDetailDTO);
         }
         return list;

+ 48 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/LevelDetailDTO.java

@@ -17,6 +17,22 @@ public class LevelDetailDTO implements Serializable{
     private Integer cumulateCount;
     private double cumulateProp;
     private Integer adjustmentCount;
+    /**
+     * 全局的percent
+     */
+    private Double gpercent;
+    /**
+     * 全局的count(任务数量总数)
+     */
+    private Integer gcount;
+    /**
+     * 考点阀值
+     */
+    private int kdpt = 0;
+    /**
+     * 占比阈值。percent thredhold,0-100
+     */
+    private int pt = 0;
 
     public Long getWorkId() {
         return workId;
@@ -113,4 +129,36 @@ public class LevelDetailDTO implements Serializable{
     public void setAdjustmentCount(Integer adjustmentCount) {
         this.adjustmentCount = adjustmentCount;
     }
+
+    public Double getGpercent() {
+        return gpercent;
+    }
+
+    public void setGpercent(Double gpercent) {
+        this.gpercent = gpercent;
+    }
+
+    public Integer getGcount() {
+        return gcount;
+    }
+
+    public void setGcount(Integer gcount) {
+        this.gcount = gcount;
+    }
+
+    public int getKdpt() {
+        return kdpt;
+    }
+
+    public void setKdpt(int kdpt) {
+        this.kdpt = kdpt;
+    }
+
+    public int getPt() {
+        return pt;
+    }
+
+    public void setPt(int pt) {
+        this.pt = pt;
+    }
 }