浏览代码

系统启动bug修改,包括配置参数补充等

luoshi 6 年之前
父节点
当前提交
ace08e2d21

+ 267 - 267
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/Marker.java

@@ -1,267 +1,267 @@
-package cn.com.qmth.stmms.biz.exam.model;
-
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
-import org.apache.commons.lang.StringUtils;
-
-import cn.com.qmth.stmms.common.annotation.ExcelField;
-
-@Entity
-@Table(name = "eb_marker")
-public class Marker implements Serializable {
-
-    public static final String LOGINNAME_SPLITE = "-";
-
-    private static final long serialVersionUID = -5728058071677581938L;
-
-    @Id
-    @GeneratedValue
-    private Integer id;
-
-    @Column(name = "exam_id")
-    private Integer examId;
-
-    @Column(name = "subject_code")
-    @ExcelField(title = "科目代码", align = 2, sort = 10)
-    private String subjectCode;
-
-    @Column(name = "group_number")
-    private Integer groupNumber;
-
-    @Column(name = "login_name")
-    @ExcelField(title = "登录名", align = 2, sort = 30)
-    private String loginName;
-
-    @Column(name = "name")
-    private String name;
-
-    @Column(name = "password")
-    @ExcelField(title = "密码", align = 2, sort = 40)
-    private String password;
-
-    @Column(name = "enable")
-    private boolean enable;
-
-    @Column(name = "last_login_ip")
-    private String lastLoginIp;
-
-    @Column(name = "last_login_time")
-    private Date lastLoginTime;
-
-    @Column(name = "mode")
-    private String mode;
-    
-    @Column(name = "top_count")
-    private String topCount;
-
-    @Transient
-    @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 20)
-    private String subjectName;
-
-    @Transient
-    @ExcelField(title = "大题", align = 2, sort = 20)
-    private String groupName;
-
-    @Transient
-    private int number;
-
-    @Transient
-    private ExamSubject subject;
-
-    @Transient
-    private MarkGroup group;
-
-    @Transient
-    private long markedCount;
-
-    @Transient
-    private long currentCount;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getExamId() {
-        return examId;
-    }
-
-    public void setExamId(Integer examId) {
-        this.examId = examId;
-    }
-
-    public String getSubjectCode() {
-        return subjectCode;
-    }
-
-    public void setSubjectCode(String subjectCode) {
-        this.subjectCode = subjectCode;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getLastLoginIp() {
-        return lastLoginIp;
-    }
-
-    public void setLastLoginIp(String lastLoginIp) {
-        this.lastLoginIp = lastLoginIp;
-    }
-
-    public Date getLastLoginTime() {
-        return lastLoginTime;
-    }
-
-    public void setLastLoginTime(Date lastLoginTime) {
-        this.lastLoginTime = lastLoginTime;
-    }
-
-    public String getLoginName() {
-        return loginName;
-    }
-
-    public void setLoginName(String loginName) {
-        this.loginName = loginName;
-    }
-
-    public boolean isEnable() {
-        return enable;
-    }
-
-    public void setEnable(boolean enable) {
-        this.enable = enable;
-    }
-
-    public int getNumber() {
-        return number;
-    }
-
-    public void setNumber(int number) {
-        this.number = number;
-    }
-
-    public void buildLoginName(int number) {
-        StringBuilder name = new StringBuilder();
-        name.append(examId).append(LOGINNAME_SPLITE);
-        name.append(subjectCode).append(LOGINNAME_SPLITE);
-        name.append(number);
-        setLoginName(name.toString());
-    }
-
-    public static Marker parseLoginName(String loginName) {
-        Marker marker = null;
-        try {
-            String[] values = StringUtils.split(loginName, LOGINNAME_SPLITE);
-            marker = new Marker();
-            marker.setExamId(Integer.valueOf(values[0]));
-            if (values.length == 2) {
-                marker.setSubjectCode("");
-                marker.setNumber(Integer.valueOf(values[1]));
-            } else {
-                marker.setSubjectCode(values[1]);
-                marker.setNumber(Integer.valueOf(values[2]));
-            }
-        } catch (Exception e) {
-            marker = null;
-        }
-        return marker;
-    }
-
-    public ExamSubject getSubject() {
-        return subject;
-    }
-
-    public void setSubject(ExamSubject subject) {
-        this.subject = subject;
-    }
-
-    public long getMarkedCount() {
-        return markedCount;
-    }
-
-    public void setMarkedCount(long markedCount) {
-        this.markedCount = markedCount;
-    }
-
-    public long getCurrentCount() {
-        return currentCount;
-    }
-
-    public void setCurrentCount(long currentCount) {
-        this.currentCount = currentCount;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getMode() {
-        return mode;
-    }
-
-    public void setMode(String mode) {
-        this.mode = mode;
-    }
-
-    public Integer getGroupNumber() {
-        return groupNumber;
-    }
-
-    public void setGroupNumber(Integer groupNumber) {
-        this.groupNumber = groupNumber;
-    }
-
-    public String getGroupName() {
-        return groupName;
-    }
-
-    public void setGroupName(String groupName) {
-        this.groupName = groupName;
-    }
-
-    public MarkGroup getGroup() {
-        return group;
-    }
-
-    public void setGroup(MarkGroup group) {
-        this.group = group;
-    }
-
-	public String getTopCount() {
-		return topCount;
-	}
-
-	public void setTopCount(String topCount) {
-		this.topCount = topCount;
-	}
-
-}
+package cn.com.qmth.stmms.biz.exam.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.apache.commons.lang.StringUtils;
+
+import cn.com.qmth.stmms.common.annotation.ExcelField;
+
+@Entity
+@Table(name = "eb_marker")
+public class Marker implements Serializable {
+
+    public static final String LOGINNAME_SPLITE = "-";
+
+    private static final long serialVersionUID = -5728058071677581938L;
+
+    @Id
+    @GeneratedValue
+    private Integer id;
+
+    @Column(name = "exam_id")
+    private Integer examId;
+
+    @Column(name = "subject_code")
+    @ExcelField(title = "科目代码", align = 2, sort = 10)
+    private String subjectCode;
+
+    @Column(name = "group_number")
+    private Integer groupNumber;
+
+    @Column(name = "login_name")
+    @ExcelField(title = "登录名", align = 2, sort = 30)
+    private String loginName;
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "password")
+    @ExcelField(title = "密码", align = 2, sort = 40)
+    private String password;
+
+    @Column(name = "enable")
+    private boolean enable;
+
+    @Column(name = "last_login_ip")
+    private String lastLoginIp;
+
+    @Column(name = "last_login_time")
+    private Date lastLoginTime;
+
+    @Column(name = "mode")
+    private String mode;
+
+    @Column(name = "top_count")
+    private Integer topCount;
+
+    @Transient
+    @ExcelField(title = "科目(导入时可为空)", align = 2, sort = 20)
+    private String subjectName;
+
+    @Transient
+    @ExcelField(title = "大题", align = 2, sort = 20)
+    private String groupName;
+
+    @Transient
+    private int number;
+
+    @Transient
+    private ExamSubject subject;
+
+    @Transient
+    private MarkGroup group;
+
+    @Transient
+    private long markedCount;
+
+    @Transient
+    private long currentCount;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Integer examId) {
+        this.examId = examId;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getLastLoginIp() {
+        return lastLoginIp;
+    }
+
+    public void setLastLoginIp(String lastLoginIp) {
+        this.lastLoginIp = lastLoginIp;
+    }
+
+    public Date getLastLoginTime() {
+        return lastLoginTime;
+    }
+
+    public void setLastLoginTime(Date lastLoginTime) {
+        this.lastLoginTime = lastLoginTime;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public boolean isEnable() {
+        return enable;
+    }
+
+    public void setEnable(boolean enable) {
+        this.enable = enable;
+    }
+
+    public int getNumber() {
+        return number;
+    }
+
+    public void setNumber(int number) {
+        this.number = number;
+    }
+
+    public void buildLoginName(int number) {
+        StringBuilder name = new StringBuilder();
+        name.append(examId).append(LOGINNAME_SPLITE);
+        name.append(subjectCode).append(LOGINNAME_SPLITE);
+        name.append(number);
+        setLoginName(name.toString());
+    }
+
+    public static Marker parseLoginName(String loginName) {
+        Marker marker = null;
+        try {
+            String[] values = StringUtils.split(loginName, LOGINNAME_SPLITE);
+            marker = new Marker();
+            marker.setExamId(Integer.valueOf(values[0]));
+            if (values.length == 2) {
+                marker.setSubjectCode("");
+                marker.setNumber(Integer.valueOf(values[1]));
+            } else {
+                marker.setSubjectCode(values[1]);
+                marker.setNumber(Integer.valueOf(values[2]));
+            }
+        } catch (Exception e) {
+            marker = null;
+        }
+        return marker;
+    }
+
+    public ExamSubject getSubject() {
+        return subject;
+    }
+
+    public void setSubject(ExamSubject subject) {
+        this.subject = subject;
+    }
+
+    public long getMarkedCount() {
+        return markedCount;
+    }
+
+    public void setMarkedCount(long markedCount) {
+        this.markedCount = markedCount;
+    }
+
+    public long getCurrentCount() {
+        return currentCount;
+    }
+
+    public void setCurrentCount(long currentCount) {
+        this.currentCount = currentCount;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getMode() {
+        return mode;
+    }
+
+    public void setMode(String mode) {
+        this.mode = mode;
+    }
+
+    public Integer getGroupNumber() {
+        return groupNumber;
+    }
+
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public String getGroupName() {
+        return groupName;
+    }
+
+    public void setGroupName(String groupName) {
+        this.groupName = groupName;
+    }
+
+    public MarkGroup getGroup() {
+        return group;
+    }
+
+    public void setGroup(MarkGroup group) {
+        this.group = group;
+    }
+
+    public Integer getTopCount() {
+        return topCount;
+    }
+
+    public void setTopCount(Integer topCount) {
+        this.topCount = topCount;
+    }
+
+}

+ 2 - 2
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -579,7 +579,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         query.setUploadTimeNotNull(true);
         query.setPageNumber(1);
         query.setPageSize(1);
-        query.setSort(new Sort(Direction.ASC, "uploadTime"));
+        query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
         query = findByQuery(query);
         return query.getCurrentCount() > 0 ? query.getResult().get(0) : null;
     }
@@ -589,7 +589,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         query.setPageNumber(1);
         query.setPageSize(1);
-        query.setSort(new Sort(Direction.ASC, "uploadTime"));
+        query.setSort(new Sort(Direction.ASC, "uploadTime", "id"));
         List<ExamStudent> list = minUploadTime != null
                 ? studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, minUploadTime, query)
                 : studentDao.findUnLibraryStudent(examId, subjectCode, groupNumber, query);

