|
@@ -8,10 +8,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.google.gson.JsonObject;
|
|
|
-import com.qmth.distributed.print.business.bean.dto.CardCustDto;
|
|
|
-import com.qmth.distributed.print.business.bean.dto.CardDetailDto;
|
|
|
-import com.qmth.distributed.print.business.bean.dto.ExamCardPageDto;
|
|
|
-import com.qmth.distributed.print.business.bean.dto.SyncExamCardDto;
|
|
|
+import com.qmth.distributed.print.business.bean.dto.*;
|
|
|
import com.qmth.distributed.print.business.bean.marking.ConvertJpgStorage;
|
|
|
import com.qmth.distributed.print.business.bean.params.ExamCardParams;
|
|
|
import com.qmth.distributed.print.business.bean.params.GenericExamCardParams;
|
|
@@ -21,7 +18,9 @@ import com.qmth.distributed.print.business.enums.CardTypeEnum;
|
|
|
import com.qmth.distributed.print.business.enums.MakeMethodEnum;
|
|
|
import com.qmth.distributed.print.business.mapper.ExamCardMapper;
|
|
|
import com.qmth.distributed.print.business.service.*;
|
|
|
+import com.qmth.distributed.print.business.util.CreatePdfUtil;
|
|
|
import com.qmth.distributed.print.business.util.HtmlToJpgUtil;
|
|
|
+import com.qmth.distributed.print.business.util.HtmlToPdfUtil;
|
|
|
import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
|
|
|
import com.qmth.teachcloud.common.bean.params.ArraysParams;
|
|
|
import com.qmth.teachcloud.common.config.DictionaryConfig;
|
|
@@ -42,10 +41,12 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.FileCopyUtils;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.File;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -85,7 +86,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
|
|
|
HtmlToJpgUtil htmlToJpgUtil;
|
|
|
|
|
|
@Resource
|
|
|
- DictionaryConfig dictionaryConfig;
|
|
|
+ CreatePdfUtil createPdfUtil;
|
|
|
|
|
|
@Resource
|
|
|
BasicRoleDataPermissionService basicRoleDataPermissionService;
|
|
@@ -273,7 +274,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
|
|
|
// 专卡
|
|
|
if (SystemConstant.ALL_CARD != cardRuleId) {
|
|
|
// 只查自己创建的专卡(20230405已改为查询课程下所有题卡,允许复制,不能选择)
|
|
|
- List<ExamCard> customCards = this.baseMapper.listCustom(schoolId, sysUser.getOrgId(), courseCode, CardTypeEnum.CUSTOM.name(), sysUser.getId());
|
|
|
+ List<ExamCard> customCards = this.baseMapper.listCustom(schoolId, courseCode, CardTypeEnum.CUSTOM.name());
|
|
|
if (!customCards.isEmpty()) {
|
|
|
list.addAll(customCards);
|
|
|
}
|
|
@@ -516,7 +517,7 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
|
|
|
if (examCard == null) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("题卡不存在");
|
|
|
}
|
|
|
- if (courseCode.equals(examCard.getCourseCode())) {
|
|
|
+ if (!courseCode.equals(examCard.getCourseCode())) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("复制的题卡不属于当前课程,无法复制");
|
|
|
}
|
|
|
|
|
@@ -571,6 +572,73 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void cardDownload(HttpServletResponse response, String id) {
|
|
|
+ File tempFile = null;
|
|
|
+ String rootPath = null;
|
|
|
+ try {
|
|
|
+
|
|
|
+ // 题卡
|
|
|
+ ExamCard examCard = this.getById(id);
|
|
|
+ // 本地保存目录
|
|
|
+ tempFile = SystemConstant.getFileTempDirVar(String.valueOf(System.currentTimeMillis()) + File.separator + SystemConstant.getNanoId(), SystemConstant.TEMP_PREFIX);
|
|
|
+ rootPath = tempFile.getParent();
|
|
|
+ StringJoiner dirPath = new StringJoiner("");
|
|
|
+ dirPath = dirPath.add(rootPath).add(File.separator)
|
|
|
+ .add(id).add(File.separator).add(SystemConstant.HYPHEN)
|
|
|
+ .add(examCard.getTitle()).add(File.separator);
|
|
|
+ List<File> fileList = new ArrayList<>();
|
|
|
+
|
|
|
+ String cardHtmlPath = dirPath + examCard.getTitle() + SystemConstant.HTML_PREFIX;
|
|
|
+ String cardPdfPath = dirPath + examCard.getTitle() + SystemConstant.PDF_PREFIX;
|
|
|
+
|
|
|
+ ExamCardDetail examCardDetail = examCardDetailService.getByCardId(examCard.getId());
|
|
|
+ String htmlContent;
|
|
|
+ // 通用模板
|
|
|
+ if (MakeMethodEnum.SELECT.equals(examCard.getMakeMethod())) {
|
|
|
+ htmlContent = createPdfUtil.resetHtmlTemplateBar(examCardDetail.getHtmlContent());
|
|
|
+ } else {
|
|
|
+// BasicCardRule basicCardRule = basicCardRuleService.getById(examTask.getCardRuleId());
|
|
|
+ htmlContent = createPdfUtil.replaceHtmlCard(examCardDetail, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // html
|
|
|
+ File htmlFile = new File(cardHtmlPath);
|
|
|
+ if (!htmlFile.exists()) {
|
|
|
+ htmlFile.getParentFile().mkdirs();
|
|
|
+ htmlFile.createNewFile();
|
|
|
+ }
|
|
|
+ // 生成html文件
|
|
|
+ FileCopyUtils.copy(htmlContent.getBytes(StandardCharsets.UTF_8), htmlFile);
|
|
|
+ fileList.add(htmlFile);
|
|
|
+ // 转pdf文件
|
|
|
+ File pdfFile = new File(cardPdfPath);
|
|
|
+ if (!pdfFile.exists()) {
|
|
|
+ pdfFile.getParentFile().mkdirs();
|
|
|
+ pdfFile.createNewFile();
|
|
|
+ }
|
|
|
+ HtmlToPdfUtil.convert(cardHtmlPath, cardPdfPath, PageSizeEnum.A3);
|
|
|
+ fileList.add(pdfFile);
|
|
|
+
|
|
|
+ if (fileList.size() == 0) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("没有可导出文件");
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(tempFile)) {
|
|
|
+ tempFile.delete();
|
|
|
+ }
|
|
|
+ teachcloudCommonService.downloadFileAndZip(response, rootPath, rootPath);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } finally {
|
|
|
+ if (Objects.nonNull(tempFile)) {
|
|
|
+ tempFile.delete();
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(rootPath)) {
|
|
|
+ ConvertUtil.delFolder(rootPath);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 生成新的title
|
|
|
*
|