瀏覽代碼

重置评卷员需要验证;导入题目新增表头验证;考生排序用id;

ting.yin 1 年之前
父節點
當前提交
15d9348ef0

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/query/ExamStudentSearchQuery.java

@@ -142,6 +142,10 @@ public class ExamStudentSearchQuery extends BaseQuery<ExamStudent> {
         setSort(new Sort(Direction.DESC, "inspectTime"));
         setSort(new Sort(Direction.DESC, "inspectTime"));
     }
     }
 
 
+    public void orderById() {
+        setSort(new Sort(Direction.ASC, "id"));
+    }
+
     public Integer getExamId() {
     public Integer getExamId() {
         return examId;
         return examId;
     }
     }

+ 36 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java

@@ -19,6 +19,7 @@ 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;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.ui.Model;
@@ -31,6 +32,7 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
 
 import cn.com.qmth.stmms.admin.thread.MarkerResetThread;
 import cn.com.qmth.stmms.admin.thread.MarkerResetThread;
+import cn.com.qmth.stmms.biz.config.service.impl.SystemCache;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.Exam;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
@@ -47,6 +49,8 @@ import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
+import cn.com.qmth.stmms.biz.school.model.School;
+import cn.com.qmth.stmms.biz.school.service.SchoolService;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
 import cn.com.qmth.stmms.biz.user.service.query.UserSearchQuery;
@@ -113,6 +117,15 @@ public class MarkerController extends BaseExamController {
     @Autowired
     @Autowired
     private AsyncTaskExecutor taskExecutor;
     private AsyncTaskExecutor taskExecutor;
 
 
+    @Autowired
+    private SchoolService schoolService;
+
+    @Autowired
+    private SystemCache systemCache;
+
+    @Value("${mark.group.delete}")
+    private String markDeleteCode;
+
     @Logging(menu = "评卷员查询", type = LogType.QUERY)
     @Logging(menu = "评卷员查询", type = LogType.QUERY)
     @RequestMapping
     @RequestMapping
     public String list(Model model, HttpServletRequest request, MarkerSearchQuery query) {
     public String list(Model model, HttpServletRequest request, MarkerSearchQuery query) {
@@ -130,8 +143,16 @@ public class MarkerController extends BaseExamController {
         for (Marker marker : query.getResult()) {
         for (Marker marker : query.getResult()) {
             marker.setSubject(subjectService.find(marker.getExamId(), marker.getSubjectCode()));
             marker.setSubject(subjectService.find(marker.getExamId(), marker.getSubjectCode()));
             MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
             MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
+            int percent = group.getLibraryCount() > 0 ? (int) (group.getMarkedCount() * 100.00 / group
+                    .getLibraryCount()) : 0;
+            if (group.getMarkedCount() > 0 && percent == 0) {
+                percent = 1;
+            } else if (group.getLeftCount() > 0 && percent == 100) {
+                percent = 99;
+            }
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                     marker.getSubjectCode(), false, group.getNumber()));
                     marker.getSubjectCode(), false, group.getNumber()));
+            group.setPercent(percent);
             marker.setGroup(group);
             marker.setGroup(group);
             marker.setMarkedCount(markService.markedCount(marker));
             marker.setMarkedCount(markService.markedCount(marker));
             marker.setCurrentCount(markService.applyCount(marker));
             marker.setCurrentCount(markService.applyCount(marker));
@@ -141,6 +162,9 @@ public class MarkerController extends BaseExamController {
         }
         }
         model.addAttribute("query", query);
         model.addAttribute("query", query);
         model.addAttribute("subjectList", subjectList);
         model.addAttribute("subjectList", subjectList);
+        Exam exam = examService.findById(examId);
+        School school = schoolService.findById(exam.getSchoolId());
+        model.addAttribute("deleteCheck", systemCache.isGroupDeleteWarn() ? true : school.isGroupDeleteCheck());
         return "modules/exam/markerList";
         return "modules/exam/markerList";
     }
     }
 
 
