ting.yin 4 anos atrás
pai
commit
e4ae5abc43

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/DataSync.java

@@ -59,7 +59,7 @@ public class DataSync implements Serializable {
     @Column(name = "access_key", nullable = true, length = 64)
     private String accessKey;
 
-    @Column(name = "access_secret", nullable = true, length = 64)
+    @Column(name = "access_secret", length = 64)
     private String accessSecret;
 
     @Column(name = "finished", nullable = false)

+ 14 - 11
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/OnlineExamThread.java

@@ -146,12 +146,7 @@ public class OnlineExamThread implements Runnable {
                         String paperResult = subjectPaperHttp.httpAction(null, datas);
                         JSONObject paperJson = JSONObject.fromObject(paperResult);
                         String subjectCode = paperJson.getString(ID);
-                        String paper = paperJson.getString("details");
-                        byte[] paperData = paper.getBytes(StandardCharsets.UTF_8);
-                        fileService.uploadPaper(new ByteArrayInputStream(paperData), BinaryUtil.encodeMD5(paperData),
-                                exam.getId(), subjectCode, FormatType.JSON);
-                        this.saveSubject(subjectMap, exam.getId(), subjectCode, subjectName,
-                                JSONArray.fromObject(paper));
+                        this.saveSubject(subjectMap, exam.getId(), subjectCode, subjectName, paperResult);
                         // 保存考生数据
                         ExamStudent examStudent = getExamStudent(exam, student, subjectCode, record.getString(ID), now);
                         list.add(examStudent);
@@ -213,7 +208,7 @@ public class OnlineExamThread implements Runnable {
     }
 
     private ExamSubject saveSubject(Map<String, ExamSubject> subjectMap, Integer examId, String subjectCode,
-            String subjectName, JSONArray questionArray) {
+            String subjectName, String paperResult) throws Exception {
         ExamSubject subject = subjectMap.get(subjectCode);
         if (subject != null) {
             return subject;
@@ -223,6 +218,11 @@ public class OnlineExamThread implements Runnable {
             subjectMap.put(subjectCode, subject);
             return subject;
         }
+        //保存paperjson
+        byte[] paperData = paperResult.getBytes(StandardCharsets.UTF_8);
+        fileService.uploadPaper(new ByteArrayInputStream(paperData), BinaryUtil.encodeMD5(paperData), examId,
+                subjectCode, FormatType.JSON);
+        //保存subject
         subject = new ExamSubject();
         subject.setExamId(examId);
         subject.setCode(subjectCode);
@@ -235,7 +235,9 @@ public class OnlineExamThread implements Runnable {
         subject.setUploadCount(0);
         subjectService.save(subject);
         subjectMap.put(subjectCode, subject);
-
+        //保存question
+        JSONObject paperJson = JSONObject.fromObject(paperResult);
+        JSONArray questionArray = JSONArray.fromObject(paperJson.getString("details"));
         double totalScore = 0d;
         List<ExamQuestion> list = new ArrayList<>();
         for (int i = 0; i < questionArray.size(); i++) {
@@ -245,8 +247,8 @@ public class OnlineExamThread implements Runnable {
             JSONArray qArray = questionJson.getJSONArray("questions");
             for (int j = 0; j < qArray.size(); j++) {
                 JSONObject sub = qArray.getJSONObject(j);
-                JSONArray subJson = sub.getJSONArray("subQuestions");
-                if (!subJson.isEmpty()) {
+                if (!sub.getJSONObject("subQuestions").isNullObject()) {
+                    JSONArray subJson = sub.getJSONArray("subQuestions");
                     for (int k = 0; k < subJson.size(); k++) {
                         JSONObject question = subJson.getJSONObject(j);
                         ExamQuestion q = new ExamQuestion();
@@ -285,11 +287,12 @@ public class OnlineExamThread implements Runnable {
             }
         }
         questionService.save(list);
+        //保存group
         MarkGroup group = new MarkGroup(examId, subjectCode, 1, null, totalScore, 0d, null, null,
                 MarkMode.COMMON.toString(), 0, false, false, null);
         groupService.save(group);
+        
         subjectService.updateScore(examId, subjectCode, false, totalScore);
-        ;
         return subject;
     }
 }

+ 23 - 5
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/dataSync.jsp

@@ -22,6 +22,16 @@
 					}
 				}
 			});
+			$("#source").change(function () {
+                if ($("#source").val()==1) {
+                    $(".sourceDiv").show();
+                } 
+                if($("#source").val()==2) {
+                	$("#rootOrgId").attr("value", "");
+                	$("#appId").attr("value", "");
+                    $(".sourceDiv").hide();
+                }
+            });
 		});
 	</script>
 </head>
@@ -50,24 +60,32 @@
             	</select>
 			</div>
 		</div>
-<%-- 		<div class="control-group">
+		<div class="sourceDiv">
+ 		<div class="control-group">
 			<label class="control-label">机构ID</label>
 			<div class="controls">
-				<input name="rootOrgId" value="${dataSync.rootOrgId }" class="required" <c:if test="${dataSync.cloudExamId!=null }">readonly</c:if>/>
+				<input name="rootOrgId" id='rootOrgId' value="${dataSync.rootOrgId }" class="required" <c:if test="${dataSync.cloudExamId!=null }">readonly</c:if>/>
 			</div>
 		</div>
 		<div class="control-group">
 			<label class="control-label">appId</label>
 			<div class="controls">
-				<input name="appId" value="${dataSync.appId }" class="required" <c:if test="${dataSync.cloudExamId!=null }">readonly</c:if>/>
+				<input name="appId" id='appId' value="${dataSync.appId }" class="required" <c:if test="${dataSync.cloudExamId!=null }">readonly</c:if>/>
 			</div>
 		</div> 
+		</div>
+		<div class="control-group">
+			<label class="control-label">密匙</label>
+			<div class="controls">
+				<input name="accessKey" value="${dataSync.accessKey }" <c:if test="${dataSync.cloudExamId!=null }">readonly</c:if>/>
+			</div>
+		</div>
 		<div class="control-group">
 			<label class="control-label">密钥</label>
 			<div class="controls">
-				<input name="accessKey" value="${dataSync.accessKey }" class="required" <c:if test="${dataSync.cloudExamId!=null }">readonly</c:if>/>
+				<input name="accessSecret" value="${dataSync.accessSecret }" <c:if test="${dataSync.cloudExamId!=null }">readonly</c:if>/>
 			</div>
-		</div>--%>
+		</div>
 		<div class="control-group">
 			<label class="control-label">考试ID</label>
 			<div class="controls">

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

@@ -120,7 +120,7 @@
             <label class="control-label">图片显示</label>
             <div class="controls">
                 <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}"
-                   target="_blank" class="required" id="configuration">设置</a>
+                   target="_blank" class="required" id="configuration" rel="opener">设置</a>
             </div>
         </div>
     </c:if>

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

@@ -98,7 +98,7 @@
             <label class="control-label">图片显示</label>
             <div class="controls">
                 <a href="${ctx}/admin/exam/group/getPictureConfig?subjectCode=${group.subjectCode}&number=${group.number}"
-                   target="_blank" class="required" id="configuration">设置</a>
+                   target="_blank" class="required" id="configuration" rel="opener">设置</a>
             </div>
         </div>
     </c:if>

+ 63 - 5
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/jsonView.jsp

@@ -43,7 +43,7 @@
             url: paperUrl,
             dataType: "json",
             success: function (data) {
-            	paperqQuestions = data.questions;
+            	paperqQuestions = data;
                 $.ajax({
                     type: "GET",
                     url: answerUrl,
@@ -54,7 +54,7 @@
                         let questions = data || [];
                         for (var j in questions) {
                         	var question = questions[j];
-                        	var paperQuestion = paperqQuestions[j];
+                        	let paperQuestion = findQuestion(question.mainNumber, question.subNumber, paperqQuestions)
                             // 按题号过滤
                             if (questionArr[question.mainNumber + "." + question.subNumber] === true || questionNumbers == "") {
                                 let numberTitle = {
@@ -82,7 +82,7 @@
                                             "italic": true,
                                             "danger": true
                                         },
-                                        "value": "(字数统计:" + textCount(question.answer) + ")"
+                                        "value": "(字数统计:" + jsonTextCount(JSON.parse(question.answer)) + ")"
                                     }]
                                 };
                                 let standardTitle = {
@@ -100,9 +100,15 @@
                                 }
                                 $(renderRichText(paperQuestion.body)).appendTo(this.holder);
                                 $(renderSection(answerTitle)).appendTo(this.holder);
-                                $(renderRichText(question.answer)).appendTo(this.holder);
+                                let questionAnswer =renderRichText( JSON.parse(question.answer));
+                                questionAnswer.forEach(node => {
+                                    $(node).appendTo(this.holder);
+                                })
                                 $(renderSection(standardTitle)).appendTo(this.holder);
-                                $(renderRichText(paperQuestion.answer)).appendTo(this.holder);
+                                let nodes =renderRichText(paperQuestion.answer);
+                                nodes.forEach(node => {
+                                    $(node).appendTo(this.holder);
+                                })
                             }
                         }
                         if (this.viewer != undefined) {
@@ -129,6 +135,58 @@
         });
         return count;
     }
