xiaofei 1 жил өмнө
parent
commit
104066b012
17 өөрчлөгдсөн 135 нэмэгдсэн , 55 устгасан
  1. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DownloadServiceImpl.java
  2. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  3. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  4. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java
  5. 1 4
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java
  6. 1 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/HtmlToJpgUtil.java
  7. 1 0
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  8. 3 0
      distributed-print/install/mysql/init/teachcloud_db.sql
  9. 34 34
      distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java
  10. 12 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  11. 4 6
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArchiveController.java
  12. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/HtmlToPdfUtil.java
  13. 11 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/scananswer/AnswerQueryDomain.java
  14. 3 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java
  15. 52 3
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java
  16. 4 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java
  17. 4 1
      teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DownloadServiceImpl.java

@@ -15,7 +15,7 @@ import com.qmth.distributed.print.business.service.BasicCardRuleService;
 import com.qmth.distributed.print.business.service.DownloadService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.distributed.print.business.util.CreatePdfUtil;
-import com.qmth.distributed.print.business.util.HtmlToPdfUtil;
+import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -19,7 +19,7 @@ import com.qmth.distributed.print.business.mapper.ExamCardMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.CreatePdfUtil;
 import com.qmth.distributed.print.business.util.HtmlToJpgUtil;
-import com.qmth.distributed.print.business.util.HtmlToPdfUtil;
+import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.vo.PaperInfoVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -28,7 +28,7 @@ import com.qmth.distributed.print.business.mapper.ExamTaskMapper;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncPaperReviewPdfExportService;
 import com.qmth.distributed.print.business.util.CreatePdfUtil;
-import com.qmth.distributed.print.business.util.HtmlToPdfUtil;
+import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.teachcloud.common.bean.dto.AssignTeacherDto;
 import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/PrintCommonServiceImpl.java

@@ -21,7 +21,7 @@ import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.StudentClazzEnum;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.CreatePrintPdfUtil;
-import com.qmth.distributed.print.business.util.HtmlToPdfUtil;
+import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.distributed.print.business.util.PdfUtil;
 import com.qmth.teachcloud.common.util.RedisCounterUtil;
 import com.qmth.teachcloud.common.bean.dto.MqDto;

+ 1 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -9,9 +9,6 @@ import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import com.itextpdf.text.DocumentException;
 import com.qmth.boot.api.exception.ApiException;
-import com.qmth.boot.tools.excel.ExcelReader;
-import com.qmth.boot.tools.excel.enums.ExcelType;
-import com.qmth.boot.tools.excel.model.DataMap;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.examRule.CodeNameEnableValue;
 import com.qmth.distributed.print.business.bean.examRule.FieldsDto;
@@ -25,7 +22,7 @@ import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.service.TaskLogicService;
 import com.qmth.distributed.print.business.util.CreatePdfUtil;
-import com.qmth.distributed.print.business.util.HtmlToPdfUtil;
+import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.teachcloud.common.annotation.ExcelDBFieldDesc;
 import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.bean.dto.excel.*;

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/HtmlToJpgUtil.java

@@ -9,6 +9,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PageSizeEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.util.ConvertUtil;
+import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.entity.ContentType;

+ 1 - 0
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -472,6 +472,7 @@
                 and b.course_code = #{courseCode}
             </if>
         </where>
+        order by 0 + cast(c.student_code as char)
     </select>
     <select id="listStudentByExamDetailCourseId" resultType="java.util.Map">
         SELECT

+ 3 - 0
distributed-print/install/mysql/init/teachcloud_db.sql

