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

印刷计划管理 考务管理 bug

caozixuan 4 жил өмнө
parent
commit
8794ba1394

+ 10 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TBTaskService.java

@@ -30,6 +30,14 @@ public interface TBTaskService extends IService<TBTask> {
      */
     public Map<String, Object> saveTask(MultipartFile file, TaskTypeEnum taskTypeEnum);
 
+    /**
+     * 保存任务(导出)
+     *
+     * @param taskTypeEnum
+     * @return
+     */
+    public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum);
+
     /**
      * 保存任务
      *
@@ -80,6 +88,8 @@ public interface TBTaskService extends IService<TBTask> {
      */
     public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum, Long printPlanId);
 
+
+
     /**
      * 查询任务列表
      *

+ 9 - 12
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -22,6 +22,7 @@ import com.qmth.distributed.print.business.service.ExamDetailService;
 import com.qmth.distributed.print.business.util.ServletUtil;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
+
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.slf4j.Logger;
@@ -36,7 +37,6 @@ import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -156,29 +156,26 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         response.setContentType(DEFALUT_CONTENT_TYPE);
         HSSFSheet sheet = wb.createSheet(cacheService.schoolCache(schoolId).getName() + "考务数据模板");
         sheet.setDefaultRowHeight((short) (2 * 256));
-        sheet.setColumnWidth(0, 50 * 160);
+//        sheet.setColumnWidth(0, 50 * 160);
 
         HSSFFont font = wb.createFont();
         font.setFontHeightInPoints((short) 16);
 
-        HSSFRow row = sheet.createRow((int) 0);
+        HSSFRow row = sheet.createRow(0);
         HSSFCellStyle style = wb.createCellStyle();
         style.setAlignment(HorizontalAlignment.CENTER);
 
-        for(int i = 0; i<fieldsNameList.size(); i++){
+        for (int i = 0; i < fieldsNameList.size(); i++) {
             HSSFCell cell = row.createCell(i);
             cell.setCellValue(fieldsNameList.get(i));
             cell.setCellStyle(style);
         }
-        try {
-            ServletOutputStream outputStream = response.getOutputStream();
-            wb.write(outputStream);
-            outputStream.close();
-            log.debug("导出Excel结束...");
-        }
-        catch (IOException e){
+        ServletOutputStream outputStream = response.getOutputStream();
+        wb.write(outputStream);
+        outputStream.flush();
+        outputStream.close();
+        log.debug("导出Excel结束...");
 
-        }
     }
 
     @Transactional(rollbackFor = Exception.class)

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

@@ -79,6 +79,25 @@ public class TBTaskServiceImpl extends ServiceImpl<TBTaskMapper, TBTask> impleme
         return map;
     }
 
+    @Override
+    @Transactional
+    public Map<String, Object> saveTask(TaskTypeEnum taskTypeEnum) {
+        Map<String, Object> map = null;
+        try {
+            map = new HashMap<>();
+            TBTask tbTask = saveTaskCommon(null, taskTypeEnum, map);
+            this.save(tbTask);
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return map;
+    }
+
     @Override
     @Transactional
     public Map<String, Object> saveTask(Long printPlanId, MultipartFile file, TaskTypeEnum taskTypeEnum) {

+ 72 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncExaminationExportTemplateService.java

@@ -0,0 +1,72 @@
+package com.qmth.distributed.print.business.templete.execute;
+
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.bean.result.ExaminationResult;
+import com.qmth.distributed.print.business.entity.ExamDetail;
+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.ExamDetailService;
+import com.qmth.distributed.print.business.templete.export.AsyncExportTaskTemplete;
+import com.qmth.distributed.print.business.util.ExcelUtil;
+import com.qmth.distributed.print.business.util.ServletUtil;
+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 org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.text.MessageFormat;
+import java.util.List;
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * @Description: 异步考务数据导出
+ * @Author: CaoZixuan
+ * @Date: 2021-04-10
+ */
+@Service
+public class AsyncExaminationExportTemplateService extends AsyncExportTaskTemplete {
+    @Resource
+    private ExamDetailService examDetailService;
+
+    public static final String OBJ_TITLE = "考务数据";
+    private final static Logger log = LoggerFactory.getLogger(AsyncExaminationExportTemplateService.class);
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result exportTask(Map<String, Object> map, Long printPlanId, String courseCode, String paperNumber, String examPlace, String examRoom, String packageCode) throws Exception {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        Long userId = tbTask.getCreateId();
+        Long schoolId = tbTask.getSchoolId();
+
+        StringJoiner stringJoinerSummary = new StringJoiner("\n")
+                .add(MessageFormat.format("{0}{1}{2}", FORMAT_TIME, BEGIN_TITLE, OBJ_TITLE));
+        tbTask.setStatus(TaskStatusEnum.RUNNING);
+
+        List<ExaminationResult> examinationResultList = examDetailService.findExaminationBriefPage(schoolId,
+                printPlanId, courseCode, paperNumber, examPlace, examRoom, packageCode,
+                SystemConstant.PAGE_NUMBER, SystemConstant.PAGE_SIZE).getRecords();
+        try {
+            ExcelUtil.excelExport("考务信息查询", ExaminationResult.class, examinationResultList, ServletUtil.getResponse());
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", FORMAT_TIME, FINISH_TITLE, 111, FINISH_SIZE));
+            tbTask.setResult(TaskResultEnum.SUCCESS);
+        } catch (Exception e) {
+            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());
+        }
+        return ResultUtil.ok(map);
+    }
+}

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

