浏览代码

仲裁新增多媒体阅卷

ting.yin 5 年之前
父节点
当前提交
63e459d94f

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

@@ -101,7 +101,7 @@ public class TaskServiceImpl implements TaskService {
     }
     }
 
 
     @Override
     @Override
-    public Task build(ArbitrateHistory history, MarkGroup group) {
+    public Task build(ArbitrateHistory history, MarkGroup group, ExamType examType) {
         ExamStudent student = studentService.findByExamIdAndExamNumber(history.getExamId(), history.getExamNumber());
         ExamStudent student = studentService.findByExamIdAndExamNumber(history.getExamId(), history.getExamNumber());
         List<MarkLibrary> libraryList = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
         List<MarkLibrary> libraryList = libraryService.findByStudentAndGroup(student.getId(), group.getNumber());
         Integer campusId = libraryList.get(0).getCampusId();
         Integer campusId = libraryList.get(0).getCampusId();
@@ -116,7 +116,12 @@ public class TaskServiceImpl implements TaskService {
         task.setPictureConfig(group.getPictureConfigList());
         task.setPictureConfig(group.getPictureConfigList());
         task.setSheetUrls(PictureUrlBuilder.getSheetUrls(student.getExamId(), campusId, student.getSubjectCode(),
         task.setSheetUrls(PictureUrlBuilder.getSheetUrls(student.getExamId(), campusId, student.getSubjectCode(),
                 student.getExamNumber(), student.getSheetCount()));
                 student.getExamNumber(), student.getSheetCount()));
-        task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(student.getExamId(), student.getSubjectCode()));
+        if (examType.equals(ExamType.MULTI_MEDIA)) {
+            task.setAnswerUrl(PictureUrlBuilder.getAnswerJson(student.getExamId(), student.getSubjectCode(),
+                    student.getPaperType(), student.getExamNumber()));
+        } else {
+            task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(student.getExamId(), student.getSubjectCode()));
+        }
         task.setPaperUrl(PictureUrlBuilder.getPaperUrl(student.getExamId(), student.getSubjectCode()));
         task.setPaperUrl(PictureUrlBuilder.getPaperUrl(student.getExamId(), student.getSubjectCode()));
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
         task.setMarkTime(history.getUpdateTime());
         task.setMarkTime(history.getUpdateTime());

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/TaskService.java

@@ -15,7 +15,7 @@ public interface TaskService {
 
 
     List<Task> findByQuery(MarkLibrarySearchQuery query);
     List<Task> findByQuery(MarkLibrarySearchQuery query);
 
 
-    Task build(ArbitrateHistory history, MarkGroup group);
+    Task build(ArbitrateHistory history, MarkGroup group, ExamType type);
 
 
     Task build(TrialLibrary library, TrialHistory history);
     Task build(TrialLibrary library, TrialHistory history);
 
 

+ 25 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ArbitrateController.java

@@ -27,9 +27,11 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 
+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;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
 import cn.com.qmth.stmms.biz.lock.LockService;
 import cn.com.qmth.stmms.biz.lock.LockService;
@@ -42,6 +44,7 @@ import cn.com.qmth.stmms.biz.mark.service.TaskService;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
 import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.ExamType;
 import cn.com.qmth.stmms.common.enums.HistoryStatus;
 import cn.com.qmth.stmms.common.enums.HistoryStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.enums.Role;
@@ -77,6 +80,9 @@ public class ArbitrateController extends BaseExamController {
     @Autowired
     @Autowired
     private ExamQuestionService questionService;
     private ExamQuestionService questionService;
 
 
+    @Autowired
+    private ExamService examService;
+
     @Value("${slice.image.server}")
     @Value("${slice.image.server}")
     private String sliceServer;
     private String sliceServer;
 
 
@@ -86,6 +92,9 @@ public class ArbitrateController extends BaseExamController {
     @Value("${card.server}")
     @Value("${card.server}")
     private String cardServer;
     private String cardServer;
 
 
+    @Value("${answer.server}")
+    private String answerServer;
+
     // 并发处理互斥锁
     // 并发处理互斥锁
     private Map<Integer, Integer> currentTaskMap = new HashMap<Integer, Integer>();
     private Map<Integer, Integer> currentTaskMap = new HashMap<Integer, Integer>();
 
 
@@ -144,6 +153,11 @@ public class ArbitrateController extends BaseExamController {
         model.addAttribute("subject", subjectService.find(group.getExamId(), group.getSubjectCode()));
         model.addAttribute("subject", subjectService.find(group.getExamId(), group.getSubjectCode()));
         model.addAttribute("group", group);
         model.addAttribute("group", group);
         model.addAttribute("history", history);
         model.addAttribute("history", history);
+        model.addAttribute("answerServer", answerServer);
+        Exam exam = examService.findById(examId);
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            return "modules/exam/arbitrateSingleProcessJson";
+        }
         return "modules/exam/arbitrateSingleProcess";
         return "modules/exam/arbitrateSingleProcess";
     }
     }
 
 
@@ -166,6 +180,11 @@ public class ArbitrateController extends BaseExamController {
         model.addAttribute("cardServer", cardServer);
         model.addAttribute("cardServer", cardServer);
         model.addAttribute("subject", subjectService.find(group.getExamId(), group.getSubjectCode()));
         model.addAttribute("subject", subjectService.find(group.getExamId(), group.getSubjectCode()));
         model.addAttribute("group", group);
         model.addAttribute("group", group);
+        model.addAttribute("answerServer", answerServer);
+        Exam exam = examService.findById(examId);
+        if (ExamType.MULTI_MEDIA.equals(exam.getType())) {
+            return "modules/exam/arbitrateBatchProcessJson";
+        }
         return "modules/exam/arbitrateBatchProcess";
         return "modules/exam/arbitrateBatchProcess";
     }
     }
 
 
@@ -218,6 +237,7 @@ public class ArbitrateController extends BaseExamController {
             querySort = new Sort(d, "totalScore");
             querySort = new Sort(d, "totalScore");
         }
         }
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
+        Exam exam = examService.findById(examId);
         List<Task> list = new LinkedList<Task>();
         List<Task> list = new LinkedList<Task>();
         if (subjectCheck(subjectCode, wu) && group != null) {
         if (subjectCheck(subjectCode, wu) && group != null) {
             ArbitrateHistorySearchQuery query = new ArbitrateHistorySearchQuery();
             ArbitrateHistorySearchQuery query = new ArbitrateHistorySearchQuery();
@@ -238,7 +258,7 @@ public class ArbitrateController extends BaseExamController {
             }
             }
             query = arbitrateService.findByQuery(query);
             query = arbitrateService.findByQuery(query);
             for (ArbitrateHistory history : query.getResult()) {
             for (ArbitrateHistory history : query.getResult()) {
-                list.add(taskService.build(history, group));
+                list.add(taskService.build(history, group, exam.getType()));
             }
             }
         }
         }
         return list;
         return list;
