xiatian před 4 dny
rodič
revize
0651b88cdc

+ 60 - 18
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/bean/MarkLibraryVo.java

@@ -4,6 +4,7 @@ import java.util.Date;
 
 import cn.com.qmth.stmms.biz.exam.model.ExamSubject;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
+import cn.com.qmth.stmms.common.annotation.ExcelField;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -21,12 +22,14 @@ public class MarkLibraryVo {
     /**
      * 科目CODE
      */
+    @ExcelField(title = "科目代码", align = 2, sort = 10)
     @ApiModelProperty("科目CODE")
     private String subjectCode;
 
     /**
      * 大题序号
      */
+    @ExcelField(title = "分组序号", align = 2, sort = 20)
     @ApiModelProperty("分组号")
     private Integer groupNumber;
 
@@ -39,12 +42,14 @@ public class MarkLibraryVo {
     /**
      * 准考证号
      */
+    @ExcelField(title = "准考证号", align = 2, sort = 30)
     @ApiModelProperty("准考证号")
     private String examNumber;
 
     /**
      * 考生密号
      */
+    @ExcelField(title = "密号", align = 2, sort = 40)
     @ApiModelProperty("考生密号")
     private String secretNumber;
 
@@ -60,18 +65,27 @@ public class MarkLibraryVo {
     @ApiModelProperty("任务状态")
     private LibraryStatus status;
 
+    @ExcelField(title = "状态", align = 2, sort = 50)
+    private String statusText;
+
+    @ExcelField(title = "打回原因", align = 2, sort = 60)
+    @ApiModelProperty("打回原因")
+    private String rejectReason;
+
+    @ExcelField(title = "评卷员", align = 2, sort = 70)
+    @ApiModelProperty("评卷员登录名")
+    private String markerLoginName;
+
+    @ExcelField(title = "评卷总分", align = 2, sort = 80)
+    @ApiModelProperty("评卷总分显示值")
+    private String markerScoreText;
+
     /**
      * 评卷员
      */
     @ApiModelProperty("评卷员id")
     private Integer markerId;
 
-    /**
-     * 评卷时间
-     */
-    @ApiModelProperty("评卷时间")
-    private Date markerTime;
-
     /**
      * 评卷员给分总分
      */
@@ -81,9 +95,17 @@ public class MarkLibraryVo {
     /**
      * 评卷员给分明细
      */
+    @ExcelField(title = "给分明细", align = 2, sort = 90)
     @ApiModelProperty("评卷员给分明细")
     private String markerScoreList;
 
+    /**
+     * 评卷时间
+     */
+    @ExcelField(title = "评卷时间", align = 2, sort = 100)
+    @ApiModelProperty("评卷时间")
+    private Date markerTime;
+
     /**
      * 评卷时长
      */
@@ -96,12 +118,6 @@ public class MarkLibraryVo {
     @ApiModelProperty("科组长id")
     private Integer headerId;
 
-    /**
-     * 科组长评卷时间
-     */
-    @ApiModelProperty("科组长评卷时间")
-    private Date headerTime;
-
     /**
      * 科组长给分总分
      */
@@ -120,18 +136,20 @@ public class MarkLibraryVo {
     @ApiModelProperty("未作答的步骤数量")
     private Integer unansweredCount;
 
-    @ApiModelProperty("打回原因")
-    private String rejectReason;
-
-    @ApiModelProperty("评卷员登录名")
-    private String markerLoginName;
-
     @ApiModelProperty("分组名")
     private String title;
 
+    @ExcelField(title = "复核人", align = 2, sort = 110)
     @ApiModelProperty("科组长登录名")
     private String headerLoginName;
 
+    /**
+     * 科组长评卷时间
+     */
+    @ExcelField(title = "复核时间", align = 2, sort = 120)
+    @ApiModelProperty("科组长评卷时间")
+    private Date headerTime;
+
     @ApiModelProperty("科目信息")
     private ExamSubject subject;
 
@@ -327,6 +345,22 @@ public class MarkLibraryVo {
         this.subject = subject;
     }
 
+    public String getStatusText() {
+        return statusText;
+    }
+
+    public void setStatusText(String statusText) {
+        this.statusText = statusText;
+    }
+
+    public String getMarkerScoreText() {
+        return markerScoreText;
+    }
+
+    public void setMarkerScoreText(String markerScoreText) {
+        this.markerScoreText = markerScoreText;
+    }
+
     public static MarkLibraryVo of(MarkLibrary from) {
         if (from == null) {
             return null;
@@ -356,6 +390,14 @@ public class MarkLibraryVo {
         ret.setTitle(from.getTitle());
         ret.setHeaderLoginName(from.getHeaderLoginName());
         ret.setSubject(from.getSubject());
+        ret.setStatusText(from.getStatus() == null ? null : from.getStatus().getName());
+        if (from.getMarkerScore() != null) {
+            if (from.getMarkerScore() == -1) {
+                ret.setMarkerScoreText("未选做");
+            } else {
+                ret.setMarkerScoreText(from.getMarkerScore() + "");
+            }
+        }
         return ret;
     }
 

+ 69 - 63
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exception/StatusException.java

@@ -1,64 +1,70 @@
-package cn.com.qmth.stmms.biz.exception;
-
-public class StatusException extends RuntimeException {
-
-    private static final long serialVersionUID = 5003047488500388819L;
-
-    private static final String DEF_CODE = "500";
-
-    /**
-     * 追踪ID
-     */
-    private String traceId;
-
-    /**
-     * 状态码
-     */
-    private String code;
-
-    /**
-     * 状态描述
-     */
-    private String desc;
-
-    /**
-     * 构造函数
-     */
-    public StatusException(String code, String desc) {
-        super("[code: " + code + "; desc: " + desc + "]");
-        this.code = code;
-        this.desc = desc;
-    }
-
-    /**
-     * 构造函数
-     */
-    public StatusException(String code, String desc, Throwable cause) {
-        super("[code: " + code + "; desc: " + desc + "]", cause);
-        this.code = code;
-        this.desc = desc;
-    }
-
-    public StatusException(String desc) {
-        super("[code: " + DEF_CODE + "; desc: " + desc + "]");
-        this.code = DEF_CODE;
-        this.desc = desc;
-    }
-
-    public String getCode() {
-        return code;
-    }
-
-    public String getDesc() {
-        return desc;
-    }
-
-    public String getTraceId() {
-        return traceId;
-    }
-
-    public void setTraceId(String traceId) {
-        this.traceId = traceId;
-    }
-
+package cn.com.qmth.stmms.biz.exception;
+
+public class StatusException extends RuntimeException {
+
+    private static final long serialVersionUID = 5003047488500388819L;
+
+    private static final String DEF_CODE = "500";
+
+    /**
+     * 追踪ID
+     */
+    private String traceId;
+
+    /**
+     * 状态码
+     */
+    private String code;
+
+    /**
+     * 状态描述
+     */
+    private String desc;
+
+    /**
+     * 构造函数
+     */
+    public StatusException(String code, String desc) {
+        super("[code: " + code + "; desc: " + desc + "]");
+        this.code = code;
+        this.desc = desc;
+    }
+
+    /**
+     * 构造函数
+     */
+    public StatusException(String code, String desc, Throwable cause) {
+        super("[code: " + code + "; desc: " + desc + "]", cause);
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public StatusException(String desc) {
+        super("[code: " + DEF_CODE + "; desc: " + desc + "]");
+        this.code = DEF_CODE;
+        this.desc = desc;
+    }
+
+    public StatusException(String desc, Throwable cause) {
+        super("[code: " + DEF_CODE + "; desc: " + desc + "]", cause);
+        this.code = DEF_CODE;
+        this.desc = desc;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public String getTraceId() {
+        return traceId;
+    }
+
+    public void setTraceId(String traceId) {
+        this.traceId = traceId;
+    }
+
 }

+ 51 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/admin/LibraryController.java

@@ -1,9 +1,12 @@
 package cn.com.qmth.stmms.api.controller.admin;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -48,6 +51,7 @@ import cn.com.qmth.stmms.common.enums.LockType;
 import cn.com.qmth.stmms.common.enums.LogType;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.utils.ExportExcel;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -424,4 +428,51 @@ public class LibraryController extends BaseApiController {
             lockService.unwatch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
         }
     }
+
+    @ApiOperation(value = "导出")
+    @RequestMapping(value = "export", method = RequestMethod.POST)
+    public void exportFile(MarkLibrarySearchQuery query, HttpServletResponse response) {
+        List<MarkLibraryVo> ret = new ArrayList<>();
+
+        String fileName = "任务数据.xlsx";
+        LibraryStatus status = query.getStatus();
+        int examId = getSessionExamId();
+        ApiUser wu = getApiUser();
+        List<ExamSubject> subjectList = getExamSubject(examId, wu);
+        if (!subjectList.isEmpty()) {
+            query.setPageNumber(1);
+            query.setPageSize(Integer.MAX_VALUE);
+            query.setExamId(examId);
+            if (status != null) {
+                query.addStatus(status);
+            }
+            if (status != LibraryStatus.REJECTED) {
+                query.setRejectReason(null);
+            }
+            if (StringUtils.isEmpty(query.getSubjectCode()) && !subjectList.isEmpty()) {
+                query.setSubjectCode(subjectList.get(0).getCode());
+            }
+            query = libraryService.findByQuery(query);
+
+            for (MarkLibrary library : query.getResult()) {
+                if (library.getMarkerId() != null) {
+                    User marker = userService.findByMarkerId(library.getMarkerId());
+                    library.setMarkerLoginName(marker.getLoginName() + "/" + marker.getName());
+                    if (library.getHeaderId() != null) {
+                        User header = userService.findById(library.getHeaderId());
+                        library.setHeaderLoginName(header.getLoginName() + "/" + header.getName());
+                    }
+                }
+                if (library.getMarkerScoreList() != null) {
+                    library.setMarkerScoreList(library.getMarkerScoreList().replace(UN_SELECTIVE_SCORE, "/"));
+                }
+                ret.add(MarkLibraryVo.of(library));
+            }
+        }
+        try {
+            new ExportExcel("任务数据", MarkLibraryVo.class).setDataList(ret).write(response, fileName).dispose();
+        } catch (IOException e) {
+            throw new StatusException("任务数据导出出错", e);
+        }
+    }
 }