Browse Source

Merge branch 'dev' of http://git.qmth.com.cn/wangliang/distributed-print-service into dev

xiaof 4 years ago
parent
commit
7525506c83

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamStudent.java

@@ -9,6 +9,7 @@ import com.qmth.distributed.print.business.base.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.util.Objects;
 
 /**
  * <p>
@@ -103,7 +104,7 @@ public class ExamStudent extends BaseEntity implements Serializable {
     }
 
     public String getSiteNumber() {
-        return siteNumber;
+        return Objects.isNull(siteNumber) ? "" : null;
     }
 
     public void setSiteNumber(String siteNumber) {

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

@@ -245,6 +245,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
     @Override
     public ExamTaskImportDto importFile(MultipartFile file) throws IOException, NoSuchFieldException {
         List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(ExamTaskTempDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+            Map<String,String> courseCodePaperNumberMap = new HashMap<>();
             List<ExcelError> excelErrorTemp = new ArrayList<>();
             // 只允许导入一个sheet
             if (finalExcelList.size() > 1) {
@@ -271,6 +272,14 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     } else if (!course.getName().equals(userImportDto.getCourseName())) {
                         excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程名称]与系统中不匹配"));
                     }
+                    if (courseCodePaperNumberMap.containsKey(userImportDto.getCourseCode())){
+                         String paperNumber = courseCodePaperNumberMap.get(userImportDto.getCourseCode());
+                         if (paperNumber != null &&  !paperNumber.equals(userImportDto.getPaperNumber())){
+                             excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程代码]与[试卷编号]不唯一"));
+                         }
+                    }else {
+                        courseCodePaperNumberMap.put(userImportDto.getCourseCode(),userImportDto.getPaperNumber());
+                    }
                 }
             }
             if (excelErrorTemp.size() > 0) {
@@ -344,7 +353,13 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                     if (sysUser1 == null) {
                         examTaskDto.setUsers(listUsers(examTaskTemp.getCourseCode(), null));
                     } else {
-                        examTaskDto.setUsers(listUsers(examTaskTemp.getCourseCode(), String.valueOf(sysUser1.getId())));
+                        List<BlurryUserDto> blurryUserDtoList = listUsers(examTaskTemp.getCourseCode(), String.valueOf(sysUser1.getId()));
+
+                        if (blurryUserDtoList.size() == 0){
+                            //如果没有查询到模糊用户数据 可能是excel中命题老师没有该课程权限,则舍弃该用户再次查询该科目-试卷的模糊用户
+                            blurryUserDtoList = listUsers(examTaskTemp.getCourseCode(), null);
+                        }
+                        examTaskDto.setUsers(blurryUserDtoList);
                     }
                 }
                 tasks.add(examTaskDto);
@@ -410,7 +425,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 // 试卷编号生成规则:年月日(例如:20100419)+0000(例如:0001)顺序编号
                 String date = DateUtil.today().replace("-", "");
                 String paperNumber = convertUtil.getIncre(date, "paperNumber" + schoolId, 5);
-                examTask.setPaperNumber(paperNumber);
+                examTaskTemp.setPaperNumber(paperNumber);
             }
             examTask.setPaperNumber(examTaskTemp.getPaperNumber());
             examTask.setStartTime(task.getStartTime());
@@ -431,7 +446,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             for (Map<String, String> user : task.getUsers()) {
                 String ucourseCode = user.get("courseCode");
                 String upaperNumber = user.get("paperNumber");
-                if (examTaskTemp.getCourseCode().equals(ucourseCode) && examTaskTemp.getPaperNumber().equals(upaperNumber)) {
+                if (examTaskTemp.getCourseCode().equals(ucourseCode)) {
                     userId = user.get("userId");
                     specialty = user.get("specialty");
                 }

+ 22 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExaminationImportTemplateService.java

@@ -1,22 +1,29 @@
 package com.qmth.distributed.print.business.templete.execute;
 
 import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.entity.SysUser;
 import com.qmth.distributed.print.business.entity.TBTask;
 import com.qmth.distributed.print.business.enums.TaskResultEnum;
 import com.qmth.distributed.print.business.enums.TaskStatusEnum;
+import com.qmth.distributed.print.business.service.ExamTaskService;
 import com.qmth.distributed.print.business.templete.importData.AsyncImportTaskTemplete;
 import com.qmth.distributed.print.business.templete.service.TaskLogicService;
 import com.qmth.distributed.print.common.contant.SpringContextHolder;
 import com.qmth.distributed.print.common.contant.SystemConstant;
+import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
 import com.qmth.distributed.print.common.util.Result;
 import com.qmth.distributed.print.common.util.ResultUtil;
+import jdk.internal.dynalink.linker.LinkerServices;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.io.InputStream;
 import java.text.MessageFormat;
+import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.StringJoiner;
 
 /**
@@ -26,6 +33,9 @@ import java.util.StringJoiner;
  */
 @Service
 public class AsyncExaminationImportTemplateService extends AsyncImportTaskTemplete {
+    @Resource
+    private ExamTaskService examTaskService;
+
     private final static Logger log = LoggerFactory.getLogger(AsyncExaminationImportTemplateService.class);
 
     public static final String OBJ_TITLE = "考务数据";
@@ -43,6 +53,18 @@ public class AsyncExaminationImportTemplateService extends AsyncImportTaskTemple
         try {
             TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
             Map<String,Object> result = taskLogicService.executeImportExaminationLogic(map);
+
+            // 检测是否去生成pdf
+            if (Objects.isNull(map.get("examDetailIdList"))){
+                throw ExceptionResultEnum.ERROR.exception("不能获取考务-场次id集合");
+            }
+            List<Long> examDetailIdList = (List<Long>) map.get("examDetailIdList");
+            // 按照考场检验命题任务是否全部完成,完成生成pdf
+            SysUser user = (SysUser) map.get(SystemConstant.USER);
+            for (Long examDetailId : examDetailIdList) {
+                examTaskService.checkDataByExamination(examDetailId, user);
+            }
+
             stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", FORMAT_TIME, FINISH_TITLE, Long.valueOf(String.valueOf(result.get("dataCount"))), FINISH_SIZE));
             tbTask.setResult(TaskResultEnum.SUCCESS);
         }catch (Exception e){

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

@@ -237,7 +237,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                                 String studentContent = cardContent;
 
                                 for (int i = 1; i <= examPrintPlan.getBackupCount(); i++) {
-                                    basicAttachmentList.add(createPdfUtil.cardHtml(cardContent, paperType, examDetailCourse, examCard, jsonArray, sysUser.getId(), cardPdfTempList));
+                                    basicAttachmentList.add(createPdfUtil.cardHtml(cardContent, paperType, examDetail, examDetailCourse, examCard, jsonArray, sysUser.getId(), cardPdfTempList));
                                 }
                                 cardPdfList.addAll(cardPdfTempList);
 
@@ -541,27 +541,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             // 组装exam_student数据
             examDetailService.disposeExamStudentByExaminationExcel(dataList, userId);
 
-            // 按照考场检验命题任务是否全部完成,完成生成pdf
-            SysUser user = (SysUser) map.get(SystemConstant.USER);
-            for (Long examDetailId : examDetailIdList) {
-                examTaskService.checkDataByExamination(examDetailId, user);
-            }
-
-//            List<Map<String, Object>> checkList = dataList.stream().flatMap(e -> {
-//                Map<String, Object> tmp = new HashMap<>();
-//                tmp.put("schoolId", e.get("schoolId"));
-//                tmp.put("courseCode", e.get("courseCode"));
-//                tmp.put("paperNumber", e.get("paperNumber"));
-//                return Stream.of(tmp);
-//            }).distinct().collect(Collectors.toList());
-//            for (Map<String, Object> stringObjectMap : checkList) {
-//                Long checkSchoolId = SystemConstant.convertIdToLong(String.valueOf(stringObjectMap.get("schoolId")));
-//                String checkCourseCode = String.valueOf(stringObjectMap.get("courseCode"));
-//                String checkPaperNumber = String.valueOf(stringObjectMap.get("paperNumber"));
-//                SysUser user = (SysUser) map.get(SystemConstant.USER);
-//                user.setSchoolId(schoolId);
-//                commonService.checkData(checkSchoolId, checkCourseCode, checkPaperNumber, user);
-//            }
+            map.put("examDetailIdList", examDetailIdList);
             map.put("dataCount", dataList.size());
         } catch (Exception e) {
             redisTemplate.opsForValue().set(key, value);

+ 9 - 22
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -145,21 +145,8 @@ public class CreatePdfUtil {
         htmlMap.put("proctorCollege", String.join(",", proctorCollege));
         htmlMap.put("examManager", String.join(",", examManager));
 
-        String minSite = examStudentList.stream().min((a, b) -> {
-            if (Objects.nonNull(a.getSiteNumber()) && Objects.nonNull(a.getSiteNumber())) {
-                return a.getSiteNumber().compareTo(b.getSiteNumber());
-            } else {
-                return 0;
-            }
-        }).get().getSiteNumber();
-
-        String maxSite = examStudentList.stream().max((a, b) -> {
-            if (Objects.nonNull(a.getSiteNumber()) && Objects.nonNull(a.getSiteNumber())) {
-                return a.getSiteNumber().compareTo(b.getSiteNumber());
-            } else {
-                return 0;
-            }
-        }).get().getSiteNumber();
+        String minSite = examStudentList.stream().min((a, b) -> a.getSiteNumber().compareTo(b.getSiteNumber())).get().getSiteNumber();
+        String maxSite = examStudentList.stream().max((a, b) -> a.getSiteNumber().compareTo(b.getSiteNumber())).get().getSiteNumber();
 
         htmlMap.put("minSite", minSite);
         htmlMap.put("maxSite", maxSite);
@@ -396,8 +383,8 @@ public class CreatePdfUtil {
                 pageA4Count = pageA4Count + list[i].stream().mapToInt(PdfDto::getPageCount).sum();
             } else if (list[i].size() > 0 && list[i].get(0).getPageSize() == PageSizeEnum.A3) {
                 pageA3Count = pageA3Count + list[i].stream().mapToInt(PdfDto::getPageCount).sum();
+                mergePdfList.addAll(list[i]);
             }
-            mergePdfList.addAll(list[i]);
         }
         List<String> pathList = mergePdfList.stream().map(PdfDto::getPath).collect(Collectors.toList());
         String dirName = PdfUtil.mergePdf(pathList.toArray(new String[mergePdfList.size()]), null);
@@ -473,7 +460,7 @@ public class CreatePdfUtil {
         studentHtml = studentHtml.replaceAll("\\$\\{paperType\\}", GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(paperType), false));
         studentHtml = studentHtml.replaceAll("\\$\\{paperTypeName\\}", paperType);
         studentHtml = studentHtml.replaceAll("\\$\\{studentCode\\}", t.getStudentCode());
-        studentHtml = studentHtml.replaceAll("\\$\\{name\\}", t.getStudentName());
+        studentHtml = studentHtml.replaceAll("\\$\\{studentName\\}", t.getStudentName());
         studentHtml = studentHtml.replaceAll("\\$\\{courseName\\}", examCard.getCourseName());
 
         //学生题卡
@@ -496,17 +483,17 @@ public class CreatePdfUtil {
      * @return
      * @throws IOException
      */
-    public BasicAttachment cardHtml(String cardContent, String paperType, ExamDetailCourse examDetailCourse, ExamCard examCard, JSONArray jsonArray, Long userId, List<PdfDto> cardPdfList) throws IOException {
+    public BasicAttachment cardHtml(String cardContent, String paperType, ExamDetail examDetail, ExamDetailCourse examDetailCourse, ExamCard examCard, JSONArray jsonArray, Long userId, List<PdfDto> cardPdfList) throws IOException {
         //通用题卡
         String cardTemp = cardContent;
         cardTemp = cardTemp.replaceAll("\\$\\{paperTypeName\\}", paperType);
         //随机生成试卷条码并将图片转成base64
         cardTemp = cardTemp.replaceAll("\\$\\{paperType\\}", GoogleBarCodeUtil.createBarCode(SystemConstant.convertPaperType(paperType), false));
         //通用题卡生成卷袋贴条码
-        String paperCode = examDetailCourse.getPaperNumber();
-        String paperCodeImg = GoogleBarCodeUtil.createBarCode(paperCode, false);
-        String paperCodeDiv = "<div class=\"page-box page-box-0\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 80px;right: 35px;transform: rotate(-90deg);transform-origin: center right;text-align: center;z-index: 99;\"><img src=\"data:image/png;base64," + paperCodeImg + "\" style=\"display: block; height: 28px; width: 100%\" /><p style=\"line-height: 1; font-size: 12px; margin: 0;\">" + paperCode + "</p></div>";
-        cardTemp = cardTemp.replaceAll("<div class=\"page-box page-box-0\">", paperCodeDiv);
+        String packageCode = examDetail.getPackageCode();
+        String packageCodeImg = GoogleBarCodeUtil.createBarCode(packageCode, false);
+        String packageCodeDiv = "<div class=\"page-box page-box-0\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 80px;right: 35px;transform: rotate(-90deg);transform-origin: center right;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-0\">", packageCodeDiv);
         BasicAttachment cardAttachment = basicAttachmentService.saveAttachmentHtml(examCard.getSchoolId() + "|" + examCard.getCourseCode(), cardTemp, userId, cardPdfList);
         JSONObject object = new JSONObject();
         object.put("name", paperType);

+ 12 - 0
distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java

@@ -1,5 +1,6 @@
 package com.qmth.distributed.print;
 
+import com.aliyun.oss.common.utils.BinaryUtil;
 import com.qmth.distributed.print.api.ExamDetailController;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
 import com.qmth.distributed.print.business.entity.ExamDetail;
@@ -7,6 +8,8 @@ import com.qmth.distributed.print.business.service.BasicTemplateOrgService;
 import com.qmth.distributed.print.business.service.ExamDetailService;
 import com.qmth.distributed.print.business.service.ExamPrintPlanService;
 import com.qmth.distributed.print.business.util.ConvertUtil;
+import com.qmth.distributed.print.business.util.OssUtil;
+import com.qmth.distributed.print.common.util.HexUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -33,6 +36,8 @@ public class ServiceTest {
     private ExamDetailService examDetailService;
     @Resource
     private ExamDetailController examDetailController;
+    @Resource
+    OssUtil ossUtil;
 
 
     @Test
@@ -69,4 +74,11 @@ public class ServiceTest {
 
     }
 
+    @Test
+    public void uploadOss(){
+//        String pdfDirName = "upload/2021/04/20/test1.pdf";
+//        String pdfFilePath = "E:\\qiming\\qiming_dev\\distribution-print\\v2.0\\dev\\pdf-temp\\upload/2021/04/20/1eacef5479f74d72ab4a924468e80d73.pdf"
+//        ossUtil.ossUpload(pdfDirName, pdfFile, BinaryUtil.toBase64String(HexUtils.decodeHex(fileMd5)));
+    }
+
 }