Explorar el Código

Merge remote-tracking branch 'origin/dev_20191225' into dev_20191225

# Conflicts:
#	stmms-web/src/main/webapp/static/mark-json/js/json-builder.js
#	stmms-web/src/main/webapp/static/mark-json/js/rich-text-builder.js
luoshi hace 5 años
padre
commit
84d7a03a48

+ 11 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkLibrary.java

@@ -142,6 +142,9 @@ public class MarkLibrary implements Serializable {
     @Transient
     private Marker marker;
 
+    @Transient
+    private String answerUrl;
+
     public Integer getId() {
         return id;
     }
@@ -325,4 +328,12 @@ public class MarkLibrary implements Serializable {
         this.markerSpent = markerSpent;
     }
 
+    public String getAnswerUrl() {
+        return answerUrl;
+    }
+
+    public void setAnswerUrl(String answerUrl) {
+        this.answerUrl = answerUrl;
+    }
+
 }

+ 8 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/LibraryController.java

@@ -9,6 +9,7 @@ import net.sf.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -32,6 +33,7 @@ import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 
 @Controller("libraryController")
@@ -58,6 +60,9 @@ public class LibraryController extends BaseExamController {
     @Autowired
     private ExamQuestionService questionService;
 
+    @Value("${answer.server}")
+    private String answerServer;
+
     @RequestMapping
     public String list(Model model, HttpServletRequest request, MarkLibrarySearchQuery query,
             @RequestParam(required = false) LibraryStatus status) {
@@ -89,6 +94,8 @@ public class LibraryController extends BaseExamController {
             for (MarkLibrary library : query.getResult()) {
                 if (library.getMarkerId() != null) {
                     library.setMarker(markerService.findById(library.getMarkerId()));
+                    library.setAnswerUrl(PictureUrlBuilder.getAnswerJson(library.getExamId(), library.getSubjectCode(),
+                            null, library.getExamNumber()));
                 }
             }
             for (MarkGroup group : groupList) {
@@ -110,6 +117,7 @@ public class LibraryController extends BaseExamController {
         model.addAttribute("markerList",
                 markerService.findByExamAndSubjectAndGroup(examId, query.getSubjectCode(), query.getGroupNumber()));
         model.addAttribute("inspectedCount", inspectedCount);
+        model.addAttribute("answerServer", answerServer);
         return "modules/exam/libraryList";
     }
 

+ 24 - 17
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkGroupController.java

@@ -425,12 +425,14 @@ public class MarkGroupController extends BaseExamController {
                     }
                 }
                 // quick update
-                picList = StringEscapeUtils.unescapeHtml(picList);
-                JSONArray array = JSONArray.fromObject(picList);
-                List<PictureConfigItem> list = JSONArray.toList(array, new PictureConfigItem(), new JsonConfig());
-                if (list != null && !list.isEmpty()) {
-                    groupService.updatePicList(examId, subjectCode, number, list);
-                }
+                // picList = StringEscapeUtils.unescapeHtml(picList);
+                // JSONArray array = JSONArray.fromObject(picList);
+                // List<PictureConfigItem> list = JSONArray.toList(array, new
+                // PictureConfigItem(), new JsonConfig());
+                // if (list != null && !list.isEmpty()) {
+                // groupService.updatePicList(examId, subjectCode, number,
+                // list);
+                // }
                 if (doubleRate != null) {
                     groupService.updateDoubleRate(examId, subjectCode, number, doubleRate);
                 }
@@ -482,21 +484,22 @@ public class MarkGroupController extends BaseExamController {
             addMessage(redirectAttributes, "大题详情必须设置");
             redirectAttributes.addAttribute("subjectCode", subjectCode);
             return "redirect:/admin/exam/group/add";
-        } else if (StringUtils.isBlank(picList)) {
-            addMessage(redirectAttributes, "图片范围必须设置");
-            redirectAttributes.addAttribute("subjectCode", subjectCode);
-            return "redirect:/admin/exam/group/add";
+            // } else if (StringUtils.isBlank(picList)) {
+            // addMessage(redirectAttributes, "图片范围必须设置");
+            // redirectAttributes.addAttribute("subjectCode", subjectCode);
+            // return "redirect:/admin/exam/group/add";
         } else {
             try {
                 // create group
                 // build picList
-                picList = StringEscapeUtils.unescapeHtml(picList);
-                JSONArray array = JSONArray.fromObject(picList);
-                List<PictureConfigItem> picConfigList = JSONArray.toList(array, new PictureConfigItem(),
-                        new JsonConfig());
+                // picList = StringEscapeUtils.unescapeHtml(picList);
+                // JSONArray array = JSONArray.fromObject(picList);
+                // List<PictureConfigItem> picConfigList =
+                // JSONArray.toList(array, new PictureConfigItem(),
+                // new JsonConfig());
                 // build questionDetail
                 questionDetail = StringEscapeUtils.unescapeHtml(questionDetail);
-                array = JSONArray.fromObject(questionDetail);
+                JSONArray array = JSONArray.fromObject(questionDetail);
                 List<ExamQuestionDTO> detailList = JSONArray.toList(array, new ExamQuestionDTO(), new JsonConfig());
                 for (int i = 0; i < detailList.size(); i++) {
                     ExamQuestionDTO dto = detailList.get(i);
@@ -507,7 +510,9 @@ public class MarkGroupController extends BaseExamController {
                     }
                     dto.setScoreList(scoreList);
                 }
-                if (picConfigList != null && detailList != null && picConfigList.size() > 0 && detailList.size() > 0) {
+                // if (picConfigList != null && detailList != null &&
+                // picConfigList.size() > 0 && detailList.size() > 0) {
+                if (detailList != null && detailList.size() > 0) {
                     for (ExamQuestionDTO detail : detailList) {
                         if (questionService.countByExamAndSubjectAndObjectiveAndMainNumber(examId, subjectCode, false,
                                 detail.getMainNumber()) > 0) {
@@ -516,7 +521,9 @@ public class MarkGroupController extends BaseExamController {
                             return "redirect:/admin/exam/group/add";
                         }
                     }
-                    group = new MarkGroup(examId, subjectCode, number, picConfigList, 0d, doubleRate,
+                    group = new MarkGroup(examId, subjectCode, number, null, 0d, doubleRate,
+                    // group = new MarkGroup(examId, subjectCode, number,
+                    // picConfigList, 0d, doubleRate,
                             arbitrateThreshold, scorePolicy, markMode, trialCount, sheetView, thirdPolicy);
                     // clear and replace exam_question
                     questionService

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

@@ -98,6 +98,9 @@ public class ScoreController extends BaseExamController {
     @Value("${card.server}")
     private String cardServer;
 
+    @Value("${answer.server}")
+    private String answerServer;
+
     @RequestMapping
     public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query,
             @RequestParam(defaultValue = "0") Integer filter) {
@@ -123,6 +126,8 @@ public class ScoreController extends BaseExamController {
             buildSheetUrl(student);
             buildPackageUrl(student);
             buildAnswerUrl(student);
+            student.setAnswerUrl(PictureUrlBuilder.getAnswerJson(student.getExamId(), student.getSubjectCode(),
+                    student.getPaperType(), student.getExamNumber()));
         }
         String exportMessage = StringUtils.isNotBlank(query.getSubjectCode()) ? enableExport(examId,
                 query.getSubjectCode()) : enableExport(examId);
@@ -139,6 +144,7 @@ public class ScoreController extends BaseExamController {
         view.addObject("imageServer", imageServer);
         view.addObject("packageServer", packageServer);
         view.addObject("cardServer", cardServer);
+        view.addObject("answerServer", answerServer);
         return view;
     }
 
@@ -382,12 +388,12 @@ public class ScoreController extends BaseExamController {
             String message = "该考试需要统分";
             return message;
         }
-        
+
         if (checkStudentService.countByExamIdAndChecked(examId, false) != 0) {
             String message = "人工确认未完成";
             return message;
         }
-        
+
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         query.setExamId(examId);
         query.setUpload(false);
@@ -397,11 +403,11 @@ public class ScoreController extends BaseExamController {
             String message = "未上传考生必须人工指定缺考";
             return message;
         }
-        
+
         List<ExamSubject> subjects = subjectService.list(examId);
         for (ExamSubject examSubject : subjects) {
-            List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, examSubject.getCode(), MarkStatus.FORMAL,
-                    MarkStatus.TRIAL);
+            List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, examSubject.getCode(),
+                    MarkStatus.FORMAL, MarkStatus.TRIAL);
             if (groups != null && !groups.isEmpty()) {
                 String message = examSubject.getCode() + " 科目未评卷完成";
                 return message;
@@ -429,7 +435,7 @@ public class ScoreController extends BaseExamController {
             String message = "人工确认未完成";
             return message;
         }
-        
+
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         query.setExamId(examId);
         query.setUpload(false);
@@ -440,7 +446,7 @@ public class ScoreController extends BaseExamController {
             String message = "未上传考生必须人工指定缺考";
             return message;
         }
-        
+
         return null;
     }
 

+ 63 - 0
stmms-web/src/main/webapp/WEB-INF/views/include/jsonView.jsp

@@ -0,0 +1,63 @@
+<%@ page contentType="text/html;charset=UTF-8"%>
+
+<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>
+
+<link rel="stylesheet" type="text/css" href="${ctxStatic}/jBox/Source/jBox.css">
+<script type="text/javascript" src="${ctxStatic}/jBox/Source/jBox.min.js"></script>
+
+<link rel="stylesheet" type="text/css" href="${ctxStatic}/iviewer/jquery.iviewer.css">
+<script type="text/javascript" src="${ctxStatic}/iviewer/jquery.iviewer.js"></script>
+
+<link rel="stylesheet" type="text/css" href="${ctxStatic}/mark-json/css/rich-text.css">
+<link rel="stylesheet" type="text/css" href="${ctxStatic}/mark-json/css/style.css">
+<script type="text/javascript" src="${ctxStatic}/mark-json/js/rich-text-builder.js"></script>
+
+<div id="json-view-content" class="container-fluid" style="display:none">
+	<div class="row-fluid">
+		<div id="right-json-div" >
+			<ul id="right-json-nav" class="nav nav-tabs">
+			</ul>
+			<div id="right-json-content" class="tab-content">
+			</div>
+		</div>
+	</div>
+</div>
+
+<script type="text/javascript">
+var imageModal = new jBox('Modal');
+
+$(document).ready(function() {
+	$('#left-answer-div').find('iframe').height($(window).height()*0.83);
+});
+
+function initJsonPopover(title,url) {
+	initJsonPopoverContent(title,url); 
+	imageModal.setWidth($(window).width()*0.9);
+	imageModal.setHeight($(window).height()*0.85);
+	imageModal.setTitle(title);
+	imageModal.open();
+}
+function initJsonPopoverContent(title,url){
+
+	$('#right-json-nav, #right-json-content').empty();
+	 $.ajax({  
+        type:"GET",  
+        url:url,  
+        dataType:"json",  
+        success:function(data){   
+/*         	var data='[{"mainNumber": 4,"body": {"sections": [{"blocks": [{"type": "text","value": "go"}]}]},"subNumber": 16}]'; */
+        	$('#right-json-nav').append('<li><a href="#" data-toggle="tab">'+title+'</a></li>');
+        	var richText = RichTextBuilder(data);
+        	$('#right-json-content').empty();
+        	var pane = $(richText).appendTo($('#right-json-content'));
+        	$('#right-json-nav a:first').trigger('click');
+			imageModal.setContent($('#json-view-content'));
+         } 
+    });  
+
+}
+</script>
+
+
+

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

@@ -85,13 +85,13 @@
             </select>
             </div>
         </div>
-        <div class="control-group">
+    <%--     <div class="control-group">
             <label class="control-label">图片显示</label>
-            <div class="controls">
+            <div class="controls">  --%>
                 <form:input path="picList" class="required" id="picList"  type="hidden"/>
-                <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}" target="_blank" class="required" id= "configuration">设置</a>
+      <%--          <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}" target="_blank" class="required" id= "configuration">设置</a>
             </div>
-        </div>
+        </div> --%>
 		<div class="control-group">
             <label class="control-label">双评</label>
             <div class="controls">

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

@@ -108,13 +108,13 @@
             </select>
             </div>
         </div>
-        <div class="control-group">
+     <%--    <div class="control-group">
             <label class="control-label">图片显示</label>
-            <div class="controls">                
+            <div class="controls">   --%>             
             	<form:input path="picList" class="required" id="picList"  type="hidden"/>
-                <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}" target="_blank" class="required" id= "configuration">设置</a>
+          <%--      <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}" target="_blank" class="required" id= "configuration">设置</a>
             </div>
-        </div>
+        </div> --%>
 		<div class="control-group">
             <label class="control-label">双评</label>
             <div class="controls">

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

@@ -89,13 +89,13 @@
             </select>
             </div>
         </div>
-        <div class="control-group">
+        <%-- <div class="control-group">
             <label class="control-label">图片显示</label>
-            <div class="controls">
+            <div class="controls">--%>
                 <form:input path="picList" class="required" id="picList"  type="hidden"/>
-                <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}" target="_blank" class="required" id= "configuration">设置</a>
+          <%--       <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}" target="_blank" class="required" id= "configuration">设置</a>
             </div>
-        </div>
+        </div> --%>
         <c:forEach items="${questions}" var="question">
         <div class="control-group">
             <label class="control-label">小题${question.subNumber}间隔分</label>

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

@@ -121,7 +121,8 @@
 				</td>
 				<td>
 				    <c:if test="${result.status.value==1 || result.status.value==3 ||result.status.value==5}">
-				    <a class="track-link" href="##" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.id}" data-title="${result.examNumber}">阅卷轨迹</a>
+<%-- 				    <a class="track-link" href="##" data-image-url="${ctx}/admin/exam/track/byLibrary?libraryId=${result.id}" data-title="${result.examNumber}">阅卷轨迹</a> --%>
+				    	<a class="json-link" href="##" data-image-url="${answerServer}${result.answerUrl}" data-title="${result.examNumber}">原图</a> 
 				    </c:if>
 				    <c:if test="${result.status.value==1 || result.status.value==5}">
 				    &nbsp;
@@ -134,6 +135,7 @@
 	</table>
 	<div class="pagination">${query}</div>
 	<%@include file="/WEB-INF/views/include/trackView.jsp" %>
+	<%@include file="/WEB-INF/views/include/jsonView.jsp" %>
 <script type="text/javascript">
 $('.back-link').click(function(){
 	if(!confirm('确定要打回该评卷任务吗?')){
@@ -152,6 +154,10 @@ $('.track-link').click(function(){
     initTrackPopover($(this).attr('data-title'),$(this).attr('data-image-url'));
     return false;
 });
+$('.json-link').click(function(){
+    initJsonPopover($(this).attr('data-title'),$(this).attr('data-image-url'));
+    return false;
+});
 $('#subject-select').change(function(){
     var code = $(this).val();
     $('#group-select').empty();

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

@@ -164,8 +164,9 @@
                 </td>
 				<td>
 				    <c:if test="${student.upload==true}">
-					<a class="sheet-link" href="##" data-id="${student.id}" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${cardServer}${student.answerUrl}</c:if>" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a>
-					<a href="${ctx}/admin/exam/track/student/${student.id}" target="_blank">轨迹图</a>
+<%-- 					<a class="sheet-link" href="##" data-id="${student.id}" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${cardServer}${student.answerUrl}</c:if>" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">原图</a> --%>
+<%-- 					<a href="${ctx}/admin/exam/track/student/${student.id}" target="_blank">轨迹图</a> --%>
+						<a class="json-link" href="##" data-image-url="${answerServer}${student.answerUrl}" data-title="${result.examNumber}">原图</a> 
 					</c:if>
 					<c:if test="${student.packageUrlString!=null && student.packageUrlString!=''}">
 					<a class="package-link" href="##" data-image-url="${student.packageUrlString}" data-title="${student.packageCode}">签到表</a>
@@ -194,6 +195,10 @@ $(document).ready(function() {
     $('.package-link').click(function(){
     	initImagePopover($(this).attr('data-title'), '${packageServer}', $(this).attr('data-image-url'));
     	return false;
+    });
+    $('.json-link').click(function(){
+        initJsonPopover($(this).attr('data-title'),$(this).attr('data-image-url'));
+        return false;
     });
 	var running = "${running}";
 	if(running=='true'){

+ 1 - 1
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/studentList.jsp

@@ -142,7 +142,7 @@
 				<td>${student.subject.category}</td>
 				<td>
 				<c:if test="${student.upload==true}">
-				<a class="sheet-link" href="##" data-sheet-url="${student.sheetUrlString}" data-answer-url="<c:if test="${student.answerUrl!=null}">${cardServer}${student.answerUrl}</c:if>" data-title="${student.examNumber}&nbsp;&nbsp;${student.name}&nbsp;&nbsp;客观总分${student.objectiveScoreString}&nbsp;&nbsp;主观总分${student.subjectiveScoreString}&nbsp;&nbsp;全卷总分${student.totalScoreString}">已上传</a>
+				已上传
 				&nbsp;
 				<c:if test="${student.absent==true}">
 				缺考

+ 77 - 0
stmms-web/src/main/webapp/static/mark-json/js/json-builder.js

@@ -0,0 +1,77 @@
+//多媒体显示模块
+var json_builder = function(option, success) {
+    var object = new JsonBuilder(option);
+    success();
+    return object;
+}
+
+function JsonBuilder(option) {
+    this.markControl = option.markControl;
+    this.answerServer = option.answerServer;
+    this.init();
+    this.markControl.on('step.board.show', this, function(event, context, eventObject) {
+        this.container.removeClass('span12');
+        this.container.addClass('span10');
+    });
+    this.markControl.on('step.board.hide', this, function(event, context, eventObject) {
+        this.container.removeClass('span10');
+        this.container.addClass('span12');
+    });
+    this.markControl.on('task.get.before', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.json = undefined;
+    });
+    this.markControl.on('task.get.success', this, function(event, context, eventObject) {
+        this.task = context.task;
+        this.json = undefined;
+    });
+    this.markControl.on('task.get.none', this, function(event, context, eventObject) {
+        this.task = undefined;
+        this.json = undefined;
+    });
+    this.markControl.on('image.position.change', this, function(event, context, topPercent) {
+        if (this.task != undefined) {
+            this.updateScrollTop(topPercent);
+        }
+    });
+}
+
+JsonBuilder.prototype.init = function() {
+    var self = this;
+    this.container = this.markControl.container.imageContent;
+    this.container.height(this.markControl.container.centerContent.height());
+    this.container.css('overflow', 'scroll');
+    
+    this.container = getDom(this.control_dom, this.markControl).appendTo(this.markControl.container);
+    this.container.hide();
+
+}
+
+JsonBuilder.prototype.build = function(task,callback) {
+    var self = this;
+    if (this.task != undefined && this.task.answerUrl != undefined) {
+    	var url = this.answerServer + this.task.answerUrl;
+    	$.get(url, function(result) {
+    		
+    		self.container.show();
+        	self.markControl.trigger('task.load.finish');
+        }).error(function() {
+        	 callback('image load error');
+        });
+    }
+}
+
+JsonBuilder.prototype.updateScrollTop = function(scrollTopPercent) {
+    var height = this.canvas.height;
+    var minHeight = this.container.height();
+    if (scrollTopPercent != undefined && scrollTopPercent >= 0 && scrollTopPercent <= 1 && height > minHeight) {
+        var left = height * (1 - scrollTopPercent);
+        var scrollTop = left > minHeight ? (height - left) : (height - minHeight);
+        this.container.scrollTop(scrollTop);
+    } else {
+        this.container.scrollTop(0);
+    }
+}
+
+JsonBuilder.prototype.control_dom = '<div class="wp"><div class="rich-text"></div></div>';
+JsonBuilder.prototype.rich_text_dom = '<div class="rich-text"></div>';