浏览代码

新增模式4答题卡管理

wangliang 3 月之前
父节点
当前提交
c1d5ecceea

+ 25 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamCardModelFour.java

@@ -72,9 +72,18 @@ public class ExamCardModelFour extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "备注")
     private String remark;
 
+    @ApiModelProperty(value = "图片urls")
     @TableField(exist = false)
     private List<String> imageUrls;
 
+    @ApiModelProperty(value = "课程代码")
+    @TableField(exist = false)
+    private String courseCode;
+
+    @ApiModelProperty(value = "课程名称")
+    @TableField(exist = false)
+    private String courseName;
+
     public ExamCardModelFour() {
 
     }
@@ -96,6 +105,22 @@ public class ExamCardModelFour extends BaseEntity implements Serializable {
         this.courseId = params.getCourseId();
     }
 
+    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 Long getOrgId() {
         return orgId;
     }

+ 38 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardModelFourService.java

@@ -3,9 +3,9 @@ package com.qmth.distributed.print.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.bean.params.GenericExamCardModelFourParams;
-import com.qmth.distributed.print.business.entity.ExamCard;
 import com.qmth.distributed.print.business.entity.ExamCardModelFour;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -48,4 +48,41 @@ public interface ExamCardModelFourService extends IService<ExamCardModelFour> {
      * @return
      */
     IPage<ExamCardModelFour> listPage(IPage<Map> iPage, Long semesterId, Long examId, Long courseId, String paperNumber, Long collegeId, String title);
+
+    /**
+     * 根据id获取模式4题卡
+     *
+     * @param id
+     * @return
+     */
+    ExamCardModelFour getOne(Long id);
+
+    /**
+     * 根据题卡id删除
+     *
+     * @param id
+     * @return
+     */
+    Boolean deleteGeneric(Long id);
+
+    /**
+     * 根据题卡id生成图片
+     *
+     * @param id
+     */
+    void convertImage(Long id);
+
+    /**
+     * 导出题卡文件
+     *
+     * @param id
+     */
+    void downloadCard(Long id);
+
+    /**
+     * 批量导出题卡文件
+     *
+     * @param ids
+     */
+    void batchDownloadCard(List<Long> ids);
 }

+ 149 - 3
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardModelFourServiceImpl.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.business.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 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.service.impl.ServiceImpl;
 import com.qmth.boot.core.concurrent.service.ConcurrentService;
@@ -20,13 +21,15 @@ import com.qmth.distributed.print.business.util.PdfUtil;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.bean.marking.ConvertJpgStorage;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.service.BasicCourseService;
-import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
-import com.qmth.teachcloud.common.service.TeachcloudCommonService;
+import com.qmth.teachcloud.common.enums.PageSizeEnum;
+import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.Base64Util;
 import com.qmth.teachcloud.common.util.FileUtil;