+ 4 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/query/ArbitrateHistorySearchQuery.java

@@ -27,6 +27,10 @@ public class ArbitrateHistorySearchQuery extends BaseQuery<ArbitrateHistory> {
         setSort(new Sort(Direction.DESC, "id"));
     }
 
+    public void orderByUpdateTimeDesc() {
+        setSort(new Sort(Direction.DESC, "updateTime"));
+    }
+
     public Integer getExamId() {
         return examId;
     }

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

@@ -385,6 +385,7 @@ public class MarkServiceImpl implements MarkService {
      * 定时生成评卷任务
      */
     @Scheduled(fixedDelay = 2 * 60 * 1000, initialDelay = 60 * 1000)
+    @Override
     public void buildLibrary() {
         log.debug("start auto-create library");
         try {
@@ -434,11 +435,12 @@ public class MarkServiceImpl implements MarkService {
                 while (student != null) {
                     // 重复检测大题状态
                     // TODO - 需要替换成读写锁
-                    MarkGroup current = group;
-                    if (current == null || (current.getBuildTime() == null && lastBuildTime != null)) {
-                        // 大题已被删除,或者已被重置,直接退出循环
-                        break;
-                    }
+                    // MarkGroup current = group;
+                    // if (current == null || (current.getBuildTime() == null &&
+                    // lastBuildTime != null)) {
+                    // // 大题已被删除,或者已被重置,直接退出循环
+                    // break;
+                    // }
                     // 补充学习中心集合
                     Campus campus = campusMap.get(student.getSchoolId() + "_" + student.getCampusName());
                     if (campus == null) {
@@ -613,6 +615,7 @@ public class MarkServiceImpl implements MarkService {
      * 自动释放超时未处理的评卷任务
      */
     @Scheduled(cron = "${mark.cleanSchedule}")
+    @Override
     public void cronCleanTask() {
         try {
             CurrentTaskUtil.clearTimeoutTask(timeoutMinute);

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

@@ -119,6 +119,13 @@ public class TaskServiceImpl implements TaskService {
             }
         }
         task.setArbitrationList(list);
+        // 回评状态下的打分信息
+        if (history.getTotalScore() != null) {
+            task.setTotalScore(history.getTotalScore());
+        }
+        if (history.getScoreList() != null) {
+            task.setScoreList(history.getScoreList());
+        }
         return task;
     }
 

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

@@ -152,4 +152,14 @@ public interface MarkService {
      */
     int applyCount(Marker marker);
 
+    /**
+     * 定时生成评卷任务
+     */
+    void buildLibrary();
+
+    /**
+     * 自动释放超时未处理的评卷任务
+     */
+    void cronCleanTask();
+
 }

+ 82 - 12
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ArbitrateController.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.admin.exam;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
@@ -40,7 +42,7 @@ import cn.com.qmth.stmms.common.enums.Role;
 import cn.com.qmth.stmms.common.utils.RequestUtils;
 import net.sf.json.JSONObject;
 
-@Controller("libraryController")
+@Controller("arbitrateController")
 @RequestMapping("/admin/exam/arbitrate")
 public class ArbitrateController extends BaseExamController {
 
@@ -90,10 +92,7 @@ public class ArbitrateController extends BaseExamController {
         }
         subjectFilter(query, wu);
         List<MarkGroup> groupList = groupService.findByExamAndSubjectWithDouble(examId, query.getSubjectCode());
-        if (groupList.isEmpty()) {
-            return "redirect:/admin/exam/mark";
-        }
-        if (query.getGroupNumber() == 0) {
+        if (query.getGroupNumber() == null && groupList.size() > 0) {
             query.setGroupNumber(groupList.get(0).getNumber());
         }
         query.orderByIdDesc();
@@ -112,7 +111,29 @@ public class ArbitrateController extends BaseExamController {
 
     @RequestMapping("/process")
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public String process(Model model, HttpServletRequest request, @RequestParam String subjectCode,
+    public String singleProcess(Model model, HttpServletRequest request, @RequestParam Integer historyId) {
+        int examId = getSessionExamId(request);
+        WebUser wu = RequestUtils.getWebUser(request);
+        ArbitrateHistory history = arbitrateService.findById(historyId);
+        if (history == null || !history.getExamId().equals(examId) || !subjectCheck(history.getSubjectCode(), wu)) {
+            return "redirect:/admin/exam/arbitrate";
+        }
+        MarkGroup group = groupService.findOne(examId, history.getSubjectCode(), history.getGroupNumber());
+        if (group == null) {
+            return "redirect:/admin/exam/arbitrate";
+        }
+        releaseByUser(wu.getUser().getId());
+        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);
+        return "modules/exam/arbitrateSingleProcess";
+    }
+
+    @RequestMapping("/batchProcess")
+    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    public String batchProcess(Model model, HttpServletRequest request, @RequestParam String subjectCode,
             @RequestParam Integer groupNumber) {
         int examId = getSessionExamId(request);
         WebUser wu = RequestUtils.getWebUser(request);
@@ -129,23 +150,23 @@ public class ArbitrateController extends BaseExamController {
         model.addAttribute("cardServer", cardServer);
         model.addAttribute("subject", subjectService.find(group.getExamId(), group.getSubjectCode()));
         model.addAttribute("group", group);
-        return "modules/exam/arbitrateProcess";
+        return "modules/exam/arbitrateBatchProcess";
     }
 
     @RequestMapping(value = "/back", method = RequestMethod.POST)
     @ResponseBody
     @Transactional
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public JSONObject back(HttpServletRequest request, @RequestParam Integer id) {
+    public JSONObject back(HttpServletRequest request, @RequestParam Integer historyId) {
         JSONObject obj = new JSONObject();
-        ArbitrateHistory history = arbitrateService.findById(id);
+        ArbitrateHistory history = arbitrateService.findById(historyId);
         if (history != null) {
             if (history.getStatus() != HistoryStatus.WAITING) {
                 obj.accumulate("success", false);
                 obj.accumulate("message", "该仲裁卷已被处理");
             } else {
                 if (subjectCheck(history.getSubjectCode(), RequestUtils.getWebUser(request))) {
-                    // TODO - 需要补充打回逻辑
+                    // TODO - 需要区分全体打回和单个任务打回,下个版本实现
                     obj.accumulate("success", true);
                 } else {
                     obj.accumulate("success", false);
@@ -159,6 +180,51 @@ public class ArbitrateController extends BaseExamController {
         return obj;
     }
 
+    @RequestMapping(value = "/history/{subjectCode}/{groupNumber}", method = RequestMethod.POST)
+    @ResponseBody
+    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    public List<Task> getHistory(HttpServletRequest request, @PathVariable String subjectCode,
+            @PathVariable Integer groupNumber, @RequestParam(required = false) Integer pageNumber,
+            @RequestParam(required = false) Integer pageSize) {
+        int examId = getSessionExamId(request);
+        WebUser wu = RequestUtils.getWebUser(request);
+        MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
+        List<Task> list = new LinkedList<Task>();
+        if (subjectCheck(subjectCode, wu) && group != null) {
+            ArbitrateHistorySearchQuery query = new ArbitrateHistorySearchQuery();
+            query.setExamId(examId);
+            query.setSubjectCode(subjectCode);
+            query.setGroupNumber(groupNumber);
+            query.setStatus(HistoryStatus.MARKED);
+            query.setUserId(wu.getUser().getId());
+            query.setPageNumber(pageNumber);
+            query.setPageSize(pageSize);
+            query.orderByUpdateTimeDesc();
+            query = arbitrateService.findByQuery(query);
+            for (ArbitrateHistory history : query.getResult()) {
+                list.add(taskService.build(history, group));
+            }
+        }
+        return list;
+    }
+
+    @RequestMapping("/singleTask")
+    @ResponseBody
+    @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
+    public Task getSingleTask(HttpServletRequest request, @RequestParam Integer historyId) {
+        int examId = getSessionExamId(request);
+        WebUser wu = RequestUtils.getWebUser(request);
+        ArbitrateHistory history = arbitrateService.findById(historyId);
+        if (history != null && history.getExamId().equals(examId) && subjectCheck(history.getSubjectCode(), wu)) {
+            MarkGroup group = groupService.findOne(history.getExamId(), history.getSubjectCode(),
+                    history.getGroupNumber());
+            return taskService.build(history, group);
+        }
+        Task task = new Task();
+        task.setExist(false);
+        return task;
+    }
+
     @RequestMapping(value = "/getTask", method = RequestMethod.POST)
     @ResponseBody
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
@@ -259,9 +325,13 @@ public class ArbitrateController extends BaseExamController {
     @RequestMapping("/clear")
     @ResponseBody
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public Object clear(HttpServletRequest request) {
+    public Object clear(HttpServletRequest request, @RequestParam(required = false) Integer libraryId) {
         WebUser wu = RequestUtils.getWebUser(request);
-        releaseByUser(wu.getUser().getId());
+        if (libraryId != null) {
+            releaseTask(libraryId);
+        } else {
+            releaseByUser(wu.getUser().getId());
+        }
         return true;
     }
 

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java

@@ -268,7 +268,7 @@ public class MarkerController extends BaseExamController {
         Marker marker = markerService.findById(id);
         JSONObject obj = new JSONObject();
         if (marker != null) {
-            marker.setTopCount(taskCount.toString());
+            marker.setTopCount(taskCount);
             marker = markerService.save(marker);
             obj.accumulate("success", true);
         } else {

+ 12 - 10
stmms-web/src/main/webapp/WEB-INF/application.properties

@@ -1,7 +1,7 @@
 #jdbc config
 driverClassName=com.mysql.jdbc.Driver
 #jdbc config
-url=jdbc:mysql://192.168.1.88:3306/stmms_fenti?useUnicode=true&characterEncoding=UTF-8
+url=jdbc:mysql://192.168.10.30:3306/stmms_ft_online?useUnicode=true&characterEncoding=UTF-8
 username=root
 password=root
 
@@ -11,21 +11,21 @@ cookie.domain=
 cookie.path=/
 
 #server config
-##slice.image.server=http://gx-slice.b0.upaiyun.com
-##sheet.image.server=http://gx-sheet.b0.upaiyun.com
-##package.image.server=http://gx-package.b0.upaiyun.com
-##card.server=http://gx-card.b0.upaiyun.com
+slice.image.server=http://ft-slice.markingcloud.com
+sheet.image.server=http://ft-sheet.markingcloud.com
+package.image.server=http://ft-package.markingcloud.com
+card.server=http://ft-card.markingcloud.com
 ##slice.image.server=http://${local.ip}:9000/gx-slice
 ##sheet.image.server=http://${local.ip}:9000/gx-sheet
 ##package.image.server=http://${local.ip}:9000/gx-package
 ##card.server=http://${local.ip}:9000/gx-card
-slice.image.server=/file/ft-slice
-sheet.image.server=/file/ft-sheet
-package.image.server=/file/ft-package
-card.server=/file/ft-card
+##slice.image.server=/file/ft-slice
+##sheet.image.server=/file/ft-sheet
+##package.image.server=/file/ft-package
+##card.server=/file/ft-card
 
 ##file root path
-file.root=/Users/luoshi/develop/data/stmms-gx/static
+file.root=
 
 ##upyun image config
 upyun.sheet.bucket=ft-sheet
@@ -38,3 +38,5 @@ upyun.slice.password=qmth12345678
 
 mark.cleanTimeoutMinute=20
 mark.cleanSchedule=0 0/10 6-23 * * ?
+
+marker.showBtnImportAndBtnUpdateImport=false

+ 12 - 9
stmms-web/src/main/webapp/WEB-INF/views/modules/exam/arbitrateProcess.jsp → stmms-web/src/main/webapp/WEB-INF/views/modules/exam/arbitrateBatchProcess.jsp

@@ -21,8 +21,6 @@
 
 <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/answer-view.js"></script>
-<script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/paper-view.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/mark-board.js"></script>
 <script type="text/javascript" src="${ctxStatic}/mark-new/js/modules/mark-history.js"></script>
@@ -43,14 +41,18 @@
 				staticServer : '${ctxStatic}',
 				imageServer : '${sliceServer}',
 				userName : '${web_user.name}',
-				logoutUrl: '${ctx}/mark/logout',
-				clearUrl: '${ctx}/admin/arbitrate/clear',
+				logoutTitle: '返回',
+				logoutUrl: '${ctx}/admin/exam/arbitrate?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
+				clearUrl: '${ctx}/admin/exam/arbitrate/clear',
 				modules : {
 					'single-image-view' : {},
 					'image-builder': {},
 					'header-mark-status': {
-						title : '${group.subjectCode}_${group.number}'
+						title : '${group.subjectCode}_${group.title}'
 					},
+					'mark-history':{
+                        pageSize:10
+                    },
 					'mark-board' : {
 						showScoreBoard : false,
 						autoSubmit : false,
@@ -75,10 +77,11 @@
 			});
 			mc.start({
 				mode : 'loop',
-				statusUrl : '${ctx}/admin/arbitrate/status?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
-				getUrl : '${ctx}/admin/arbitrate/getTask?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
-				submitUrl : '${ctx}/admin/arbitrate/saveTask',
-				clearUrl : '${ctx}/admin/arbitrate/clear'
+				statusUrl : '${ctx}/admin/exam/arbitrate/status?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
+				getUrl : '${ctx}/admin/exam/arbitrate/getTask?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
+				historyUrl : '${ctx}/subjectheader/arbitration/history/${group.subjectCode}/${group.number}',
+				submitUrl : '${ctx}/admin/exam/arbitrate/saveTask',
+				clearUrl : '${ctx}/admin/exam/arbitrate/clear'
 			});
 		});
 	</script>

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

@@ -42,7 +42,7 @@
 			&nbsp;
 			<input id="btnSubmit" class="btn btn-primary" type="button" value="查询" onclick="goSearch()"/>
 			&nbsp;
-            <a href="##" class="btn" target="_blank" id="process-link">批量处理</a>
+            <a href="##" class="btn" id="batch-process-link">批量处理</a>
 		</div>
 	</form>
 	<tags:message content="${message}"/>
@@ -86,8 +86,8 @@
                     </c:if>
                 </td>
 				<td>
-				    <c:if test="${result.status.value==0}">
-                    <a href="##" data-id="${result.id}" class="back-link">打回</a>
+				    <c:if test="${result.status.value==0 || result.status.value==1}">
+                    <a href="${ctx}/admin/exam/arbitrte/process?historyId=${reusult.id}" class="process-link">处理</a>
 					</c:if>
 				</td>
 			</tr>
@@ -109,7 +109,7 @@ $('.back-link').click(function(){
         }
 	});
 });
-$('#process-link').click(function(){
+$('#batch-process-link').click(function(){
     var subjectCode = $('#subject-select').val();
     var groupNumber = $('#group-select').val();
     if(subjectCode=='') {
@@ -120,7 +120,7 @@ $('#process-link').click(function(){
         alert('请选择大题')
         return false;
     }
-    $('#process-link').attr('href', '${ctx}/admin/exam/arbitrate/process?subjectCode='+subjectCode+'&groupNumber='+groupNumber);
+    $('#process-link').attr('href', '${ctx}/admin/exam/arbitrate/batchProcess?subjectCode='+subjectCode+'&groupNumber='+groupNumber);
     return true;
 });
 $('#subject-select').change(function(){

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

@@ -0,0 +1,85 @@
+<%@ 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/mark-board.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/arbitration-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: '${ctx}/admin/exam/arbitrate?subjectCode=${group.subjectCode}&groupNumber=${group.number}',
+				modules : {
+					'single-image-view' : {},
+					'image-builder': {},
+					'header-mark-status': {
+						title : '${group.subjectCode}_${group.title}'
+					},
+					'mark-board' : {
+						showScoreBoard : false,
+						autoSubmit : false,
+						needConfirm : false
+					},
+					'arbitration-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>'}
+						]
+					}
+				}
+			});
+			mc.on('task.submit.success', this, function(event, context){
+                window.location.href='${ctx}/admin/exam/arbitrate?subjectCode=${group.subjectCode}&groupNumber=${group.number}';
+            });
+            mc.on('task.submit.error', this, function(event, context){
+                window.location.href='${ctx}/admin/exam/arbitrate?subjectCode=${group.subjectCode}&groupNumber=${group.number}';
+            });
+            $.post('${ctx}/admin/exam/arbitration/singleTask?historyId=${history.id}', {}, function(task){
+                mc.setTask(task);
+            });
+		});
+	</script>
+</body>
+</html>

+ 6 - 17
stmms-web/src/main/webapp/static/mark-new/js/modules/header-mark-status.js

@@ -10,28 +10,20 @@ function HeaderMarkStatus(option) {
     this.title = option.title;
     this.init();
     this.markControl.on('task.get.before', this, function(event, context, statusInfo) {
-        //this.topStatus.find('#type-name').html('正在领取任务');
         this.secretArea.hide();
-        this.blockTitle.hide();
+        this.blockTitle.html('正在领取任务');
     });
     this.markControl.on('task.get.success', this, function(event, context, eventObject) {
         var task = context.task;
         //状态栏区域
-        this.blockTitle.show();
-        this.blockTitle.html(task.blockTitle);
-
-        var typeName = task.libraryType < this.typeName.length ? this.typeName[task.libraryType] : '';
-        //this.topStatus.find('#type-name').html(typeName);
+        this.blockTitle.html('');
 
         this.secretArea.show();
-        this.topStatus.find('#secret-number').html(task.secretNo);
+        this.topStatus.find('#secret-number').html(task.studentId);
     });
     this.markControl.on('task.get.none', this, function(event, context, status) {
         this.secretArea.hide();
-        this.blockTitle.hide();
-        this.topStatus.find('#block-title').html();
-        //this.topStatus.find('#type-name').html('');
-        this.topStatus.find('#secret-number').html('');
+        this.blockTitle.html('');
     });
     this.markControl.on('mark.status.change', this, function(event, context, status) {
         this.render(status);
@@ -69,16 +61,13 @@ HeaderMarkStatus.prototype.render = function(status) {
     }
 }
 
-HeaderMarkStatus.prototype.typeName = ['样卷', '试评', '正评'];
-
 HeaderMarkStatus.prototype.top_status_dom = '<p class="text">\
 <i id="status-title"></i>\
-<i id="type-name"></i>\
 <i id="block-title"></i>\
-<i id="secret-area">密号<em id="secret-number"></em></i>\
+<i id="secret-area"><em id="secret-number"></em></i>\
 </p>';
 
 HeaderMarkStatus.prototype.progress_dom = '<p class="text">\
-<i>试卷总数<em id="total-count"></em></i>\
+<i>待处理<em id="total-count"></em></i>\
 <i>已处理<em id="marked-count"></em></i>\
 </p>';