@@ -249,12 +269,13 @@ public class ArbitrateController extends BaseExamController {
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
     public Task getSingleTask(HttpServletRequest request, @RequestParam Integer historyId) {
     public Task getSingleTask(HttpServletRequest request, @RequestParam Integer historyId) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
+        Exam exam = examService.findById(examId);
         WebUser wu = RequestUtils.getWebUser(request);
         WebUser wu = RequestUtils.getWebUser(request);
         ArbitrateHistory history = arbitrateService.findById(historyId);
         ArbitrateHistory history = arbitrateService.findById(historyId);
         if (history != null && history.getExamId().equals(examId) && subjectCheck(history.getSubjectCode(), wu)) {
         if (history != null && history.getExamId().equals(examId) && subjectCheck(history.getSubjectCode(), wu)) {
             MarkGroup group = groupService.findOne(history.getExamId(), history.getSubjectCode(),
             MarkGroup group = groupService.findOne(history.getExamId(), history.getSubjectCode(),
                     history.getGroupNumber());
                     history.getGroupNumber());
-            return taskService.build(history, group);
+            return taskService.build(history, group, exam.getType());
         }
         }
         Task task = new Task();
         Task task = new Task();
         task.setExist(false);
         task.setExist(false);
@@ -266,6 +287,7 @@ public class ArbitrateController extends BaseExamController {
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
     public Task getTask(HttpServletRequest request, @RequestParam String subjectCode, @RequestParam Integer groupNumber) {
     public Task getTask(HttpServletRequest request, @RequestParam String subjectCode, @RequestParam Integer groupNumber) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
+        Exam exam = examService.findById(examId);
         WebUser wu = RequestUtils.getWebUser(request);
         WebUser wu = RequestUtils.getWebUser(request);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         if (subjectCheck(subjectCode, wu) && group != null) {
         if (subjectCheck(subjectCode, wu) && group != null) {
@@ -284,7 +306,7 @@ public class ArbitrateController extends BaseExamController {
                 for (ArbitrateHistory history : query.getResult()) {
                 for (ArbitrateHistory history : query.getResult()) {
                     // 尝试领取该任务并上锁
                     // 尝试领取该任务并上锁
                     if (setCurrent(history.getId(), wu.getUser().getId())) {
                     if (setCurrent(history.getId(), wu.getUser().getId())) {
-                        return taskService.build(history, group);
+                        return taskService.build(history, group, exam.getType());
                     } else {
                     } else {
                         continue;
                         continue;
                     }
                     }

+ 90 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/arbitrateBatchProcessJson.jsp

@@ -0,0 +1,90 @@
+<%@ page language="java" pageEncoding="utf-8"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>云阅卷高校版</title>
+<link href="${ctxStatic}/mark-new/css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="${ctxStatic}/mark-new/css/style.css" rel="stylesheet" type="text/css" />
+
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/json2.js"></script>
+
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery.min.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery-ui.min.js "></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery.mousewheel.min.js"></script>
+
+<script type="text/javascript" src="${ctxStatic}/iviewer/jquery.iviewer.js"></script>
+<link rel="stylesheet" href="${ctxStatic}/iviewer/jquery.iviewer.css" rel="stylesheet" />
+
+<script src="${ctxStatic}/perfect-scrollbar/min/perfect-scrollbar.min.js"></script>
+<link href="${ctxStatic}/perfect-scrollbar/min/perfect-scrollbar.min.css" rel="stylesheet">
+
+<script src="${ctxStatic}/rich-text/js/render.js"></script>
+<link href="${ctxStatic}/rich-text/css/rich-text.css" rel="stylesheet">
+<script type="text/javascript" src="${ctxStatic}/viewer/viewer.js"></script>
+<link href="${ctxStatic}/viewer/viewer.css" rel="stylesheet">
+
+<script type="text/javascript" src="${ctxStatic}/mark-json/js/mark-control.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-json/js/json-view.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-json/js/json-loader.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/task-control.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/mark-board.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/mark-history.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/header-mark-status.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/warning-info.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/thumbnail.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/view-sidebar.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/arbitration-process.js"></script>
+</head>
+<body>
+	<div class="container-fluid" id="container"></div>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			var mc = new MarkControl({
+				container : $('#container'),
+				staticServer : '${ctxStatic}',
+				imageServer : '${sliceServer}',
+				userName : '${web_user.name}',
+				logoutTitle: '关闭',
+				logoutUrl: 'javascript:window.close()',
+				clearUrl: '${ctx}/admin/exam/arbitrate/clear',
+				modules : {
+					'json-loader': {
+	                    answerServer: '${answerServer}'
+	                },
+	                'json-view': {},
+					'header-mark-status': {
+						title : '${subject.code}_${subject.name}_${group.title}'
+					},
+					'mark-history':{
+                        pageSize:10
+                    },
+					'mark-board' : {
+						showScoreBoard : false,
+						autoSubmit : false,
+						needConfirm : false
+					},
+					'arbitration-process': {
+					},
+					'warning-info': {
+					},
+					'view-sidebar':{
+						list: [
+							{title:'试卷',  url:'<c:if test="${subject.hasPaper==true}">${cardServer}${subject.paperUrl}</c:if>'},
+							{title:'答案',  url:'<c:if test="${subject.hasAnswer==true}">${cardServer}${subject.answerUrl}</c:if>'}
+						]
+					}
+				}
+			});
+			mc.start({
+				mode : 'loop',
+				statusUrl : '${ctx}/admin/exam/arbitrate/status?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
+				getUrl : '${ctx}/admin/exam/arbitrate/getTask?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
+				historyUrl : '${ctx}/admin/exam/arbitrate/history/${group.subjectCode}/${group.number}',
+				submitUrl : '${ctx}/admin/exam/arbitrate/saveTask',
+				clearUrl : '${ctx}/admin/exam/arbitrate/clear'
+			});
+		});
+	</script>
+</body>
+</html>

+ 88 - 0
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/arbitrateSingleProcessJson.jsp

@@ -0,0 +1,88 @@
+<%@ page language="java" pageEncoding="utf-8"%>
+<%@ include file="/WEB-INF/views/include/taglib.jsp"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>云阅卷高校版</title>
+<link href="${ctxStatic}/mark-new/css/bootstrap.css" rel="stylesheet" type="text/css" />
+<link href="${ctxStatic}/mark-new/css/style.css" rel="stylesheet" type="text/css" />
+
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/json2.js"></script>
+
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery.min.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery-ui.min.js "></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/jquery.mousewheel.min.js"></script>
+
+<script type="text/javascript" src="${ctxStatic}/iviewer/jquery.iviewer.js"></script>
+<link rel="stylesheet" href="${ctxStatic}/iviewer/jquery.iviewer.css" rel="stylesheet" />
+
+<script src="${ctxStatic}/perfect-scrollbar/min/perfect-scrollbar.min.js"></script>
+<link href="${ctxStatic}/perfect-scrollbar/min/perfect-scrollbar.min.css" rel="stylesheet">
+
+<script src="${ctxStatic}/rich-text/js/render.js"></script>
+<link href="${ctxStatic}/rich-text/css/rich-text.css" rel="stylesheet">
+
+<script type="text/javascript" src="${ctxStatic}/viewer/viewer.js"></script>
+<link href="${ctxStatic}/viewer/viewer.css" rel="stylesheet">
+
+<script type="text/javascript" src="${ctxStatic}/mark-json/js/mark-control.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-json/js/json-view.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-json/js/json-loader.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/task-control.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/mark-board.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/header-mark-status.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/warning-info.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/thumbnail.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/view-sidebar.js"></script>
+<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/arbitration-process.js"></script>
+</head>
+<body>
+	<div class="container-fluid" id="container"></div>
+	<script type="text/javascript">
+		$(document).ready(function() {
+			var mc = new MarkControl({
+				container : $('#container'),
+				staticServer : '${ctxStatic}',
+				imageServer : '${sliceServer}',
+				userName : '${web_user.name}',
+				logoutTitle: '关闭',
+				logoutUrl: 'javascript:window.close()',
+				submitUrl: '${ctx}/admin/exam/arbitrate/saveTask',
+				modules : {
+					'json-loader': {
+	                    answerServer: '${answerServer}'
+	                },
+	                'json-view': {},
+					'header-mark-status': {
+						title : '${subject.code}_${subject.name}_${group.title}'
+					},
+					'mark-board' : {
+						showScoreBoard : false,
+						autoSubmit : false,
+						needConfirm : false
+					},
+					'arbitration-process': {
+					},
+					'warning-info': {
+					},
+					'view-sidebar':{
+						list: [
+							{title:'试卷',  url:'<c:if test="${subject.hasPaper==true}">${cardServer}${subject.paperUrl}</c:if>'},
+							{title:'答案',  url:'<c:if test="${subject.hasAnswer==true}">${cardServer}${subject.answerUrl}</c:if>'}
+						]
+					}
+				}
+			});
+			mc.on('task.submit.success', this, function(event, context){
+                window.close();
+            });
+            mc.on('task.submit.error', this, function(event, context){
+                //window.close();
+            });
+            $.post('${ctx}/admin/exam/arbitrate/singleTask?historyId=${history.id}', {}, function(task){
+                mc.setTask(task);
+            });
+		});
+	</script>
+</body>
+</html>