1
0
Эх сурвалжийг харах

完成质量监控查看分数数量对应试卷功能

ting.yin 5 жил өмнө
parent
commit
f1bc91badf

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/TrialHistoryDao.java

@@ -44,4 +44,7 @@ public interface TrialHistoryDao extends JpaRepository<TrialHistory, Integer>, J
     List<TrialHistory> findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndStudentId(Integer examId,
             String subjectCode, Integer groupNumber, Integer markerId, Integer studentId, Pageable query);
 
+    List<TrialHistory> findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndMarkerScore(Integer examId,
+            String subjectCode, Integer groupNumber, Integer markerId, Double markerScore, Pageable query);
+
 }

+ 24 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/Task.java

@@ -114,6 +114,14 @@ public class Task extends MarkResult implements Serializable {
     // 仲裁记录集合
     private List<ArbitrationDTO> arbitrationList;
 
+    /**
+     * 显示考生名称
+     * 
+     */
+    private String studentName;
+
+    private Integer markerId;
+
     public List<String> getPictureUrls() {
         return pictureUrls;
     }
@@ -306,4 +314,20 @@ public class Task extends MarkResult implements Serializable {
         this.studentNumber = studentNumber;
     }
 
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public Integer getMarkerId() {
+        return markerId;
+    }
+
+    public void setMarkerId(Integer markerId) {
+        this.markerId = markerId;
+    }
+
 }

+ 10 - 5
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TrialServiceImpl.java

@@ -74,7 +74,7 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
 
     @Override
     public List<TrialHistory> findHistory(Integer examId, String subjectCode, Integer groupNumber, Integer markerId,
-            int pageNumber, int pageSize, Sort sort) {
+            int pageNumber, int pageSize, Sort sort, Double markerScore) {
         BaseQuery<TrialHistory> query = new BaseQuery<>();
         query.setPageNumber(pageNumber);
         query.setPageSize(pageSize);
@@ -83,8 +83,13 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
         } else {
             query.setSort(new Sort(Direction.DESC, "markerTime"));
         }
-        return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerId(examId, subjectCode, groupNumber,
-                markerId, query);
+        if (markerScore != null) {
+            return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndMarkerScore(examId, subjectCode,
+                    groupNumber, markerId, markerScore, query);
+        } else {
+            return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerId(examId, subjectCode, groupNumber,
+                    markerId, query);
+        }
     }
 
     @Override
@@ -155,7 +160,7 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
         } else {
             query.setSort(new Sort(Direction.DESC, "markerTime"));
         }
-        return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndStudentId(examId, subjectCode, groupNumber,
-                markerId, studentId,query);
+        return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndStudentId(examId, subjectCode,
+                groupNumber, markerId, studentId, query);
     }
 }

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

@@ -30,7 +30,7 @@ public interface TrialService {
     long countMarkerHistory(Integer markerId);
 
     List<TrialHistory> findHistory(Integer examId, String subjectCode, Integer groupNumber, Integer markerId,
-            int pageNumber, int pageSize, Sort sort);
+            int pageNumber, int pageSize, Sort sort, Double markerScore);
 
     List<TrialTrack> findTrack(Integer libraryId, Integer markerId);
 

+ 112 - 5
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkQualityController.java

@@ -10,10 +10,12 @@ import javax.servlet.http.HttpServletRequest;
 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.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@@ -24,16 +26,25 @@ import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
 import cn.com.qmth.stmms.biz.exam.query.MarkerSearchQuery;
 import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
 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.MarkerService;
 import cn.com.qmth.stmms.biz.lock.LockService;
+import cn.com.qmth.stmms.biz.mark.model.Task;
+import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
+import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
 import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.biz.mark.service.TrialService;
 import cn.com.qmth.stmms.biz.mark.thread.MarkQualityThread;
+import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
 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.RequestUtils;
 
 @Controller("markQualityController")