@@ -235,10 +259,21 @@ public class MarkerController extends BaseExamController {
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
     @RequestMapping(value = "/reset", method = RequestMethod.POST)
     @ResponseBody
     @ResponseBody
     @RoleRequire(Role.SCHOOL_ADMIN)
     @RoleRequire(Role.SCHOOL_ADMIN)
-    public JSONObject resetMarker(@RequestParam Integer id) {
+    public JSONObject resetMarker(HttpServletRequest request, @RequestParam Integer id,
+            @RequestParam(required = false) String deleteCode) {
         Marker marker = markerService.findById(id);
         Marker marker = markerService.findById(id);
         JSONObject obj = new JSONObject();
         JSONObject obj = new JSONObject();
+        int examId = getSessionExamId(request);
         if (marker != null) {
         if (marker != null) {
+            Exam exam = examService.findById(examId);
+            School school = schoolService.findById(exam.getSchoolId());
+            boolean warn = systemCache.isGroupDeleteWarn() ? true : school.isGroupDeleteCheck();
+            MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
+            if (warn && group.getLibraryCount() != 0 && group.getLeftCount() == 0 && !markDeleteCode.equals(deleteCode)) {
+                obj.accumulate("success", false);
+                obj.accumulate("message", "授权码不正确");
+                return obj;
+            }
             if (lockService.trylock(LockType.MARKER_RESET, marker.getId())) {
             if (lockService.trylock(LockType.MARKER_RESET, marker.getId())) {
                 taskExecutor.submit(new MarkerResetThread(marker, markService, lockService));
                 taskExecutor.submit(new MarkerResetThread(marker, markService, lockService));
                 obj.accumulate("success", true);
                 obj.accumulate("success", true);

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

@@ -7,6 +7,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
@@ -105,6 +106,13 @@ public class PaperController extends BaseExamController {
 
 
     private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
     private static final String NULL_PAPER_TYPE_PLACEHOLDER = "#";
 
 
+    private static final String[] SUBJECTIVE_EXCEL_HEADER = new String[] { "科目代码", "科目名称", "大题名称*", "题目昵称",
+            "大题号(只能用小写数字)*", "小题号(只能用小写数字)*", "小题满分*", "间隔分*", "评卷分组(只能用小写数字)*", "图片序号(用英文逗号分割)", "双评比例(0~1)", "仲裁阀值",
+            "合分策略(1-平均,2-最高,3-最低)", "评卷模式(common-普通,track-轨迹)", "试评数量(0-跳过试评)", "选做题数量" };
+
+    private static final String[] OBJECTIVE_EXCEL_HEADER = new String[] { "科目代码", "科目名称", "试卷类型", "大题名称", "题目昵称",
+            "大题号(只能用小写数字)", "小题号(只能用小写数字)", "标准答案", "小题满分", "题型(1-单选,2-多选,3-判断)" };
+
     @Autowired
     @Autowired
     private ExamSubjectService subjectService;
     private ExamSubjectService subjectService;
 
 
@@ -514,6 +522,14 @@ public class PaperController extends BaseExamController {
         try {
         try {
             ImportExcel excel = new ImportExcel(file, 1, 0);
             ImportExcel excel = new ImportExcel(file, 1, 0);
             Class<? extends QuestionDTO> clazz = objective ? ObjectiveQuestionDTO.class : SubjectiveQuestionDTO.class;
             Class<? extends QuestionDTO> clazz = objective ? ObjectiveQuestionDTO.class : SubjectiveQuestionDTO.class;
+            if (!objective && !Arrays.equals(SUBJECTIVE_EXCEL_HEADER, excel.getHeaderName())) {
+                error.add("Excel表头错误");
+                return map;
+            }
+            if (objective && !Arrays.equals(OBJECTIVE_EXCEL_HEADER, excel.getHeaderName())) {
+                error.add("Excel表头错误");
+                return map;
+            }
             List<? extends QuestionDTO> list = excel.getDataList(clazz);
             List<? extends QuestionDTO> list = excel.getDataList(clazz);
             if (list != null) {
             if (list != null) {
                 for (QuestionDTO dto : list) {
                 for (QuestionDTO dto : list) {

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -82,7 +82,7 @@ public class ScoreController extends BaseExamController {
         ModelAndView view = new ModelAndView("modules/exam/scoreList");
         ModelAndView view = new ModelAndView("modules/exam/scoreList");
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         query.setExamId(examId);
         query.setExamId(examId);
-        query.orderByExamNumber();
+        query.orderById();
         if (filter == 1) {
         if (filter == 1) {
             query.setObjectiveScore(0d);
             query.setObjectiveScore(0d);
             query.setSubjectiveScoreGt(0d);
             query.setSubjectiveScoreGt(0d);

+ 2 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/StudentController.java

@@ -91,6 +91,7 @@ public class StudentController extends BaseExamController {
         if (query.getBatchCode() != null) {
         if (query.getBatchCode() != null) {
             query.setBatchCode(StringUtils.upperCase(query.getBatchCode()));
             query.setBatchCode(StringUtils.upperCase(query.getBatchCode()));
         }
         }
+        query.orderById();
         query = studentService.findByQuery(query);
         query = studentService.findByQuery(query);
         if (query.getCurrentCount() > 0) {
         if (query.getCurrentCount() > 0) {
             for (ExamStudent student : query.getResult()) {
             for (ExamStudent student : query.getResult()) {
@@ -333,7 +334,7 @@ public class StudentController extends BaseExamController {
             query.setPageNumber(1);
             query.setPageNumber(1);
             query.setPageSize(Integer.MAX_VALUE);
             query.setPageSize(Integer.MAX_VALUE);
             query.setExamId(examId);
             query.setExamId(examId);
-            query.orderByExamNumber();
+            query.orderById();
             query = studentService.findByQuery(query);
             query = studentService.findByQuery(query);
             for (ExamStudent student : query.getResult()) {
             for (ExamStudent student : query.getResult()) {
                 ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
                 ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());

+ 14 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/common/utils/ImportExcel.java

@@ -381,6 +381,20 @@ public class ImportExcel {
         return dataList;
         return dataList;
     }
     }
 
 
+    /**
+     * 获取标题
+     * 
+     * @return
+     */
+    public String[] getHeaderName() {
+        String[] names = new String[this.getLastCellNum()];
+        Row row = this.getRow(headerNum);
+        for (int i = 0; i < this.getLastCellNum(); i++) {
+            names[i] = this.getCellValue(row, i).toString();
+        }
+        return names;
+    }
+
     // /**
     // /**
     // * 导入测试
     // * 导入测试
     // */
     // */

+ 281 - 13
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/markerList.jsp

@@ -90,6 +90,103 @@
             background: #000 none repeat scroll 0% 0%;
             background: #000 none repeat scroll 0% 0%;
         }
         }
     </style>
     </style>
+    <link rel="stylesheet" href="${ctxStatic}/common/animate.min.css" />
+	<style>
+		#delete-modal{
+            position:fixed;
+            left:0;
+            right:0;
+            top:0;
+            bottom:0;
+            z-index:500;
+            display:none;
+            background:rgba(0,0,0,.3);
+        }
+        #deleteDiv {
+            position:absolute;
+            left:50%;
+            top:50%;
+            transform:translateX(-50%) translateY(-50%);
+        }
+        .my-form {
+            padding: 0 20px;
+            position: fixed;
+            z-index: 1000;
+            left: 50%;
+            top: 50%;
+            transform: translateX(-50%) translateY(-50%);
+            background: #fff;
+            border-radius: 4px;
+            width: 384px;
+            border: 1px solid #ddd;
+        }
+        .my-form .my-form-head {
+            padding: 15px 0 10px;
+            position: relative;
+        }
+        .my-form .my-form-head .close-icon {
+            position: absolute;
+            right: -10px;
+            top: 14px;
+            width: 24px;
+            cursor: pointer;
+        }
+        .my-form .my-form-head .title-box {
+            padding-right: 30px;
+            display: flex;
+            align-items: center;
+        }
+        .my-form .my-form-head .title-box .title {
+            font-size: 16px;
+            font-weight: bold;
+            margin-left: 6px;
+        }
+        .my-form .my-form-head .title-box .warning-icon {
+            width: 24px;
+        }
+        .my-form .sub-title {
+            color: #595959;
+            line-height: 22px;
+            font-size: 14px;
+            padding-left: 30px;
+        }
+        .my-form .sub-title span {
+            color: #F53F3F;
+        }
+        .my-form .my-form-body {
+            padding: 20px 0;
+        }
+        .my-form .my-form-body .gray-bg {
+            background: #F0F0F0;
+            border-radius: 4px;
+            padding: 30px 20px 20px;
+        }
+        .my-form-item {
+            display: flex;
+            align-items: flex-start;
+        }
+        .my-form-item label {
+            font-size: 14px;
+            color: #595959;
+            width: 120px;
+            line-height: 30px;
+        }
+        .my-form-item .control-box {
+            flex: 1;
+        }
+        .my-form-item .control-box .error-tip {
+            height: 24px;
+            line-height: 20px;
+            font-size: 12px;
+            color: #F53F3F;
+        }
+        .my-form-foot {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            padding: 5px 0 15px 0;
+        }
+    </style>
 </head>
 </head>
 <body>
 <body>
 <ul class="nav nav-tabs">
 <ul class="nav nav-tabs">
@@ -208,7 +305,7 @@
                     正在重置
                     正在重置
                 </c:if>
                 </c:if>
                 <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker-reset') && marker.reseting==false}">
                 <c:if test="${fnx:hasPrivilegeCode(role_privilege_codes, 'exam_mark-marker-reset') && marker.reseting==false}">
-                 &nbsp;<a href="javascript:void(0)" class="reset-button" data-id="${marker.id}">重置</a>
+                 &nbsp;<a href="javascript:void(0)" class="reset-button" data-code="${marker.subjectCode}" data-number="${marker.groupNumber}" data-progress="${marker.group.percent}" data-id="${marker.id}">重置</a>
                 </c:if>
                 </c:if>
             </td>
             </td>
             <td>${marker.currentCount}</td>
             <td>${marker.currentCount}</td>
@@ -250,6 +347,55 @@
     <div class="password-content"><input type="text" class="password-value" placeholder="请输入新的密码"/><i class="passwordWrong"></i></div>
     <div class="password-content"><input type="text" class="password-value" placeholder="请输入新的密码"/><i class="passwordWrong"></i></div>
     <a href="#" class="btn btn-small btn-info password-btn">确定</a>
     <a href="#" class="btn btn-small btn-info password-btn">确定</a>
 </div>
 </div>
+
+<div id="delete-modal">
+	<div id="deleteDiv" class="my-form form-horizontal">
+        <div class="my-form-head">
+            <div class="title-box">
+                <img src="${ctxStatic}/images/dialog_warning_icon.png" class="warning-icon" />
+                <span class="title"></span>
+            </div>
+            <img src="${ctxStatic}/images/dialog_close_icon.png" class="close-icon" onclick="deleteDivHide()"/>
+        </div>
+        <div class="sub-title sub-title1">
+            该操作分组将会<span>清掉已完成</span>的评卷任务,确认吗?
+        </div>
+        <div class="sub-title sub-title2">
+            确认删除或重置,请联系大区经理获取授权码
+        </div>
+        <div class="my-form-body">
+            <div class="gray-bg">
+                <div class="my-form-item subjectCode">
+                    <label>输入科目代码</label>
+                    <div class="control-box">
+                        <input type="text" id="subjectCode">
+                        <div class="error-tip"></div>
+                    </div>
+                </div>
+                <div class="my-form-item groupNumber">
+                    <label>输入分组序号</label>
+                    <div class="control-box">
+                        <input type="text" id="groupNumber">
+                        <div class="error-tip"></div>
+                    </div>
+                </div>
+                <div class="my-form-item authCode">
+                    <label>输入授权码</label>
+                    <div class="control-box">
+                        <input type="text" id="authCode">
+                        <div class="error-tip"></div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+        <div class="my-form-foot">
+            <button class="btn btn-primary" onclick="dialogObj.validate()">确认</button>
+            <button class="btn btn-default" onclick="deleteDivHide()">取消</button>
+        </div>
+    </div>
+</div>
+
 <div class="pagination">${query}</div>
 <div class="pagination">${query}</div>
 <script type="text/javascript">
 <script type="text/javascript">
     var searchSubjectCode = '${query.subjectCode}';
     var searchSubjectCode = '${query.subjectCode}';
@@ -280,18 +426,52 @@
         top.$('.jbox-body .jbox-icon').css('top', '55px');
         top.$('.jbox-body .jbox-icon').css('top', '55px');
     });
     });
     $('.reset-button').click(function () {
     $('.reset-button').click(function () {
-        if (!confirm("确定要重置改评卷员吗?")) {
-            return;
-        }
-        var id = $(this).attr('data-id');
-        $.post('${ctx}/admin/exam/marker/reset', {id: id}, function (result) {
-            if (result.success == true) {
-                alert('重置成功');
-                $("#searchForm").submit();
-            } else {
-                alert(result.message);
-            }
-        });
+    	var deleteCheck = '${deleteCheck}';
+    	var id = $(this).attr('data-id');
+    	var subjectCode = $(this).attr('data-code');
+    	var groupNumber = $(this).attr('data-number');
+    	var progress = $(this).attr('data-progress');
+    	if(deleteCheck=='false'){
+    		deleteDivHide();
+	        if (!confirm("确定要重置改评卷员吗?")) {
+	            return;
+	        }
+	        $.post('${ctx}/admin/exam/marker/reset', {id: id}, function (result) {
+	            if (result.success == true) {
+	                alert('重置成功');
+	                $("#searchForm").submit();
+	            } else {
+	                alert(result.message);
+	            }
+	        });
+    		return;
+    	}
+    	dialogObj = createDialog();
+        dialogObj.initDialog({ progress: progress, subjectCode: subjectCode, groupNumber: groupNumber }, function (initParams,deleteCode) { 
+	        //这个回调方法里写进度小余10%的业务分支
+	        deleteDivHide();
+        	if(deleteCode!=null && deleteCode!=''){
+        		$.post('${ctx}/admin/exam/marker/reset', {id: id,deleteCode:deleteCode}, function (result) {
+    	            if (result.success == true) {
+    	                alert('重置成功');
+    	                $("#searchForm").submit();
+    	            } else {
+    	                alert(result.message);
+    	            }
+    	        });
+        		return;
+        	}else{
+        		$.post('${ctx}/admin/exam/marker/reset', {id: id}, function (result) {
+    	            if (result.success == true) {
+    	                alert('重置成功');
+    	                $("#searchForm").submit();
+    	            } else {
+    	                alert(result.message);
+    	            }
+    	        });
+        		return;
+        	}
+    	})
     });
     });
     $('.toggle-button').click(function () {
     $('.toggle-button').click(function () {
         var id = $(this).attr('data-id');
         var id = $(this).attr('data-id');
@@ -570,6 +750,94 @@
         });
         });
     }
     }
 </script>
 </script>
+<script>
+function deleteDivHide(){
+	 $('#delete-modal').hide();
+}
+var dialogObj=null;
+function createDialog() {
+	return {
+        initParams: {},
+        setDialogTitle: function (index) {
+            if (index < 4) {
+                $('#deleteDiv .title').html('第' + index + '次警告');
+                $('.sub-title1,.subjectCode,.groupNumber').show();
+                $('.sub-title2,.authCode').hide();
+
+            } else {
+                $('#deleteDiv .title').html('分组授权码');
+                $('.sub-title1,.subjectCode,.groupNumber').hide();
+                $('.sub-title2,.authCode').show();
+            }
+        },
+        validate: function () {
+            if (this.warningIndex <= 3) {
+                var subjectCodeVal = $('.subjectCode input').val();
+                var groupNumberVal = $('.groupNumber input').val();
+                $('.subjectCode input+.error-tip').html(!subjectCodeVal?'请输入科目代码':subjectCodeVal != this.initParams.subjectCode?'输入的科目代码不正确':'')
+                $('.groupNumber input+.error-tip').html(!groupNumberVal?'请输入分组序号':groupNumberVal != this.initParams.groupNumber?'输入的分组序号不正确':'')
 
 
+                if (!subjectCodeVal || !groupNumberVal || subjectCodeVal != this.initParams.subjectCode || groupNumberVal != this.initParams.groupNumber) {
+                    return;
+                } else {
+                    this.next();
+                }
+            } else if (this.warningIndex == 4) {
+                var authCodeVal = $('.authCode input').val();
+                if(!authCodeVal){
+                    $('.authCode input+.error-tip').html('请输入授权码');
+                    return;
+                }else{
+                    $('.authCode input+.error-tip').html('');
+                    this.next();
+                }
+            }
+
+        },
+        next() {
+            if (this.warningIndex == 4) {
+                this.callback(this.initParams,$('.authCode input').val());
+            } else if (this.times <= 3 && this.times == this.warningIndex) {
+                this.callback(this.initParams);
+            } else {
+                $('.subjectCode input+.error-tip').html('');
+                $('.subjectCode input,.groupNumber input').val('')
+                $('.groupNumber input+.error-tip').html('');
+                this.warningIndex++;
+                $('#deleteDiv').removeClass('animate__animated animate__fadeIn')
+                setTimeout(function(){
+                    $('#deleteDiv').addClass('animate__animated animate__fadeIn')
+                },0)
+                this.setDialogTitle(this.warningIndex);
+            }
+        },
+        warningIndex: 1,//当前正在进行的第几次输入
+        times: 0,//需要重复输入的次数
+        callback:null,
+        initDialog: function (initParams, callBack) {
+            this.initParams = initParams;
+            var progress = initParams.progress;
+            if(callBack){
+                this.callback = callBack;
+                if (progress <= 10) {
+                    callBack(initParams);
+                    return;
+                }
+            }
+            this.times = progress <= 80 ? 2 : progress >= 80 && progress < 100 ? 3 : 4;
+            this.warningIndex = 1;
+            $('#delete-modal').show();
+            this.setDialogTitle(this.warningIndex);
+        },
+        submit: function (index) {
+            console.log('你最开始传入的基础参数initParams为:',this.initParams);
+            if(this.warningIndex==4){
+                console.log('你输入的授权码为:'+$('.authCode input').val())
+            }
+        }
+    }
+   
+}
+</script>
 </body>
 </body>
 </html>
 </html>

+ 2 - 4
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/paperDetail.jsp

@@ -78,10 +78,8 @@
 				<td><fmt:formatNumber pattern="###.###" value="${question.intervalScore}"/></td>
 				<td><fmt:formatNumber pattern="###.###" value="${question.intervalScore}"/></td>
 				<td>${question.answer}</td>
 				<td>${question.answer}</td>
 				<td>
 				<td>
-					<c:if test="${question.objective}">
-					<c:if test="${question.objectivePolicy==null}">无</c:if>
-					${question.objectivePolicy.name}
-					</c:if>
+					<c:if test="${question.objective && question.objectivePolicy==null}">无</c:if>
+					<c:if test="${question.objective && question.objectivePolicy!=null}">${question.objectivePolicy.name}</c:if>
 				</td>
 				</td>
 				<td><c:if test="${!question.objective}">${question.groupNumber}</c:if>
 				<td><c:if test="${!question.objective}">${question.groupNumber}</c:if>
 				</td>
 				</td>

+ 7 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/report/reportSubjectRange.jsp

@@ -81,7 +81,7 @@
     <tbody>
     <tbody>
     <c:forEach items="${total}" var="subject">
     <c:forEach items="${total}" var="subject">
         <tr>
         <tr>
-            <td>${subject.score}</td>
+            <td>${subject.score}&lt;=X&lt;${subject.score+query.range}</td>
             <td>${subject.rangeCount}</td>
             <td>${subject.rangeCount}</td>
             <td><fmt:formatNumber type="number" value="${subject.rangeRate}" pattern="0.00" maxFractionDigits="2"/></td>
             <td><fmt:formatNumber type="number" value="${subject.rangeRate}" pattern="0.00" maxFractionDigits="2"/></td>
         </tr>
         </tr>
@@ -97,6 +97,12 @@ $(document).ready(function () {
     }else{
     }else{
     	$('#btnSubmit').attr("type","hidden");
     	$('#btnSubmit').attr("type","hidden");
     	$('#refresh').show();
     	$('#refresh').show();
+    	var locked = '${locked}';
+    	if(locked!='false'){
+	    	window.setTimeout(function(){
+	    		goSearch();
+	    	},30*1000);
+    	}
     }
     }
 });
 });
 $('#subjectCode').change(function () {
 $('#subjectCode').change(function () {