Эх сурвалжийг харах

3.2.0-准考证生成规则修改

xiaof 2 жил өмнө
parent
commit
6b9a869024

+ 11 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/PrintCommonService.java

@@ -258,10 +258,12 @@ public interface PrintCommonService {
      * @param extendFields                   扩展字段
      * @param examTaskStudentObjectParamList 学生参数集合
      * @param examDetailCourseId             考察表id
+     * @param examShortCode                  考试shortCode
+     * @param courseShortCode                课程shortCode
      * @param sysUser                        请求用户
      * @return 结果
      */
-    List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, SysUser sysUser);
+    List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, String examShortCode, String courseShortCode, SysUser sysUser);
 
     /**
      * 生成准考证号
@@ -271,6 +273,14 @@ public interface PrintCommonService {
      */
     public String createTempNumber(SerialNumberParams serialNumberParams);
 
+    /**
+     * 生成准考证号
+     *
+     * @param serialNumberParams
+     * @return
+     */
+    public String createTicketNumber(SerialNumberParams serialNumberParams);
+
     /**
      * 保存任务附件(导出)
      *

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

@@ -15,13 +15,16 @@ import com.qmth.teachcloud.common.entity.BasicExam;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -67,6 +70,9 @@ public class BasicExamServiceImpl extends ServiceImpl<BasicExamMapper, BasicExam
             basicExam.setSchoolId(schoolId);
             basicExam.setUpdateId(sysUser.getId());
             basicExam.setUpdateTime(System.currentTimeMillis());
+            // 生成简码
+            String shortCode = createShortCode(schoolId);
+            basicExam.setShortCode(shortCode);
             this.save(basicExam);
         }
         return basicExam;
@@ -125,7 +131,6 @@ public class BasicExamServiceImpl extends ServiceImpl<BasicExamMapper, BasicExam
 
     /**
      * 启用/禁用
-     *
      */
     @Override
     public boolean enable(Long id, Boolean enable) {
@@ -133,4 +138,26 @@ public class BasicExamServiceImpl extends ServiceImpl<BasicExamMapper, BasicExam
         updateWrapper.lambda().set(BasicExam::getEnable, enable).eq(BasicExam::getId, id);
         return this.update(updateWrapper);
     }
+
+    /**
+     * 生成考试简码
+     *
+     * @param schoolId 学校ID
+     */
+    private String createShortCode(Long schoolId) {
+        QueryWrapper<BasicExam> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BasicExam::getSchoolId, schoolId);
+        List<BasicExam> basicExams = this.baseMapper.selectList(queryWrapper);
+        if (basicExams.isEmpty()) {
+            return "001";
+        } else {
+            Optional<BasicExam> max = basicExams.stream().filter(m -> StringUtils.isNotBlank(m.getShortCode())).max(Comparator.comparing(BasicExam::getShortCode));
+            if (!max.isPresent()) {
+                return "001";
+            }
+            String maxShortCode = max.get().getShortCode();
+            int shortCode = StringUtils.isBlank(maxShortCode) ? 0 : Integer.parseInt(maxShortCode);
+            return String.format("%03d", shortCode + 1);
+        }
+    }
 }

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

@@ -1546,6 +1546,8 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 throw ExceptionResultEnum.ERROR.exception("未查到考试信息");
             }
 
