wangliang 4 年之前
父节点
当前提交
132302d6df

+ 8 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/ArraysParams.java

@@ -21,6 +21,14 @@ public class ArraysParams implements Serializable {
     @NotEmpty(message = "id不能为空")
     Long[] ids;
 
+    public ArraysParams() {
+
+    }
+
+    public ArraysParams(Long[] ids) {
+        this.ids = ids;
+    }
+
     public Long[] getIds() {
         return ids;
     }

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

@@ -234,7 +234,7 @@ public class TBTaskServiceImpl extends ServiceImpl<TBTaskMapper, TBTask> impleme
         Map<String, Object> map = new HashMap<>();
         try {
             TBTask tbTask = saveTaskCommon(null, taskTypeEnum, map, sysUser);
-            tbTask.setRemark(JacksonUtil.parseJson(arraysParams));
+            tbTask.setRemark(JacksonUtil.parseJson(arraysParams.getIds()));
             this.save(tbTask);
         } catch (Exception e) {
             log.error("请求出错", e);

+ 32 - 4
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncDownloadPdfTempleteService.java

@@ -1,11 +1,23 @@
 package com.qmth.distributed.print.business.templete.execute;
 
+import com.qmth.boot.api.exception.ApiException;
+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.templete.export.AsyncExportTaskTemplete;
+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.util.Result;
 import com.qmth.distributed.print.common.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import java.text.MessageFormat;
 import java.util.Map;
+import java.util.Objects;
+import java.util.StringJoiner;
 
 /**
  * @Description: 异步下载pdf模版
@@ -16,7 +28,9 @@ import java.util.Map;
  */
 @Service
 public class AsyncDownloadPdfTempleteService extends AsyncExportTaskTemplete {
+    private final static Logger log = LoggerFactory.getLogger(AsyncCreatePdfTempleteService.class);
 
+    static final String OBJ_TITLE = "pdf数据";
     /**
      * 下载pdf
      *
@@ -26,12 +40,26 @@ public class AsyncDownloadPdfTempleteService extends AsyncExportTaskTemplete {
      */
     @Override
     public Result exportTask(Map<String, Object> map) throws Exception {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", FORMAT_TIME, BEGIN_TITLE, OBJ_TITLE));
+        tbTask.setStatus(TaskStatusEnum.RUNNING);
         try {
-
+            TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
+            taskLogicService.executeDownloadPdfLogic(map);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", FORMAT_TIME, FINISH_TITLE, map.get("size"), FINISH_SIZE));
+            tbTask.setResult(TaskResultEnum.SUCCESS);
         } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-
+            log.error("请求出错", e);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", FORMAT_TIME, EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {//生成txt文件
+            tbTask.setSummary(stringJoinerSummary.toString());
+            super.createTxt(tbTask);
         }
         return ResultUtil.ok(map);
     }

+ 0 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/export/AsyncExportTaskTemplete.java

@@ -97,8 +97,6 @@ public abstract class AsyncExportTaskTemplete {
             json.put(SystemConstant.TYPE, type);
             json.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
             String result = json.toJSONString();
-            System.out.println(result);
-
             tbTask.setReportFilePath(json.toJSONString());
         } catch (Exception e) {
             log.error("请求出错", e);
@@ -124,7 +122,6 @@ public abstract class AsyncExportTaskTemplete {
                 e.printStackTrace();
             }
             tbTask.setStatus(TaskStatusEnum.FINISH);
-            System.out.println(tbTask);
             tbTaskService.updateById(tbTask);
         }
     }

+ 12 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/TaskLogicService.java

@@ -1,9 +1,6 @@
 package com.qmth.distributed.print.business.templete.service;
 
-import org.springframework.util.LinkedMultiValueMap;
-
 import java.io.IOException;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -25,10 +22,20 @@ public interface TaskLogicService {
 
     /**
      * 处理考务数据逻辑
+     *
      * @param map 参数
      * @return 要导出的考务数据
      */
-    public Map<String,Object> executeExaminationLogic(Map<String, Object> map) throws Exception;
+    public Map<String, Object> executeExaminationLogic(Map<String, Object> map) throws Exception;
 
-    public Map<String,Object> executeImportExaminationLogic(Map<String, Object> map) throws IOException, Exception;
+    public Map<String, Object> executeImportExaminationLogic(Map<String, Object> map) throws IOException, Exception;
+
+    /**
+     * 下载pdf
+     *
+     * @param map
+     * @return
+     * @throws IOException
+     */
+    public Map<String, Object> executeDownloadPdfLogic(Map<String, Object> map) throws Exception;
 }

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

@@ -8,6 +8,7 @@ import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.ExaminationExportDto;
 import com.qmth.distributed.print.business.bean.dto.FieldsDto;
 import com.qmth.distributed.print.business.bean.dto.PdfDto;
+import com.qmth.distributed.print.business.bean.params.ArraysParams;
 import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamStatusEnum;
@@ -21,9 +22,13 @@ import com.qmth.distributed.print.business.util.ExcelUtil;
 import com.qmth.distributed.print.business.util.OssUtil;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
+import com.qmth.distributed.print.common.util.FileUtil;
 import com.qmth.distributed.print.common.util.ResultUtil;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -482,13 +487,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         examDetailService.deleteExaminationData(printPlanId);
 
 
-        SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-","p",6);
+        SerialNumberParams serialNumberParams = new SerialNumberParams("packageCode-", "p", 6);
         String key = serialNumberParams.getModel() + serialNumberParams.getPrefix();
         RedisAtomicLong counter = new RedisAtomicLong(key, Objects.requireNonNull(redisTemplate.getConnectionFactory()));
         Long value = counter.get();
         try {
             // 组装exam_detail数据
-            examDetailService.disposeExamDetailByExaminationExcel(dataList, userId , serialNumberParams);
+            examDetailService.disposeExamDetailByExaminationExcel(dataList, userId, serialNumberParams);
             // 组装exam_detail_course数据
             examDetailService.disposeExamDetailCourseByExaminationExcel(dataList, userId);
             // 组装exam_student数据
@@ -510,11 +515,68 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 commonService.checkData(checkSchoolId, checkCourseCode, checkPaperNumber, user);
             }
             map.put("dataCount", dataList.size());
-        }catch (Exception e){
-            redisTemplate.opsForValue().set(key,value);
+        } catch (Exception e) {
+            redisTemplate.opsForValue().set(key, value);
             throw new RuntimeException(e);
         }
 
         return map;
     }
