Browse Source

修复小题新增总分小数为0.55无法添加的问题

yin 1 year ago
parent
commit
02d09f0603

+ 15 - 7
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -776,6 +776,9 @@ public class MarkServiceImpl implements MarkService {
                     }
                     }
                 }
                 }
             }
             }
+            if (arbitrateIndex.size() == questionList.size()) {
+                return new ArrayList<>();
+            }
         } else {
         } else {
             if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
             if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
                 return new ArrayList<>();
                 return new ArrayList<>();
@@ -939,9 +942,9 @@ public class MarkServiceImpl implements MarkService {
     public void processArbitrate(MarkResult result, Integer userId) {
     public void processArbitrate(MarkResult result, Integer userId) {
         ArbitrateHistory history = arbitrateDao.findOne(result.getLibraryId());
         ArbitrateHistory history = arbitrateDao.findOne(result.getLibraryId());
         MarkGroup group = groupDao.findOne(history.getExamId(), history.getSubjectCode(), history.getGroupNumber());
         MarkGroup group = groupDao.findOne(history.getExamId(), history.getSubjectCode(), history.getGroupNumber());
-        Double[] markerScoreList = result.getMarkerScoreList();
+        List<Double> markerScoreList = new ArrayList<>(Arrays.asList(result.getMarkerScoreList()));
         List<Integer> questionIndexList = history.getQuestionIndexList();
         List<Integer> questionIndexList = history.getQuestionIndexList();
-        if (!questionIndexList.isEmpty() && markerScoreList.length != questionIndexList.size()) {
+        if (!questionIndexList.isEmpty() && markerScoreList.size() != questionIndexList.size()) {
             return;
             return;
         }
         }
         history.setUserId(userId);
         history.setUserId(userId);
@@ -973,7 +976,8 @@ public class MarkServiceImpl implements MarkService {
             List<Object> scoreList = new ArrayList<>();
             List<Object> scoreList = new ArrayList<>();
             for (int i = 0; i < questionList.size(); i++) {
             for (int i = 0; i < questionList.size(); i++) {
                 if (questionIndexList.contains(i + 1)) {
                 if (questionIndexList.contains(i + 1)) {
-                    scoreList.add(markerScoreList[i]);
+                    scoreList.add(markerScoreList.get(0));
+                    markerScoreList.remove(0);
                 } else {
                 } else {
                     scoreList.add("#");
                     scoreList.add("#");
                 }
                 }
@@ -1221,12 +1225,16 @@ public class MarkServiceImpl implements MarkService {
                 List<Double> doubleList = new ArrayList<>();
                 List<Double> doubleList = new ArrayList<>();
                 ScoreItem item = new ScoreItem(false);
                 ScoreItem item = new ScoreItem(false);
                 if (arbitrate) {
                 if (arbitrate) {
-                    item.setScore((list.get(0).getScoreList().get(i).getScore()));
-                    score = BigDecimalUtils.add(score, item.getScore());
-                    continue;
+                    Double currentScore = list.get(0).getScoreList().get(i).getScore();
+                    if (currentScore != null) {
+                        item.setScore(currentScore);
+                        score = BigDecimalUtils.add(score, item.getScore());
+                        detail.add(item);
+                        continue;
+                    }
                 }
                 }
                 for (int j = 0; j < list.size(); j++) {
                 for (int j = 0; j < list.size(); j++) {
-                    doubleList.add(list.get(j).getScoreList().get(i).getScore());
+                    doubleList.add(list.get(j).getMarkerScoreItem().get(i).getScore());
                 }
                 }
                 if (ThirdPolicy.LOW_DIFF_HIGH_AVG.equals(group.getThirdPolicy()) && list.size() == 3) {
                 if (ThirdPolicy.LOW_DIFF_HIGH_AVG.equals(group.getThirdPolicy()) && list.size() == 3) {
                     doubleList.sort((o1, o2) -> {
                     doubleList.sort((o1, o2) -> {

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

@@ -128,6 +128,10 @@ public class TaskServiceImpl implements TaskService {
             if (history != null) {
             if (history != null) {
                 if (!sItems.isEmpty() && sItems.size() == sList.size()) {
                 if (!sItems.isEmpty() && sItems.size() == sList.size()) {
                     step.setScore(sItems.get(i).getScore());
                     step.setScore(sItems.get(i).getScore());
+                } else if (!history.getQuestionIndexList().isEmpty() && history.getQuestionIndexList().contains(i + 1)
+                        && !sItems.isEmpty()) {
+                    step.setScore(sItems.get(0).getScore());
+                    sItems.remove(0);
                 }
                 }
                 // 未选做
                 // 未选做
                 if (history.getTotalScore() != null && history.getTotalScore() == UN_SELECTIVE_SCORE) {
                 if (history.getTotalScore() != null && history.getTotalScore() == UN_SELECTIVE_SCORE) {

+ 13 - 7
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/SubjectQuestionDTO.java

@@ -9,7 +9,6 @@ import org.apache.commons.lang.StringUtils;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.mark.model.MarkConfigItem;
 import cn.com.qmth.stmms.biz.mark.model.MarkConfigItem;
-import cn.com.qmth.stmms.biz.utils.DoubleUtil;
 import cn.com.qmth.stmms.common.enums.QuestionType;
 import cn.com.qmth.stmms.common.enums.QuestionType;
 import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
 import cn.com.qmth.stmms.common.utils.BigDecimalUtils;
 
 
@@ -65,8 +64,8 @@ public class SubjectQuestionDTO {
                 if (group == null) {
                 if (group == null) {
                     group = new MarkGroup(examId, subjectCode, question.getGroupNumber(),
                     group = new MarkGroup(examId, subjectCode, question.getGroupNumber(),
                             MarkConfigItem.parse(question.getPicList()), 0d, question.getDoubleRate(),
                             MarkConfigItem.parse(question.getPicList()), 0d, question.getDoubleRate(),
-                            question.getArbitrateThreshold(), question.getScorePolicy(),question.getArbitrateType(), question.getMarkMode(),
-                            question.getTrialCount(), false, false, 1, false);
+                            question.getArbitrateThreshold(), question.getScorePolicy(), question.getArbitrateType(),
+                            question.getMarkMode(), question.getTrialCount(), false, false, 1, false);
                     group.setImportQuestionList(new LinkedList<>());
                     group.setImportQuestionList(new LinkedList<>());
                     groups.put(question.getGroupNumber(), group);
                     groups.put(question.getGroupNumber(), group);
                 }
                 }
@@ -132,13 +131,11 @@ public class SubjectQuestionDTO {
                         error.add("[" + subjectCode + "] 有满分为空的记录");
                         error.add("[" + subjectCode + "] 有满分为空的记录");
                         return false;
                         return false;
                     }
                     }
-                    int score = (int) DoubleUtil.mul(question.getTotalScore(), 100);
-                    if (DoubleUtil.mul(question.getTotalScore(), 100) - score > 0) {
+                    if (countDecimalPlaces(question.getTotalScore()) > 2) {
                         error.add("[" + subjectCode + "] 有满分为小数超2位的记录");
                         error.add("[" + subjectCode + "] 有满分为小数超2位的记录");
                         return false;
                         return false;
                     }
                     }
-                    if (!objective && DoubleUtil.mul(question.getIntervalScore(), 100)
-                            - (int) DoubleUtil.mul(question.getIntervalScore(), 100) > 0) {
+                    if (!objective && countDecimalPlaces(question.getIntervalScore()) > 2) {
                         error.add("[" + subjectCode + "] 有间隔分为小数超2位的记录");
                         error.add("[" + subjectCode + "] 有间隔分为小数超2位的记录");
                         return false;
                         return false;
                     }
                     }
@@ -233,6 +230,15 @@ public class SubjectQuestionDTO {
         }
         }
     }
     }
 
 
+    public int countDecimalPlaces(double number) {
+        String num = Double.toString(number);
+        int decimalPointIndex = num.indexOf('.');
+        if (decimalPointIndex == -1) {
+            return 0;
+        }
+        return num.length() - decimalPointIndex - 1;
+    }
+
     private String check(List<ExamQuestion> questions, List<ExamQuestion> value) {
     private String check(List<ExamQuestion> questions, List<ExamQuestion> value) {
         if (questions.size() != value.size()) {
         if (questions.size() != value.size()) {
             return "题目总数不一致";
             return "题目总数不一致";

+ 16 - 9
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/PaperController.java

@@ -46,7 +46,7 @@ import cn.com.qmth.stmms.biz.file.enums.FormatType;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
-import cn.com.qmth.stmms.biz.report.service.*;
+import cn.com.qmth.stmms.biz.report.service.ReportService;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.domain.WebUser;
@@ -101,7 +101,6 @@ public class PaperController extends BaseExamController {
     @Autowired
     @Autowired
     private MarkService markService;
     private MarkService markService;
 
 
-
     @Autowired
     @Autowired
     private MarkerService markerService;
     private MarkerService markerService;
 
 
@@ -531,7 +530,7 @@ public class PaperController extends BaseExamController {
     @RequestMapping(value = "/question-edit/{questionId}", method = RequestMethod.GET)
     @RequestMapping(value = "/question-edit/{questionId}", method = RequestMethod.GET)
     @RoleRequire(Role.SCHOOL_ADMIN)
     @RoleRequire(Role.SCHOOL_ADMIN)
     public String edit(Model model, @PathVariable Integer questionId, ExamSubjectSearchQuery query,
     public String edit(Model model, @PathVariable Integer questionId, ExamSubjectSearchQuery query,
-            @RequestParam(required = false) Boolean upload,@RequestParam Boolean enableUpdate) {
+            @RequestParam(required = false) Boolean upload, @RequestParam Boolean enableUpdate) {
         ExamQuestion examQuestion = questionService.findById(questionId);
         ExamQuestion examQuestion = questionService.findById(questionId);
         model.addAttribute("examQuestion", examQuestion);
         model.addAttribute("examQuestion", examQuestion);
         model.addAttribute("objectivePolicyList", ObjectivePolicy.values());
         model.addAttribute("objectivePolicyList", ObjectivePolicy.values());
@@ -554,12 +553,12 @@ public class PaperController extends BaseExamController {
         String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
         String t = query.getTotalScoreNotEqual() == null ? "" : query.getTotalScoreNotEqual().toString();
         ExamQuestion newQ = questionService.findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
         ExamQuestion newQ = questionService.findByExamAndSubjectAndObjectiveAndMainNumberAndSubNumber(examId,
                 question.getSubjectCode(), question.isObjective(), question.getMainNumber(), question.getSubNumber());
                 question.getSubjectCode(), question.isObjective(), question.getMainNumber(), question.getSubNumber());
-        if(!old.isObjective()&&!enableUpdate) {//只能修改大题名称的主观题
-        	questionService.updateMainTitle(id, question.getMainTitle(), question.getName());
-    		return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
+        if (!old.isObjective() && !enableUpdate) {// 只能修改大题名称的主观题
+            questionService.updateMainTitle(id, question.getMainTitle(), question.getName());
+            return "redirect:/admin/exam/paper/detail?subjectCode=" + question.getSubjectCode() + "&pageNumber="
                     + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()
                     + query.getPageNumber() + "&code=" + query.getCode() + "&category=" + query.getCategory()
                     + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
                     + "&level=" + query.getLevel() + "&upload=" + u + "&totalScoreNotEqual=" + t;
-    	}
+        }
         if (old == null || ((old.getMainNumber() != question.getMainNumber()
         if (old == null || ((old.getMainNumber() != question.getMainNumber()
                 || !old.getSubNumber().equals(question.getSubNumber())) && newQ != null)) {
                 || !old.getSubNumber().equals(question.getSubNumber())) && newQ != null)) {
             addMessage(redirectAttributes, "编辑失败,编辑题目不存在或编辑后的题号已存在");
             addMessage(redirectAttributes, "编辑失败,编辑题目不存在或编辑后的题号已存在");
@@ -852,8 +851,7 @@ public class PaperController extends BaseExamController {
     }
     }
 
 
     private boolean validate(ExamQuestion question, List<String> error, Map<Integer, String> titleMap) {
     private boolean validate(ExamQuestion question, List<String> error, Map<Integer, String> titleMap) {
-        int score = (int) (question.getTotalScore() * 100);
-        if ((question.getTotalScore() * 100) - score > 0) {
+        if (countDecimalPlaces(question.getTotalScore()) > 2) {
             error.add("有满分为小数超2位的记录");
             error.add("有满分为小数超2位的记录");
             return false;
             return false;
         }
         }
@@ -885,6 +883,15 @@ public class PaperController extends BaseExamController {
         return true;
         return true;
     }
     }
 
 
+    public int countDecimalPlaces(double number) {
+        String num = Double.toString(number);
+        int decimalPointIndex = num.indexOf('.');
+        if (decimalPointIndex == -1) {
+            return 0;
+        }
+        return num.length() - decimalPointIndex - 1;
+    }
+
     @Logging(menu = "导入数据包", type = LogType.IMPORT_FILE)
     @Logging(menu = "导入数据包", type = LogType.IMPORT_FILE)
     @RequestMapping(value = "/importData", method = RequestMethod.POST)
     @RequestMapping(value = "/importData", method = RequestMethod.POST)
     @RoleRequire(Role.SCHOOL_ADMIN)
     @RoleRequire(Role.SCHOOL_ADMIN)