+            BasicCourse basicCourse = basicCourseService.findByCourseCode(examTask.getCourseCode(),schoolId);
+
             if (ExamModelEnum.MODEL1.equals(basicExam.getExamModel()) || ExamModelEnum.MODEL2.equals(basicExam.getExamModel())) {
                 // 创建印刷计划
                 ExamDetailParams examDetailParams = JSONObject.parseObject(String.valueOf(jsonObject.get("examDetail")), ExamDetailParams.class);
@@ -1620,7 +1622,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
 
                         // 更新实际考生数量
                         List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList = examDetailList.getExamTaskStudentObjectParamList();
-                        List<ExamStudent> examStudents = printCommonService.createBatchStudentByStudentList(schoolId, paperNumber, examDetailList.getExtendFields(), examTaskStudentObjectParamList, examDetailCourse.getId(), sysUser);
+                        List<ExamStudent> examStudents = printCommonService.createBatchStudentByStudentList(schoolId, paperNumber, examDetailList.getExtendFields(), examTaskStudentObjectParamList, examDetailCourse.getId(), basicExam.getShortCode(), basicCourse.getShortCode(), sysUser);
                         if (!CollectionUtils.isEmpty(examStudents)) {
                             examStudentService.insertBatch(examStudents);
                         }

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

@@ -148,6 +148,9 @@ public class PrintCommonServiceImpl implements PrintCommonService {
     @Resource
     BasicClazzService basicClazzService;
 
+    @Resource
+    BasicExamRuleService basicExamRuleService;
+
     @Resource
     CreatePrintPdfUtil createPrintPdfUtil;
 
@@ -1184,10 +1187,12 @@ public class PrintCommonServiceImpl implements PrintCommonService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, SysUser sysUser) {
+    public List<ExamStudent> createBatchStudentByStudentList(Long schoolId, String paperNumber, String extendFields, List<ExamTaskStudentObjectParam> examTaskStudentObjectParamList, Long examDetailCourseId, String examShortCode, String courseShortCode, SysUser sysUser) {
         AtomicInteger atomicInteger = new AtomicInteger(1);
-        SerialNumberParams ticketNumberParams = new SerialNumberParams("ticketNumber-" + schoolId, DateUtil.format(new Date(), "yyyyMM"), 6);
 
+        BasicExamRule basicExamRule = basicExamRuleService.getBySchoolId(schoolId);
+
+        Map<String, String> map = new HashMap<>();
         List<ExamStudent> examStudentList = new ArrayList<>();
         for (ExamTaskStudentObjectParam student : examTaskStudentObjectParamList) {
             Long studentId = student.getStudentId();
@@ -1208,6 +1213,7 @@ public class PrintCommonServiceImpl implements PrintCommonService {
                 if (Objects.isNull(basicClazz)) {
                     throw ExceptionResultEnum.ERROR.exception("未找到行政班");
                 }
+                map.putIfAbsent(String.valueOf(basicClazzId), basicClazz.getShortCode());
             }
 
             TeachClazz teachClazz = null;
@@ -1228,6 +1234,8 @@ public class PrintCommonServiceImpl implements PrintCommonService {
             examStudent.setPaperNumber(paperNumber);
             examStudent.setCollegeName(basicStudentResult.getCollegeName());
             examStudent.setMajorName(basicStudentResult.getMajorName());
+            String prefix = convertUtil.randomNumberPrefix(examShortCode, courseShortCode, map.get(String.valueOf(basicClazzId)), basicExamRule.getExamNumberDigit());
+            SerialNumberParams ticketNumberParams = new SerialNumberParams(SystemConstant.NUMBER_CACHE + "ticketNumber-" + schoolId, prefix, basicExamRule.getExamNumberDigit() -prefix.length());
             examStudent.setTicketNumber(createTempNumber(ticketNumberParams));
             examStudent.setSiteNumber(String.valueOf(atomicInteger.getAndIncrement()));
             examStudent.setExtendFields(extendFields);
@@ -1253,6 +1261,11 @@ public class PrintCommonServiceImpl implements PrintCommonService {
         return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
     }
 
+    @Override
+    public String createTicketNumber(SerialNumberParams serialNumberParams) {
+        return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
+    }
+
     /**
      * 保存任务附件(导出)
      *

+ 8 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -761,7 +761,7 @@ public class CreatePdfUtil {
      *  @param stuPaperType 考生卷型
      * @param paperPdfDto  抽取的试卷文件信息
      * @param pdfList      考生试卷集合
-     * @param waterMarkNames
+     * @param waterMarkNames 水印内容
      */
     public PdfDto getExamStudentPaperPdf(String stuPaperType, List<PaperPdfDto> paperPdfDto, List<PdfDto> pdfList, String[] waterMarkNames) throws IOException {
         Set<Integer> pagesList = new HashSet<>();
@@ -1309,9 +1309,15 @@ public class CreatePdfUtil {
         if (cardTemp.contains("<div class=\"page-box page-box-A3 page-box-0\">")) {
             String packageCodeDiv = "<div class=\"page-box page-box-A3 page-box-0\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 10px;right: 25%;margin-left: -100px;text-align: center;z-index: 99;\"><img src=\"data:image/png;base64," + packageCodeImg + "\" style=\"display: block; height: 28px; width: 100%\" /><p style=\"line-height: 1; font-size: 12px; margin: 0;\">" + packageCode + "</p></div>";
             cardTemp = cardTemp.replaceAll("<div class=\"page-box page-box-A3 page-box-0\">", packageCodeDiv);
-        } else if (cardTemp.contains("<div class=\"page-box page-box-A4 page-box-0\">")) {
+        } else if (cardTemp.contains("<div class=\"page-box page-box-A3 page-box-0 page-box-less\">")) {
+            String packageCodeDiv = "<div class=\"page-box page-box-A3 page-box-0 page-box-less\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 10px;right: 25%;margin-left: -100px;text-align: center;z-index: 99;\"><img src=\"data:image/png;base64," + packageCodeImg + "\" style=\"display: block; height: 28px; width: 100%\" /><p style=\"line-height: 1; font-size: 12px; margin: 0;\">" + packageCode + "</p></div>";
+            cardTemp = cardTemp.replaceAll("<div class=\"page-box page-box-A3 page-box-0 page-box-less\">", packageCodeDiv);
+        }  else if (cardTemp.contains("<div class=\"page-box page-box-A4 page-box-0\">")) {
             String packageCodeDiv = "<div class=\"page-box page-box-A4 page-box-0\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 10px;right: 25%;margin-left: -100px;text-align: center;z-index: 99;\"><img src=\"data:image/png;base64," + packageCodeImg + "\" style=\"display: block; height: 28px; width: 100%\" /><p style=\"line-height: 1; font-size: 12px; margin: 0;\">" + packageCode + "</p></div>";
             cardTemp = cardTemp.replaceAll("<div class=\"page-box page-box-A4 page-box-0\">", packageCodeDiv);
+        } else if (cardTemp.contains("<div class=\"page-box page-box-A4 page-box-0 page-box-less\">")) {
+            String packageCodeDiv = "<div class=\"page-box page-box-A4 page-box-0 page-box-less\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 10px;right: 25%;margin-left: -100px;text-align: center;z-index: 99;\"><img src=\"data:image/png;base64," + packageCodeImg + "\" style=\"display: block; height: 28px; width: 100%\" /><p style=\"line-height: 1; font-size: 12px; margin: 0;\">" + packageCode + "</p></div>";
+            cardTemp = cardTemp.replaceAll("<div class=\"page-box page-box-A4 page-box-0 page-box-less\">", packageCodeDiv);
         }
 
 

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -151,6 +151,7 @@ public class SystemConstant {
     public static final String AUTH_INFO_CACHE = "auth:info:cache";
     public static final String SYS_CONFIG_CACHE = "sys:config:cache";
     public static final String CUSTOM_PRIVILEGE_CACHE = "custom:privilege:cache";
+    public static final String NUMBER_CACHE = "school:number:cache:";
 
     /**
      * 报表缓存

+ 11 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicClazz.java

@@ -27,6 +27,9 @@ public class BasicClazz extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     private Long majorId;
 
+    @ApiModelProperty(value = "简码")
+    private String shortCode;
+
     @ApiModelProperty(value = "班级编号")
     private String clazzCode;
 
@@ -61,6 +64,14 @@ public class BasicClazz extends BaseEntity implements Serializable {
         this.clazzCode = clazzCode;
     }
 
+    public String getShortCode() {
+        return shortCode;
+    }
+
+    public void setShortCode(String shortCode) {
+        this.shortCode = shortCode;
+    }
+
     public String getClazzName() {
         return clazzName;
     }

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicCourse.java

@@ -37,6 +37,10 @@ public class BasicCourse extends BaseEntity implements Serializable {
     @TableField("teaching_room_id")
     private Long teachingRoomId;
 
+    @ApiModelProperty(value = "简码")
+    @TableField("short_code")
+    private String shortCode;
+
     /**
      * 课程编码
      */
@@ -81,6 +85,14 @@ public class BasicCourse extends BaseEntity implements Serializable {
         this.schoolId = schoolId;
     }
 
+    public String getShortCode() {
+        return shortCode;
+    }
+
+    public void setShortCode(String shortCode) {
+        this.shortCode = shortCode;
+    }
+
     public String getCode() {
         return code;
     }

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/BasicExam.java

@@ -28,6 +28,10 @@ public class BasicExam extends BaseEntity implements Serializable {
     @TableField("semester_id")
     private String semesterId;
 
+    @ApiModelProperty(value = "简码")
+    @TableField("short_code")
+    private String shortCode;
+
     @ApiModelProperty(value = "考试名称")
     @TableField("name")
     private String name;
@@ -64,6 +68,14 @@ public class BasicExam extends BaseEntity implements Serializable {
         this.semesterId = semesterId;
     }
 
+    public String getShortCode() {
+        return shortCode;
+    }
+
+    public void setShortCode(String shortCode) {
+        this.shortCode = shortCode;
+    }
+
     public String getName() {
         return name;
     }

+ 32 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicClazzServiceImpl.java

@@ -10,10 +10,16 @@ import com.qmth.teachcloud.common.bean.params.BasicClazzParams;
 import com.qmth.teachcloud.common.bean.result.BasicClazzResult;
 import com.qmth.teachcloud.common.bean.result.ClazzDatasourceResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
-import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.entity.BasicClazz;
+import com.qmth.teachcloud.common.entity.BasicStudent;
+import com.qmth.teachcloud.common.entity.BasicUserCourse;
+import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.mapper.BasicClazzMapper;
-import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.service.BasicClazzService;
+import com.qmth.teachcloud.common.service.BasicMajorService;
+import com.qmth.teachcloud.common.service.BasicStudentService;
+import com.qmth.teachcloud.common.service.BasicUserCourseService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -230,6 +236,8 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
                 basicClazz.setId(id);
                 basicClazz.setEnable(true);
                 basicClazz.setCreateId(sysUser.getId());
+                String shortCode = createShortCode(schoolId);
+                basicClazz.setShortCode(shortCode);
             } else {
                 // id不为空 -> 编辑
                 BasicClazz old = this.getById(id);
@@ -255,4 +263,26 @@ public class BasicClazzServiceImpl extends ServiceImpl<BasicClazzMapper, BasicCl
         }
         return editEntityList;
     }
+
+    /**
+     * 生成考试简码
+     *
+     * @param schoolId 学校ID
+     */
+    private String createShortCode(Long schoolId) {
+        QueryWrapper<BasicClazz> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BasicClazz::getSchoolId, schoolId);
+        List<BasicClazz> basicClazzes = this.baseMapper.selectList(queryWrapper);
+        if (basicClazzes.isEmpty()) {
+            return "001";
+        } else {
+            Optional<BasicClazz> max = basicClazzes.stream().filter(m -> StringUtils.isNotBlank(m.getShortCode())).max(Comparator.comparing(BasicClazz::getShortCode));
+            if (!max.isPresent()) {
+                return "001";
+            }
+            String maxShortCode = max.get().getShortCode();
+            int shortCode = StringUtils.isBlank(maxShortCode) ? 0 : Integer.parseInt(maxShortCode);
+            return String.format("%03d", shortCode + 1);
+        }
+    }
 }

+ 26 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -1,7 +1,6 @@
 package com.qmth.teachcloud.common.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -17,6 +16,7 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.mapper.BasicCourseMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
@@ -328,6 +328,9 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                 basicCourse.setId(id);
                 basicCourse.setCreateId(sysUser.getId());
                 basicCourse.setEnable(true);
+                // 生成简码
+                String shortCode = createShortCode(schoolId);
+                basicCourse.setShortCode(shortCode);
                 orgId = sysUser.getOrgId();
             } else {
                 // 有id -》 更新
@@ -348,4 +351,26 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         }
         return basicCourseList;
     }
+
+    /**
+     * 生成考试简码
+     *
+     * @param schoolId 学校ID
+     */
+    private String createShortCode(Long schoolId) {
+        QueryWrapper<BasicCourse> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BasicCourse::getSchoolId, schoolId);
+        List<BasicCourse> basicCourses = this.baseMapper.selectList(queryWrapper);
+        if (basicCourses.isEmpty()) {
+            return "001";
+        } else {
+            Optional<BasicCourse> max = basicCourses.stream().filter(m -> StringUtils.isNotBlank(m.getShortCode())).max(Comparator.comparing(BasicCourse::getShortCode));
+            if (!max.isPresent()) {
+                return "001";
+            }
+            String maxShortCode = max.get().getShortCode();
+            int shortCode = StringUtils.isBlank(maxShortCode) ? 0 : Integer.parseInt(maxShortCode);
+            return String.format("%03d", shortCode + 1);
+        }
+    }
 }

+ 11 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ConvertUtil.java

@@ -427,4 +427,15 @@ public class ConvertUtil {
         }
         return fileList;
     }
+
+    public String randomNumberPrefix(String examShortCode, String courseShortCode, String clazzShortCode, Integer examNumberDigit) {
+        if (examNumberDigit < 7) {
+            return "";
+        } else if (examNumberDigit < 11) {
+            return examShortCode;
+        } else if (examNumberDigit < 13) {
+            return examShortCode + courseShortCode;
+        }
+        return examShortCode + courseShortCode + clazzShortCode;
+    }
 }