+
+    /**
+     * 下载pdf
+     *
+     * @param map
+     * @return
+     * @throws IOException
+     */
+    @Override
+    @Transactional
+    public Map<String, Object> executeDownloadPdfLogic(Map<String, Object> map) throws Exception {
+        try {
+            TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+            SysUser sysUser = (SysUser) map.get(SystemConstant.USER);
+            JSONArray jsonArray = JSONArray.parseArray(tbTask.getRemark());
+            ArraysParams arraysParams = new ArraysParams(jsonArray.toArray(new Long[jsonArray.size()]));
+
+            //查询examDetail
+            QueryWrapper<ExamDetail> examDetailQueryWrapper = new QueryWrapper<>();
+            examDetailQueryWrapper.lambda().in(ExamDetail::getPrintPlanId, arraysParams.getIds());
+            List<ExamDetail> examDetailList = examDetailService.list(examDetailQueryWrapper);
+            Set<Long> attachmentIds = examDetailList.stream().map(ExamDetail::getAttachmentId).collect(Collectors.toSet());
+
+            List<BasicAttachment> basicAttachmentList = basicAttachmentService.listByIds(attachmentIds);
+
+            LocalDateTime nowTime = LocalDateTime.now();
+            StringJoiner stringJoiner = new StringJoiner("")
+                    .add(SystemConstant.TEMP_FILES_DIR).add(File.separator)
+                    .add(UploadFileEnum.FILE.getTitle()).add(File.separator)
+                    .add(String.valueOf(nowTime.getYear())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                    .add(String.format("%02d", nowTime.getDayOfMonth()))
+                    .add(File.separator).add(SystemConstant.getUuid()).add(SystemConstant.ZIP_PREFIX);
+            File zipFile = new File(stringJoiner.toString());
+            if (!zipFile.getParentFile().exists()) {
+                zipFile.getParentFile().mkdirs();
+                zipFile.createNewFile();
+            }
+            List<File> sourceFiles = new ArrayList<>();
+            for (BasicAttachment basicAttachment : basicAttachmentList) {
+                JSONObject jsonObject = JSONObject.parseObject(basicAttachment.getPath());
+                StringJoiner stringJoinerPdf = new StringJoiner("")
+                        .add(SystemConstant.TEMP_FILES_DIR).add(File.separator)
+                        .add((String) jsonObject.get("path"));
+                sourceFiles.add(ossUtil.ossDownload((String) jsonObject.get("path"), stringJoinerPdf.toString()));
+            }
+            FileUtil.doZip(zipFile, sourceFiles);
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return map;
+    }
 }

+ 1 - 1
distributed-print-common/src/main/java/com/qmth/distributed/print/common/contant/SystemConstant.java

@@ -28,7 +28,6 @@ public class SystemConstant {
     public static final String USER_DIR = "user.dir";
     public static final String PDF_TEMP = "pdf-temp";
     public static final String FILE_TEMP = "file-temp";
-    public static final String FTL_TEMP = "ftl-temp";
     public static final String DOWNLOAD_TEMP = "download-temp";
     public static final String SESSION = "session:";
     public static final String TASK = "task";
@@ -55,6 +54,7 @@ public class SystemConstant {
     public static final String HTML_PREFIX = ".html";
     public static final String PDF_PREFIX = ".pdf";
     public static final String FTL_PREFIX = ".ftl";
+    public static final String ZIP_PREFIX = ".zip";
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
     public static final int PAGE_NUMBER = 0;
     public static final int PAGE_SIZE = 10000000;

+ 6 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -22,6 +22,7 @@ import com.qmth.distributed.print.business.entity.TBTask;
 import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.TaskTypeEnum;
 import com.qmth.distributed.print.business.service.*;
+import com.qmth.distributed.print.business.templete.execute.AsyncDownloadPdfTempleteService;
 import com.qmth.distributed.print.business.util.ServletUtil;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.util.Result;
@@ -66,6 +67,9 @@ public class ExamPrintPlanController {
     @Resource
     TBTaskService tbTaskService;
 
+    @Resource
+    AsyncDownloadPdfTempleteService asyncDownloadPdfTempleteService;
+
     @ApiOperation(value = "印刷计划查询")
     @RequestMapping(value = "/list", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
@@ -282,12 +286,12 @@ public class ExamPrintPlanController {
     @ApiOperation(value = "印刷任务管理-批量下载PDF")
     @RequestMapping(value = "/task_download_pdf", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "用户信息", response = EditResult.class)})
-    public Result taskDownloadPdf(@ApiParam(value = "id数组", required = true) @Valid @RequestBody ArraysParams arraysParams, BindingResult bindingResult) {
+    public Result taskDownloadPdf(@ApiParam(value = "id数组", required = true) @Valid @RequestBody ArraysParams arraysParams, BindingResult bindingResult) throws Exception {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
         Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.PRINT_PDF_DOWNLOAD, arraysParams, (SysUser) ServletUtil.getRequestUser());
-//        asyncUserImportTempleteService.importTask(map);
+        asyncDownloadPdfTempleteService.exportTask(map);
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(new EditResult(tbTask.getId())) : ResultUtil.error("创建任务失败");
     }