瀏覽代碼

Merge remote-tracking branch 'origin/dev_v3.0.0' into dev_v3.0.0

wangliang 3 年之前
父節點
當前提交
bb8486c57b

+ 56 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/ExamStudentPdfInfoDto.java

@@ -0,0 +1,56 @@
+package com.qmth.distributed.print.business.bean.dto;
+
+import com.qmth.distributed.print.business.entity.ExamStudent;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 生成pdf需要的考生信息
+ */
+public class ExamStudentPdfInfoDto extends ExamStudent {
+
+    private String courseCode;
+    private String courseName;
+    private String paperNumber;
+    private String examPlace;
+    private String examRoom;
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getPaperNumber() {
+        return paperNumber;
+    }
+
+    public void setPaperNumber(String paperNumber) {
+        this.paperNumber = paperNumber;
+    }
+
+    public String getExamPlace() {
+        return examPlace;
+    }
+
+    public void setExamPlace(String examPlace) {
+        this.examPlace = examPlace;
+    }
+
+    public String getExamRoom() {
+        return examRoom;
+    }
+
+    public void setExamRoom(String examRoom) {
+        this.examRoom = examRoom;
+    }
+}

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamStudentMapper.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.distributed.print.business.bean.dto.ExamStudentCourseDto;
+import com.qmth.distributed.print.business.bean.dto.ExamStudentPdfInfoDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamStudentDto;
 import com.qmth.distributed.print.business.entity.ExamStudent;
 import com.qmth.teachcloud.common.entity.SysOrg;
@@ -44,4 +45,6 @@ public interface ExamStudentMapper extends BaseMapper<ExamStudent> {
     List<ExamStudent> listExamStudentBySchoolIdAndClazzId(@Param("schoolId") Long schoolId, @Param("classId") String classId);
 
     SysOrg getSysOrgByBelongOrgId(@Param("studentCode") String studentCode, @Param("schoolId") Long schoolId);
+
+    ExamStudentPdfInfoDto getByStudentId(Long id);
 }

+ 3 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamStudentService.java

@@ -2,6 +2,7 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.dto.ExamStudentCourseDto;
+import com.qmth.distributed.print.business.bean.dto.ExamStudentPdfInfoDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamStudentDto;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.entity.ExamStudent;
@@ -42,4 +43,6 @@ public interface ExamStudentService extends IService<ExamStudent> {
     List<ExamStudent> listExamStudentBySchoolIdAndClazzId(Long schoolId, String classId);
 
     SysOrg getSysOrgByBelongOrgId(String studentCode, Long schoolId);
+
+    ExamStudentPdfInfoDto getByStudentId(Long id);
 }

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

@@ -37,6 +37,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -233,10 +234,14 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
         if (SystemConstant.ALL_CARD != cardRuleId) {
             List<ExamCard> customCards = this.baseMapper.listCustom(schoolId, sysUser.getOrgId(), courseCode, CardTypeEnum.CUSTOM.name());
             if (!customCards.isEmpty()) {
-                list.addAll(customCards);
+                // 只查自己创建的专卡
+                customCards = customCards.stream().filter(m-> Objects.equals(m.getCreateId(), sysUser.getId())).collect(Collectors.toList());
+                if (!customCards.isEmpty()) {
+                    list.addAll(customCards);
+                }
             }
         }
-        Collections.sort(list, Comparator.comparing(ExamCard::getType));
+        list.sort(Comparator.comparing(ExamCard::getType));
         return list;
     }
 

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamStudentServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.bean.dto.ExamStudentCourseDto;
+import com.qmth.distributed.print.business.bean.dto.ExamStudentPdfInfoDto;
 import com.qmth.distributed.print.business.bean.dto.SyncExamStudentDto;
 import com.qmth.distributed.print.business.entity.ExamDetailCourse;
 import com.qmth.distributed.print.business.entity.ExamStudent;
@@ -95,4 +96,9 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
     public SysOrg getSysOrgByBelongOrgId(String studentCode, Long schoolId) {
         return this.baseMapper.getSysOrgByBelongOrgId(studentCode, schoolId);
     }
