Browse Source

提交题库印刷代码

weiwenhai 6 years ago
parent
commit
32ef5a809a

+ 24 - 7
examcloud-core-questions-api-provider/src/main/java/cn/com/qmth/examcloud/core/questions/api/PaperController.java

@@ -600,10 +600,31 @@ public class PaperController extends ControllerSupport{
     @ApiOperation(value="根据id获取试卷的html片段集合", notes="根据id获取试卷的html片段集合")
     @GetMapping(value="/paper/pdf/{paperId}")
     public ModelAndView getPaperPDFById(@PathVariable String paperId){
-    	ModelAndView view = new ModelAndView("pdf");
+    	ModelAndView view = new ModelAndView("paper");
     	Map<String, Object> mag;
 		try {
-			mag = paperService.getPaperPDF(paperId);
+			mag = paperService.getPaperPDF(paperId,"paper");
+			view.addObject("htmlList", JsonUtil.toJson(mag.get("htmlList")));
+			view.addObject("courseName", mag.get("courseName"));
+			view.addObject("courseNo", mag.get("courseNo"));
+			return view;
+		} catch (Exception e) {
+			e.printStackTrace();
+			return view;
+		}
+    }
+    
+    /**
+     * 根据id获取试卷答案的html片段集合
+     * @return
+     */
+    @ApiOperation(value="根据id获取试卷的html片段集合", notes="根据id获取试卷的html片段集合")
+    @GetMapping(value="/paper/answer/pdf/{paperId}")
+    public ModelAndView getPaperAnswerPDFById(@PathVariable String paperId){
+    	ModelAndView view = new ModelAndView("answer");
+    	Map<String, Object> mag;
+		try {
+			mag = paperService.getPaperPDF(paperId,"answer");
 			view.addObject("htmlList", JsonUtil.toJson(mag.get("htmlList")));
 			view.addObject("courseName", mag.get("courseName"));
 			view.addObject("courseNo", mag.get("courseNo"));
@@ -619,11 +640,7 @@ public class PaperController extends ControllerSupport{
     public ResponseEntity<Object> sendPrint(@PathVariable String paperId,
     										@PathVariable String orgId,
     										@PathVariable String examId){
-    	User user = getAccessUser();
-    	if(user == null){
-    		return new ResponseEntity<Object>(HttpStatus.NOT_FOUND);
-    	}
-    	//String message = paperService.sendPrint(paperId,orgId,examId,user);
+    	paperService.sendPrint(paperId,orgId,examId);
     	return new ResponseEntity<Object>(HttpStatus.OK);
     }
     

+ 1 - 1
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/PaperService.java

@@ -259,7 +259,7 @@ public interface PaperService {
      * @param paperId
      * @return
      */
-    public Map<String, Object> getPaperPDF(String paperId) throws Exception;
+    public Map<String, Object> getPaperPDF(String paperId,String type) throws Exception;
 
 	/**
 	 * pdf路径传至印刷平台

+ 52 - 27
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/PaperServiceImpl.java

@@ -48,6 +48,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 import cn.com.qmth.examcloud.core.print.api.CoursePaperCloudService;
 import cn.com.qmth.examcloud.core.print.api.bean.SyncCoursePaperBean;
+import cn.com.qmth.examcloud.core.print.api.request.SyncCoursePaperReq;
+import cn.com.qmth.examcloud.core.print.api.response.SyncCoursePaperResp;
 import cn.com.qmth.examcloud.core.questions.base.print.CoursePaperDto;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.base.word.DocxProcessUtil;
@@ -157,6 +159,9 @@ public class PaperServiceImpl implements PaperService{
     
     @Autowired
     private PrintCoursePaperClient printCoursePaperClient;
+    
+    @Autowired
+    private CoursePaperCloudService coursePaperCloudService1;
 
     @Value("${upyun.radioType}")
     private String radioType;
@@ -1282,7 +1287,7 @@ public class PaperServiceImpl implements PaperService{
     }
 
 	@Override
-	public Map<String, Object> getPaperPDF(String paperId) {
+	public Map<String, Object> getPaperPDF(String paperId,String type) {
 		PaperExp paperExp = getPaperDto(paperId);
 		Map<String, Object> map = new HashMap<String, Object>();
 		map.put("courseName", paperExp.getCourseName());
@@ -1300,35 +1305,53 @@ public class PaperServiceImpl implements PaperService{
 				if(paperDetail.getPaperDetailUnits() != null && paperDetail.getPaperDetailUnits().size()>0){
 					for(PaperDetailUnitExp paperDetailUnitExp:paperDetail.getPaperDetailUnits()){
 						Question question = paperDetailUnitExp.getQuestion();
-						//添加题干
-						String questionBody = CommonUtils.deleteHtmlP(paperDetailUnitExp.getNumber()+"."+question.getQuesBody()+"("+paperDetailUnitExp.getScore()+"分)");
-						htmlList.add("<p class='questionBody'>"+questionBody+"</p>");
-						//判断是否为选择题
-						if(paperDetailUnitExp.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION || paperDetailUnitExp.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
-							for(QuesOption quesOption:question.getQuesOptions()){
-								//添加选项
-								String questionOption = CommonUtils.deleteHtmlP(CommonUtils.getOptionNum(Integer.parseInt(quesOption.getNumber())-1)+"."+quesOption.getOptionBody());
-								htmlList.add("<p class='selectOption'>"+questionOption+"</p>");
+						if(type.equals("paper")){
+							//添加题干
+							String questionBody = CommonUtils.deleteHtmlP(paperDetailUnitExp.getNumber()+"."+question.getQuesBody()+"("+paperDetailUnitExp.getScore()+"分)");
+							htmlList.add("<p class='questionBody'>"+questionBody+"</p>");
+							//判断是否为选择题
+							if(paperDetailUnitExp.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION || paperDetailUnitExp.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
+								for(QuesOption quesOption:question.getQuesOptions()){
+									//添加选项
+									String questionOption = CommonUtils.deleteHtmlP(CommonUtils.getOptionNum(Integer.parseInt(quesOption.getNumber())-1)+"."+quesOption.getOptionBody());
+									htmlList.add("<p class='selectOption'>"+questionOption+"</p>");
+								}
 							}
-						}
-						//判断是否为套题
-						if(paperDetailUnitExp.getQuestionType()==QuesStructType.NESTED_ANSWER_QUESTION){
-							//得到子题
-							List<Question> subQuestions = question.getSubQuestions();
-							for(Question subQuestion:subQuestions){
-								//添加子题题干
-								String subQuestionBody = CommonUtils.deleteHtmlP(subQuestion.getQuesParams().get("number")+"."+subQuestion.getQuesBody()+"("+subQuestion.getScore()+"分)");
-								htmlList.add("<p class='questionBody'>"+subQuestionBody+"</p>");
-								//判断是否为选择题
-								if(subQuestion.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION || subQuestion.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
-									for(QuesOption quesOption:subQuestion.getQuesOptions()){
-										//添加选项
-										String questionOption = CommonUtils.deleteHtmlP(CommonUtils.getOptionNum(Integer.parseInt(quesOption.getNumber())-1)+"."+quesOption.getOptionBody());
-										htmlList.add("<p class='selectOption'>"+questionOption+"</p>");
+							//判断是否为套题
+							if(paperDetailUnitExp.getQuestionType()==QuesStructType.NESTED_ANSWER_QUESTION){
+								//得到子题
+								List<Question> subQuestions = question.getSubQuestions();
+								for(Question subQuestion:subQuestions){
+									//添加子题题干
+									String subQuestionBody = CommonUtils.deleteHtmlP(subQuestion.getQuesParams().get("number")+"."+subQuestion.getQuesBody()+"("+subQuestion.getScore()+"分)");
+									htmlList.add("<p class='questionBody'>"+subQuestionBody+"</p>");
+									//判断是否为选择题
+									if(subQuestion.getQuestionType()==QuesStructType.SINGLE_ANSWER_QUESTION || subQuestion.getQuestionType()==QuesStructType.MULTIPLE_ANSWER_QUESTION){
+										for(QuesOption quesOption:subQuestion.getQuesOptions()){
+											//添加选项
+											String questionOption = CommonUtils.deleteHtmlP(CommonUtils.getOptionNum(Integer.parseInt(quesOption.getNumber())-1)+"."+quesOption.getOptionBody());
+											htmlList.add("<p class='selectOption'>"+questionOption+"</p>");
+										}
 									}
 								}
 							}
+						}else {
+							//判断是否为套题
+							if(paperDetailUnitExp.getQuestionType()==QuesStructType.NESTED_ANSWER_QUESTION){
+								//得到子题
+								List<Question> subQuestions = question.getSubQuestions();
+								for(Question subQuestion:subQuestions){
+									//添加答案
+									String questionAnswer = CommonUtils.deleteHtmlP(subQuestion.getNumber()+"."+subQuestion.getQuesAnswer()+"("+subQuestion.getScore()+"分)");
+									htmlList.add("<p class='questionAnswer'>"+questionAnswer+"</p>");
+								}
+							}else {
+								//添加答案
+								String questionAnswer = CommonUtils.deleteHtmlP(paperDetailUnitExp.getNumber()+"."+question.getQuesAnswer()+"("+paperDetailUnitExp.getScore()+"分)");
+								htmlList.add("<p class='questionAnswer'>"+questionAnswer+"</p>");
+							}
 						}
+						
 					}
 				}
 			}
@@ -1349,8 +1372,10 @@ public class PaperServiceImpl implements PaperService{
 		bean.setCourseName(paper.getCourse().getName());
 		bean.setPaperId(paper.getId());
 		bean.setPaperName(paper.getName());
-		
-		return "";
+		SyncCoursePaperReq req = new SyncCoursePaperReq();
+		req.setBean(bean);
+		SyncCoursePaperResp resp = coursePaperCloudService.syncCoursePaper(req);
+		return "success";
 	}
 
 	@Override

+ 2 - 1
examcloud-core-questions-starter/src/main/resources/security-exclusions.conf

@@ -20,4 +20,5 @@ regexp:.*webjars.*
 [${api_cqb}/][/extract/getAnswerHtml/{paperId}][GET]
 [${api_cqb}/][/extract/paper/{paperId}][GET]
 [${api_cqb}/][/checkObjective/{paperId}][GET]
-[${api_cqb}/][/paper/pdf/{paperId}][GET]
+[${api_cqb}/][/paper/pdf/{paperId}][GET]
+[${api_cqb}/][/paper/answer/pdf/{paperId}][GET]

+ 260 - 0
examcloud-core-questions-starter/src/main/resources/templates/answer.ftl

@@ -0,0 +1,260 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <title>template</title>
+    <style>
+      .center {
+        text-align: center;
+      }
+      .left_small {
+        margin-left: 10px;
+      }
+      .left_sm {
+        margin-left: 30px;
+      }
+      .top_small {
+        margin-top: 10px;
+      }
+      .firstPage {
+        /*设置高度和宽度*/
+        margin-left: 50px;
+        width: 2250px;
+        position: relative;
+      }
+      .firstColumn {
+        /*设置高度和宽度*/
+        width: 1630px;
+        height: 120px;
+        /*绝对定位到中间*/
+        overflow: auto;
+        margin: auto;
+        position: absolute;
+        top: 0;
+        left: 0;
+        bottom: 0;
+        right: 0;
+        /* 逆时针旋转90度 */
+        transform: rotateZ(270deg);
+        /*往左平移*/
+        margin-right: 60.5%;
+        margin-top: 34%;
+      }
+      #allContent {
+        width: 2000px;
+        float: left;
+        margin-left: 145px;
+      }
+      .content-page {
+        overflow: hidden;
+        height: 1660px;
+        float: left;
+        width: 990px;
+        position: relative;
+        border-bottom: 1px dashed black;
+      }
+      .secondColumn {
+        float: left;
+        width: 990px;
+        padding-top: 10px;
+        margin-top: 5px;
+        margin-left: 6px;
+        margin-right: 50px;
+      }
+      /* 侧边栏 */
+      .sidebar-font {
+        margin-top: 10px;
+        margin-left: 70px;
+      }
+      /* 密封线*/
+      .sidebar-thread {
+        margin-top: 10px;
+        text-align: center;
+      }
+      .paper_title {
+        height: 184px;
+      }
+      #optionContent {
+        visibility: hidden;
+        width: 990px;
+      }
+      .item-option-4 {
+        width: 100%;
+      }
+      .item-option-2 {
+        width: 50%;
+      }
+      .item-option-1 {
+        width: 25%;
+      }
+      .item-option {
+        display: inline-block;
+        line-height: 20px;
+      }
+    </style>
+  </head>
+  <body>
+    <div class="firstPage" id="firstPage">
+      <!-- 密封线 -->
+      <div class="firstColumn">
+        <div class="sidebar-font">
+          <span>姓名________________________________</span>
+          <span>学号________________________________</span>
+          <span>专业________________________________</span>
+          <span>学习中心________________________________</span>
+          <span>考试名称________________________________</span>
+        </div>
+        <div class="sidebar-thread">
+          <span
+            >...........................................................................................密...........................................................................................封..............................................................................线..............................................................................</span
+          >
+        </div>
+      </div>
+
+      <!-- 选项临时存放点 -->
+      <div id="optionContent"></div>
+      <div id="allContent">
+        <div class="content-page" id="content-page">
+          <div class="secondColumn" id="secondColumn0">
+            <div class="paper_title">
+              <div>
+                <h1>
+                  <span style="margin-left:20%;">天津大学网络教育学院111</span>
+                </h1>
+                <h3><span style="margin-left:35%;">考试试卷</span></h3>
+              </div>
+              <div>
+                <span>课程名称:</span
+                ><span style="color: #FF0000" id="courseName"></span>
+                <span style="margin-left: 20px;">课程代码:</span
+                ><span style="color: #FF0000" id="courseNo"></span><br />
+              </div>
+              <div class="top_small">
+                <span
+                  >注意事项:必须按试题顺序在“答题卡”上按要求填涂、作答,答在试卷上的答案无效。</span
+                >
+              </div>
+            </div>
+            <div class="top_small"></div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </body>
+  <script>
+    
+      var a3width = 990; //a3宽
+      var a3height = 1660; //a3高
+
+      var secondColumnIndex = 0;
+      var pageSize = 1;
+      var optionArray = [];
+      var secondColumn = document.getElementById(
+        "secondColumn" + secondColumnIndex
+      );
+      var optionContent = document.getElementById("optionContent");
+
+      
+
+      function initialize(dataList,courseName,courseNo) {
+      	document.getElementById("courseName").innerHTML = courseName;
+      	document.getElementById("courseNo").innerHTML = courseNo;
+      	typesetting(dataList);
+      }
+
+      function typesetting(dataList) {
+        for (var i = 0; i < dataList.length; i++) {
+          var div = createDivDom(dataList[i], i);
+          if (div.className.indexOf("item-option") > -1) {
+            optionArray.push(div);
+            optionContent.appendChild(div);
+          } else if (
+            (div.className.indexOf("item-quesBody") > -1 ||
+              div.className.indexOf("item-paperDetail") > -1) &&
+            optionArray.length > 0
+          ) {
+            handleQuesOption();
+            appendPageBox(div);
+          } else {
+            appendPageBox(div);
+          }
+        }
+        //如果最后一次是选择题
+        if (optionArray.length > 0) {
+          handleQuesOption();
+        }
+      }
+
+      //处理选项
+      function handleQuesOption() {
+        var cls = getLineType(optionArray);
+        optionContent.innerHTML = "";
+        optionArray.forEach(function(item) {
+          item.setAttribute("class", "item-option " + cls);
+          appendPageBox(item);
+        });
+        optionArray = [];
+      }
+
+      function createDivDom(data, index) {
+        var divlog = document.createElement("div");
+        var spanlog = document.createElement("span");
+        var cls = "";
+        if (data.indexOf("paperDetailTitle") > -1) {
+          cls = "item-paperDetail";
+        }
+        if (data.indexOf("questionAnswer") > -1) {
+          cls = "item-quesBody";
+        }
+        divlog.setAttribute("class", cls);
+        divlog.setAttribute("data-index", index);
+        spanlog.innerHTML = data;
+        divlog.appendChild(spanlog);
+        return divlog;
+      }
+
+      function appendPageBox(dom) {
+        secondColumn.appendChild(dom);
+        var pch = secondColumn.clientHeight;
+        if (pch > a3height) {
+          secondColumn.removeChild(dom);
+          secondColumnIndex++;
+          var allContent = document.getElementById("allContent");
+          var contentPageDom = document.createElement("div");
+          contentPageDom.setAttribute("class", "content-page");
+
+          var pageBoxDom = document.createElement("div");
+          pageBoxDom.setAttribute("class", "secondColumn");
+          pageBoxDom.id = "secondColumn" + secondColumnIndex;
+          pageBoxDom.appendChild(dom);
+          contentPageDom.appendChild(pageBoxDom);
+          allContent.appendChild(contentPageDom);
+          secondColumn = document.getElementById(
+            "secondColumn" + secondColumnIndex
+          );
+        }
+      }
+
+      function getLineType(optionWs) {
+        var type = "item-option-1";
+        for (var i = 0; i < optionWs.length; i++) {
+          var rate = optionWs[i].clientWidth / a3width;
+          if (rate > 0.5) {
+            type = "item-option-4";
+            return type;
+          }
+          if (rate > 0.25) type = "item-option-2";
+        }
+        return type;
+      }
+      
+      
+    window.onload = function () {
+    
+        var dateList = eval(${htmlList!});
+
+        initialize(dateList,"${courseName!}","${courseNo!}");
+    };
+    
+  </script>
+</html>

+ 0 - 0
examcloud-core-questions-starter/src/main/resources/templates/pdf.ftl → examcloud-core-questions-starter/src/main/resources/templates/paper.ftl