@@ -62,7 +73,25 @@ public class MarkQualityController extends BaseExamController {
 
     @Autowired
     private ExamQuestionService questionService;
-    
+
+    @Autowired
+    private TaskService taskService;
+
+    @Autowired
+    private TrialService trialService;
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @Value("${slice.image.server}")
+    private String sliceServer;
+
+    @Value("${sheet.image.server}")
+    private String sheetServer;
+
+    @Value("${card.server}")
+    private String cardServer;
+
     @RequestMapping
     public String list(Model model, HttpServletRequest request, MarkerSearchQuery query) {
         int examId = getSessionExamId(request);
@@ -83,8 +112,10 @@ public class MarkQualityController extends BaseExamController {
         }
         if (query.getSubjectCode() != null && query.getGroupNumber() != null) {
             query = markerService.findByQuery(query);
-            model.addAttribute("running", lockService.isLocked(LockType.BATCH_QUALITY,
-                    getLockKey(examId, query.getSubjectCode(), query.getGroupNumber())));
+            model.addAttribute(
+                    "running",
+                    lockService.isLocked(LockType.BATCH_QUALITY,
+                            getLockKey(examId, query.getSubjectCode(), query.getGroupNumber())));
         }
         model.addAttribute("query", query);
         model.addAttribute("subjectList", subjectList);
@@ -100,8 +131,8 @@ public class MarkQualityController extends BaseExamController {
         if (group != null) {
             final String lockKey = getLockKey(examId, subjectCode, groupNumber);
             if (lockService.trylock(LockType.BATCH_QUALITY, lockKey)) {
-                taskExecutor.submit(new MarkQualityThread(
-                        markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber), lockKey));
+                taskExecutor.submit(new MarkQualityThread(markerService.findByExamAndSubjectAndGroup(examId,
+                        subjectCode, groupNumber), lockKey));
             }
             redirectAttributes.addAttribute("groupNumber", groupNumber);
         }
@@ -132,6 +163,7 @@ public class MarkQualityController extends BaseExamController {
                     scoreCount.put(score, count);
                 }
                 MarkerVO vo = new MarkerVO();
+                vo.setId(marker.getId());
                 vo.setLoginName(marker.getLoginName());
                 vo.setName(marker.getName());
                 vo.setScoreCount(scoreCount);
@@ -174,6 +206,7 @@ public class MarkQualityController extends BaseExamController {
                 scorePercent.put(score, percent);
             }
             MarkerVO vo = new MarkerVO();
+            vo.setId(marker.getId());
             vo.setLoginName(marker.getLoginName());
             vo.setName(marker.getName());
             vo.setScorePercent(scorePercent);
@@ -182,4 +215,78 @@ public class MarkQualityController extends BaseExamController {
         return list;
     }
 
+    @RequestMapping("/batchProcess")
+    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    public String batchProcess(Model model, HttpServletRequest request, @RequestParam Integer markerId,
+            @RequestParam Double markerScore) {
+        int examId = getSessionExamId(request);
+        Marker marker = markerService.findById(markerId);
+        WebUser wu = RequestUtils.getWebUser(request);
+        if (!subjectCheck(marker.getSubjectCode(), wu)) {
+            return "redirect:/admin/exam/mark";
+        }
+        MarkGroup group = groupService.findOne(examId, marker.getSubjectCode(), marker.getGroupNumber());
+        if (group == null) {
+            return "redirect:/admin/exam/mark";
+        }
+        model.addAttribute("sheetServer", sheetServer);
+        model.addAttribute("sliceServer", sliceServer);
+        model.addAttribute("cardServer", cardServer);
+        model.addAttribute("subject", subjectService.find(group.getExamId(), group.getSubjectCode()));
+        model.addAttribute("group", group);
+        model.addAttribute("markerId", markerId);
+        model.addAttribute("markerScore", markerScore);
+        return "modules/exam/qualityProcess";
+    }
+
+    @RequestMapping(value = "/history", method = RequestMethod.POST)
+    @ResponseBody
+    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    public List<Task> getTask(HttpServletRequest request, @RequestParam Integer markerId,
+            @RequestParam Double markerScore, @RequestParam(required = false) Integer pageNumber,
+            @RequestParam(required = false) Integer pageSize) {
+        Marker marker = markerService.findById(markerId);
+        List<Task> list = new ArrayList<>();
+        MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
+        if (group != null && group.getStatus() == MarkStatus.FORMAL) {
+            // 正评查找已给分的评卷任务
+            MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
+            query.setExamId(marker.getExamId());
+            query.setSubjectCode(marker.getSubjectCode());
+            query.setMarkerId(marker.getId());
+            query.addStatus(LibraryStatus.MARKED);
+            query.setGroupNumber(marker.getGroupNumber());
+            query.setMarkerScore(markerScore);
+            if (pageNumber != null) {
+                query.setPageNumber(pageNumber);
+            }
+            if (pageSize != null) {
+                query.setPageSize(pageSize);
+            }
+            query.orderByMarkerTimeDesc();
+
+            list = taskService.findByQuery(query);
+            for (Task task : list) {
+                task.setPrevious(true);
+                task.setStudentName(studentService.findById(task.getStudentId()).getName());
+                task.setMarkerId(markerId);
+            }
+        } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
+            // 试评查找给分历史记录
+            List<TrialHistory> historyList = new ArrayList<TrialHistory>();
+            historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
+                    marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, null,markerScore);
+            for (TrialHistory history : historyList) {
+                TrialLibrary library = trialService.findLibrary(history.getLibraryId());
+                if (library != null) {
+                    Task task = taskService.build(library, history);
+                    task.setPrevious(true);
+                    task.setStudentName(studentService.findById(task.getStudentId()).getName());
+                    task.setMarkerId(markerId);
+                    list.add(task);
+                }
+            }
+        }
+        return list;
+    }
 }

