|
@@ -1,5 +1,7 @@
|
|
|
package cn.com.qmth.stmms.ms.marking.service;
|
|
|
|
|
|
+import cn.com.qmth.stmms.ms.commons.config.ScoreConfig;
|
|
|
+import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.*;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.user.MarkRight;
|
|
@@ -15,9 +17,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.util.Hashtable;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -51,6 +51,12 @@ public class StageControlService {
|
|
|
@Autowired
|
|
|
private MarkerGroupRepo markerGroupRepo;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ ScoreConfig scoreConfig;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ SqlUtil sqlUtil;
|
|
|
+
|
|
|
public static volatile Map<String, Boolean> statusMap = new Hashtable<>();
|
|
|
|
|
|
/**
|
|
@@ -179,13 +185,89 @@ public class StageControlService {
|
|
|
throw new RuntimeException("没有分档完成");
|
|
|
}
|
|
|
this.isPtFull(workId, markSubject);
|
|
|
- Sort sort = new Sort("questionId");
|
|
|
- List<Paper> papers = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrue(workId, subject, sort);
|
|
|
List<MarkerGroup> markerGroups = markerGroupRepo.findByWorkIdAndSubject(workId, subject);
|
|
|
if (markerGroups.size() == 0) {
|
|
|
statusMap.put(markSubject.getId(), false);
|
|
|
throw new RuntimeException("评卷员没有进行分组");
|
|
|
}
|
|
|
+ List<Paper> papers = null;
|
|
|
+ //是否启用打分配置
|
|
|
+ if (Objects.nonNull(scoreConfig) && scoreConfig.isEnable()) {
|
|
|
+ //2019.11.20日加入根据配置文件打分分档
|
|
|
+ if (Objects.nonNull(scoreConfig) && Objects.nonNull(scoreConfig.getExclude()) && scoreConfig.getExclude().size() > 0) {
|
|
|
+ List<String> configLevelList = scoreConfig.getExclude();
|
|
|
+ configLevelList = configLevelList.stream().map(string -> string.trim().toUpperCase()).collect(Collectors.toList());
|
|
|
+ List<Level> levels = levelRepo.findByCodeNotIn(configLevelList);
|
|
|
+ List<String> levelList = levels.stream().map(Level::getCode).collect(Collectors.toList());
|
|
|
+ Collections.sort(levelList);
|
|
|
+ Object o1 = levelList.stream().map(s -> "'" + s + "'").collect(Collectors.joining(","));
|
|
|
+ StringJoiner joiner = new StringJoiner("");
|
|
|
+ joiner.add("select count(1),p.`level` from mark_task mt left join paper p on p.id = mt.paper_id where mt.stage = 2 and p.`level` in (").add(o1.toString()).add(")");
|
|
|
+ String sql = sqlUtil.sqlGroupBy(joiner.toString(), "p.`level`");
|
|
|
+ List list = sqlUtil.execSqlForMap(sql);
|
|
|
+ List<String> finalLevelList = new ArrayList();
|
|
|
+ if (Objects.isNull(list) || list.size() == 0) {
|
|
|
+ finalLevelList.addAll(levelList);
|
|
|
+ } else {
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ Map map = (Map) list.get(i);
|
|
|
+ String level = String.valueOf(map.get("level"));
|
|
|
+ if (!levelList.contains(level)) {
|
|
|
+ finalLevelList.add(level);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(list) && list.size() > 0 && finalLevelList.size() == 0) {
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
|
+ throw new RuntimeException("档位:" + o1 + "已经分配过");
|
|
|
+ }
|
|
|
+ markSubject.setAllLevel(false);
|
|
|
+ papers = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrueAndLevelIn(workId, subject, finalLevelList);
|
|
|
+ } else if (Objects.nonNull(scoreConfig) && Objects.nonNull(scoreConfig.getTaskSort())) {
|
|
|
+ if (Objects.equals("paper", scoreConfig.getTaskSort().trim()) && Objects.nonNull(scoreConfig.getExclude()) && scoreConfig.getExclude().size() == 0) {
|
|
|
+ List<Level> allLevel = levelRepo.findByWorkId(workId);
|
|
|
+ List<String> levelList = allLevel.stream().map(Level::getCode).collect(Collectors.toList());
|
|
|
+ Collections.sort(levelList);
|
|
|
+ Object o1 = levelList.stream().map(s -> "'" + s + "'").collect(Collectors.joining(","));
|
|
|
+ StringJoiner joiner = new StringJoiner("");
|
|
|
+ joiner.add("select count(1),p.`level` from mark_task mt left join paper p on p.id = mt.paper_id where mt.stage = 2 and p.`level` in (").add(o1.toString()).add(")");
|
|
|
+ String sql = sqlUtil.sqlGroupBy(joiner.toString(), "p.`level`");
|
|
|
+ List list = sqlUtil.execSqlForMap(sql);
|
|
|
+ List<String> finalLevelList = new ArrayList();
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ Map map = (Map) list.get(i);
|
|
|
+ String level = String.valueOf(map.get("level"));
|
|
|
+ finalLevelList.add(level);
|
|
|
+ }
|
|
|
+ //求task任务完成度
|
|
|
+ if (finalLevelList.size() > 0) {
|
|
|
+ joiner = new StringJoiner("");
|
|
|
+ Object o2 = finalLevelList.stream().map(s -> "'" + s + "'").collect(Collectors.joining(","));
|
|
|
+ joiner.add("select count(1) as count from mark_task mt left join paper p on p.id = mt.paper_id where mt.stage = 2 and p.`level` in (").add(o2.toString()).add(")").add(" and mt.`result` is null");
|
|
|
+ list = sqlUtil.execSqlForMap(joiner.toString());
|
|
|
+ if (Objects.nonNull(list) && list.size() > 0) {
|
|
|
+ Map map = (Map) list.get(0);
|
|
|
+ int taskCount = Integer.parseInt(String.valueOf(map.get("count")));
|
|
|
+ if (taskCount > 0) {
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
|
+ throw new RuntimeException("档位:" + o2 + "还有任务未完成");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //求差值
|
|
|
+ List<String> distinctIdList = levelList.stream().filter(item -> !finalLevelList.contains(item)).collect(Collectors.toList());
|
|
|
+ markSubject.setAllLevel(true);
|
|
|
+ papers = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrueAndLevelIn(workId, subject, distinctIdList);
|
|
|
+ } else {
|
|
|
+ statusMap.put(markSubject.getId(), false);
|
|
|
+ throw new RuntimeException("请配置打分exclude");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ markSubject.setAllLevel(true);
|
|
|
+ Sort sort = new Sort("questionId");
|
|
|
+ papers = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrue(workId, subject, sort);
|
|
|
+ }
|
|
|
assignTaskService.assignForGrouping(papers, markerGroups, markSubject);
|
|
|
}
|
|
|
|
|
@@ -267,7 +349,7 @@ public class StageControlService {
|
|
|
|
|
|
BigDecimal waitTotal = BigDecimal.valueOf(totalCount).subtract(BigDecimal.valueOf(successCount));
|
|
|
//进度
|
|
|
- BigDecimal progress = BigDecimal.ZERO.compareTo(BigDecimal.valueOf(totalCount)) == 0 ? BigDecimal.ZERO :BigDecimal.valueOf(successCount).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(totalCount), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ BigDecimal progress = BigDecimal.ZERO.compareTo(BigDecimal.valueOf(totalCount)) == 0 ? BigDecimal.ZERO : BigDecimal.valueOf(successCount).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(totalCount), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
|
|
|
LevleProgressDTO progressDTO = new LevleProgressDTO();
|
|
|
progressDTO.setSuccessCount(successCount);
|