@@ -1,9 +1,31 @@
 package com.qmth.distributed.print.business.templete.export;
 
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+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.enums.UploadFileEnum;
+import com.qmth.distributed.print.business.service.TBTaskService;
+import com.qmth.distributed.print.business.templete.importData.AsyncImportTaskTemplete;
+import com.qmth.distributed.print.business.util.OssUtil;
+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.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.scheduling.annotation.Async;
 
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.text.MessageFormat;
+import java.util.Date;
 import java.util.Map;
+import java.util.Objects;
+import java.util.StringJoiner;
 
 /**
  * @Description: 异步导出模版
@@ -13,6 +35,15 @@ import java.util.Map;
  * @Date: 2021/3/29
  */
 public abstract class AsyncExportTaskTemplete {
+    private final static Logger log = LoggerFactory.getLogger(AsyncImportTaskTemplete.class);
+    public static final String BEGIN_TITLE = "->开始准备处理导出的";
+    public static final String FORMAT_TIME = DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN);
+    public static final String FINISH_TITLE = "->数据处理结束,共处理了";
+    public static final String FINISH_SIZE = "条数据";
+    public static final String EXCEPTION_TITLE = "->数据处理发生异常!";
+    public static final String EXCEPTION_DATA = "错误信息:";
+    public static final String TXT_PREFIX = ".txt";
+    public static final String EXCEPTION_CREATE_TXT_TITLE = "->创建导出日志时发生异常!";
 
     /**
      * 异步导出任务
@@ -24,4 +55,75 @@ public abstract class AsyncExportTaskTemplete {
     Result exportTask(Map<String, Object> map) {
         return null;
     }
+
+    @Async
+    public abstract Result exportTask(Map<String, Object> map,Long printPlanId,String courseCode,String paperNumber,String examPlace,String examRoom,String packageCode) throws Exception;
+
+    /**
+     * 创建txt文件
+     *
+     * @param tbTask
+     */
+    public void createTxt(TBTask tbTask) {
+        OssUtil ossUtil = SpringContextHolder.getBean(OssUtil.class);
+        TBTaskService tbTaskService = SpringContextHolder.getBean(TBTaskService.class);
+        ByteArrayOutputStream out = null;
+        InputStream inputStream = null;
+        try {
+            JSONObject jsonObject = JSONObject.parseObject(tbTask.getImportFilePath());
+            String path = (String) jsonObject.get(SystemConstant.PATH);
+            String type = (String) jsonObject.get(SystemConstant.TYPE);
+
+            out = new ByteArrayOutputStream();
+            out.write(tbTask.getSummary().getBytes(StandardCharsets.UTF_8));
+            byte[] bookByteAry = out.toByteArray();
+            inputStream = new ByteArrayInputStream(bookByteAry);
+            StringJoiner stringJoiner = new StringJoiner("");
+            path = path.substring(0, path.lastIndexOf(File.separator) + 1);
+
+            stringJoiner.add(path).add(SystemConstant.getUuid()).add(TXT_PREFIX).toString();
+            if (Objects.equals(type, SystemConstant.OSS)) {//上传至oss
+                ossUtil.ossUpload(stringJoiner.toString(), inputStream, null);
+            } else {//上传至服务器
+                File finalFile = new File(stringJoiner.toString());
+                if (!finalFile.exists()) {
+                    finalFile.getParentFile().mkdirs();
+                    finalFile.createNewFile();
+                }
+                FileUtils.copyInputStreamToFile(inputStream, finalFile);
+            }
+            JSONObject json = new JSONObject();
+            json.put(SystemConstant.PATH, stringJoiner.toString());
+            json.put(SystemConstant.TYPE, type);
+            json.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
+
+            tbTask.setResult(TaskResultEnum.SUCCESS);
+            tbTask.setReportFilePath(json.toJSONString());
+        } catch (Exception e) {
+            log.error("请求出错", e);
+            StringJoiner stringJoinerSummary = new StringJoiner("").add(tbTask.getSummary()).add("\n");
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", FORMAT_TIME, EXCEPTION_CREATE_TXT_TITLE, EXCEPTION_DATA, e.getMessage()));
+            tbTask.setSummary(stringJoinerSummary.toString());
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            try {
+                if (Objects.nonNull(inputStream)) {
+                    inputStream.close();
+                }
+                if (Objects.nonNull(out)) {
+                    out.flush();
+                    out.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            tbTask.setStatus(TaskStatusEnum.FINISH);
+            tbTaskService.updateById(tbTask);
+        }
+    }
 }

+ 30 - 8
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java

@@ -4,25 +4,30 @@ package com.qmth.distributed.print.api;
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.dto.excel.UserExportDto;
+import com.qmth.distributed.print.business.bean.params.ArraysParams;
 import com.qmth.distributed.print.business.bean.result.EditResult;
+import com.qmth.distributed.print.business.bean.result.ExaminationResult;
 import com.qmth.distributed.print.business.entity.TBTask;
 import com.qmth.distributed.print.business.enums.TaskTypeEnum;
 import com.qmth.distributed.print.business.service.ExamDetailService;
 import com.qmth.distributed.print.business.service.TBTaskService;
+import com.qmth.distributed.print.business.templete.execute.AsyncExaminationExportTemplateService;
 import com.qmth.distributed.print.business.templete.execute.AsyncExaminationImportTemplateService;
+import com.qmth.distributed.print.business.util.ExcelUtil;
 import com.qmth.distributed.print.business.util.ServletUtil;
 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 io.swagger.annotations.*;
-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.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import java.io.IOException;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -44,6 +49,8 @@ public class ExamDetailController {
     @Resource
     private AsyncExaminationImportTemplateService asyncExaminationImportTemplateService;
     @Resource
+    private AsyncExaminationExportTemplateService asyncExaminationExportTemplateService;
+    @Resource
     private ExamDetailService examDetailService;
 
     @ApiOperation(value = "异步考务数据批量导入接口")
@@ -131,10 +138,25 @@ public class ExamDetailController {
 
     @ApiOperation(value = "考务数据导入-模板下载")
     @RequestMapping(value = "/template_download", method = RequestMethod.POST)
-    @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Result.class)})
-    public Result downLoadExaminationTemplate(@ApiParam(value = "学校id", required = true) @RequestParam String schoolId) throws IOException {
-        examDetailService.downLoadExaminationTemplate(SystemConstant.convertIdToLong(schoolId), ServletUtil.getResponse());
-        return ResultUtil.ok();
+    @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = EditResult.class)})
+    public void downLoadExaminationTemplate() throws IOException {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        examDetailService.downLoadExaminationTemplate(schoolId, ServletUtil.getResponse());
+    }
+
+    // TODO: 2021/4/10  
+    @ApiOperation(value = "考务数据导入-结果导出")
+    @RequestMapping(value = "/data_export", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public void dataExport(@ApiParam(value = "印刷计划id") @RequestParam(required = false) String printPlanId,
+                           @ApiParam(value = "课程代码") @RequestParam(required = false) String courseCode,
+                           @ApiParam(value = "试卷编号") @RequestParam(required = false) String paperNumber,
+                           @ApiParam(value = "考点") @RequestParam(required = false) String examPlace,
+                           @ApiParam(value = "考场") @RequestParam(required = false) String examRoom,
+                           @ApiParam(value = "卷袋号") @RequestParam(required = false) String packageCode) throws Exception {
+        Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.EXAMINATION_EXPORT);
+        asyncExaminationExportTemplateService
+                .exportTask(map,SystemConstant.convertIdToLong(printPlanId),courseCode,paperNumber,examPlace,examRoom,packageCode);
     }
 }