+ 38 - 29
stmms-web/src/main/java/cn/com/qmth/stmms/admin/vo/MarkerVO.java

@@ -2,50 +2,59 @@ package cn.com.qmth.stmms.admin.vo;
 
 import java.util.Map;
 
-
 public class MarkerVO {
 
+    private Integer id;
+
     private String loginName;
 
     private String name;
 
-    private Map<Double,Double> scorePercent;
-    
-    private Map<Double,Long> scoreCount;
-    
+    private Map<Double, Double> scorePercent;
+
+    private Map<Double, Long> scoreCount;
+
     public MarkerVO() {
     }
 
-	public String getLoginName() {
-		return loginName;
-	}
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getName() {
+        return name;
+    }
 
-	public void setLoginName(String loginName) {
-		this.loginName = loginName;
-	}
+    public void setName(String name) {
+        this.name = name;
+    }
 
-	public String getName() {
-		return name;
-	}
+    public Map<Double, Double> getScorePercent() {
+        return scorePercent;
+    }
 
-	public void setName(String name) {
-		this.name = name;
-	}
+    public void setScorePercent(Map<Double, Double> scorePercent) {
+        this.scorePercent = scorePercent;
+    }
 
-	public Map<Double, Double> getScorePercent() {
-		return scorePercent;
-	}
+    public Map<Double, Long> getScoreCount() {
+        return scoreCount;
+    }
 
-	public void setScorePercent(Map<Double, Double> scorePercent) {
-		this.scorePercent = scorePercent;
-	}
+    public void setScoreCount(Map<Double, Long> scoreCount) {
+        this.scoreCount = scoreCount;
+    }
 
-	public Map<Double, Long> getScoreCount() {
-		return scoreCount;
-	}
+    public Integer getId() {
+        return id;
+    }
 
-	public void setScoreCount(Map<Double, Long> scoreCount) {
-		this.scoreCount = scoreCount;
-	}
+    public void setId(Integer id) {
+        this.id = id;
+    }
 
 }

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -404,7 +404,7 @@ public class MarkController extends BaseController {
                         marker.getGroupNumber(), marker.getId(), studentId, pageNumber, pageSize, querySort);
             } else {
                 historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort);
