1
0
ting.yin 2 лет назад
Родитель
Сommit
0e1f59dfa2

+ 11 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamQuestion.java

@@ -100,6 +100,9 @@ public class ExamQuestion implements Serializable {
     @Transient
     private Integer selectiveIndex;
 
+    @Transient
+    private Integer selectivePart;
+
     public Integer getId() {
         return id;
     }
@@ -330,4 +333,12 @@ public class ExamQuestion implements Serializable {
         this.selectiveIndex = selectiveIndex;
     }
 
+    public Integer getSelectivePart() {
+        return selectivePart;
+    }
+
+    public void setSelectivePart(Integer selectivePart) {
+        this.selectivePart = selectivePart;
+    }
+
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/SelectiveGroupService.java

@@ -23,4 +23,6 @@ public interface SelectiveGroupService {
 
     Map<Integer, List<SelectiveGroup>> findGroupByExamIdAndSubjectCode(int examId, String subjectCode);
 
+    int findMaxIndexByExamIdAndSubjectCode(int examId, String subjectCode);
+
 }

+ 12 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/SelectiveGroupServiceImpl.java

@@ -113,4 +113,16 @@ public class SelectiveGroupServiceImpl extends BaseQueryService<SelectiveGroup>
         }
         return map;
     }
+
+    @Override
+    public int findMaxIndexByExamIdAndSubjectCode(int examId, String subjectCode) {
+        List<SelectiveGroup> groups = selectiveGroupDao.findByExamIdAndSubjectCode(examId, subjectCode);
+        int number = 0;
+        for (SelectiveGroup group : groups) {
+            if (number < group.getSelectiveIndex()) {
+                number = group.getSelectiveIndex();
+            }
+        }
+        return number;
+    }
 }

+ 5 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/admin/dto/SelectivePartDTO.java

@@ -1,10 +1,12 @@
 package cn.com.qmth.stmms.admin.dto;
 