+    function jsonTextCount(jsonData) {
+        let count = 0
+        if (Array.isArray(jsonData)) {
+            for (let i in jsonData) {
+                count += this.jsonTextCount(jsonData[i])
+            }
+        } else {
+            let sections = Array.isArray(jsonData.sections) ? jsonData.sections : [];
+            sections.forEach(section => {
+                let blocks = Array.isArray(section.blocks) ? section.blocks : [];
+                blocks.forEach(block => {
+                    if (block.type === 'text' && block.value != undefined) {
+                        count += block.value.length;
+                    }
+                });
+            });
+        }
+        return count
+    }
+    function findJson (mainNumber, subNumber, jsonData) {
+        jsonData = Array.isArray(jsonData) ? jsonData : {}
+        let result = []
+        for (let i in jsonData) {
+            if (jsonData[i].mainNumber === mainNumber && jsonData[i].subNumber == subNumber) {
+                result.push(jsonData[i])
+            }
+        }
+        return result
+    }
+    
+    function findQuestion (mainNumber, subNumber, paperData) {
+        paperData = paperData || {}
+        if (Array.isArray(paperData.details)) {
+            for (let i in paperData.details) {
+                let detail = paperData.details[i]
+                if (detail.number === mainNumber && Array.isArray(detail.questions)) {
+                    for (let j in detail.questions) {
+                        if (detail.questions[j].number == subNumber) {
+                            return detail.questions[j]
+                        }
+                    }
+                }
+            }
+        } else if (Array.isArray(paperData.questions)) {
+            for (let j in paperData.questions) {
+                if (paperData.questions[j].mainNumber === mainNumber && paperData.questions[j].subNumber == subNumber) {
+                    return paperData.questions[j]
+                }
+            }
+        }
+        return undefined
+    }
 </script>
 
 

