ting.yin il y a 4 ans
Parent
commit
f382d9f52e
21 fichiers modifiés avec 381 ajouts et 538 suppressions
  1. 3 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/SubjectiveScoreService.java
  2. 5 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/SubjectiveScoreServiceImpl.java
  3. 11 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java
  4. 7 0
      stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/MarkService.java
  5. 101 32
      stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java
  6. 62 159
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspected.jsp
  7. 16 8
      stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp
  8. 80 240
      stmms-web/src/main/webapp/static/inspected/css/style.css
  9. 96 0
      stmms-web/src/main/webapp/static/inspected/fuhe.html
  10. BIN
      stmms-web/src/main/webapp/static/inspected/img/00001_F.jpg
  11. BIN
      stmms-web/src/main/webapp/static/inspected/img/00002_F.jpg
  12. BIN
      stmms-web/src/main/webapp/static/inspected/img/error.png
  13. BIN
      stmms-web/src/main/webapp/static/inspected/img/glyphicons-halflings-white.png
  14. BIN
      stmms-web/src/main/webapp/static/inspected/img/glyphicons-halflings.png
  15. BIN
      stmms-web/src/main/webapp/static/inspected/img/loading.gif
  16. BIN
      stmms-web/src/main/webapp/static/inspected/img/user.png
  17. BIN
      stmms-web/src/main/webapp/static/inspected/img/zoom_fit.png
  18. BIN
      stmms-web/src/main/webapp/static/inspected/img/zoom_in.png
  19. BIN
      stmms-web/src/main/webapp/static/inspected/img/zoom_out.png
  20. BIN
      stmms-web/src/main/webapp/static/inspected/img/zoom_zero.png
  21. 0 99
      stmms-web/src/main/webapp/static/inspected/index.html

+ 3 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/SubjectiveScoreService.java

@@ -2,10 +2,13 @@ package cn.com.qmth.stmms.biz.exam.service;
 
 import java.util.List;
 
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
 import cn.com.qmth.stmms.biz.exam.query.SubjectiveScoreSearchQuery;
 
 public interface SubjectiveScoreService {
 
     List<Integer> findStudentIdByQuery(SubjectiveScoreSearchQuery query);
 
+    List<SubjectiveScore> findByStudentIdAndGroupNumber(Integer studentId, Integer number);
+
 }

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

@@ -83,4 +83,9 @@ public class SubjectiveScoreServiceImpl extends BaseQueryService<SubjectiveScore
             }
         };
     }
+
+    @Override
+    public List<SubjectiveScore> findByStudentIdAndGroupNumber(Integer studentId, Integer groupNumber) {
+        return scoreDao.findByStudentIdAndGroupNumber(studentId, groupNumber);
+    }
 }

+ 11 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -13,6 +13,7 @@ import cn.com.qmth.stmms.biz.utils.FormalTaskUtil;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.biz.utils.TrialTaskUtil;
 import cn.com.qmth.stmms.common.enums.*;
+
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1234,4 +1235,14 @@ public class MarkServiceImpl implements MarkService {
         scoreDao.save(list);
     }
 
+    @Override
+    @Transactional
+    public boolean backStudentByGroup(ExamStudent student, Integer groupNumber, Integer userId) {
+        List<MarkLibrary> list = libraryDao.findByStudentIdAndGroupNumber(student.getId(), groupNumber);
+        for (MarkLibrary library : list) {
+            this.backLibrary(library, userId);
+        }
+        return true;
+    }
+
 }

+ 7 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/MarkService.java

@@ -232,4 +232,11 @@ public interface MarkService {
      */
     boolean needUpdateQuality(Marker marker, long expireMinutes);
 
+    /**
+     * 管理员/组长打回某个学生分组的评卷任务
+     *
+     * @param library
+     * @return
+     */
+    boolean backStudentByGroup(ExamStudent student, Integer groupNumber, Integer userId);
 }

+ 101 - 32
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -29,20 +29,18 @@ import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
+import cn.com.qmth.stmms.biz.exam.model.SubjectiveScore;
 import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
 import cn.com.qmth.stmms.biz.exam.query.SubjectiveScoreSearchQuery;
 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.MarkGroupService;
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.exam.service.SubjectiveScoreService;
 import cn.com.qmth.stmms.biz.file.service.FileService;
 import cn.com.qmth.stmms.biz.lock.LockService;
-import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
+import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
 import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
-import cn.com.qmth.stmms.biz.user.service.UserService;
-import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.annotation.Logging;
 import cn.com.qmth.stmms.common.annotation.RoleRequire;
 import cn.com.qmth.stmms.common.domain.WebUser;