+import java.util.List;
+
 public class SelectivePartDTO {
 
     Integer selectivePart;
 
-    Integer[] mainNumbers;
+    List<Integer> mainNumbers;
 
     public Integer getSelectivePart() {
         return selectivePart;
@@ -14,11 +16,11 @@ public class SelectivePartDTO {
         this.selectivePart = selectivePart;
     }
 
-    public Integer[] getMainNumbers() {
+    public List<Integer> getMainNumbers() {
         return mainNumbers;
     }
 
-    public void setMainNumbers(Integer[] mainNumbers) {
+    public void setMainNumbers(List<Integer> mainNumbers) {
         this.mainNumbers = mainNumbers;
     }
 

+ 50 - 10
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/SelectiveGroupController.java

@@ -9,13 +9,17 @@ import java.util.Set;
 
 import javax.servlet.http.HttpServletRequest;
 
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@@ -67,6 +71,7 @@ public class SelectiveGroupController extends BaseExamController {
             if (map.get(examQuestion.getMainNumber()) != null) {
                 examQuestion.setSelective(true);
                 examQuestion.setSelectiveIndex(map.get(examQuestion.getMainNumber()).getSelectiveIndex());
+                examQuestion.setSelectivePart(map.get(examQuestion.getMainNumber()).getSelectivePart());
             }
         }
         model.addAttribute("subject", subject);
@@ -80,41 +85,73 @@ public class SelectiveGroupController extends BaseExamController {
     @RequestMapping("/add")
     public String add(Model model, HttpServletRequest request, RedirectAttributes redirectAttributes,
             @RequestParam String subjectCode, @RequestParam Integer selectiveCount, @RequestParam Integer scorePolicy,
-            @RequestParam Integer selectivePart) {
+            @RequestParam Integer selectivePart, @RequestParam(required = false) String parts) {
         int examId = getSessionExamId(request);
         List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subjectCode);
         if (groups != null && groups.size() > 0) {
             addMessage(redirectAttributes, "该科目已经存在分组,无法设置");
             return "redirect:/admin/exam/selectiveGroup?subjectCode=" + subjectCode;
         }
+        List<SelectivePartDTO> partList = getPartList(parts);
+        if (checkTotalScore(examId, subjectCode, partList)) {
+            addMessage(redirectAttributes, "选做题区分数必须一样");
+            return "redirect:/admin/exam/selectiveGroup?subjectCode=" + subjectCode;
+        }
         ExamSubject subject = subjectService.find(examId, subjectCode);
         List<SelectiveGroup> list = selectiveGroupService.findByExamIdAndSubjectCode(examId, subjectCode);
         Map<Integer, SelectiveGroup> map = new HashMap<Integer, SelectiveGroup>();
         for (SelectiveGroup selectiveGroup : list) {
             map.put(selectiveGroup.getMainNumber(), selectiveGroup);
         }
-
         List<ExamQuestion> questions = questionService.findMainByExamAndSubjectAndObjective(examId, subjectCode, false);
         for (ExamQuestion examQuestion : questions) {
             if (map.get(examQuestion.getMainNumber()) != null) {
                 examQuestion.setSelective(true);
                 examQuestion.setSelectiveIndex(map.get(examQuestion.getMainNumber()).getSelectiveIndex());
             }
+            for (SelectivePartDTO selectivePartDTO : partList) {
+                if (selectivePartDTO.getMainNumbers().contains(examQuestion.getMainNumber())) {
+                    examQuestion.setSelective(true);
+                }
+            }
         }
         model.addAttribute("selectiveCount", selectiveCount);
         model.addAttribute("selectivePart", selectivePart);
+        model.addAttribute("selectivePartNo", partList.size() + 1);
         model.addAttribute("scorePolicy", scorePolicy);
         model.addAttribute("questions", questions);
         model.addAttribute("subject", subject);
+        model.addAttribute("parts", parts);
         return "modules/exam/selectiveAdd";
     }
 
+    private List<SelectivePartDTO> getPartList(String parts) {
+        List<SelectivePartDTO> list = new ArrayList<SelectivePartDTO>();
+        if (StringUtils.isNotBlank(parts)) {
+            parts = StringEscapeUtils.unescapeHtml(parts);
+            JSONArray array = JSONArray.fromObject(parts);
+            for (int i = 0; i < array.size(); i++) {
+                JSONObject part = array.getJSONObject(i);
+                SelectivePartDTO dto = new SelectivePartDTO();
+                dto.setSelectivePart(part.getInt("selectivePart"));
+                List<Integer> mainNumbers = new ArrayList<Integer>();
+                JSONArray mainNumberArr = part.getJSONArray("mainNumbers");
+                for (Object object : mainNumberArr) {
+                    mainNumbers.add(Integer.parseInt(object.toString()));
+                }
+                dto.setMainNumbers(mainNumbers);
+                list.add(dto);
+            }
+        }
+        return list;
+    }
+
     @Logging(menu = "选做题新增", type = LogType.ADD)
     @RequestMapping("/save")
     @Transactional
     public String save(HttpServletRequest request, RedirectAttributes redirectAttributes,
             @RequestParam String subjectCode, @RequestParam Integer selectiveCount, @RequestParam Integer scorePolicy,
-            @RequestParam Integer selectivePart, @RequestBody List<SelectivePartDTO> parts) {
+            @RequestParam Integer selectivePart, @RequestParam String parts) {
         int examId = getSessionExamId(request);
         if (selectiveCount >= selectivePart) {
             addMessage(redirectAttributes, "选做题数量不能大于已选择题目数量");
@@ -125,15 +162,17 @@ public class SelectiveGroupController extends BaseExamController {
             addMessage(redirectAttributes, "该科目已经存在分组,无法设置");
             return "redirect:/admin/exam/selectiveGroup?subjectCode=" + subjectCode;
         }
-        if (checkTotalScore(examId, subjectCode, parts)) {
+        List<SelectivePartDTO> partList = getPartList(parts);
+        if (checkTotalScore(examId, subjectCode, partList)) {
             addMessage(redirectAttributes, "选做题区分数必须一样");
             return "redirect:/admin/exam/selectiveGroup?subjectCode=" + subjectCode;
         }
-        for (SelectivePartDTO part : parts) {
+        int index = selectiveGroupService.findMaxIndexByExamIdAndSubjectCode(examId, subjectCode);
+        for (SelectivePartDTO part : partList) {
             List<SelectiveGroup> list = new ArrayList<SelectiveGroup>();
             for (Integer mainNumber : part.getMainNumbers()) {
-                list.add(new SelectiveGroup(examId, subjectCode, mainNumber, part.getSelectivePart(), selectiveCount,
-                        selectivePart, ScorePolicy.findByValue(scorePolicy)));
+                list.add(new SelectiveGroup(examId, subjectCode, mainNumber, index + 1, selectiveCount, part
+                        .getSelectivePart(), ScorePolicy.findByValue(scorePolicy)));
             }
             selectiveGroupService.save(list);
         }
@@ -161,7 +200,7 @@ public class SelectiveGroupController extends BaseExamController {
     @Logging(menu = "删除选做题", type = LogType.DELETE)
     @RequestMapping("/delete")
     @Transactional
-    public String claer(HttpServletRequest request, RedirectAttributes redirectAttributes,
+    public String delete(HttpServletRequest request, RedirectAttributes redirectAttributes,
             @RequestParam String subjectCode, @RequestParam Integer selectiveIndex) {
         int examId = getSessionExamId(request);
         List<MarkGroup> groups = groupService.findByExamAndSubject(examId, subjectCode);
@@ -196,7 +235,8 @@ public class SelectiveGroupController extends BaseExamController {
                     .findIndexByExamIdAndSubjectCode(examId, subjectCode);
             for (SelectiveGroup selectiveGroup : indexGroup) {
                 // 选做题分组总分
-                totalScore = BigDecimalUtils.add(totalScore, selectiveGroup.getPartScore());
+                totalScore = BigDecimalUtils.add(totalScore,
+                        selectiveGroup.getPartScore() * selectiveGroup.getSelectiveCount());
             }
             subjectService.updateScore(examId, subjectCode, false, totalScore);
         } else {

+ 52 - 15
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/selectiveAdd.jsp

@@ -9,11 +9,12 @@
 </head>
 <body>
 	<%-- <%@include file="/WEB-INF/views/include/examInfoNavTabs.jsp" %> --%>
-	<form id="inputForm" action="${ctx}/admin/exam/selectiveGroup/save" method="post" class="breadcrumb form-search">
+	<form id="inputForm" action="${ctx}/admin/exam/selectiveGroup/add" method="post" class="breadcrumb form-search">
 		<input name="subjectCode" value="${subject.code}" type="hidden"/>
 		<input name="selectiveCount" value="${selectiveCount}" type="hidden"/>
 		<input name="selectivePart" value="${selectivePart}" type="hidden"/>
 		<input name="scorePolicy" value="${scorePolicy}" type="hidden"/>
+		<input name="parts" value="${parts}" type="hidden" id="parts"/>
 		<div>
 			<label>科目:${subject.code}-${subject.name}</label>
 			<label>客观总分:<fmt:formatNumber pattern="###.###" value="${subject.objectiveScore}"/></label>
@@ -21,6 +22,11 @@
 			<label>试卷总分:<fmt:formatNumber pattern="###.###" value="${subject.totalScore}"/></label>
 		</div>
 		<br/>
+		<div>
+			<h4>选做题规则:${selectivePart} &nbsp;选&nbsp;${selectiveCount}</h4>
+			<h4>选做题第 ${selectivePartNo } 部分请勾选:</h4>
+		</div>
+		<br/>
 	<tags:message content="${message}"/>
 	<table id="contentTable" class="table table-striped table-bordered table-condensed">
 		<thead>
@@ -40,7 +46,7 @@
 				<td><fmt:formatNumber pattern="###.###" value="${question.totalScore}"/></td>
 				<td>${question.selectiveIndex}</td>
 				<td><c:if test="${!question.selective}">
-					<input type="checkbox" name="mainNumbers" value = ${question.mainNumber }/>
+					<input type="checkbox" name="mainNumbers" value = "${question.mainNumber}"/>
 					</c:if>
 				</td>
 			</tr>
@@ -48,8 +54,18 @@
 		</tbody>
 	</table>
 	</form>
+	<div class="pull-right">
+		<a href="javascript:" onclick="history.go(-1);" class="btn">返回</a>
+		&nbsp;&nbsp;		
+		<c:if test="${selectivePart>selectivePartNo }">
+			<a href="#" class="btn btn-primary" id="btnNext">下一步</a>
+		</c:if>
+		<c:if test="${selectivePart==selectivePartNo }">
+			<a href="#" class="btn btn-primary" id="btnSubmit">完成</a>
+		</c:if>
+	</div>
 <script type="text/javascript">
-$('#btnSubmit').click(function () {
+$('#btnNext').click(function () {
 	var check_list = []
 	$("input[name='mainNumbers']:checked").each(function(){
     	if($(this).val()!=""){
@@ -60,20 +76,41 @@ $('#btnSubmit').click(function () {
         alert('请选择题目');
         return false;
     }
-	var count = $("#selectiveCount").val();
-	if(count==null ||count==""){
-		alert("合分数量不能为空");
-		return;
-	}
-	if(!(/(^[1-9]\d*$)/.test(count))){
-		alert("合分数量必须是正整数");
-		return;
+	
+	var parts =[];
+	if($("#parts").val()!=undefined && $("#parts").val()!=""){
+		parts =JSON.parse($("#parts").val());
 	}
-	if(count>=check_list.length || count<1){
-		alert("合分数量必须小于选择的题目数量且大于等于1");
-		return;
+	var partDTO = {
+			selectivePart: "${selectivePartNo}",
+            mainNumbers :check_list
+        };
+	parts.push(partDTO);
+	$('#parts').val(JSON.stringify(parts));
+   $('#inputForm').submit();
+});
+$('#btnSubmit').click(function () {
+	var check_list = []
+	$("input[name='mainNumbers']:checked").each(function(){
+    	if($(this).val()!=""){
+    		check_list.push($(this).val())
+		}
+	})
+    if(check_list.length==0) {
+        alert('请选择题目');
+        return false;
+    }
+	var parts =[];
+	if($("#parts").val()!=undefined && $("#parts").val()!=""){
+		parts =JSON.parse($("#parts").val());
 	}
-	
+	var partDTO = {
+			selectivePart: "${selectivePartNo}",
+            mainNumbers :check_list
+        };
+	parts.push(partDTO);
+	$('#parts').val(JSON.stringify(parts));
+	$("#inputForm").attr("action", "${ctx}/admin/exam/selectiveGroup/save");
    $('#inputForm').submit();
 });
 </script>	

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

@@ -105,6 +105,7 @@
 				<th>满分</th>
 				<th>间隔分</th>
 				<th>选做题分组</th>
+				<th>选做题区</th>
 			</tr>
 		</thead>
 		<tbody>
@@ -116,6 +117,7 @@
 				<td><fmt:formatNumber pattern="###.###" value="${question.totalScore}"/></td>
 				<td><fmt:formatNumber pattern="###.###" value="${question.intervalScore}"/></td>
 				<td>${question.selectiveIndex}</td>
+				<td>${question.selectivePart}</td>
 			</tr>
 		</c:forEach>
 		</tbody>
@@ -126,9 +128,9 @@
 	        <p class="image-close"><img src="${ctxStatic}/mark-new/images/images-close.png"/></p></div>
 	    <div class="task-content">选做题规则:<input type="number" id="selectivePart" name="selectivePart" class="task-count"/>选<input type="number" id="selectiveCount" name="selectiveCount" class="task-count"/><br/><br/>
 	    取分规则:<select name="scorePolicy">
-	    			<c:forEach items="${scorePolicyList}" var="item">
-                        <option value="${item.value}">${item.name}</option>
-                    </c:forEach>
+	    			<%-- <c:forEach items="${scorePolicyList}" var="item"> --%>
+                        <option value="2">最高分</option>
+                 <%--    </c:forEach> --%>
 	    		</select><br/><br/>
 	    *如选做为5选3,则系统会校验后续选做题总量为5,合分数量为3。
 	    <i class="wrong">