+ 12 - 7
stmms-web/src/main/webapp/static/mark-json/js/json-view.js

@@ -87,11 +87,16 @@ JsonView.prototype.render = function () {
                 }
                 $(renderRichText(question.body)).appendTo(this.holder);
                 $(renderSection(answerTitle)).appendTo(this.holder);
-                jsons.forEach(data => {
-                    $(renderRichText(data.answer)).appendTo(this.holder);
+                jsons.forEach(node => {
+                	JSON.parse(node.answer).forEach(node => {
+                        $(renderRichText(node)).appendTo(this.holder);
+                    });
                 })
                 $(renderSection(standardTitle)).appendTo(this.holder);
-                $(renderRichText(question.answer)).appendTo(this.holder);
+                let nodes =renderRichText(question.answer);
+                nodes.forEach(node => {
+                    $(node).appendTo(this.holder);
+                })
             }
         });
 
@@ -109,7 +114,7 @@ JsonView.prototype.textCount = function (jsons) {
     jsons = Array.isArray(jsons) ? jsons : []
     let count = 0
     jsons.forEach(data => {
-        count += this.jsonTextCount(data.answer)
+        count += this.jsonTextCount(JSON.parse(data.answer))
     })
     return count;
 }
@@ -138,7 +143,7 @@ JsonView.prototype.findJson = function (mainNumber, subNumber, jsonData) {
     jsonData = Array.isArray(jsonData) ? jsonData : {}
     let result = []
     for (let i in jsonData) {
-        if (jsonData[i].mainNumber === mainNumber && jsonData[i].subNumber === subNumber) {
+        if (jsonData[i].mainNumber === mainNumber && jsonData[i].subNumber == subNumber) {
             result.push(jsonData[i])
         }
     }
@@ -152,7 +157,7 @@ JsonView.prototype.findQuestion = function (mainNumber, subNumber, paperData) {
             let detail = paperData.details[i]
             if (detail.number === mainNumber && Array.isArray(detail.questions)) {
                 for (let j in detail.questions) {
-                    if (detail.questions[j].number === subNumber) {
+                    if (detail.questions[j].number == subNumber) {
                         return detail.questions[j]
                     }
                 }
@@ -160,7 +165,7 @@ JsonView.prototype.findQuestion = function (mainNumber, subNumber, paperData) {
         }
     } else if (Array.isArray(paperData.questions)) {
         for (let j in paperData.questions) {
-            if (paperData.questions[j].mainNumber === mainNumber && paperData.questions[j].subNumber === subNumber) {
+            if (paperData.questions[j].mainNumber === mainNumber && paperData.questions[j].subNumber == subNumber) {
                 return paperData.questions[j]
             }
         }