+
+    @Override
+    public ExamStudentPdfInfoDto getByStudentId(Long id) {
+        return this.baseMapper.getByStudentId(id);
+    }
 }

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

@@ -785,8 +785,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         createName = SystemConstant.translateSpecificSign(createName);
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
-        IPage<ExamTaskDto> examTaskDtoIPage = this.baseMapper.listTaskReviewUnaudited(new Page<>(pageNumber, pageSize), schoolId, semesterId, examId, courseCode, paperNumber, userId, cardRuleId, startTime, endTime, orgIds, startCreateTime, endCreateTime, createName, sysUser.getId());
-        return examTaskDtoIPage;
+        return this.baseMapper.listTaskReviewUnaudited(new Page<>(pageNumber, pageSize), schoolId, semesterId, examId, courseCode, paperNumber, userId, cardRuleId, startTime, endTime, orgIds, startCreateTime, endCreateTime, createName, sysUser.getId());
     }
 
     @Override
@@ -796,8 +795,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Set<Long> orgIds = teachcloudCommonService.listSubOrgIds(null);
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        IPage<ExamTaskDto> examTaskDtoIPage = this.baseMapper.listTaskReviewAudited(new Page<>(pageNumber, pageSize), schoolId, semesterId, examId, reviewStatus, courseCode, paperNumber, userId, cardRuleId, startTime, endTime, orgIds, startCreateTime, endCreateTime, createName, sysUser.getId());
-        return examTaskDtoIPage;
+        return this.baseMapper.listTaskReviewAudited(new Page<>(pageNumber, pageSize), schoolId, semesterId, examId, reviewStatus, courseCode, paperNumber, userId, cardRuleId, startTime, endTime, orgIds, startCreateTime, endCreateTime, createName, sysUser.getId());
     }
 
     @Transactional
@@ -1154,7 +1152,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             String htmlContent;
             // 通用模板
             if (MakeMethodEnum.SELECT.equals(examCard.getMakeMethod())) {
-                htmlContent = createPdfUtil.replaceHtmlTemplate(examCardDetail);
+                htmlContent = createPdfUtil.resetHtmlTemplateBar(examCardDetail.getHtmlContent());
             } else {
                 BasicCardRule basicCardRule = basicCardRuleService.getById(examTask.getCardRuleId());
                 htmlContent = createPdfUtil.replaceHtmlCard(examCardDetail, basicCardRule);

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

@@ -217,12 +217,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 
     /**
      * 创建pdf核心逻辑
+     *
      * @param examDetailCourseList
-     * @param examPrintPlan 印刷计划
-     * @param examDetail 考场对象
-     * @param sysUser 当前用户
-     * @param paperTypeParam 试卷类型
-     * @param basicAttachmentList 附件集合
+     * @param examPrintPlan        印刷计划
+     * @param examDetail           考场对象
+     * @param sysUser              当前用户
+     * @param paperTypeParam       试卷类型
+     * @param basicAttachmentList  附件集合
      * @param attachmentIds
      * @param list
      */
@@ -308,7 +309,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     // 查询考试
                     BasicExam basicExam = basicExamService.getById(examTask.getExamId());
                     //
-                    List<String> paperTypes = Arrays.asList(paperType.split(",")).stream().sorted(Comparator.comparing(String::valueOf)).collect(Collectors.toList());
+                    List<String> paperTypes = Arrays.stream(paperType.split(",")).sorted(Comparator.comparing(String::valueOf)).collect(Collectors.toList());
                     int backupCount = examPrintPlan.getBackupCount() != null ? examPrintPlan.getBackupCount() : 0;
 
                     if (examStudentList != null && examStudentList.size() > 0) {
@@ -318,121 +319,87 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                             int mod = i1 % examTaskDetail.getDrawCount();
                             t.setPaperType(paperTypes.get(mod));
                         }
+                    }
 