+                        marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, querySort,null);
             }
             for (TrialHistory history : historyList) {
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());

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

@@ -32,7 +32,8 @@
 				<td>${marker.name}</td>
 				<c:forEach items="${scores}" var="score">
 					<td>
-					<c:if test="${marker.scoreCount[score]!=null}">${marker.scoreCount[score] }</c:if>
+					<c:if test="${marker.scoreCount[score]!=null}">
+					<a href="##" onclick="openTab(${marker.id},${score})">${marker.scoreCount[score] }</a></c:if>
 					<c:if test="${marker.scoreCount[score]==null }">0</c:if>
 					</td>
 				</c:forEach>
@@ -107,7 +108,9 @@ $.post('${ctx}/admin/exam/quality/getChart', {subjectCode: subjectCode,groupNumb
 		};
 	myChart.setOption(option);
 });
-
+function openTab(markerId,markerScore){
+    window.open('${ctx}/admin/exam/quality/batchProcess?markerId='+markerId+'&markerScore='+markerScore,"_blank");    
+};
 </script>	
 </body>
 </html>

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

@@ -0,0 +1,73 @@
+<%@ 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 type="text/javascript" src="${ctxStatic}/mark-new/js/mark-control.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/sheet-view.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/image-builder.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/single-image-view.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/quality-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()',
+				modules : {
+					'single-image-view' : {},
+					'image-builder': {},
+					'header-mark-status': {
+						title : '${subject.code}_${subject.name}_${group.title}'
+					},
+					'quality-process': {
+					},
+					'sheet-view' : {
+						server : '${sheetServer}'
+					},
+					'warning-info': {
+					},
+					'thumbnail':{
+					},
+					'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>'}
+						]
+					}
+				}
+			});
+            $.post('${ctx}/admin/exam/quality/history?markerId=${markerId}&markerScore=${markerScore}&pageSize=1', {}, function(taskList){
+                mc.setTask(taskList[0]);
+            });
+		});
+	</script>
+</body>
+</html>

+ 139 - 0
stmms-web/src/main/webapp/static/mark-new/js/modules/quality-process.js