@@ -58,12 +56,6 @@ public class InspectedController extends BaseExamController {
 
     protected static Logger log = LoggerFactory.getLogger(InspectedController.class);
 
-    @Autowired
-    private MarkLibraryService libraryService;
-
-    @Autowired
-    private MarkerService markerService;
-
     @Autowired
     private ExamStudentService studentService;
 
@@ -79,9 +71,6 @@ public class InspectedController extends BaseExamController {
     @Autowired
     private MarkGroupService groupService;
 
-    @Autowired
-    private UserService userService;
-
     @Autowired
     private FileService fileService;
 
@@ -91,6 +80,9 @@ public class InspectedController extends BaseExamController {
     @Autowired
     private SubjectiveScoreService scoreService;
 
+    @Autowired
+    private MarkService markService;
+
     // 并发处理互斥锁
     private Map<Integer, Integer> currentTaskMap = new HashMap<Integer, Integer>();
 
@@ -127,7 +119,12 @@ public class InspectedController extends BaseExamController {
             group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId,
                     group.getSubjectCode(), false, group.getNumber()));
         }
+        SubjectiveStatus status = query.getSubjectiveStatus();
+        query.setSubjectiveStatus(SubjectiveStatus.MARKED);
+        long inspectCount = studentService.countByQuery(query);
+        query.setSubjectiveStatus(status);
         model.addAttribute("query", query);
+        model.addAttribute("inspectCount", inspectCount);
         model.addAttribute("groupList", groupList);
         model.addAttribute("groupNumber", groupNumber);
         model.addAttribute("groupStartScore", groupStartScore);
@@ -153,6 +150,8 @@ public class InspectedController extends BaseExamController {
         query.setUpload(true);
         query.setAbsent(false);
         query.setBreach(false);
+        query.setSubjectiveStatus(SubjectiveStatus.MARKED);
+        query.setPageSize(Integer.MAX_VALUE);
         List<ExamSubject> subjectList = getExamSubject(examId, wu);
         if (query.getSubjectCode() == null && !subjectList.isEmpty()) {
             query.setSubjectCode(subjectList.get(0).getCode());
@@ -174,6 +173,26 @@ public class InspectedController extends BaseExamController {
         for (ExamStudent student : query.getResult()) {
             ids.add(student.getId());
         }
+        view.addObject("inspectCount", query.getTotalCount());
+        view.addObject("fileServer", fileService.getFileServer());
+        view.addObject("ids", StringUtils.join(ids, ","));
+        view.addObject("message", ids.size() > 0 ? "" : "没有待复核的任务");
+        return view;
+    }
+
+    @Logging(menu = "开始复核", type = LogType.QUERY)
+    @RequestMapping("/startById")
+    public ModelAndView startById(HttpServletRequest request, RedirectAttributes redirectAttributes,
+            @RequestParam Integer studentId) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        releaseByUser(wu.getUser().getId());
+        ModelAndView view = new ModelAndView("modules/exam/inspected");
+        List<Integer> ids = new ArrayList<Integer>();
+        ExamStudent student = studentService.findById(studentId);
+        if (student != null && student.getSubjectiveStatus().equals(SubjectiveStatus.MARKED)) {
+            ids.add(studentId);
+        }
+        view.addObject("inspectCount", 1);
         view.addObject("fileServer", fileService.getFileServer());
         view.addObject("ids", StringUtils.join(ids, ","));
         return view;
@@ -187,30 +206,39 @@ public class InspectedController extends BaseExamController {
         JSONObject result = new JSONObject();
         if (setCurrent(student.getId(), wu.getUser().getId())) {
             result.accumulate("id", student.getId());
+            result.accumulate("secretNumber", student.getSecretNumber());
             result.accumulate("subjectCode", student.getSubjectCode());
             result.accumulate("subjectName", student.getSubjectName());
-            JSONArray array = new JSONArray();
-            List<ScoreItem> scores = student.getScoreList(false);
-            for (ScoreItem scoreItem : scores) {
-                JSONObject obj = new JSONObject();
-                obj.accumulate("questionNumber", scoreItem.getMainNumber() + "-" + scoreItem.getSubNumber());
-                obj.accumulate("score", scoreItem.getScore());
-                array.add(obj);
-            }
-            result.accumulate("questions", array);
+            result.accumulate("totalScore", student.getTotalScore());
 
+            List<MarkGroup> groups = groupService.findByExamAndSubject(student.getExamId(), student.getSubjectCode());
+            JSONArray groupArray = new JSONArray();
+            for (MarkGroup markGroup : groups) {
+                JSONObject group = new JSONObject();
+                group.accumulate("groupNumber", markGroup.getNumber());
+                List<SubjectiveScore> scores = scoreService.findByStudentIdAndGroupNumber(student.getId(),
+                        markGroup.getNumber());
+                JSONArray array = new JSONArray();
+                for (SubjectiveScore scoreItem : scores) {
+                    JSONObject obj = new JSONObject();
+                    obj.accumulate("questionNumber", scoreItem.getMainNumber() + "-" + scoreItem.getSubNumber());
+                    obj.accumulate("score", scoreItem.getScore());
+                    array.add(obj);
+                }
+                group.accumulate("questions", array);
+                groupArray.add(group);
+            }
+            result.accumulate("groups", groupArray);
             // MarkGroup group = groupService.findOne(student.getExamId(),
             // student.getSubjectCode(),
             // library.getGroupNumber());
-            // List<String> picUrls =
-            // fileService.getSliceUris(student.getExamId(),
-            // student.getSecretNumber(), 1,
-            // student.getSliceCount());
+            List<String> picUrls = fileService.getSliceUris(student.getExamId(), student.getSecretNumber(), 1,
+                    student.getSliceCount());
             // List<MarkTrack> markTracks =
             // markTrackService.findByLibraryId(library.getId());
             // List<MarkSpecialTag> markSpecialTagList =
             // markSpecialTagService.findByLibraryId(library.getId());
-            // result.accumulate("picUrls", picUrls);
+            result.accumulate("picUrls", picUrls);
             // result.accumulate("pictureConfig", group.getPictureConfigList());
             // result.accumulate("markTracks", markTracks);
             // result.accumulate("markSpecialTagList", markSpecialTagList);
@@ -237,10 +265,10 @@ public class InspectedController extends BaseExamController {
     @RequestMapping("/clear")
     @ResponseBody
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public Object clear(HttpServletRequest request, @RequestParam(required = false) Integer libraryId) {
+    public Object clear(HttpServletRequest request, @RequestParam(required = false) Integer studentId) {
         WebUser wu = RequestUtils.getWebUser(request);
-        if (libraryId != null) {
-            releaseTask(libraryId);
+        if (studentId != null) {
+            releaseTask(studentId);
         } else {
             releaseByUser(wu.getUser().getId());
         }
@@ -248,10 +276,10 @@ public class InspectedController extends BaseExamController {
     }
 
     @Logging(menu = "取消复核", type = LogType.UPDATE)
-    @RequestMapping(value = "/back", method = RequestMethod.POST)
+    @RequestMapping(value = "/cancel", method = RequestMethod.POST)
     @ResponseBody
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public JSONObject back(HttpServletRequest request, @RequestParam Integer id) {
+    public JSONObject cancel(HttpServletRequest request, @RequestParam Integer id) {
         JSONObject obj = new JSONObject();
         ExamStudent student = studentService.findById(id);
         WebUser wu = RequestUtils.getWebUser(request);
@@ -283,6 +311,47 @@ public class InspectedController extends BaseExamController {
         return obj;
     }
 
+    @Logging(menu = "复核打回", type = LogType.UPDATE)
+    @RequestMapping(value = "/back", method = RequestMethod.POST)
+    @ResponseBody
+    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    public JSONObject back(HttpServletRequest request, @RequestParam Integer studentId,
+            @RequestParam Integer groupNumber) {
+        JSONObject obj = new JSONObject();
+        ExamStudent student = studentService.findById(studentId);
+        WebUser wu = RequestUtils.getWebUser(request);
+        if (student != null && student.getSubjectiveStatus().equals(SubjectiveStatus.MARKED)) {
+            if (subjectCheck(student.getSubjectCode(), wu)) {
+                try {
+                    lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
+                    lockService.watch(LockType.GROUP, student.getExamId(), student.getSubjectCode(), groupNumber);
+                    if (lockService.trylock(LockType.STUDENT, student.getId())
+                            && markService.backStudentByGroup(student, groupNumber, wu.getId())) {
+                        obj.accumulate("success", true);
+                    } else {
+                        obj.accumulate("success", false);
+                        obj.accumulate("message", "无法打回");
+                    }
+                } catch (Exception e) {
+                    obj.accumulate("success", false);
+                    obj.accumulate("message", "打回失败");
+                    log.error("back inspected error", e);
+                } finally {
+                    lockService.unwatch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
+                    lockService.unwatch(LockType.GROUP, student.getExamId(), student.getSubjectCode(), groupNumber);
+                    lockService.unlock(LockType.STUDENT, student.getId());
+                }
+            } else {
+                obj.accumulate("success", false);
+                obj.accumulate("message", "没有操作该评卷任务的权限");
+            }
+        } else {
+            obj.accumulate("success", false);
+            obj.accumulate("message", "无法取消复核");
+        }
+        return obj;
+    }
+
     private boolean setCurrent(Integer taskId, Integer userId) {
         Integer value = currentTaskMap.get(taskId);
         if (value == null) {

+ 62 - 159
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspected.jsp

@@ -18,66 +18,51 @@
     
     <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}/utils/image-utils.js"></script>
 
 </head>
-<body id="index">
-<div class="wp">
-    <div id="top" class="top cl">
-        <div class="z">
-            <div>
-                <span class="b">编号:</span><span class="i" id="studentId"></span><span class="pipe">|</span>
-                <span class="b">科目:</span><span class="i" id="subject"></span><span class="pipe">|</span>
-                <span class="b">评卷员:</span><span class="i" id="markerName"></span><span class="pipe">|</span>
-                <span class="b">未复核:</span><span class="i" id="progress"></span><span class="pipe">|</span>
-            </div>
-        </div>
+<body>
+<div style="height: 100vh;">
+	<div class="c-top cl">
+    	<div class="z">
+    		<span><b>编号:</b><span id="studentId"></span></span>
+    		<span><b>科目:</b><span id="subject"></span></span>
+    		<span><b>待复核:</b><span id="progress">${inspectCount}</span></span>
+    	</div>
         <div class="y">
-            <div><span class="user">${web_user.name}</span></div>
+        	<span><a class="user" href="">${web_user.name}</a></span>
+        	<span><a class="close" href="javascript:window.close()">关闭</a></span>
         </div>
     </div>
-</div>
-<div class="middle">
-    <div class="middle-bg"></div>
-    <div class="box">
-        <div class="cont cl">
-            <div class="left">
-                <!-- 	          <div class="iviewer_zoom cl"> -->
-                <!-- 	            <div class="iviewer_zoom_in" id="zoom-in-button"></div> -->
-                <!--             	<div class="iviewer_zoom_out" id="zoom-out-button"></div> -->
-                <!--             	<div class="iviewer_zoom_zero" id="zoom-origin-button"></div> -->
-                <!--             	<div class="iviewer_zoom_fit" id="zoom-fit-button"></div> -->
-                <!-- 	          </div> -->
-                <div id="image-holder-track" class="image-content" style="position: relative; "></div>
-            </div>
-            <div class="right">
-                <div class="formbox">
-                    <div class="form-t">
-                        <h1><span>评分:</span><span class="i" id="markerScore"></span></h1>
-                    </div>
-                    <div class="form-m">
-                        <table class="c-table" cellpadding="0" cellspacing="0" width="100%">
-                            <thead>
-                            <tr>
-                                <th>小题</th>
+    <div class="c-cont cl">
+    	<div class="mn">
+    		<div id="image-holder-track" class="image-content" style="position: relative; "></div>
+    	</div>
+        <div class="sd">
+            <div class="c-button"><a href="#" id="save-button">复核</a></div>
+            <div class="c-theadlist">
+        		<h1>试卷总分:<span id="totalScore"></span></h1>
+        		<div id="question-content">
+            	<div class="mt">
+                	<table cellpadding="0" cellspacing="0" width="100%">
+                    	<!-- <thead>
+                        	<tr>
+                                <td>题号</td>
                                 <td>给分</td>
+                                <td class="td"><a href="" id="back-button">打回</a></td>
+                            </tr>
+                        </thead>
+                        <tbody>
+                        	<tr>
+                                <td>1</td>
+                                <td>2</td>
+                                <td class="td"></td>
                             </tr>
-                            </thead>
-                            <tbody id="question-content">
-                            <!-- 	                  <tr> -->
-                            <!-- 	                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th> -->
-                            <!-- 	                    <td>3.5</td> -->
-                            <!-- 	                  </tr> -->
-                            </tbody>
-                        </table>
-                    </div>
-                    <div class="form-b cl">
-                        <input type="button" id="save-button" value="确认"/>
-                        <input type="button" class="grey" id="back-button" value="打回"/>
-                    </div>
+                        </tbody> -->
+                    </table>
+                </div>
                 </div>
-            </div>
-            <div class="tipsbox">
-                <p><span class="icon error"></span><br>当前没有可复核的试卷</p>
             </div>
         </div>
     </div>
@@ -96,28 +81,8 @@
         }
 
         $('#save-button').click(save);
-        $('#back-button').click(back);
+        $('.back-button').click(back);
 
-        $('#zoom-in-button').click(function () {
-            if (iviewer != undefined) {
-                iviewer.iviewer('zoom_by', 1);
-            }
-        });
-        $('#zoom-out-button').click(function () {
-            if (iviewer != undefined) {
-                iviewer.iviewer('zoom_by', -1);
-            }
-        });
-        $('#zoom-origin-button').click(function () {
-            if (iviewer != undefined) {
-                iviewer.iviewer('set_zoom', 100);
-            }
-        });
-        $('#zoom-fit-button').click(function () {
-            if (iviewer != undefined) {
-                iviewer.iviewer('fit');
-            }
-        });
         if (ids.length == 0) {
             $(".cont cl").css("display", "none");
             return;
@@ -126,9 +91,8 @@
 
         window.onbeforeunload = function () {
             $.post('${ctx}/admin/exam/inspected/clear', {
-                libraryId: student.id
+                studentId: student.id
             }, function (result) {
-
             });
         }
 
@@ -150,7 +114,7 @@
         $('#answer-content').empty();
         $('#image-holder-track').hide();
         $.post('${ctx}/admin/exam/inspected/info', {
-            libraryId: ids[index - 1]
+            studentId: ids[index - 1]
         }, function (result) {
             if (result.success == true) {
                 student = result;
@@ -172,67 +136,29 @@
     }
 
     function render() {
-
-        $('#studentId').html(student.studentId);
-        $('#subject').html(student.subjectCode + '_' + student.subjectName);
-        $('#markerName').html(student.markerName);
-        $('#markerScore').html(student.markerScore);
+        $('#studentId').html(student.secretNumber);
+        $('#subject').html(student.subjectCode + '-' + student.subjectName);
+        $('#totalScore').html(student.totalScore);
         $("#question-content").empty();
-        for (var i = 0; i < student.questions.length; i++) {
-            var q = student.questions[i];
-            var dom = '<tr><th>' + q.questionNumber + '</th><td>' + q.score + '</td></tr>';
-            $("#question-content").append(dom);
+        
+        for (var i = 0; i < student.groups.length; i++) {
+            var group = student.groups[i];
+            $('<div class="mt" id="div_'+group.groupNumber+'"></div>').appendTo("#question-content");
+            
+            $('<table id="table_'+group.groupNumber+'" cellpadding="0" cellspacing="0" width="100%"></table>').appendTo("#div_"+group.groupNumber);
+            
+            $("<thead><tr><td>分组"+group.groupNumber+"</td><td>给分</td><td class='td'><a href='#' data-id='"+group.groupNumber+"' class='back-button'>打回</a></td></tr></thead>").appendTo("#table_"+group.groupNumber);
+            $('<tbody id="tbody_'+group.groupNumber+'"></tbody>').appendTo("#table_"+group.groupNumber);
+            for (var j = 0; j < group.questions.length; j++) {
+            	var question = group.questions[j];
+	           $("<tr><td>"+question.questionNumber+"</td><td>"+question.score+"</td><td class='td'></td></tr>").appendTo("#tbody_"+group.groupNumber);
+            }
         }
 
-        /*     if(iviewer==undefined){
-                  iviewer = $('#image-holder-track').iviewer({
-                      src: '
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ${fileServer}' + student.sheetUrls[0],
-              zoom_delta: 1.2,
-              zoom: 'fit',
-              zoom_min: 10,
-              mousewheel: false,
-              zoom_animation: false,
-              update_on_resize: true,
-              ui_disabled: true,
-              onFinishLoad: function(ev, url) {
-                  $('#image-holder-track').show();
-                  onProcessFinish(false);
-              },
-              onErrorLoad: function(ev, url) {
-                  onProcessFinish(true);
-              }
-          });
-    }else{
-        iviewer.iviewer('loadImage', '
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        
-        ${fileServer}' + student.sheetUrls[0]);
-    } */
         var pane = $('<canvas id="track-builder-canvas"></canvas>').appendTo($('#image-holder-track'));
         var canvas = document.getElementById('track-builder-canvas');
         var ctx = canvas.getContext('2d');
-        buildImages('${fileServer}', student.picUrls, student.pictureConfig, canvas, ctx, student.markTracks, student.markSpecialTagList);
+        buildImages('${fileServer}', student.picUrls, null, canvas, ctx, null, null);
         $('#image-holder-track').show();
         onProcessFinish(false);
     }
@@ -242,7 +168,7 @@
             return;
         }
         $.post('${ctx}/admin/exam/inspected/save', {
-            libraryId: student.id
+        	studentId: student.id
         }, function (result) {
             if (result == true) {
                 $('#progress').html(ids.length - current);
@@ -260,8 +186,9 @@
         if (!confirm('确定要打回该评卷任务吗?')) {
             return;
         }
-        $.post('${ctx}/admin/exam/library/back', {
-            id: student.id
+        $.post('${ctx}/admin/exam/inspected/back', {
+            id: student.id,
+            groupNumber: $(this).attr('data-id')
         }, function (result) {
             if (result.success == true) {
                 $('#progress').html(ids.length - current);
@@ -270,7 +197,6 @@
                 alert(result.message);
             }
         });
-
     }
 
     function buildImages(imageServer, picUrls, config, canvas, ctx, markTracks, markSpecialTagList) {
@@ -279,30 +205,7 @@
             flush: true,
             strict: false
         }).combine(picUrls, canvas, config, function () {
-            //阅卷轨迹
-            if (markTracks != undefined && markTracks.length > 0) {
-                ctx.font = "60px Arial";
-                ctx.fillStyle = 'red';
-                for (var j = 0; j < markTracks.length; j++) {
-                    if (markTracks[j].positionX > 0 && markTracks[j].positionY > 0) {
-                        ctx.fillText(
-                            markTracks[j].score,
-                            markTracks[j].positionX * canvas.width,
-                            markTracks[j].positionY * canvas.height);
-                    }
-                }
-            }
-            if (markSpecialTagList != undefined && markSpecialTagList.length > 0) {
-                ctx.font = "60px Arial";
-                ctx.fillStyle = 'red';
-                for (var i = 0; i < markSpecialTagList.length; i++) {
-                    if (markSpecialTagList[i].positionX > 0 && markSpecialTagList[i].positionY > 0) {
-                        ctx.fillText(markSpecialTagList[i].tagName,
-                            markSpecialTagList[i].positionX * canvas.width,
-                            markSpecialTagList[i].positionY * canvas.height);
-                    }
-                }
-            }
+            
         })
     }
 

+ 16 - 8
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/inspectedList.jsp

@@ -11,7 +11,7 @@
     }</style>
 </head>
 <body>
-<form id="searchForm" action="${ctx}/admin/exam/inspected" method="post" class="breadcrumb form-search">
+<form id="searchForm" action="${ctx}/admin/exam/inspected" method="post" class="breadcrumb form-search" >
     <input type="hidden" id="pageNumber" name="pageNumber" value="${query.pageNumber }"/>
     <input type="hidden" id="pageSize" name="pageSize" value="${query.pageSize }"/>
     <div>
@@ -44,9 +44,9 @@
         <input type="text" number="true" id="endScroe" name="endScroe" value="${query.endScroe}" class="input-mini"/>
         &nbsp;
         <label>大题得分:从</label>
-        <input type="text" number="true" name="groupScore" id="groupStartScore" value="${groupStartScore }" class="input-mini"/>
+        <input type="text" number="true" name="groupStartScore" id="groupStartScore" value="${groupStartScore }" class="input-mini"/>
         <label> 到&nbsp;&nbsp;&nbsp;</label>
-        <input type="text" number="true" id="endScroe" name="groupEndScroe" value="${groupEndScroe }" class="input-mini"/>
+        <input type="text" number="true" id="groupEndScroe" name="groupEndScroe" value="${groupEndScroe }" class="input-mini"/>
         &nbsp;
         
         <label>小题得分</label>
@@ -54,7 +54,7 @@
         &nbsp;
         <input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
         &nbsp;
-        <input id="btnSubmit" class="btn" type="button" value="批量复核:${query.totalCount }" onclick="goSearch()"/>
+         <input id="btnStart" class="btn" type="button" value="批量复核:${inspectCount }" onclick="goStart()"/>
     </div>
 </form>
 <tags:message content="${message}"/>
@@ -87,10 +87,10 @@
                     <a href="${ctx}/admin/exam/track/student/${result.id}" target="_blank">轨迹图</a>
                 </c:if>
                 <c:if test="${result.subjectiveStatus=='MARKED'}">
-	                <a class="json-link" href="${ctx}/admin/inspected/start">进入复核</a>
+	                <a target="_blank" href="${ctx}/admin/exam/inspected/startById?studentId=${result.id}">进入复核</a>
                 </c:if>
                 <c:if test="${result.subjectiveStatus=='INSPECTED'}">
-                <a class="back-link" href="#" data-id="${result.id}">取消复核</a>
+                <a class="cancel-link" href="#" data-id="${result.id}">取消复核</a>
                 </c:if>
             </td>
         </tr>
@@ -107,11 +107,11 @@
             delayClose: 0,
             maxHeight: $(window).height()*0.88
         }); */
-        $('.back-link').click(function () {
+        $('.cancel-link').click(function () {
             if (!confirm('确定要取消复核吗?')) {
                 return;
             }
-            $.post('${ctx}/admin/exam/inspected/back', {id: $(this).attr('data-id')}, function (result) {
+            $.post('${ctx}/admin/exam/inspected/cancel', {id: $(this).attr('data-id')}, function (result) {
                 if (result.success == true) {
                     alert('取消成功');
                     $("#searchForm").submit();
@@ -150,6 +150,7 @@
 
     function page(n, s) {
         $("#pageNumber").val(n);
+        $("#searchForm").attr('target', "_self");
         $("#searchForm").attr('action', '${ctx}/admin/exam/inspected');
         $("#searchForm").submit();
         return false;
@@ -157,10 +158,17 @@
 
     function goSearch() {
         $("#pageNumber").val(1);
+        $("#searchForm").attr('target', "_self");
         $("#searchForm").attr('action', '${ctx}/admin/exam/inspected');
         $("#searchForm").submit();
         return false;
     }
+    function goStart() {
+    	$("#searchForm").attr('target', "_blank");
+        $("#searchForm").attr('action', '${ctx}/admin/exam/inspected/start');
+        $("#searchForm").submit();
+        return false;
+    }
 </script>
 </body>
 </html>

+ 80 - 240
stmms-web/src/main/webapp/static/inspected/css/style.css

@@ -1,7 +1,7 @@
-
+@charset "utf-8";
 /*======common======*/
 * {
-	font-family: "微软雅黑","苹方";
+	font-family: Microsoft Yahei, PingFang SC, Lantinghei SC, Hiragino Sans GB, Microsoft Sans Serif, WenQuanYi Micro Hei, sans-serif;
 	margin: 0;
 	padding: 0;
 	list-style: none;
@@ -12,8 +12,8 @@
 }
 html, body {
 	height: 100%;
-	background: #eee;
-	color: #3C454F;
+	background: #CBD0D3;
+	color: #67686C;
 }
 a {
 	text-decoration: none;
@@ -33,275 +33,128 @@ a {
 .cl {
 	zoom: 1;
 }
-.wp {
-	overflow: hidden;
-}
-/*======top======*/
-.top {
-	display: block;
-	width: 100%;
-	height: 60px;
-	overflow: hidden;
-	padding: 10px 20px;
-	background: #5D6D7D;
-	font-size: 14px;
-	color: #FFF;
-	font-weight: bold;
-}
-.top .z {
+.z {
 	float: left;
 }
-.top .y {
+.y {
 	float: right;
-	text-align: right;
 }
-.top>div {
+.mt {
+	margin-top: 5px;
+}
+/*======c-top======*/
+.c-top {
 	height: 40px;
+	line-height: 40px;
 	overflow: hidden;
-	display: inline-table;
-}
-.top>div div{
-	display: table-cell;
-	vertical-align: middle;
-}
-.top span {
-	font-size: 18px;
-	font-weight: 700;
+	background: #5D6D7D;
+	color: #F1E43D;
+	font-weight:700;
 }
-.top span.i {
-	color: #FFFF99;
+.c-top span {
+	padding-left: 20px;
 }
-.top span.pipe {
-	font-weight: lighter;
-	font-size: 12px;
-	padding: 0 14px;
-	color: #7D8A97;
+.c-top span b {
+	color: #FFF;
 }
-.top span.i em {
+.c-top .user {
 	font-size: 14px;
-	font-weight: 100;
-	font-style: normal;
 	color: #FFF;
-	padding-left: 5px;
-}
-.top span.user {
 	background: url(../img/user.png) no-repeat 0 50%;
 	padding-left: 20px;
 }
-/*======middle======*/
-.middle {
-	width: 100%;
-	height: -moz-calc(100vh - 60px);
-	height: -webkit-calc(100vh - 60px);
-	height: calc(100vh - 60px);
+.c-top .close {
+	padding-right: 20px;
+	font-size: 14px;
+	 color: #FFF;
 }
-.middle .middle-bg {
-	width: 100%;
-	height: 54px;
+/*======c-cont======*/
+.c-cont {
 	overflow: hidden;
-	background: #5D6D7D;
+	padding-right: 300px;
+	height: -webkit-calc(100vh - 40px);
+	height: -moz-calc(100vh - 40px);
+	height: calc(100vh - 40px);
 }
-.middle .box {
-	height: 100%;
-	margin-top: -54px;
-	padding: 0 20px;
-	overflow: hidden;
-}
-.middle .cont {
-	width: 100%;
-	height: 100%;
-	padding-right: 400px;
-}
-.middle .cont .right {
-	float: right;
-	width: 380px;
-	height: 100%;
-	background: #FFF;
-	margin-right: -400px;
-}
-.middle .cont .left {
-	position:relative;
+.c-cont .mn {
 	float: left;
 	width: 100%;
 	height: 100%;
 	overflow: hidden;
-	background: #FFF;
 }
-.image-content {
-	width: 100%;
-	height: 100%;
-	overflow-x: auto;
-	overflow-y: auto;
-}
-.tipsbox {
-	width: 100%;
+.c-cont .sd {
+	position: relative;
+	float: right;
+	width: 300px;
 	height: 100%;
-	background: #FFF;
-	text-align: center;
-}
-.tipsbox>p {
-	padding-top: 20%;
-	font-size: 24px;
-	font-weight: 700;
-	color: #5D6D7D;
-}
-.tipsbox>p .icon {
-	display: inline-block;
-	width: 56px;
-	height: 56px;
-	overflow: hidden;
-	margin-bottom: 20px;
-}
-.tipsbox>p .loading {
-	background: url(../img/loading.gif) no-repeat 50% 50%;
-}
-.tipsbox>p .error {
-	background: url(../img/error.png) no-repeat 50% 50%;
-}
-/*======iviewer_zoom======*/
-.iviewer_zoom {
-	position: absolute;
-	right: 40px;
-	bottom: 40px;
-	z-index: 9999;
-}
-.iviewer_zoom>div {
-	display: block;
-	width: 32px;
-	height: 32px;
 	overflow: hidden;
-	background-color: rgba(93,109,125,.85);
-	background-image: url(../img/zoom_in.png);
-	background-repeat: no-repeat;
-	background-position: 50% 50%;
-	-moz-border-radius: 10px;
-	-webkit-border-radius: 10px;
-	border-radius: 10px;
-	margin-top: 6px;
-	cursor: pointer;
-}
-.iviewer_zoom .iviewer_zoom_out {
-	background-image: url(../img/zoom_out.png);
-}
-.iviewer_zoom .iviewer_zoom_zero {
-	background-image: url(../img/zoom_zero.png);
+	margin-right: -300px;
 }
-.iviewer_zoom .iviewer_zoom_fit {
-	background-image: url(../img/zoom_fit.png);
-}
-.iviewer_zoom>div:hover {
-	background-color: rgba(93,109,125,.95);
+.image-content img {
+	width: 100%;
 }
-/*======formbox======*/
-.formbox {
-	position: relative;
-	height: 100%;
-	padding: 54px 0 60px 0;
+/*======c-theadlist======*/
+.c-theadlist {
+	padding: 5px;
 }
-.form-t {
-	z-index: 99999;
-	position: absolute;
-	left: 0;
-	top: 0;
-	width: 100%;
-	height: 54px;
+.c-theadlist h1 {
+	background: #ECECEC;
+	height: 60px;
+	line-height:60px;
 	overflow: hidden;
 	text-align: center;
-	border-bottom: 1px solid #E0E2E4;
-	box-shadow: 0 0 20px rgba(0,0,0,.1);
-}
-.form-t h1 {
-	display: inline-table;
-	margin: 0 auto;
 	font-size: 32px;
+	color: #E0552A;
 }
-.form-t span {
-	float: left;
-	line-height: 54px;
-	font-size: 24px;
-	font-weight: 700;
-}
-.form-t span.i {
-	font-size: 30px;
-	color: #f60;
-}
-.form-m {
-	height: 100%;
-	overflow-y: auto;
-}
-.c-table {
+.c-theadlist table {
+	background: #E1E2E4;
 	font-size: 14px;
-}
-.c-table th , .c-table td {
-	border-bottom: 1px solid #EEE;
-	padding-top: 6px;
-	padding-bottom: 6px;
-	padding-left: 10px;
-	padding-right: 10px;
-}
-.c-table th {
-	
 	font-weight: 400;
-	text-align: left;
-	padding-left: 15px;
-	padding-right: 15px;
+	color: #656C72;
 }
-.c-table td {
-	min-width: 60px;
-	width: 60px;
+.c-theadlist table td {
+	width: 110px;
 	text-align: center;
-	border-left: 1px solid #EEE;
+	padding: 7px 10px;
+	border-bottom: 1px solid #D2D3D5;
 }
-.c-table thead th, .c-table thead td {
-	background: #fafafa;
-	border-color: #E0E2E4;
-	padding-top: 10px;
-	padding-bottom: 10px;
-	font-size: 14px;
-	font-weight: 700;
+.c-theadlist table td.td {
+	width: 70px;
+	padding: 0;
 }
-.c-table tr:hover td,.c-table tr:hover th {
-	background-color: #FaFaFa;
+.c-theadlist table td a {
+	background: #5D6C7F;
+	color: #FFF;
+	font-size: 12px;
+	padding: 2px 15px;
+	border-radius: 6px;
+}
+.c-theadlist table td a:hover {
+	background: #697B8D;
+}
+.c-theadlist table thead {
+	background: #ECECEC;
 }
-.form-b {
-	z-index: 99999;
+
+.c-button {
 	position: absolute;
 	left: 0;
 	bottom: 0;
 	width: 100%;
-	height: 60px;
-	overflow: hidden;
-	padding: 10px;
-	border-top: 1px solid #E0E2E4;
-	box-shadow: 0 0 20px rgba(0,0,0,.05);
-	text-align: center;
 }
-.form-b input {
-	display: inline-block;
-	width: 45%;
-	height: 40px;
-	line-height: 40px;
+.c-button a {
+	display: block;
+	width: 100%;
+	height: 46px;
+	line-height: 46px;
 	overflow: hidden;
-	border: 0;
-	-moz-border-radius: 6px;
-	-webkit-border-radius: 6px;
-	border-radius: 6px;
-	background: #5D6D7D;
-	margin: 0 5px;
-	font-size: 15px;
-	font-weight: 400;
+	font-size: 16px;
 	color: #FFF;
-	cursor: pointer;
-}
-.form-b input:hover {
-	background: #778899;
-}
-.form-b input.grey {
-	background: #E0E2E4;
-	color: #8796A5;
+	text-align: center;
+	background: #5D6D7D;
 }
-.form-b input.grey:hover{
-	color: #5D6D7D;
+.c-button a:hover {
+	background: #697B8D;
 }
 
 
@@ -310,17 +163,4 @@ a {
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 

+ 96 - 0
stmms-web/src/main/webapp/static/inspected/fuhe.html

@@ -0,0 +1,96 @@
+<!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>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>云阅卷复核</title>
+<link href="css/style.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body>
+<div style="height: 100vh;">
+	<div class="c-top cl">
+    	<div class="z"><span><b>编号:</b>2045005</span><span><b>科目:</b>2903_管理学原理</span><span><b>待复核:</b>34</span></div>
+        <div class="y"><span><a class="user" href="">admin</a></span><span><a class="close" href="">关闭</a></span></div>
+    </div>
+    <div class="c-cont cl">
+    	<div class="mn"><div class="image-content"><img src="img/00001_F.jpg" /></div></div>
+        <div class="sd">
+            <div class="c-button"><a href="">复核</a></div>
+            <div class="c-theadlist">
+        		<h1>试卷总分:163</h1>
+            	<div class="mt">
+                	<table cellpadding="0" cellspacing="0" width="100%">
+                    	<thead>
+                        	<tr>
+                                <td>1-填空题</td>
+                                <td>给分</td>
+                                <td class="td"><a href="">打回</a></td>
+                            </tr>
+                        </thead>
+                        <tbody>
+                        	<tr>
+                                <td>1</td>
+                                <td>2</td>
+                                <td class="td"></td>
+                            </tr>
+                        	<tr>
+                                <td>1</td>
+                                <td>2</td>
+                                <td class="td"></td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            	<div>
+                	<table cellpadding="0" cellspacing="0" width="100%">
+                    	<thead>
+                        	<tr>
+                                <td>2-多选题</td>
+                                <td>给分</td>
+                                <td class="td"></td>
+                            </tr>
+                        </thead>
+                        <tbody>
+                        	<tr>
+                                <td>1</td>
+                                <td>2</td>
+                                <td class="td"></td>
+                            </tr>
+                        	<tr>
+                                <td>1</td>
+                                <td>2</td>
+                                <td class="td"></td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            	<div class="mt">
+                	<table cellpadding="0" cellspacing="0" width="100%">
+                    	<thead>
+                        	<tr>
+                                <td>1-填空题</td>
+                                <td>给分</td>
+                                <td class="td"><a href="">打回</a></td>
+                            </tr>
+                        </thead>
+                        <tbody>
+                        	<tr>
+                                <td>1</td>
+                                <td>2</td>
+                                <td class="td"></td>
+                            </tr>
+                        	<tr>
+                                <td>1</td>
+                                <td>2</td>
+                                <td class="td"></td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+        </div>
+    </div>
+
+</div>
+</body>
+</html>

BIN
stmms-web/src/main/webapp/static/inspected/img/00001_F.jpg


BIN
stmms-web/src/main/webapp/static/inspected/img/00002_F.jpg


BIN
stmms-web/src/main/webapp/static/inspected/img/error.png


BIN
stmms-web/src/main/webapp/static/inspected/img/glyphicons-halflings-white.png


BIN
stmms-web/src/main/webapp/static/inspected/img/glyphicons-halflings.png


BIN
stmms-web/src/main/webapp/static/inspected/img/loading.gif


BIN
stmms-web/src/main/webapp/static/inspected/img/user.png


BIN
stmms-web/src/main/webapp/static/inspected/img/zoom_fit.png


BIN
stmms-web/src/main/webapp/static/inspected/img/zoom_in.png


BIN
stmms-web/src/main/webapp/static/inspected/img/zoom_out.png


BIN
stmms-web/src/main/webapp/static/inspected/img/zoom_zero.png


+ 0 - 99
stmms-web/src/main/webapp/static/inspected/index.html

@@ -1,99 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<meta charset="utf-8">
-<title>云阅卷</title>
-<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>
-<link rel="stylesheet" href="css/css.css">
-<style></style>
-</head>
-<body id="index">
-<div class="wp" >
-  <div id="top" class="top cl">
-    <div class="z">
-      <div> 
-        <span class="b">编号:</span><span class="i">000000</span><span class="pipe">|</span> 
-        <span class="b">科目:</span><span class="i">英语</span><span class="pipe">|</span> 
-        <span class="b">评卷员:</span><span class="i">宋某某</span><span class="pipe">|</span> 
-        <span class="b">未复核:</span><span class="i">32</span>
-      </div>
-    </div>
-    <div class="y">
-      <div><span class="user">admin</span></div>
-    </div>
-  </div>
-  <div class="middle">
-    <div class="middle-bg"></div>
-    <div class="box">
-      <div class="cont cl" style="display:none;">
-        <div class="left">
-          <div class="iviewer_zoom cl">
-            <div class="iviewer_zoom_in"></div>
-            <div class="iviewer_zoom_out"></div>
-            <div class="iviewer_zoom_zero"></div>
-            <div class="iviewer_zoom_fit"></div>
-          </div>
-          <div id="image-holder" class="image-content" style="position: relative; " ><img src="img/00002_F.jpg"/></div>
-        </div>
-        <div class="right">
-          <div class="formbox">
-            <div class="form-t">
-              <h1><span>总分:</span><span class="i">89</span></h1>
-            </div>
-            <div class="form-m">
-              <table class="c-table" cellpadding="0" cellspacing="0" width="100%">
-                <thead>
-                  <tr>
-                    <th>小题</th>
-                    <td>给分</td>
-                  </tr>
-                </thead>
-                <tbody>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>3.5</td>
-                  </tr>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>0.5</td>
-                  </tr>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>0.5</td>
-                  </tr>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>0.5</td>
-                  </tr>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>0.5</td>
-                  </tr>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>0.5</td>
-                  </tr>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>0.5</td>
-                  </tr>
-                  <tr>
-                    <th>网络教育学院2015年下半年本科学士学位主干课程考试01</th>
-                    <td>0.5</td>
-                  </tr>
-                </tbody>
-              </table>
-            </div>
-            <div class="form-b cl"> <a href=""/>确认</a><!--<a class="grey" href=""/>取消</a>--> </div>
-          </div>
-        </div>
-      </div>
-      <div class="tipsbox">
-      	<!--<p><span class="icon loading"></span><br>程序正在加载,请稍候~</p>-->
-      	<p><span class="icon error"></span><br>当前没有可复核的试卷</p>
-      </div>
-    </div>
-  </div>
-</div>
-</body>
-</html>