-                        // 试卷
-                        if (printContent.contains("PAPER")) {
-                            List<PaperPdfDto> paperPdfDto = createPdfUtil.getPaperPdfFile(paperType, examTaskDetail);
+                    // 试卷数据组装
+                    if (printContent.contains("PAPER")) {
+                        List<PaperPdfDto> paperPdfDto = createPdfUtil.getPaperPdfFile(paperType, examTaskDetail);
 
-                            //获取试卷pdf
-                            PdfDto pdfDto = createPdfUtil.getPaperPdf(paperPdfDto, backupCount, backupPaperPdfList);
-                            if (Objects.nonNull(pdfDto)) {
-                                examDetailCourse.setPaperPagesA3(pdfDto.getPageCount());
-                            } else {
-                                examDetailCourse.setPaperPagesA3(examDetailCourse.getPaperPagesA3());
-                            }
-                            // 备用试卷
-                            list[0].addAll(backupPaperPdfList);
+                        //获取试卷pdf
+                        PdfDto pdfDto = createPdfUtil.getPaperPdf(paperPdfDto, backupCount, backupPaperPdfList);
+                        if (Objects.nonNull(pdfDto)) {
+                            examDetailCourse.setPaperPagesA3(pdfDto.getPageCount());
+                        } else {
+                            examDetailCourse.setPaperPagesA3(examDetailCourse.getPaperPagesA3());
+                        }
+                        // 备用试卷
+                        list[0].addAll(backupPaperPdfList);
 
+                        if (examStudentList != null && examStudentList.size() > 0) {
                             for (ExamStudent t : examStudentList) {
                                 if (Objects.nonNull(pdfDto)) {
                                     PdfDto stuPdfDto = createPdfUtil.getExamStudentPaperPdf(t.getPaperType(), paperPdfDto, studentPaperPdfList);
                                 }
                             }
-                            // 考生试卷
-                            list[2].addAll(studentPaperPdfList);
-                        }
-
-                        basicAttachmentList = Objects.isNull(basicAttachmentList) ? new ArrayList<>() : basicAttachmentList;
-                        if (printContent.contains("CARD")) {
-                            QueryWrapper<ExamCardDetail> examCardDetailQueryWrapper = new QueryWrapper<>();
-                            examCardDetailQueryWrapper.lambda().eq(ExamCardDetail::getCardId, examCard.getId());
-                            ExamCardDetail examCardDetail = examCardDetailService.getOne(examCardDetailQueryWrapper);
-
-                            createPdfUtil.getCardAttachmentId(examCardDetail, attachmentIds);
-
-                            //把模板页面上的 ${} 替换成实际内容
-                            String cardContent = createPdfUtil.replaceHtmlTemplate(examCardDetail);
-                            String studentContent = examCardDetail.getHtmlContent();
-
-                            for (int i = 1; i <= backupCount; i++) {
-                                BasicAttachment basicAttachment = createPdfUtil.cardHtml(String.format("%02d", i), cardContent, examDetail, examDetailCourse, jsonArray, sysUser.getId(), backupCardPdfList, basicCardRule);
-                                examDetailCourse.setCardPagesA3(basicAttachment.getPages());
-                                basicAttachmentList.add(basicAttachment);
-                            }
-                            // 备用题卡
-                            list[1].addAll(backupCardPdfList);
-
-                            for (ExamStudent t : examStudentList) {
-                                basicAttachmentList.add(createPdfUtil.examStudentHtml(studentContent, t, examDetail, examDetailCourse, sysUser.getId(), studentCardPdfList, basicCardRule));
-                            }
-                            // 题卡
-                            list[3].addAll(studentCardPdfList);
-                            jsonObject.put("card", jsonArray);
-                            examDetailCourse.setAttachmentId(jsonObject.toJSONString());
-                        }
-                        examStudentService.saveOrUpdateBatch(examStudentList);
-                    } else if (examDetail.getPrintCount() != null){
-                        // 试卷
-                        if (printContent.contains("PAPER")) {
-                            List<PaperPdfDto> paperPdfDto = createPdfUtil.getPaperPdfFile(paperType, examTaskDetail);
-
-                            //获取试卷pdf
-                            PdfDto pdfDto = createPdfUtil.getPaperPdf(paperPdfDto, backupCount, backupPaperPdfList);
-                            if (Objects.nonNull(pdfDto)) {
-                                examDetailCourse.setPaperPagesA3(pdfDto.getPageCount());
-                            } else {
-                                examDetailCourse.setPaperPagesA3(examDetailCourse.getPaperPagesA3());
-                            }
-                            // 备用试卷
-                            list[0].addAll(backupPaperPdfList);
-
+                        } else if (examDetail.getPrintCount() != null) {
                             AtomicInteger atomicInteger = new AtomicInteger(0);
                             int i = 0;
                             while (i < examDetail.getPrintCount()) {
-                                int i1 = atomicInteger.getAndIncrement();
-                                int mod = i1 % examTaskDetail.getDrawCount();
+                                int seq = atomicInteger.getAndIncrement();
+                                int mod = seq % examTaskDetail.getDrawCount();
                                 if (Objects.nonNull(pdfDto)) {
                                     PdfDto stuPdfDto = createPdfUtil.getExamStudentPaperPdf(paperTypes.get(mod), paperPdfDto, studentPaperPdfList);
                                 }
                                 i++;
                             }
-
-                            // 考生试卷
-                            list[2].addAll(studentPaperPdfList);
+                        } else {
+                            throw ExceptionResultEnum.ERROR.exception("数据错误:未找到考生或者印刷数量");
                         }
+                        // 考生试卷
+                        list[2].addAll(studentPaperPdfList);
+                    }
 
-                        basicAttachmentList = Objects.isNull(basicAttachmentList) ? new ArrayList<>() : basicAttachmentList;
-                        if (printContent.contains("CARD")) {
-                            QueryWrapper<ExamCardDetail> examCardDetailQueryWrapper = new QueryWrapper<>();
-                            examCardDetailQueryWrapper.lambda().eq(ExamCardDetail::getCardId, examCard.getId());
-                            ExamCardDetail examCardDetail = examCardDetailService.getOne(examCardDetailQueryWrapper);
+                    // 题卡数据组装
+                    basicAttachmentList = Objects.isNull(basicAttachmentList) ? new ArrayList<>() : basicAttachmentList;
+                    if (printContent.contains("CARD")) {
+                        QueryWrapper<ExamCardDetail> examCardDetailQueryWrapper = new QueryWrapper<>();
+                        examCardDetailQueryWrapper.lambda().eq(ExamCardDetail::getCardId, examCard.getId());
+                        ExamCardDetail examCardDetail = examCardDetailService.getOne(examCardDetailQueryWrapper);
 
-                            createPdfUtil.getCardAttachmentId(examCardDetail, attachmentIds);
+                        createPdfUtil.getCardAttachmentId(examCardDetail, attachmentIds);
 
-                            //把模板页面上的 ${} 替换成实际内容
-                            String cardContent = createPdfUtil.replaceHtmlTemplate(examCardDetail);
+                        //把模板页面上的 ${} 替换成实际内容
+                        String cardContent = createPdfUtil.resetHtmlTemplateBar(examCardDetail.getHtmlContent());
 
-                            for (int i = 1; i <= backupCount; i++) {
-                                BasicAttachment basicAttachment = createPdfUtil.cardHtml(String.format("%02d", i), cardContent, examDetail, examDetailCourse, jsonArray, sysUser.getId(), backupCardPdfList, basicCardRule);
-                                examDetailCourse.setCardPagesA3(basicAttachment.getPages());
-                                basicAttachmentList.add(basicAttachment);
-                            }
-                            // 备用题卡
-                            list[1].addAll(backupCardPdfList);
+                        for (int i = 1; i <= backupCount; i++) {
+                            BasicAttachment basicAttachment = createPdfUtil.cardHtml(String.format("%02d", i), cardContent, examDetail, examDetailCourse, jsonArray, sysUser.getId(), backupCardPdfList, basicCardRule);
+                            examDetailCourse.setCardPagesA3(basicAttachment.getPages());
+                            basicAttachmentList.add(basicAttachment);
+                        }
+                        // 备用题卡
+                        list[1].addAll(backupCardPdfList);
 
+                        if (examStudentList != null && examStudentList.size() > 0) {
+                            for (ExamStudent t : examStudentList) {
+                                // 用带条码的模板
+                                basicAttachmentList.add(createPdfUtil.examStudentHtml(examCardDetail.getHtmlContent(), t, examDetail, examDetailCourse, sysUser.getId(), studentCardPdfList, basicCardRule));
+                            }
+                        } else if (examDetail.getPrintCount() != null) {
                             int i = 0;
                             while (i < examDetail.getPrintCount()) {
-                                basicAttachmentList.add(createPdfUtil.cardHtml(String.format("%02d", i), cardContent, examDetail, examDetailCourse, jsonArray, sysUser.getId(), studentCardPdfList, basicCardRule));
+                                // 用不带条码的模板
+                                basicAttachmentList.add(createPdfUtil.examStudentHtml(cardContent, null, examDetail, examDetailCourse, sysUser.getId(), studentCardPdfList, basicCardRule));
                                 i++;
                             }
-
-                            // 题卡
-                            list[3].addAll(studentCardPdfList);
-                            jsonObject.put("card", jsonArray);
-                            examDetailCourse.setAttachmentId(jsonObject.toJSONString());
+                        } else {
+                            throw ExceptionResultEnum.ERROR.exception("数据错误:未找到考生或者印刷数量");
                         }
-                        examStudentService.saveOrUpdateBatch(examStudentList);
+                        // 题卡
+                        list[3].addAll(studentCardPdfList);
+                        jsonObject.put("card", jsonArray);
+                        examDetailCourse.setAttachmentId(jsonObject.toJSONString());
                     }
+                    examStudentService.saveOrUpdateBatch(examStudentList);
                 }
                 examDetailCourse.setAttachmentId(jsonObject.toJSONString());
                 examTaskDetailService.saveOrUpdateBatch(examTaskDetailList);
@@ -1160,7 +1127,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             ExamCardDetail examCardDetail = examCardDetailService.getByCardId(examCard.getId());
             String htmlContent;
             if (MakeMethodEnum.SELECT.equals(makeMethodEnum)) {
-                htmlContent = createPdfUtil.replaceHtmlTemplate(examCardDetail);
+                htmlContent = createPdfUtil.resetHtmlTemplateBar(examCardDetail.getHtmlContent());
             } else {
                 BasicCardRule basicCardRule = basicCardRuleService.getById(examTask.getCardRuleId());
                 htmlContent = createPdfUtil.replaceHtmlCard(examCardDetail, basicCardRule);

+ 49 - 44
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -12,6 +12,7 @@ import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
 import com.qmth.distributed.print.business.enums.PrintMethodEnum;
 import com.qmth.distributed.print.business.service.ExamDetailService;
+import com.qmth.distributed.print.business.service.ExamStudentService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
@@ -90,6 +91,9 @@ public class CreatePdfUtil {
     @Resource
     ExamDetailService examDetailService;
 
+    @Resource
+    ExamStudentService examStudentService;
+
     /**
      * 创建登记表
      *
@@ -363,13 +367,11 @@ public class CreatePdfUtil {
     }
 
     /**
-     * 替换html通用模版
+     * 替换html通用模版中的条码信息
      *
-     * @param examCardDetail 题卡详细内容
+     * @param content 题卡详细内容
      */
-    public String replaceHtmlTemplate(ExamCardDetail examCardDetail) {
-        String content = examCardDetail.getHtmlContent();
-        log.info("contentTemp:{}", content);
+    public String resetHtmlTemplateBar(String content) {
         content = content.replaceAll("<img src=\"data:image/png;base64,\\$\\{examNumber\\}\">", "");
         content = content.replaceAll("\\$\\{examNumberStr\\}", "");
         return content;
@@ -784,8 +786,7 @@ public class CreatePdfUtil {
      */
     public BasicAttachment examStudentHtml(String studentContent, ExamStudent examStudent, ExamDetail examDetail, ExamDetailCourse examDetailCourse, Long userId, List<PdfDto> examStudentPdfList, BasicCardRule basicCardRule) throws IOException {
         String studentHtml = studentContent;
-        if(examStudent.getId() != null) {
-            if (Objects.nonNull(examStudent.getExtendFields())) {
+            /*if (Objects.nonNull(examStudent.getExtendFields())) {
                 JSONArray jsonObjectExtend = (JSONArray) JSONArray.parse(examStudent.getExtendFields());//扩展字段
                 if (Objects.nonNull(jsonObjectExtend)) {
                     int i = 0;
@@ -795,46 +796,47 @@ public class CreatePdfUtil {
                         i++;
                     }
                 }
-            }
-            //生成学生考号条码并将图片转成base64
-            if (Objects.nonNull(examStudent.getTicketNumber())) {
-                studentHtml = studentHtml.replaceAll("\\$\\{examNumber\\}", GoogleBarCodeUtil.createBarCode(examStudent.getTicketNumber(), false));
-            }
-            studentHtml = studentHtml.replaceAll("\\$\\{examNumberStr\\}", examStudent.getTicketNumber());
-            //随机生成学生试卷条码并将图片转成base64
-            if (Objects.nonNull(examStudent.getPaperType())) {
-                studentHtml = studentHtml.replaceAll("\\$\\{paperType\\}", GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(examStudent.getPaperType()), false));
-            }
-            Map<String, Object> map = ConvertUtil.analyzeDateAndTime(examDetail.getExamStartTime(), examDetail.getExamEndTime());
-            String examDate = Objects.nonNull(map.get("date")) ? (String) map.get("date") : "";
-            String examTime = Objects.nonNull(map.get("time")) ? (String) map.get("time") : "";
-            studentHtml = studentHtml.replaceAll("\\$\\{examDate\\}", examDate);
-            studentHtml = studentHtml.replaceAll("\\$\\{examTime\\}", examTime);
+            }*/
+        // 生成学生考号条码并将图片转成base64
+        studentHtml = studentHtml.replaceAll("\\$\\{examNumber\\}", examStudent != null && examStudent.getTicketNumber() != null ? GoogleBarCodeUtil.createBarCode(examStudent.getTicketNumber(), false) : "");
+        studentHtml = studentHtml.replaceAll("\\$\\{examNumberStr\\}", examStudent != null && examStudent.getTicketNumber() != null ? examStudent.getTicketNumber() : "");
+        // 随机生成学生试卷条码并将图片转成base64
+        studentHtml = studentHtml.replaceAll("\\$\\{paperType\\}", examStudent != null && examStudent.getPaperType() != null ? GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(examStudent.getPaperType()), false) : "");
+        // 替换考生卷型
+        studentHtml = studentHtml.replaceAll("\\$\\{paperTypeName\\}", examStudent != null && examStudent.getPaperType() != null ? examStudent.getPaperType() : "");
+
+        // 根据题卡规则必选字段,替换相应值,没有则“”
+        List<StudentExtendDto> studentExtendDtos = createExtendObject(examStudent, basicCardRule);
+        for (StudentExtendDto extendDto : studentExtendDtos) {
+            studentHtml = studentHtml.replaceAll("\\$\\{" + extendDto.getFieldName() + "\\}", String.valueOf(extendDto.getValue()));
+        }
+
+        // 时间需要特殊处理
+        Map<String, Object> map = ConvertUtil.analyzeDateAndTime(examDetail.getExamStartTime(), examDetail.getExamEndTime());
+        String examDate = Objects.nonNull(map.get("date")) ? (String) map.get("date") : "";
+        String examTime = Objects.nonNull(map.get("time")) ? (String) map.get("time") : "";
+        studentHtml = studentHtml.replaceAll("\\$\\{examDate\\}", examDate);
+        studentHtml = studentHtml.replaceAll("\\$\\{examTime\\}", examTime);
+
+
+        // 以下值通过createExtendObject动态设置了,暂时屏蔽(2022-03-11 by xf)
+            /*
             studentHtml = studentHtml.replaceAll("\\$\\{ticketNumber\\}", examStudent.getTicketNumber());
             studentHtml = studentHtml.replaceAll("\\$\\{siteNumber\\}", examStudent.getSiteNumber());
-            if (StringUtils.isNotEmpty(examStudent.getPaperType())) {
-                studentHtml = studentHtml.replaceAll("\\$\\{paperTypeName\\}", examStudent.getPaperType());
-            }
             studentHtml = studentHtml.replaceAll("\\$\\{studentCode\\}", examStudent.getStudentCode());
             studentHtml = studentHtml.replaceAll("\\$\\{studentName\\}", examStudent.getStudentName());
             studentHtml = studentHtml.replaceAll("\\$\\{courseName\\}", examDetailCourse.getCourseName());
             studentHtml = studentHtml.replaceAll("\\$\\{courseCode\\}", examDetailCourse.getCourseCode());
             studentHtml = studentHtml.replaceAll("\\$\\{examPlace\\}", examDetail.getExamPlace());
             studentHtml = studentHtml.replaceAll("\\$\\{examRoom\\}", examDetail.getExamRoom());
-            studentHtml = studentHtml.replaceAll("\\$\\{paperNumber\\}", examDetailCourse.getPaperNumber());
+            studentHtml = studentHtml.replaceAll("\\$\\{paperNumber\\}", examDetailCourse.getPaperNumber());*/
 
-            List<StudentExtendDto> studentExtendDtos = createExtendObject(examStudent, basicCardRule);
-            for (StudentExtendDto extendDto : studentExtendDtos) {
-                studentHtml = studentHtml.replaceAll("\\$\\{" + extendDto.getFieldName() + "\\}", String.valueOf(extendDto.getValue()));
-            }
-
-            //学生题卡
-            BasicAttachment examStudentAttachment = printCommonService.saveAttachmentHtml(examDetail.getSchoolId() + "|" + examDetailCourse.getCourseCode() + "|" + examStudent.getTicketNumber(), studentHtml, userId, examStudentPdfList);
+        //学生题卡
+        BasicAttachment examStudentAttachment = printCommonService.saveAttachmentHtml(examDetail.getSchoolId() + "|" + examDetailCourse.getCourseCode() + (examStudent != null && examStudent.getTicketNumber() != null ? "|" + examStudent.getTicketNumber() : ""), studentHtml, userId, examStudentPdfList);
+        if(examStudent != null) {
             examStudent.setAttachmentId(examStudentAttachment.getId());
-            return examStudentAttachment;
-        } else {
-            return printCommonService.saveAttachmentHtml(examDetail.getSchoolId() + "|" + examDetailCourse.getCourseCode() + "|" + examStudent.getTicketNumber(), studentHtml, userId, examStudentPdfList);
         }
+        return examStudentAttachment;
     }
 
     /**
@@ -842,35 +844,38 @@ public class CreatePdfUtil {
      *
      * @param examStudent   考生对象
      * @param basicCardRule 题卡规则对象
-     * @return
      */
     private List<StudentExtendDto> createExtendObject(ExamStudent examStudent, BasicCardRule basicCardRule) {
+        ExamStudentPdfInfoDto examStudentPdfInfoDto = examStudent == null ? null : examStudentService.getByStudentId(examStudent.getId());
         List<JSONObject> requiredFieldsJson = JSONArray.parseArray(basicCardRule.getRequiredFields(), JSONObject.class);
-        Map<String, Object> studentExtendMap = JSONArray.parseArray(examStudent.getExtendFields(), JSONObject.class).stream().collect(Collectors.toMap(k -> String.valueOf(k.get("code")), v -> v.get("value")));
         List<StudentExtendDto> studentExtendDtos = new ArrayList<>();
         if (requiredFieldsJson.size() > 0) {
             for (JSONObject jsonObject : requiredFieldsJson) {
                 StudentExtendDto studentExtendDto = new StudentExtendDto();
                 String code = String.valueOf(jsonObject.get("code"));
                 studentExtendDto.setFieldName(code);
-                Object value = ReflectUtil.getFieldValue(examStudent, code);
+                Object value = examStudentPdfInfoDto == null ? null : ReflectUtil.getFieldValue(examStudentPdfInfoDto, code);
                 studentExtendDto.setValue(value == null ? "" : value);
                 studentExtendDtos.add(studentExtendDto);
             }
         }
         List<JSONObject> extendFieldsJson = JSONArray.parseArray(basicCardRule.getExtendFields(), JSONObject.class);
         if (extendFieldsJson.size() > 0) {
+            Map<String, Object> studentExtendMap = null;
+            if (examStudentPdfInfoDto != null && StringUtils.isNotBlank(examStudentPdfInfoDto.getExtendFields())) {
+                studentExtendMap = JSONArray.parseArray(examStudentPdfInfoDto.getExtendFields(), JSONObject.class).stream().collect(Collectors.toMap(k -> String.valueOf(k.get("code")), v -> v.get("value")));
+            }
             for (JSONObject jsonObject : extendFieldsJson) {
                 boolean enable = Boolean.parseBoolean(jsonObject.get("enable").toString());
-                if (!enable) {
-                    continue;
-                }
+//                if (!enable) {
+//                    continue;
+//                }
                 StudentExtendDto studentExtendDto = new StudentExtendDto();
                 String code = String.valueOf(jsonObject.get("code"));
                 studentExtendDto.setFieldName(code);
-                Object value = ReflectUtil.getFieldValue(examStudent, code);
+                Object value = examStudentPdfInfoDto == null ? null : ReflectUtil.getFieldValue(examStudentPdfInfoDto, code);
                 if (value == null) {
-                    value = studentExtendMap.get(code);
+                    value = studentExtendMap == null ? null : studentExtendMap.get(code);
                 }
                 studentExtendDto.setValue(value == null ? "" : value);
                 studentExtendDtos.add(studentExtendDto);

+ 27 - 0
distributed-print-business/src/main/resources/mapper/ExamStudentMapper.xml

@@ -177,5 +177,32 @@
             bs.student_code = #{studentCode}
             and bs.school_id = #{schoolId}
     </select>
+    <select id="getByStudentId"
+            resultType="com.qmth.distributed.print.business.bean.dto.ExamStudentPdfInfoDto">
+        SELECT
+            a.student_code studentCode,
+            a.student_name studentName,
+            a.ticket_number ticketNumber,
+            a.site_number siteNumber,
+            a.extend_fields extendFields,
+            a.paper_type paperType,
+            a.clazz_id clazzId,
+            a.clazz_name clazzName,
+            a.campus_name campusName,
+            a.attachment_id attachmentId,
+            b.course_code courseCode,
+            b.course_name courseName,
+            b.paper_number paperNumber,
+            c.exam_place examPlace,
+            c.exam_room examRoom
+        FROM
+            exam_student a
+                JOIN
+            exam_detail_course b ON a.exam_detail_course_id = b.id
+                JOIN
+            exam_detail c ON b.exam_detail_id = c.id
+        WHERE
+            a.id = #{id}
+    </select>
 
 </mapper>

+ 3 - 0
distributed-print-business/src/main/resources/mapper/ExamTaskMapper.xml

@@ -452,6 +452,9 @@
             <if test="schoolId != null and schoolId != ''">
                 and a.school_id = #{schoolId}
             </if>
+            <if test="semesterId != null and semesterId != ''">
+                and bs.id = #{semesterId}
+            </if>
             <if test="reviewStatus != null and reviewStatus != ''">
                 and a.review_status = #{reviewStatus}
             </if>