|
@@ -3,10 +3,7 @@ package cn.com.qmth.stmms.ms.marking.api;
|
|
import cn.com.qmth.stmms.ms.commons.lock.LockService;
|
|
import cn.com.qmth.stmms.ms.commons.lock.LockService;
|
|
import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
|
|
import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
|
|
import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
|
|
import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
|
|
-import cn.com.qmth.stmms.ms.core.domain.Level;
|
|
|
|
-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 cn.com.qmth.stmms.ms.core.domain.*;
|
|
import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroupLeader;
|
|
import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroupLeader;
|
|
import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
|
|
import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
|
|
import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
|
|
import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
|
|
@@ -16,10 +13,7 @@ import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
|
|
import cn.com.qmth.stmms.ms.marking.dto.LevelDetailDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.LevelDetailDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
|
|
import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
|
|
-import cn.com.qmth.stmms.ms.marking.service.MarkTaskLevelService;
|
|
|
|
-import cn.com.qmth.stmms.ms.marking.service.MarkTaskRoughLevelService;
|
|
|
|
-import cn.com.qmth.stmms.ms.marking.service.MarkTaskScoreService;
|
|
|
|
-import cn.com.qmth.stmms.ms.marking.service.MarkerGroupLeaderService;
|
|
|
|
|
|
+import cn.com.qmth.stmms.ms.marking.service.*;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -312,61 +306,121 @@ public class MarkTaskApi {
|
|
@RequestParam(required = false) Long questionId) {
|
|
@RequestParam(required = false) Long questionId) {
|
|
MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
|
|
MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
|
|
|
|
|
|
- List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
|
|
|
|
- List<Paper> papers;
|
|
|
|
- if (questionId == null) {
|
|
|
|
- papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
|
|
|
|
- } else {
|
|
|
|
- papers = paperRepo.findByWorkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, markSubject.getTest());
|
|
|
|
- }
|
|
|
|
|
|
+ if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
|
|
|
|
+ List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
|
|
|
|
+ List<RoughLevel> roughLevels = DetermineRoughLevelService.parseRoughLevels(levels);
|
|
|
|
+ List<Paper> papers;
|
|
|
|
+ if (questionId == null) {
|
|
|
|
+ papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
|
|
|
|
+ } else {
|
|
|
|
+ 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 (RoughLevel level : roughLevels) {
|
|
|
|
+ LevelDetailDTO levelDetailDTO = new LevelDetailDTO();
|
|
|
|
+ levelDetailDTO.setWorkId(workId);
|
|
|
|
+ levelDetailDTO.setSubjectName(markSubject.getName());
|
|
|
|
+ //档位
|
|
|
|
+ levelDetailDTO.setCode(level.getRoughCode());
|
|
|
|
+ levelDetailDTO.setMinScore(level.getMinScore());
|
|
|
|
+ levelDetailDTO.setMaxScore(level.getMaxScore());
|
|
|
|
+ //数量
|
|
|
|
+ long count = papers.stream().filter(m -> Objects.nonNull(m.getRoughLevel()) && Objects.equals(level.getRoughCode(), m.getRoughLevel())).count();
|
|
|
|
+ levelDetailDTO.setLevelCount((int) count);
|
|
|
|
+ BigDecimal prop = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ //占比
|
|
|
|
+ levelDetailDTO.setLevelProp(prop.doubleValue());
|
|
|
|
+ //预设占比
|
|
|
|
+ levelDetailDTO.setExamLevelProp(0);
|
|
|
|
+ //差值
|
|
|
|
+// BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
|
|
|
|
+ levelDetailDTO.setDiffProp(0);
|
|
|
|
+ //累计数量
|
|
|
|
+ int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
|
|
|
|
+ levelDetailDTO.setCumulateCount(sumCount);
|
|
|
|
+ //累计占比
|
|
|
|
+ BigDecimal cumulateProp = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
|
|
|
|
+
|
|
|
|
+ //调整
|
|
|
|
+// int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).intValue();
|
|
|
|
+ levelDetailDTO.setAdjustmentCount(0);
|
|
|
|
+
|
|
|
|
+ //考区阈值
|
|
|
|
+ levelDetailDTO.setKdpt(0);
|
|
|
|
+ levelDetailDTO.setPt(0);
|
|
|
|
+ //所有考区档位数量
|
|
|
|
+ long gcount = paperRepo.countByWorkIdAndSubjectAndRoughLevelAndTest(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(level.getRoughCode()), 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;
|
|
|
|
+ } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
|
|
|
|
+ List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
|
|
|
|
+ List<Paper> papers;
|
|
|
|
+ if (questionId == null) {
|
|
|
|
+ papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
|
|
|
|
+ } else {
|
|
|
|
+ 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();
|
|
|
|
- levelDetailDTO.setWorkId(workId);
|
|
|
|
- levelDetailDTO.setSubjectName(markSubject.getName());
|
|
|
|
- //档位
|
|
|
|
- levelDetailDTO.setCode(level.getCode());
|
|
|
|
- levelDetailDTO.setMinScore(level.getMinScore());
|
|
|
|
- levelDetailDTO.setMaxScore(level.getMaxScore());
|
|
|
|
- //数量
|
|
|
|
- long count = papers.stream().filter(m -> Objects.nonNull(m.getLevel()) && Objects.equals(level.getCode(), m.getLevel())).count();
|
|
|
|
- levelDetailDTO.setLevelCount((int) count);
|
|
|
|
- BigDecimal prop = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
- //占比
|
|
|
|
- levelDetailDTO.setLevelProp(prop.doubleValue());
|
|
|
|
- //预设占比
|
|
|
|
- levelDetailDTO.setExamLevelProp(level.getPt());
|
|
|
|
- //差值
|
|
|
|
- BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
|
|
|
|
- levelDetailDTO.setDiffProp(diff.doubleValue());
|
|
|
|
- //累计数量
|
|
|
|
- int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
|
|
|
|
- levelDetailDTO.setCumulateCount(sumCount);
|
|
|
|
- //累计占比
|
|
|
|
- BigDecimal cumulateProp = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
- levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
|
|
|
|
-
|
|
|
|
- //调整
|
|
|
|
- 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);
|
|
|
|
|
|
+ long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
|
|
|
|
+ List<LevelDetailDTO> list = new ArrayList<>();
|
|
|
|
+ for (Level level : levels) {
|
|
|
|
+ LevelDetailDTO levelDetailDTO = new LevelDetailDTO();
|
|
|
|
+ levelDetailDTO.setWorkId(workId);
|
|
|
|
+ levelDetailDTO.setSubjectName(markSubject.getName());
|
|
|
|
+ //档位
|
|
|
|
+ levelDetailDTO.setCode(level.getCode());
|
|
|
|
+ levelDetailDTO.setMinScore(level.getMinScore());
|
|
|
|
+ levelDetailDTO.setMaxScore(level.getMaxScore());
|
|
|
|
+ //数量
|
|
|
|
+ long count = papers.stream().filter(m -> Objects.nonNull(m.getLevel()) && Objects.equals(level.getCode(), m.getLevel())).count();
|
|
|
|
+ levelDetailDTO.setLevelCount((int) count);
|
|
|
|
+ BigDecimal prop = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ //占比
|
|
|
|
+ levelDetailDTO.setLevelProp(prop.doubleValue());
|
|
|
|
+ //预设占比
|
|
|
|
+ levelDetailDTO.setExamLevelProp(level.getPt());
|
|
|
|
+ //差值
|
|
|
|
+ BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
|
|
|
|
+ levelDetailDTO.setDiffProp(diff.doubleValue());
|
|
|
|
+ //累计数量
|
|
|
|
+ int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
|
|
|
|
+ levelDetailDTO.setCumulateCount(sumCount);
|
|
|
|
+ //累计占比
|
|
|
|
+ BigDecimal cumulateProp = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
+ levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
|
|
|
|
+
|
|
|
|
+ //调整
|
|
|
|
+ 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;
|
|
}
|
|
}
|
|
- return list;
|
|
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|