@@ -1399,6 +1399,7 @@ CREATE TABLE IF NOT EXISTS `mark_paper` (
         `answer_file_path` varchar(500) DEFAULT NULL COMMENT '标答文件类型',
         `auto_scroll` tinyint(1) DEFAULT NULL COMMENT '评卷是否跳转',
         `mark_mode` varchar(16) DEFAULT NULL COMMENT '评卷模式',
+        `force_mode` tinyint(1) NULL DEFAULT 1 COMMENT '强制评卷模式(不限为false)',
         `mark_start_time` bigint DEFAULT NULL COMMENT '评卷开始时间',
         `mark_end_time` bigint DEFAULT NULL COMMENT '评卷结束时间',
         `sheet_view` tinyint DEFAULT NULL COMMENT '是否原卷显示',
@@ -1526,6 +1527,8 @@ CREATE TABLE IF NOT EXISTS `mark_student` (
         `omr_absent_checked` bit(1) DEFAULT NULL COMMENT '识别缺考检查',
         `card_number` int DEFAULT NULL,
         `assign_confirmed` bit(1) DEFAULT NULL COMMENT '人工绑定确认',
+        `exam_start_time` BIGINT(20) NULL COMMENT '考试开始时间',
+        `exam_end_time` BIGINT(20) NULL COMMENT '考试结束时间',
         PRIMARY KEY (`id`) USING BTREE,
         UNIQUE KEY `index2` (`exam_id`,`secret_number`) USING BTREE,
         KEY `index3` (`exam_id`,`course_code`,`upload_time`) USING BTREE

+ 34 - 34
distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java

@@ -55,40 +55,40 @@ public class ClientController {
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
-    /**
-     * 登录
-     *
-     * @param login 登录参数
-     */
-    @ApiOperation(value = "登录")
-    @PostMapping("/user/login")
-    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
-    @Aac(auth = false)
-    public Result login(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody ClientLoginParam login, BindingResult bindingResult) throws NoSuchAlgorithmException {
-        if (bindingResult.hasErrors()) {
-            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
-        }
-        BasicSchool basicSchool = commonCacheService.schoolCache(login.getSchoolCode());
-        if (Objects.isNull(basicSchool)) {
-            throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
-        }
-        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
-        wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId()).eq(SysUser::getLoginName, login.getLoginName());
-        SysUser sysUser = sysUserService.getOne(wrapper);
-        // 用户不存在
-        if (Objects.isNull(sysUser)) {
-            throw ExceptionResultEnum.USER_NO_DATA.exception();
-        }
-        // 校验密码
-        if (!Objects.equals(sysUser.getPassword(), login.getPassword())) {
-            throw ExceptionResultEnum.USER_NO_DATA.exception();
-        }
-        // 是否有客户端权限
-        clientService.checkPrivilege(sysUser.getId());
-
-        LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
-        return ResultUtil.ok(new LoginClientResult(sysUser, loginResult));
-    }
+//    /**
+//     * 登录
+//     *
+//     * @param login 登录参数
+//     */
+//    @ApiOperation(value = "登录")
+//    @PostMapping("/user/login")
+//    @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = LoginResult.class)})
+//    @Aac(auth = false)
+//    public Result login(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody ClientLoginParam login, BindingResult bindingResult) throws NoSuchAlgorithmException {
+//        if (bindingResult.hasErrors()) {
+//            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+//        }
+//        BasicSchool basicSchool = commonCacheService.schoolCache(login.getSchoolCode());
+//        if (Objects.isNull(basicSchool)) {
+//            throw ExceptionResultEnum.SCHOOL_NO_DATA.exception();
+//        }
+//        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+//        wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId()).eq(SysUser::getLoginName, login.getLoginName());
+//        SysUser sysUser = sysUserService.getOne(wrapper);
+//        // 用户不存在
+//        if (Objects.isNull(sysUser)) {
+//            throw ExceptionResultEnum.USER_NO_DATA.exception();
+//        }
+//        // 校验密码
+//        if (!Objects.equals(sysUser.getPassword(), login.getPassword())) {
+//            throw ExceptionResultEnum.USER_NO_DATA.exception();
+//        }
+//        // 是否有客户端权限
+//        clientService.checkPrivilege(sysUser.getId());
+//
+//        LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
+//        return ResultUtil.ok(new LoginClientResult(sysUser, loginResult));
+//    }
 
     /**
      * 试卷打样-列表

+ 12 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print.api;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
@@ -37,6 +38,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
@@ -62,6 +64,9 @@ import java.util.stream.Stream;
 public class SysController {
     private final static Logger log = LoggerFactory.getLogger(SysController.class);
 
+    @Value("${com.qmth.logging.file-path}")
+    private String sysLogPath;
+
     @Resource
     SysUserService sysUserService;
 
@@ -862,4 +867,11 @@ public class SysController {
         // 导出
         FileUtil.outputFile(response, inputStream, importTemplateEnum.getFileName());
     }
+
+    @ApiOperation(value = "系统日志下载")
+    @RequestMapping(value = "/log/download", method = RequestMethod.POST)
+    @Aac(auth = false)
+    public void sysLogDownload(HttpServletResponse response) {
+        FileUtil.outputFile(response, new File(sysLogPath), "sys.log");
+    }
 }

+ 4 - 6
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArchiveController.java

@@ -3,16 +3,14 @@ package com.qmth.distributed.print.api.mark;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
+import com.alibaba.fastjson.JSONObject;
 import com.qmth.distributed.print.business.service.BasicExamService;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.BasicSemester;
 import com.qmth.teachcloud.common.service.BasicSemesterService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -69,8 +67,8 @@ public class MarkArchiveController {
 
     @ApiOperation(value = "成绩导出")
     @RequestMapping(value = "/score/report/download", method = RequestMethod.POST)
-    public void socreReportDownload(@Validated ArchiveStudentQuery query, HttpServletResponse response) {
-        markStudentService.scoreExport(query, response);
+    public void scoreReportDownload(@RequestBody JSONObject jsonObject, HttpServletResponse response) {
+        markStudentService.scoreReportDownload(jsonObject, response);
     }
 
     @ApiOperation(value = "成绩报告")

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/HtmlToPdfUtil.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/HtmlToPdfUtil.java

@@ -1,4 +1,4 @@
-package com.qmth.distributed.print.business.util;
+package com.qmth.teachcloud.common.util;
 
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;

+ 11 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/bean/scananswer/AnswerQueryDomain.java

@@ -15,6 +15,8 @@ public class AnswerQueryDomain extends PagerQuery {
 
     private List<ScanStatus> status;
 
+	private Long studentId;
+
     private String studentCode;
     
     private String studentName;
@@ -57,6 +59,15 @@ public class AnswerQueryDomain extends PagerQuery {
 	public void setStatus(List<ScanStatus> status) {
 		this.status = status;
 	}
+
+	public Long getStudentId() {
+		return studentId;
+	}
+
+	public void setStudentId(Long studentId) {
+		this.studentId = studentId;
+	}
+
 	public String getStudentCode() {
 		return studentCode;
 	}

+ 3 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkStudentService.java

@@ -5,6 +5,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.entity.BasicExam;
@@ -117,4 +118,6 @@ public interface MarkStudentService extends IService<MarkStudent> {
     void updateCheckInfo(Long studentId, Long userId);
 
     int countOmrAbsentStudent(Long examId, String paperNumber, String paperType, boolean isOmrAbsentConfirm);
+
+    void scoreReportDownload(JSONObject jsonObject, HttpServletResponse response);
 }

+ 52 - 3
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkStudentServiceImpl.java

@@ -1,6 +1,7 @@
 package com.qmth.teachcloud.mark.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -12,16 +13,18 @@ import com.qmth.boot.core.concurrent.service.ConcurrentService;
 import com.qmth.boot.core.exception.ParameterException;
 import com.qmth.teachcloud.common.bean.vo.FilePathVo;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.MarkQuestion;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.PageSizeEnum;
 import com.qmth.teachcloud.common.enums.ScanStatus;
 import com.qmth.teachcloud.common.enums.mark.MarkPaperStatus;
 import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
-import com.qmth.teachcloud.common.util.ExcelUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.*;
 import com.qmth.teachcloud.mark.bean.UpdateTimeVo;
 import com.qmth.teachcloud.mark.bean.archivescore.*;
 import com.qmth.teachcloud.mark.bean.omredit.OmrEditDomain;
@@ -54,10 +57,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.FileCopyUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.text.DecimalFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -887,10 +893,53 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         return this.count(queryWrapper);
     }
 
+    @Override
+    public void scoreReportDownload(JSONObject jsonObject, HttpServletResponse response) {
+        String rootPath = null;
+        File htmlFile;
+        File pdfFile;
+        try {
+            // 本地保存目录
+            File tempFile = SystemConstant.getFileTempDirVar(System.currentTimeMillis() + File.separator + SystemConstant.getNanoId(), SystemConstant.TEMP_PREFIX);
+            rootPath = tempFile.getParent();
+
+            // 删除临时目录中创建的临时文件
+            if (Objects.nonNull(tempFile)) {
+                tempFile.delete();
+            }
+            // html文件
+            String cardHtmlPath = rootPath + File.separator + System.currentTimeMillis() + File.separator + "temp" + SystemConstant.HTML_PREFIX;
+            htmlFile = new File(cardHtmlPath);
+            if (!htmlFile.exists()) {
+                htmlFile.getParentFile().mkdirs();
+                htmlFile.createNewFile();
+            }
+            // 生成html文件
+            FileCopyUtils.copy(jsonObject.getString("htmlContent").getBytes(StandardCharsets.UTF_8), htmlFile);
+
+            // pdf文件
+            String cardPdfPath = rootPath + File.separator + System.currentTimeMillis() + File.separator + "temp" + SystemConstant.PDF_PREFIX;
+            pdfFile = new File(cardPdfPath);
+            if (!pdfFile.exists()) {
+                pdfFile.getParentFile().mkdirs();
+                pdfFile.createNewFile();
+            }
+            HtmlToPdfUtil.convert(cardHtmlPath, cardPdfPath, PageSizeEnum.A4);
+            FileUtil.outputFile(response, pdfFile, "报告" + SystemConstant.PDF_PREFIX);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (Objects.nonNull(rootPath)) {
+                ConvertUtil.delFolder(rootPath);
+            }
+        }
+    }
+
     private void fillObjective(ScoreReportVo ret, Long examId, String paperNumber) {
         List<MarkQuestion> qs = markQuestionService.listQuestionByExamIdAndPaperNumber(examId, paperNumber);
         List<MarkStudent> students = listByExamIdAndPaperNumberAndAbsent(examId, paperNumber, false);
         Map<String, QuestionVo> map = new HashMap<>();
+        List<QuestionVo> list = new ArrayList<>();
         for (MarkStudent s : students) {
             List<ScoreItem> sis = s.getScoreList(true, qs);
             if (CollectionUtils.isNotEmpty(sis)) {
@@ -923,7 +972,7 @@ public class MarkStudentServiceImpl extends ServiceImpl<MarkStudentMapper, MarkS
         if (map.isEmpty()) {
             return;
         }
-        List<QuestionVo> list = new ArrayList<>(map.values());
+
         Collections.sort(list, (o1, o2) -> {
             if (o1.getMainNumber() > o2.getMainNumber()) {
                 return 1;

+ 4 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java

@@ -114,11 +114,13 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
             List<MarkUserGroup> markUserGroups = new ArrayList<>();
             for (Long userId : userIds) {
                 MarkUserGroup markUserGroup = this.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, userId);
-                if (markUserGroup != null) {
+                if (markUserGroup == null) {
                     markUserGroups.add(new MarkUserGroup(examId, paperNumber, groupNumber, userId, markPaper.getMarkMode()));
                 }
             }
-            this.saveBatch(markUserGroups);
+            if (CollectionUtils.isNotEmpty(markUserGroups)) {
+                this.saveBatch(markUserGroups);
+            }
         }
     }
 

+ 4 - 1
teachcloud-mark/src/main/resources/mapper/MarkStudentMapper.xml

@@ -172,6 +172,9 @@
 	</select>
 	<sql id="queryWhereAndOrder">
         where t.exam_id=#{query.examId}
+        <if test="query.studentId != null and query.studentId !=''">
+            and t.id=#{query.studentId}
+        </if>
         <if test="query.status != null and query.status.size>0">
             AND t.scan_status in
             <foreach collection="query.status" index="index" item="st"
@@ -234,7 +237,7 @@
     </select>
     <select id="querySummary" resultType="String">
         select
-        t.student_code
+        t.id
         from mark_student t
         left join mark_paper s on s.course_paper_id=t.course_paper_id and s.exam_id=t.exam_id
         <include refid="queryWhereAndOrder"/>