Browse Source

新增答卷pdf查询接口和查询已监考结束的考试批次接口

wangliang 3 years ago
parent
commit
71174ce855

+ 17 - 0
themis-admin/src/main/java/com/qmth/themis/admin/api/SysController.java

@@ -24,6 +24,7 @@ import com.qmth.themis.common.util.ResultUtil;
 import io.swagger.annotations.*;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -390,4 +391,20 @@ public class SysController {
     public Result getPlayUrls() {
         return ResultUtil.ok(dictionaryConfig.tencentYunDomain().getUrls());
     }
+
+    @ApiOperation(value = "查询已监考结束的考试批次接口")
+    @RequestMapping(value = "/exam/finish/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "角色信息", response = TEExamQueryDto.class)})
+    public Result examFinishQuery() {
+        QueryWrapper<TEExam> teExamQueryWrapper = new QueryWrapper<>();
+        teExamQueryWrapper.lambda().eq(TEExam::getMonitorStatus, InvigilateMonitorStatusEnum.FINISHED);
+        List<TEExam> teExamList = teExamService.list(teExamQueryWrapper);
+        List<TEExamQueryDto> teExamQueryDtoList = null;
+        if (!CollectionUtils.isEmpty(teExamList)) {
+            Gson gson = new Gson();
+            teExamQueryDtoList = gson.fromJson(gson.toJson(teExamList), new TypeToken<List<TEExamQueryDto>>() {
+            }.getType());
+        }
+        return ResultUtil.ok(teExamQueryDtoList);
+    }
 }

+ 13 - 0
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamStudentController.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.themis.business.annotation.ApiJsonObject;
 import com.qmth.themis.business.annotation.ApiJsonProperty;
+import com.qmth.themis.business.bean.admin.ExamRecordPdfQueryBean;
 import com.qmth.themis.business.cache.bean.ExamCacheBean;
 import com.qmth.themis.business.cache.bean.ExamCourseCacheBean;
 import com.qmth.themis.business.cache.bean.ExamRecordDetailBean;
@@ -29,11 +30,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.BindingResult;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.io.IOException;
@@ -114,6 +117,16 @@ public class TEExamStudentController {
         return ResultUtil.ok(tOeExamRecordService.examRecordPaperView(examRecordId));
     }
 
+    @ApiOperation(value = "答卷pdf查询接口")
+    @RequestMapping(value = "/exam_record/pdf/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "考试记录信息", response = Long.class)})
+    public Result examRecordPdfQuery(@ApiParam(value = "答卷pdf", required = true) @Valid @RequestBody ExamRecordPdfQueryBean examRecordPdfQueryBean, BindingResult bindingResult) throws IOException {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(tOeExamRecordService.examRecordDetailQuery(examRecordPdfQueryBean.getExamId(), examRecordPdfQueryBean.getCourseCodeList(), examRecordPdfQueryBean.getIdentityList()));
+    }
+
     @ApiOperation(value = "考生导出")
     @RequestMapping(value = "/export", method = RequestMethod.POST)
     public Result export(@ApiParam(value = "考试批次id", required = true) @RequestParam Long examId,

+ 7 - 12
themis-admin/src/main/java/com/qmth/themis/admin/aspect/ApiControllerAspect.java

@@ -13,10 +13,12 @@ import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.validation.BeanPropertyBindingResult;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.Objects;
 
 /**
@@ -59,18 +61,11 @@ public class ApiControllerAspect {
             log.info("============类=============:{}", className);
             log.info("============方法===========:{}", methodName);
             if (Objects.nonNull(args) && args.length > 0) {
-                boolean jsonOut = true;
-                for (Object o : args) {
-                    if (o instanceof CommonsMultipartFile || o instanceof MultipartFile) {
-                        jsonOut = false;
-                        break;
-                    }
-                }
-                if (jsonOut) {
-                    log.info("============参数key:{},参数value===========:{}", JacksonUtil.parseJson(paramsName), JacksonUtil.parseJson(args));
-                } else {
-                    for (int i = 0; i < args.length; i++) {
-                        log.info("============参数key:{},参数value===========:{}", paramsName[i], args[i]);
+                for (int i = 0; i < args.length; i++) {
+                    if (Objects.nonNull(args[i]) && (args[i] instanceof HttpServletRequest || args[i] instanceof HttpServletResponse || args[i] instanceof CommonsMultipartFile || args[i] instanceof MultipartFile || args[i] instanceof BeanPropertyBindingResult)) {
+                        continue;
+                    } else {
+                        log.info("============参数key:{},参数value===========:{}", JacksonUtil.parseJson(paramsName[i]), JacksonUtil.parseJson(args[i]));
                     }
                 }
             }

+ 2 - 2
themis-admin/src/main/resources/application.properties

@@ -13,7 +13,7 @@ spring.application.name=themis-admin
 #\u6570\u636E\u6E90\u914D\u7F6E
 db.host=localhost
 db.port=3306
-db.name=themis_v1.1
+db.name=themis-release-v1.1.1
 db.username=root
 db.password=123456789
 #redis\u6570\u636E\u6E90\u914D\u7F6E
@@ -209,4 +209,4 @@ monitor.config.prefix=oe_test
 
 #\u65E0\u9700\u9274\u6743\u7684url
 no.auth.urls=/webjars/**,/druid/**,/swagger-ui.html,/doc.html,/swagger-resources/**,/v2/api-docs,/webjars/springfox-swagger-ui/**,/api/admin/user/login/account,/api/admin/sys/org/queryByOrgCode,/file/**,/upload/**,/client/**,/base_photo/**,/frontend/**,/api/admin/client/save,/api/admin/client/upload,/api/admin/client/query,/api/admin/app/save,/api/admin/app/query,/api/notify/monitor/record/tencent,/api/notify/monitor/status/tencent
-common.system.urls=/api/admin/sys/getMenu,/api/admin/user/logout,/api/admin/sys/env,/api/admin/sys/file/upload,/api/admin/sys/file/download,/api/admin/sys/org/query,/api/admin/sys/role/query,/api/admin/sys/examActivity/query,/api/admin/sys/exam/query,/api/admin/sys/examRoom/query,/api/admin/sys/exam/privilegeQuery,/api/admin/student/photo/upload,/api/admin/sys/getPlayUrls
+common.system.urls=/api/admin/sys/getMenu,/api/admin/user/logout,/api/admin/sys/env,/api/admin/sys/file/upload,/api/admin/sys/file/download,/api/admin/sys/org/query,/api/admin/sys/role/query,/api/admin/sys/examActivity/query,/api/admin/sys/exam/query,/api/admin/sys/examRoom/query,/api/admin/sys/exam/privilegeQuery,/api/admin/student/photo/upload,/api/admin/sys/getPlayUrls,/api/admin/sys/exam/finish/query

+ 55 - 0
themis-business/src/main/java/com/qmth/themis/business/bean/admin/ExamRecordPdfQueryBean.java

@@ -0,0 +1,55 @@
+package com.qmth.themis.business.bean.admin;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 答卷pdf查询 bean
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2022/5/24
+ */
+public class ExamRecordPdfQueryBean implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(name = "考试批次id")
+    @NotNull(message = "请选择考试批次")
+    private Long examId;
+
+    @ApiModelProperty(name = "科目代码数组")
+    private List<String> courseCodeList;
+
+    @ApiModelProperty(name = "证件号数组")
+    private List<String> identityList;
+
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public List<String> getCourseCodeList() {
+        return courseCodeList;
+    }
+
+    public void setCourseCodeList(List<String> courseCodeList) {
+        this.courseCodeList = courseCodeList;
+    }
+
+    public List<String> getIdentityList() {
+        return identityList;
+    }
+
+    public void setIdentityList(List<String> identityList) {
+        this.identityList = identityList;
+    }
+}

+ 11 - 0
themis-business/src/main/java/com/qmth/themis/business/dao/TOeExamRecordMapper.java

@@ -487,4 +487,15 @@ public interface TOeExamRecordMapper extends BaseMapper<TOeExamRecord> {
                                                              @Param("finishType") String finishType,
                                                              @Param("name") String name,
                                                              @Param("identity") String identity);
+
+    /**
+     * 考试明细查询接口
+     *
+     * @param examId
+     * @param courseCodeList
+     * @param identityList
+     * @return
+     */
+    public List<Long> examRecordDetailListQuery(@Param("examId") Long examId, @Param("courseCodeList") List<String> courseCodeList, @Param("identityList") List<String> identityList);
+
 }

+ 10 - 0
themis-business/src/main/java/com/qmth/themis/business/service/TOeExamRecordService.java

@@ -525,6 +525,16 @@ public interface TOeExamRecordService extends IService<TOeExamRecord> {
                                                              String name,
                                                              String identity);
 
+    /**
+     * 考试明细查询接口
+     *
+     * @param examId
+     * @param courseCodeList
+     * @param identityList
+     * @return
+     */
+    public List<Long> examRecordDetailQuery(Long examId, List<String> courseCodeList, List<String> identityList);
+
     /**
      * 查看试卷
      *

+ 13 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -1415,6 +1415,19 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         return tOeExamRecordMapper.examRecordDetailQuery(iPage, examId, examActivityId, courseCode, roomCode, Objects.nonNull(finishType) ? finishType.name() : null, name, identity);
     }
 
+    /**
+     * 考试明细查询接口
+     *
+     * @param examId
+     * @param courseCodeList
+     * @param identityList
+     * @return
+     */
+    @Override
+    public List<Long> examRecordDetailQuery(Long examId, List<String> courseCodeList, List<String> identityList) {
+        return tOeExamRecordMapper.examRecordDetailListQuery(examId, courseCodeList, identityList);
+    }
+
     /**
      * 查看试卷
      *

+ 27 - 0
themis-business/src/main/resources/mapper/TOeExamRecordMapper.xml

@@ -1644,4 +1644,31 @@
         </where>
         order by tees.id
     </select>
+
+    <select id="examRecordDetailListQuery" resultType="java.lang.Long">
+        select
+        toer.id as examRecordId
+        from t_oe_exam_record toer
+        join t_e_exam tee on tee.id = toer.exam_id
+        join t_e_exam_activity teea on teea.exam_id = toer.exam_id and teea.id = toer.exam_activity_id
+        join t_e_exam_student tees on tees.exam_id = toer.exam_id and tees.exam_activity_id = toer.exam_activity_id and tees.id = toer.exam_student_id
+        <where>
+            <if test="examId != null and examId != ''">
+                and toer.exam_id = #{examId}
+            </if>
+            <if test="courseCodeList != null and courseCodeList != ''">
+                and tees.course_code in
+                <foreach collection="courseCodeList" item="courseCode" index="index" open="(" close=")" separator=",">
+                    #{courseCode}
+                </foreach>
+            </if>
+            <if test="identityList != null and identityList != ''">
+                and tees.identity in
+                <foreach collection="identityList" item="identity" index="index" open="(" close=")" separator=",">
+                    #{identity}
+                </foreach>
+            </if>
+        </where>
+        order by tees.id
+    </select>
 </mapper>

+ 8 - 13
themis-exam/src/main/java/com/qmth/themis/exam/aspect/ApiControllerAspect.java

@@ -12,9 +12,12 @@ import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.validation.BeanPropertyBindingResult;
+import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.Objects;
 
 /**
@@ -58,19 +61,11 @@ public class ApiControllerAspect {
             log.info("============class name=============:{}", className);
             log.info("============invoke method===========:{}", methodName);
             if (Objects.nonNull(args) && args.length > 0) {
-                boolean jsonOut = true;
-                for (Object o : args) {
-                    if (o instanceof CommonsMultipartFile) {
-                        jsonOut = false;
-                        break;
-                    }
-                }
-                if (jsonOut) {
-                    log.info("============parameter key:{},value:{}===========", JacksonUtil.parseJson(paramsName),
-                            JacksonUtil.parseJson(args));
-                } else {
-                    for (int i = 0; i < args.length; i++) {
-                        log.info("============parameter key:{},value:{}===========", paramsName[i], args[i]);
+                for (int i = 0; i < args.length; i++) {
+                    if (Objects.nonNull(args[i]) && (args[i] instanceof HttpServletRequest || args[i] instanceof HttpServletResponse || args[i] instanceof CommonsMultipartFile || args[i] instanceof MultipartFile || args[i] instanceof BeanPropertyBindingResult)) {
+                        continue;
+                    } else {
+                        log.info("============参数key:{},参数value===========:{}", JacksonUtil.parseJson(paramsName[i]), JacksonUtil.parseJson(args[i]));
                     }
                 }
             }