@@ -0,0 +1,139 @@
+//质量分析模块
+var quality_process = function(option, success) {
+    var object = new QualityProcess(option);
+    success();
+    return object;
+}
+
+function QualityProcess(option) {
+    this.markControl = option.markControl;
+    this.container = this.markControl.container.sidebar;
+    this.pageSize = 10;
+    this.pageNumber = 1;
+    this.markerId = 0;
+    this.markerScore = 0;
+    this.taskList = [];
+    this.init();
+
+    this.markControl.on('task.get.none', this, function(event, context, data) {
+        this.container.list.empty();
+        this.markControl.trigger('mark.sidebar.close');
+        this.container.hide();
+    });
+    this.markControl.on('task.get.success', this, function(event, context, data) {
+    	var self  = this;
+    	if (context.task.previous == true) {
+    		self.markerScore = context.task.totalScore;
+    		self.markerId =   context.task.markerId;
+    		if(self.taskList == undefined || self.taskList.length == 0){
+    			self.onSearch(self.markerId,self.markerScore,self.pageNumber);
+    		}
+    	}
+    });
+}
+
+QualityProcess.prototype.init = function() {
+    this.container.empty();
+
+    this.container.header = getDom(this.header_dom, this.markControl).appendTo(this.container);
+    this.container.list = getDom(this.history_list_dom, this.markControl).appendTo(this.container).find('#history-list');
+    this.container.paginator = getDom(this.paginator_dom, this.markControl).appendTo(this.container);
+    
+    this.container.paginator.find('#last-page-button').click(this, function(event) {
+        var self = event.data;
+        if (self.taskList.length < self.pageSize) {
+        	return ;
+        }
+        self.pageNumber = self.pageNumber + 1;
+        self.onSearch(self.markerId,self.markerScore,self.pageNumber);
+    });
+    this.container.paginator.find('#next-page-button').click(this, function(event) {
+    	var self = event.data;
+        if (self.pageNumber == 1) {
+        	return ;
+        }
+        if (self.pageNumber > 1) {
+        	self.pageNumber = self.pageNumber - 1;
+        	self.onSearch(self.markerId,self.markerScore,self.pageNumber);
+        }
+    });
+}
+
+QualityProcess.prototype.render = function(taskList,pageNumber) {
+	this.taskList = taskList;
+    var historyList = taskList;
+    this.container.list.empty();
+    if (isArray(historyList) && historyList.length > 0) {
+		for (var i in historyList) {
+			var history = historyList[i];          
+			var row = getDom(this.history_row_dom, this.markControl).appendTo(this.container.list);
+            row.find('.history-id').html(history.studentNumber);
+            row.find('.history-name').html(history.studentName);
+            row.find('.history-score').html(history.totalScore);
+            row.attr('data-index', i);
+    	}
+    }
+    
+    this.container.list.find('td').click(this, function(event) {
+        var qualityProcess = event.data;
+        var index = $(event.target).parent().attr('data-index');
+        qualityProcess.onTaskSelect(index);
+    });
+    this.pageNumber = pageNumber;
+    this.updatePage();
+
+    if (this.taskList.length > 0) {
+        this.onTaskSelect(0);
+    }
+    
+	this.markControl.trigger('mark.sidebar.open');
+	this.container.show();
+	
+}
+
+QualityProcess.prototype.onSearch = function(markerId,markerScore,pageNumber) {
+	var self =  this; 
+    if (pageNumber == undefined || pageNumber < 1) {
+        pageNumber = 1;
+    }
+    $.post('/admin/exam/quality/history?markerId='+markerId+'&markerScore='+markerScore+'&pageNumber='+pageNumber+'&pageSize='+self.pageSize,
+    		{}, function(data){
+    	self.render(data,self.pageNumber);
+    });
+}
+
+QualityProcess.prototype.onTaskSelect = function(index) {
+    var number = new String(index);
+    if (this.taskList != undefined && index < this.taskList.length) {
+        this.container.list.find('tr').each(function(index, obj) {
+            if ($(obj).attr('data-index') == number) {
+                $(obj).addClass('active');
+            } else {
+                $(obj).removeClass('active');
+            }
+        });
+
+        var task = this.taskList[index];
+        this.markControl.setTask(task);
+    }
+}
+QualityProcess.prototype.updatePage = function() {
+    this.container.paginator.find('#history-start').html(this.pageSize * (this.pageNumber - 1));
+    this.container.paginator.find('#history-end').html(this.pageSize * this.pageNumber);
+}
+
+QualityProcess.prototype.header_dom = '<div class="header">\
+<p class="fl">给分记录</p></div>';
+
+QualityProcess.prototype.history_list_dom = '<div class="sublist"><table class="table table-hover">\
+<thead><tr><th>试卷ID</th><th>姓名</th><th>分值</th></tr></thead>\
+<tbody id="history-list"></tbody></table></div>';
+
+QualityProcess.prototype.history_row_dom = '<tr><td class="history-id"></td>\
+	<td class="history-name"></td><td class="history-score"></tr>';
+
+QualityProcess.prototype.paginator_dom = '<div class="c-page">\
+<a class="back" id="last-page-button" href="#"></a>\
+<a class="next" id="next-page-button" href="#"></a>\
+<span>前<i class="yellow" id="history-start"></i>-前<i class="yellow" id="history-end"></i></span>\
+</div>';