+import com.qmth.teachcloud.common.util.HtmlToPdfUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.mark.enums.LockType;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -72,6 +75,15 @@ public class ExamCardModelFourServiceImpl extends ServiceImpl<ExamCardModelFourM
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
+    @Resource
+    BasicAttachmentService basicAttachmentService;
+
+    @Resource
+    FileUploadService fileUploadService;
+
+    @Resource
+    SysUserService sysUserService;
+
     /**
      * 新增/修改模式4题卡
      *
@@ -210,4 +222,138 @@ public class ExamCardModelFourServiceImpl extends ServiceImpl<ExamCardModelFourM
         }
         return cardPageDtoIPage;
     }
+
+    /**
+     * 根据id获取模式4题卡
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public ExamCardModelFour getOne(Long id) {
+        ExamCardModelFour examCardModelFour = this.getById(id);
+        if (Objects.nonNull(examCardModelFour) && Objects.nonNull(examCardModelFour.getCourseId())) {
+            BasicCourse basicCourse = basicCourseService.getById(examCardModelFour.getCourseId());
+            examCardModelFour.setCourseCode(Objects.nonNull(basicCourse) ? basicCourse.getCode() : null);
+            examCardModelFour.setCourseName(Objects.nonNull(basicCourse) ? basicCourse.getName() : null);
+        }
+        return examCardModelFour;
+    }
+
+    /**
+     * 根据题卡id删除
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    @Transactional
+    public Boolean deleteGeneric(Long id) {
+        return this.removeById(id);
+    }
+
+    /**
+     * 根据题卡id生成图片
+     *
+     * @param id
+     */
+    @Override
+    @Transactional
+    public void convertImage(Long id) {
+        ExamCardModelFour examCardModelFour = this.getById(id);
+        if (!ExamCardStatusEnum.SUBMIT.equals(examCardModelFour.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("提交状态题卡才能生成图片");
+        }
+        createJpgImage(examCardModelFour);
+        if (StringUtils.isNotBlank(examCardModelFour.getJpgAttachment())) {
+            UpdateWrapper<ExamCardModelFour> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(ExamCardModelFour::getJpgAttachment, examCardModelFour.getJpgAttachment())
+                    .eq(ExamCardModelFour::getId, id);
+            this.update(updateWrapper);
+        }
+    }
+
+    /**
+     * 导出题卡文件
+     *
+     * @param id
+     */
+    @Override
+    public void downloadCard(Long id) {
+        String rootPath = null;
+        try {
+            ExamCardModelFour examCardModelFour = this.getById(id);
+            // 去掉题卡名称中的空格,否则创建目录报错
+            String title = StringUtils.deleteWhitespace(examCardModelFour.getTitle());
+            // 本地保存目录
+            rootPath = FileUtil.getFileTempDirPath(true);
+            // 下载文件保存路径(以题卡名称命名)
+            String downloadFilePath = rootPath + File.separator + title;
+            File downloadPathFile = new File(downloadFilePath);
+            if (!downloadPathFile.exists()) {
+                downloadPathFile.mkdirs();
+            }
+
+            // HTML文件
+            String htmlContent = createPdfUtil.replaceBlankHtmlContent(examCardModelFour.getHtmlContent(), examCardModelFour.getCourseId());
+            File htmlFile = new File(downloadFilePath, title + SystemConstant.HTML_PREFIX);
+            if (!htmlFile.exists()) {
+                htmlFile.createNewFile();
+            }
+            FileUtil.writeContent(htmlFile, htmlContent);
+
+            // PDF文件
+            File pdfFile = new File(downloadFilePath, title + SystemConstant.PDF_PREFIX);
+            if (!pdfFile.exists()) {
+                pdfFile.createNewFile();
+            }
+            HtmlToPdfUtil.convert(htmlFile.getPath(), pdfFile.getPath(), "8K".equals(examCardModelFour.getPageSize()) ? PageSizeEnum.K8 : PageSizeEnum.valueOf(examCardModelFour.getPageSize()));
+
+            // JPG文件
+            String jpgAttachmentIds = examCardModelFour.getJpgAttachment();
+            if (StringUtils.isNotBlank(jpgAttachmentIds)) {
+                List<ConvertJpgStorage> jsonObjectList = JSONObject.parseArray(jpgAttachmentIds, ConvertJpgStorage.class);
+                for (ConvertJpgStorage convertJpgStorage : jsonObjectList) {
+                    String jpgAttachmentId = convertJpgStorage.getAttachmentId();
+                    Integer index = convertJpgStorage.getIndex();
+                    if (jpgAttachmentId != null) {
+                        BasicAttachment attachment = basicAttachmentService.getById(jpgAttachmentId);
+                        if (attachment != null) {
+                            String fileName = downloadFilePath + File.separator + title + SystemConstant.HYPHEN + index + attachment.getType();
+                            fileUploadService.downloadFile(attachment.getPath(), fileName);
+                        }
+                    }
+                }
+            }
+
+            // json文件
+            String content = examCardModelFour.getContent();
+            if (StringUtils.isNotBlank(content)) {
+                String jsonPath = downloadFilePath + File.separator + title + SystemConstant.JSON_PREFIX;
+                FileUtil.writeContent(new File(jsonPath), content);
+            }
+
+            String zipFileName = title + SystemConstant.ZIP_PREFIX;
+            SysUser sysUser = sysUserService.getById(ServletUtil.getRequestUserId());
+            FileUtil.downloadEncryptZip(ServletUtil.getResponse(), downloadPathFile, zipFileName, new String(Base64Util.decode(sysUser.getPassword())));
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (Objects.nonNull(rootPath)) {
+                FileUtil.deleteDirectory(rootPath);
+            }
+        }
+    }
+
+    /**
+     * 批量导出题卡文件
+     *
+     * @param ids
+     */
+    @Override
+    public void batchDownloadCard(List<Long> ids) {
+        for (Long l : ids) {
+
+        }
+    }
 }

+ 14 - 4
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardModelFourController.java

@@ -19,6 +19,7 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.util.List;
 
 /**
  * <p>
@@ -53,8 +54,8 @@ public class ExamCardModelFourController {
     @ApiOperation(value = "根据ID获取题卡详情")
     @RequestMapping(value = "/get_one", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "根据ID获取题卡详情", response = EditResult.class)})
-    public Result getOne(@ApiParam(value = "题卡id", required = true) @RequestParam(value = "cardId") Long cardId) {
-        return ResultUtil.ok(true);
+    public Result getOne(@ApiParam(value = "主键", required = true) @RequestParam(value = "id") Long id) {
+        return ResultUtil.ok(examCardModelFourService.getOne(id));
     }
 
     @ApiOperation(value = "新增/修改")
@@ -73,7 +74,7 @@ public class ExamCardModelFourController {
     @OperationLogDetail(operationType = OperationTypeEnum.DELETE, detail = "删除操作,题卡ID:{{id}}")
     @ApiResponses({@ApiResponse(code = 200, message = "删除", response = EditResult.class)})
     public Result save(@ApiParam(value = "主键", required = true) @RequestParam Long id) {
-        return ResultUtil.ok();
+        return ResultUtil.ok(examCardModelFourService.deleteGeneric(id));
     }
 
     @ApiOperation(value = "题卡转图片")
@@ -81,12 +82,21 @@ public class ExamCardModelFourController {
     @OperationLogDetail(operationType = OperationTypeEnum.UPDATE, detail = "生成图片操作,题卡ID:{{id}}")
     @ApiResponses({@ApiResponse(code = 200, message = "删除", response = EditResult.class)})
     public Result convertImage(@ApiParam(value = "题卡转图片", required = true) @RequestParam(value = "id") Long id) {
-        return ResultUtil.ok();
+        examCardModelFourService.convertImage(id);
+        return ResultUtil.ok(true);
     }
 
     @ApiOperation(value = "导出题卡文件")
     @RequestMapping(value = "/download_card", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "导出题卡文件", response = EditResult.class)})
     public void downloadCard(@ApiParam(value = "主键", required = true) @RequestParam(value = "id") Long id) {
+        examCardModelFourService.downloadCard(id);
+    }
+
+    @ApiOperation(value = "批量导出题卡文件")
+    @RequestMapping(value = "/batch_download_card", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "批量导出题卡文件", response = EditResult.class)})
+    public void batchDownloadCard(@ApiParam(value = "主键", required = true) @RequestParam(value = "id") List<Long> ids) {
+        examCardModelFourService.batchDownloadCard(ids);
     }
 }