Parcourir la source

3.2.5 新需求

xiaofei il y a 2 ans
Parent
commit
2d772125be
15 fichiers modifiés avec 133 ajouts et 60 suppressions
  1. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/ExamDetail.java
  2. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamCardDetailMapper.java
  3. 5 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardDetailService.java
  4. 2 22
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/DataSyncServiceImpl.java
  5. 7 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardDetailServiceImpl.java
  6. 58 28
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java
  7. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  8. 2 0
      distributed-print-business/src/main/resources/db/log/3.2.5-脚本-xiaof.sql
  9. 1 1
      distributed-print-business/src/main/resources/mapper/BasicExamMapper.xml
  10. 13 0
      distributed-print-business/src/main/resources/mapper/ExamCardDetailMapper.xml
  11. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/aspect/LogAspect.java
  12. 22 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  13. 1 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java
  14. 7 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java
  15. 7 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

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

@@ -130,7 +130,7 @@ public class ExamDetail extends BaseEntity implements Serializable {
     private Integer printCount;
 
     @ApiModelProperty(value = "试卷、题卡备份数量")
-    @TableField("print_count")
+    @TableField("backup_count")
     private Double backupCount;
 
     public Long getSchoolId() {

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamCardDetailMapper.java

@@ -2,6 +2,10 @@ package com.qmth.distributed.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.distributed.print.business.entity.ExamCardDetail;
+import com.qmth.distributed.print.business.entity.ExamTask;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.qmth.distributed.print.business.entity.ExamCardDetail;
  */
 public interface ExamCardDetailMapper extends BaseMapper<ExamCardDetail> {
 
+    List<ExamTask> getExamTaskByCourseCodeAndCardId(@Param("schoolId") Long schoolId, @Param("courseCode") String courseCode, @Param("cardId") String cardId);
 }

+ 5 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamCardDetailService.java

@@ -2,6 +2,9 @@ package com.qmth.distributed.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.distributed.print.business.entity.ExamCardDetail;
+import com.qmth.distributed.print.business.entity.ExamTask;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,4 +19,6 @@ public interface ExamCardDetailService extends IService<ExamCardDetail> {
     ExamCardDetail getByCardId(Long cardId);
 
     void removeByCardId(Long id);
+
+    List<ExamTask> getExamTaskByCourseCodeAndCardId(Long schoolId, String courseCode, String cardId);
 }

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

@@ -689,8 +689,8 @@ public class DataSyncServiceImpl implements DataSyncService {
             try {
                 // 文件临时目录
                 String dirName = dictionaryConfig.fssPrivateDomain().getConfig() + File.separator + "upload-temp" + File.separator + SyncFileTypeEnum.CARD.name().toLowerCase() + File.separator + System.currentTimeMillis();
-                file = new File(dirName, SystemConstant.getNanoId() + ".json");
-                file = createJsonFile(file.getPath(), cardDetail.getContent());
+                file = new File(dirName, SystemConstant.getNanoId() + SystemConstant.JSON_PREFIX);
+                file = SystemConstant.createJsonFile(file.getPath(), cardDetail.getContent());
                 if (file.exists()) {
                     String uploadCardUrl = cloudMarkingTaskUtils.syncFile(schoolId, String.valueOf(thirdRelateId), examTask.getCourseCode() + s + examTask.getSequence(), SyncFileTypeEnum.CARD, file);
                     if (StringUtils.isNotBlank(uploadCardUrl)) {
@@ -725,26 +725,6 @@ public class DataSyncServiceImpl implements DataSyncService {
         return "无";
     }
 
-    /**
-     * 生成文件
-     *
-     * @param url     文件路径+文件名称
-     * @param content 要生成的文件内容
-     */
-    public static File createJsonFile(String url, String content) {
-        File file = new File(url);
-        try {
-            if (!file.exists()) {
-                file.getParentFile().mkdirs();
-                file.createNewFile();
-            }
-            IOUtils.write(content.getBytes(StandardCharsets.UTF_8), new FileOutputStream(file));
-        } catch (Exception e) {
-            log.error(SystemConstant.LOG_ERROR, e);
-        }
-        return file;
-    }
-
     /**
      * 下载附件临时文件
      *

+ 7 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardDetailServiceImpl.java

@@ -4,11 +4,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.distributed.print.business.entity.ExamCardDetail;
+import com.qmth.distributed.print.business.entity.ExamTask;
 import com.qmth.distributed.print.business.mapper.ExamCardDetailMapper;
 import com.qmth.distributed.print.business.service.ExamCardDetailService;
 import org.springframework.stereotype.Service;
 
 import javax.management.Query;
+import java.util.List;
 
 /**
  * <p>
@@ -34,4 +36,9 @@ public class ExamCardDetailServiceImpl extends ServiceImpl<ExamCardDetailMapper,
         updateWrapper.lambda().eq(ExamCardDetail::getCardId, id);
         this.remove(updateWrapper);
     }
+
+    @Override
+    public List<ExamTask> getExamTaskByCourseCodeAndCardId(Long schoolId, String courseCode, String cardId) {
+        return this.baseMapper.getExamTaskByCourseCodeAndCardId(schoolId, courseCode, cardId);
+    }
 }

+ 58 - 28
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamCardServiceImpl.java

@@ -31,6 +31,7 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.CardCreateMethodEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PageSizeEnum;
+import com.qmth.teachcloud.common.enums.SyncFileTypeEnum;
 import com.qmth.teachcloud.common.service.BasicAttachmentService;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
@@ -41,6 +42,7 @@ 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.CollectionUtils;
 import org.springframework.util.FileCopyUtils;
 
 import javax.annotation.Resource;
@@ -64,6 +66,9 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
     @Resource
     private BasicExamRuleService basicExamRuleService;
 
+    @Resource
+    private BasicCardRuleService basicCardRuleService;
+
     @Resource
     private ExamCardDetailService examCardDetailService;
 
@@ -577,35 +582,44 @@ 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);
+            File tempFile = SystemConstant.getFileTempDirVar(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;
+            // 删除临时目录中创建的临时文件
+            if (Objects.nonNull(tempFile)) {
+                tempFile.delete();
+            }
 
+            // 题卡详细信息
+            ExamCard examCard = this.getById(id);
             ExamCardDetail examCardDetail = examCardDetailService.getByCardId(examCard.getId());
+
+            StringJoiner dirPath = new StringJoiner("");
+            dirPath = dirPath.add(rootPath).add(File.separator).add(examCard.getTitle()).add(File.separator);
+
             String htmlContent;
             // 通用模板
-            if (MakeMethodEnum.SELECT.equals(examCard.getMakeMethod())) {
-                htmlContent = createPdfUtil.resetHtmlTemplateBar(examCardDetail.getHtmlContent());
+            if (CardTypeEnum.GENERIC.equals(examCard.getType())) {
+                if (CardCreateMethodEnum.UPLOAD.equals(examCard.getCreateMethod())) {
+                    htmlContent = createPdfUtil.resetHtmlTemplateBar(examCardDetail.getHtmlContent());
+                } else {
+                    BasicCardRule basicCardRule = basicCardRuleService.getById(examCard.getCardRuleId());
+                    htmlContent = createPdfUtil.replaceHtmlCard(examCardDetail, basicCardRule);
+                }
             } else {
-//                BasicCardRule basicCardRule = basicCardRuleService.getById(examTask.getCardRuleId());
-                htmlContent = createPdfUtil.replaceHtmlCard(examCardDetail, null);
+                List<ExamTask> examTasks = examCardDetailService.getExamTaskByCourseCodeAndCardId(examCard.getSchoolId(), examCard.getCourseCode(), id);
+                BasicCardRule basicCardRule = null;
+                if (!CollectionUtils.isEmpty(examTasks)) {
+                    basicCardRule = basicCardRuleService.getById(examTasks.get(0).getCardRuleId());
+                }
+                htmlContent = createPdfUtil.replaceHtmlCard(examCardDetail, basicCardRule);
             }
 
-            // html
+            // html文件
+            String cardHtmlPath = dirPath + examCard.getTitle() + SystemConstant.HTML_PREFIX;
             File htmlFile = new File(cardHtmlPath);
             if (!htmlFile.exists()) {
                 htmlFile.getParentFile().mkdirs();
@@ -613,29 +627,45 @@ public class ExamCardServiceImpl extends ServiceImpl<ExamCardMapper, ExamCard> i
             }
             // 生成html文件
             FileCopyUtils.copy(htmlContent.getBytes(StandardCharsets.UTF_8), htmlFile);
-            fileList.add(htmlFile);
-            // 转pdf文件
+
+            // pdf文件
+            String cardPdfPath = dirPath + examCard.getTitle() + SystemConstant.PDF_PREFIX;
             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("没有可导出文件");
+            // jpg文件
+            String jpgAttachmentIds = examCardDetail.getJpgAttachmentInfo();
+            if (StringUtils.isNotBlank(jpgAttachmentIds)) {
+                List<JSONObject> jsonObjectList = JSONObject.parseArray(jpgAttachmentIds, JSONObject.class);
+                for (JSONObject jsonObject : jsonObjectList) {
+                    String jpgAttachmentId = jsonObject.get("attachmentId").toString();
+                    String index = jsonObject.get("index").toString();
+                    if (StringUtils.isNotBlank(jpgAttachmentId)) {
+                        BasicAttachment attachment = basicAttachmentService.getById(jpgAttachmentId);
+                        if (attachment != null) {
+                            String fileName = examCard.getTitle() + SystemConstant.HYPHEN + index + attachment.getType();
+                            teachcloudCommonService.copyFile(dirPath.toString(), fileName, attachment);
+                        }
+                    }
+                }
             }
-            if (Objects.nonNull(tempFile)) {
-                tempFile.delete();
+
+            // json文件
+            String content = examCardDetail.getContent();
+            if (StringUtils.isNotBlank(content)) {
+                String jsonPath = dirPath + examCard.getTitle() + SystemConstant.JSON_PREFIX;
+                SystemConstant.createJsonFile(jsonPath, content);
             }
-            teachcloudCommonService.downloadFileAndZip(response, rootPath, rootPath);
+
+            String zipFileName = id + SystemConstant.ZIP_PREFIX;
+            teachcloudCommonService.downloadFileAndZip(response, rootPath, rootPath, zipFileName);
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
-            if (Objects.nonNull(tempFile)) {
-                tempFile.delete();
-            }
             if (Objects.nonNull(rootPath)) {
                 ConvertUtil.delFolder(rootPath);
             }

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

@@ -1138,7 +1138,7 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
             if (Objects.nonNull(tempFile)) {
                 tempFile.delete();
             }
-            teachcloudCommonService.downloadFileAndZip(response, rootPath, rootPath);
+            teachcloudCommonService.downloadFileAndZip(response, rootPath, rootPath, null);
         } catch (Exception e) {
             e.printStackTrace();
         } finally {

+ 2 - 0
distributed-print-business/src/main/resources/db/log/3.2.5-脚本-xiaof.sql

@@ -14,3 +14,5 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('869', '试卷题卡预览日志记录接口', '/api/admin/basic/operation_log/save_preview_log', 'URL', '149', '14', 'SYS', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES ('870', '结束', 'Finish', 'LINK', '43', '4', 'AUTH', '871', '1', '0', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('871', '结束', '/api/admin/exam/print/plan_finish', 'URL', '43', '7', 'AUTH', '1', '1', '1');
+
+UPDATE `sys_privilege` SET `enable` = '0', `front_display` = '0' WHERE (`id` = '306');

+ 1 - 1
distributed-print-business/src/main/resources/mapper/BasicExamMapper.xml

@@ -36,7 +36,7 @@
             basic_exam a
         LEFT JOIN basic_semester b ON a.semester_id = b.id
         <where>
-            a.school_id = #{schoolId}
+            a.school_id = #{schoolId} and b.enable = true
             <if test="semesterId != null and semesterId != ''">
                 and a.semester_id = #{semesterId}
             </if>

+ 13 - 0
distributed-print-business/src/main/resources/mapper/ExamCardDetailMapper.xml

@@ -16,5 +16,18 @@
         id,
         card_id, content, html_content, attachment_id
     </sql>
+    <select id="getExamTaskByCourseCodeAndCardId"
+            resultMap="com.qmth.distributed.print.business.mapper.ExamTaskMapper.BaseResultMap">
+        SELECT
+            *
+        FROM
+            exam_task et
+                LEFT JOIN
+            exam_task_detail etd ON et.id = etd.exam_task_id
+        WHERE
+            et.school_id = #{schoolId}
+          AND et.course_code = #{courseCode}
+          and FIND_IN_SET(#{cardId}, REPLACE(REPLACE(substring_index(substring_index(CONVERT((etd.paper_attachment_ids ->>'$[*].cardId') USING utf8), ']', 1), '[',-1),' "','"'),'"',''))
+    </select>
 
 </mapper>

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/aspect/LogAspect.java

@@ -106,7 +106,7 @@ public class LogAspect {
      */
     private void addOperationLog(JoinPoint joinPoint, Object res, long time, String runStatus) throws IllegalAccessException {
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        String userName = requestUser.getRealName();
+        String userName = requestUser.getLoginName();
         HttpServletRequest request = ServletUtil.getRequest();
         MethodSignature signature = (MethodSignature) joinPoint.getSignature();
         Long privilegeId = ServletUtil.getCurrentPrivilegeId();

+ 22 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -30,6 +30,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URLEncoder;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -235,6 +236,7 @@ public class SystemConstant {
     public static final String SIZE = "size";
     public static final String HTML_PREFIX = ".html";
     public static final String PDF_PREFIX = ".pdf";
+    public static final String JSON_PREFIX = ".json";
     public static final String FTL_PREFIX = ".ftl";
     public static final String ZIP_PREFIX = ".zip";
     public static final String TXT_PREFIX = ".txt";
@@ -1095,4 +1097,24 @@ public class SystemConstant {
             return backupCount.intValue();
         }
     }
+
+    /**
+     * 生成文件
+     *
+     * @param url     文件路径+文件名称
+     * @param content 要生成的文件内容
+     */
+    public static File createJsonFile(String url, String content) {
+        File file = new File(url);
+        try {
+            if (!file.exists()) {
+                file.getParentFile().mkdirs();
+                file.createNewFile();
+            }
+            IOUtils.write(content.getBytes(StandardCharsets.UTF_8), new FileOutputStream(file));
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+        return file;
+    }
 }

+ 1 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java

@@ -184,7 +184,7 @@ public interface TeachcloudCommonService {
      * @param filePath    文件根目录
      * @param zipRootPath zip文件根目录
      */
-    public void downloadFileAndZip(HttpServletResponse response, String filePath, String zipRootPath);
+    public void downloadFileAndZip(HttpServletResponse response, String filePath, String zipRootPath, String zipFileName);
 
     /**
      * 下载文件到本地并压缩返回

+ 7 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -161,7 +161,13 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
                 Set<Long> teachIdSet = basicTeachCourseList.stream().map(s -> s.getUserId()).collect(Collectors.toSet());
                 List<SysUser> sysUserList = sysUserService.list(new QueryWrapper<SysUser>().lambda().in(SysUser::getId, teachIdSet));
                 for (SysUser sysUser : sysUserList) {
-                    sysUserResultList.add(new SysUserResult(sysUser));
+                    SysUserResult sysUserResult = new SysUserResult(sysUser);
+                    SysOrg sysOrg = sysOrgService.getById(sysUser.getOrgId());
+                    if(sysOrg != null){
+                        sysUserResult.setOrgCode(sysOrg.getCode());
+                        sysUserResult.setOrgName(sysOrg.getName());
+                    }
+                    sysUserResultList.add(sysUserResult);
                 }
                 basicCourseResult.setTeachList(sysUserResultList);
             }

+ 7 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -680,12 +680,15 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
      * @param zipRootPath zip文件根目录
      */
     @Override
-    public void downloadFileAndZip(HttpServletResponse response, String rootPath, String zipRootPath) {
-        long time = System.currentTimeMillis();
-        File zipFile = SystemConstant.getFileTempDirVarForZip(time + SystemConstant.ZIP_PREFIX, null);
+    public void downloadFileAndZip(HttpServletResponse response, String rootPath, String zipRootPath, String zipFileName) {
+        if (StringUtils.isBlank(zipFileName)) {
+            long time = System.currentTimeMillis();
+            zipFileName = time + SystemConstant.ZIP_PREFIX;
+        }
+        File zipFile = new File(rootPath, zipFileName);
         try {
             Zip4jUtil.zipEncryptFile(zipFile.getPath(), zipRootPath, SystemConstant.ZIP_ENCRYPT_PWD);
-            outputFile(response, zipFile, String.valueOf(time));
+            outputFile(response, zipFile, zipFile.getName());
         } catch (Exception e) {
             throw ExceptionResultEnum.ERROR.exception("下载失败");
         } finally {