浏览代码

3.2.2-bug修改

xiaof 2 年之前
父节点
当前提交
4cf2b9631d

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamTaskDetailMapper.java

@@ -10,7 +10,6 @@ import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Set;
 
 /**
  * <p>
@@ -23,6 +22,8 @@ import java.util.Set;
 public interface ExamTaskDetailMapper extends BaseMapper<ExamTaskDetail> {
     IPage<ExamTaskDetailDto> listPage(Page<ExamTaskDetailDto> page, @Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("relateType") String relateType, @Param("printPlanIdList") List<Long> printPlanIdList, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userName") String userName, @Param("cardRuleId") Long cardRuleId, @Param("dpr") DataPermissionRule dpr);
 
+    List<ExamTaskDetailDto> listPage(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examId") Long examId, @Param("relateType") String relateType, @Param("printPlanIdList") List<Long> printPlanIdList, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber, @Param("userName") String userName, @Param("cardRuleId") Long cardRuleId, @Param("dpr") DataPermissionRule dpr);
+
     List<String> listExamDetailCourse(@Param("schoolId") Long schoolId, @Param("paperType") String paperType, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
 
     /**

+ 1 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java

@@ -27,6 +27,7 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
     boolean updatePaper(RelatePaperParam paperParam) throws IOException;
 
     IPage<ExamTaskDetailDto> list(Long semesterId, Long examId, String relateType, List<Long> printPlanId, String courseCode, String paperNumber, String userName, Long cardRuleId, Integer pageNumber, Integer pageSize);
+    Map listTotal(Long semesterId, Long examId, String relateType, List<Long> printPlanId, String courseCode, String paperNumber, String userName, Long cardRuleId);
 
     List<ExamTaskDetail> listByCardId(Long cardId);
 

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

@@ -496,7 +496,8 @@ public class DataSyncServiceImpl implements DataSyncService {
                 String subjectName = examStudent.getCourseName();
                 String packageCode = examStudent.getPackageCode();
                 // 试卷类型和客观题试卷类型一致  update by 20220713
-                String paperType = examStudent.getPaperType();
+//                String paperType = examStudent.getPaperType();
+                String paperType = null;
                 boolean syncStudent = cloudMarkingTaskUtils.syncStudent(schoolId, examId, examNumber, studentCode, name, college, className, teacher, subjectCode, subjectName, packageCode, paperType, null, null);
 
                 if (syncStudent) {

+ 21 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -28,7 +28,6 @@ import com.qmth.teachcloud.common.util.ServletUtil;
 import org.activiti.engine.TaskService;
 import org.activiti.engine.task.Task;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -257,7 +256,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         userName = SystemConstant.translateSpecificSign(userName);
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
-        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId,requestUser.getId(),ServletUtil.getRequest().getServletPath());
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
         Page<ExamTaskDetailDto> page = new Page<>(pageNumber, pageSize);
         IPage<ExamTaskDetailDto> examDetailDtoIPage = this.baseMapper.listPage(page, schoolId, semesterId, examId, relateType, printPlanIdList, courseCode, paperNumber, userName, cardRuleId, dpr);
         examDetailDtoIPage.getRecords().stream().map(m -> {
@@ -272,6 +271,26 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         return examDetailDtoIPage;
     }
 
+    @Override
+    public Map listTotal(Long semesterId, Long examId, String relateType, List<Long> printPlanIdList, String courseCode, String paperNumber, String userName, Long cardRuleId) {
+        userName = SystemConstant.translateSpecificSign(userName);
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionRule dpr = basicRoleDataPermissionService.findDataPermission(schoolId, requestUser.getId(), ServletUtil.getRequest().getServletPath());
+        List<ExamTaskDetailDto> examDetailDtoList = this.baseMapper.listPage(schoolId, semesterId, examId, relateType, printPlanIdList, courseCode, paperNumber, userName, cardRuleId, dpr);
+        Map<String, Object> map = new HashMap<>();
+        // 课程数量
+        long courseCodeCount = examDetailDtoList.stream().map(m -> m.getCourseCode()).distinct().count();
+        map.put("courseTotal", courseCodeCount);
+        // 命题任务数量
+        long paperNumberCount = examDetailDtoList.stream().map(m -> m.getPaperNumber()).distinct().count();
+        map.put("taskTotal", paperNumberCount);
+        // 科次数量
+        int subjectTotalCount = examDetailDtoList.stream().mapToInt(m -> m.getTotalSubjects()).sum();
+        map.put("subjectTotal", subjectTotalCount);
+        return map;
+    }
+
     @Override
     public List<ExamTaskDetail> listByCardId(Long cardId) {
 //        QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();

+ 6 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncSysUserDataImportService.java

@@ -3,6 +3,7 @@ package com.qmth.distributed.print.business.templete.execute;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
 import com.qmth.boot.api.exception.ApiException;
+import com.qmth.distributed.print.business.service.CloudUserPushService;
 import com.qmth.distributed.print.business.templete.importData.AsyncImportTaskTemplete;
 import com.qmth.distributed.print.business.templete.service.TaskLogicService;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
@@ -11,7 +12,6 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
-import com.qmth.distributed.print.business.service.CloudUserPushService;
 import com.qmth.teachcloud.common.service.TBTaskService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
@@ -64,6 +64,11 @@ public class AsyncSysUserDataImportService extends AsyncImportTaskTemplete {
                 cloudUserPushService.pushCloudUser(userIdList, sysUser);
             }
 
+            //错误数据,生成文件
+            if (result.containsKey(SystemConstant.ERROR_DATA_LIST)) {
+                // todo 生成错误数据文件
+            }
+
             stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, Long.valueOf(String.valueOf(result.get("dataCount"))), FINISH_SIZE));
             tbTask.setResult(TaskResultEnum.SUCCESS);
         } catch (Exception e) {

+ 70 - 8
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/importData/AsyncImportTaskTemplete.java

@@ -3,17 +3,18 @@ package com.qmth.distributed.print.business.templete.importData;
 import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.qmth.boot.api.exception.ApiException;
+import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.TBTask;
-import com.qmth.teachcloud.common.enums.TaskResultEnum;
-import com.qmth.teachcloud.common.enums.TaskStatusEnum;
-import com.qmth.teachcloud.common.enums.TaskTypeEnum;
-import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.TBTaskService;
+import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.FileStoreUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.scheduling.annotation.Async;
@@ -23,10 +24,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.text.MessageFormat;
-import java.util.Date;
-import java.util.Map;
-import java.util.Objects;
-import java.util.StringJoiner;
+import java.util.*;
 
 /**
  * @Description: 异步导入模版
@@ -118,4 +116,68 @@ public abstract class AsyncImportTaskTemplete {
             tbTaskService.updateById(tbTask);
         }
     }
+
+
+    /**
+     * 创建txt文件
+     *
+     * @param tbTask
+     */
+    public void createErrorFile(TBTask tbTask, Class clazz, List list) {
+        File excelFileTemp = null;
+        try {
+            FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
+            DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
+            boolean oss = dictionaryConfig.sysDomain().isOss();
+            String ossStr = null;
+            StringJoiner stringJoiner = new StringJoiner("");
+            if (!oss && Objects.nonNull(dictionaryConfig.fssPublicDomain()) && !StringUtils.isBlank(dictionaryConfig.fssPublicDomain().getConfig()) && !dictionaryConfig.fssPublicDomain().getConfig().startsWith(SystemConstant.START_PARENT)) {
+                stringJoiner.add(dictionaryConfig.fssPublicDomain().getConfig()).add(File.separator);
+            }
+            stringJoiner = SystemConstant.getDirName(stringJoiner, UploadFileEnum.FILE, true);
+            stringJoiner.add(SystemConstant.getNanoId()).add(SystemConstant.TXT_PREFIX);
+
+            String txtDirName = stringJoiner.toString();
+            excelFileTemp = SystemConstant.getFileTempVar(SystemConstant.EXCEL_PREFIX);
+            ExcelUtil.excelExportLocal(excelFileTemp, clazz, list);
+
+            String txtFileMd5 = DigestUtils.md5Hex(new FileInputStream(excelFileTemp));
+            if (oss || (!oss && dictionaryConfig.fssPrivateDomain().getConfig().startsWith(SystemConstant.START_PARENT))) {
+                ossStr = oss ? SystemConstant.OSS : SystemConstant.LOCAL;
+                fileStoreUtil.ossUpload(txtDirName, excelFileTemp, txtFileMd5, fileStoreUtil.getUploadEnumByPath(txtDirName).getFssType());
+            } else {
+                ossStr = SystemConstant.LOCAL;
+                fileStoreUtil.localUpload(txtDirName, new FileInputStream(excelFileTemp), txtFileMd5, LocalCatalogEnum.LOCAL_FILE);
+            }
+            JSONObject json = new JSONObject();
+            json.put(SystemConstant.PATH, stringJoiner.toString());
+            json.put(SystemConstant.TYPE, ossStr);
+            json.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
+            tbTask.setReportFilePath(json.toJSONString());
+
+        } catch (Exception e) {
+            StringJoiner stringJoinerSummary = new StringJoiner("").add(tbTask.getSummary()).add("\n");
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_CREATE_TXT_TITLE, EXCEPTION_DATA, e.getMessage()));
+
+            String summary = stringJoinerSummary.toString();
+            if (summary.length() >= 65535) {
+                summary = "Data too long : " + summary.substring(0, 100) + "......" + summary.substring(summary.length() - 100);
+            }
+
+            tbTask.setSummary(summary);
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {
+            if (Objects.nonNull(excelFileTemp)) {
+                excelFileTemp.delete();
+            }
+            TBTaskService tbTaskService = SpringContextHolder.getBean(TBTaskService.class);
+            tbTask.setStatus(TaskStatusEnum.FINISH);
+            tbTaskService.updateById(tbTask);
+        }
+    }
 }

+ 8 - 6
distributed-print-business/src/main/resources/mapper/ExamPaperStructureMapper.xml

@@ -9,8 +9,8 @@
             be.id examId,
             bs.id semesterId,
             bs.name semesterName,
-            epp.third_relate_id thirdRelateId,
-            epp.third_relate_name thirdRelateName,
+            ep.third_relate_id thirdRelateId,
+            ep.third_relate_name thirdRelateName,
             eps.objective_structure objectiveStructure,
             eps.subjective_structure subjectiveStructure,
             ep.paper_number paperNumber,
@@ -34,12 +34,15 @@
                  ed.school_id,
                  ed.print_plan_id,
                  edc.paper_number,
-                 MAX(edc.course_code) AS course_code,
-                 MAX(edc.course_name) AS course_name
+                 edc.course_code,
+                 edc.course_name,
+                 edc.third_relate_id,
+                 tsse.exam_name third_relate_name
              FROM
                  exam_detail ed
                      LEFT JOIN exam_detail_course edc ON ed.id = edc.exam_detail_id
-             GROUP BY ed.school_id , ed.print_plan_id , edc.paper_number) ep ON epp.id = ep.print_plan_id
+                     LEFT JOIN t_sync_stmms_exam tsse ON edc.school_id = tsse.school_id and edc.third_relate_id = tsse.exam_id
+            WHERE edc.sync_status = #{syncStatus}) ep ON epp.id = ep.print_plan_id
                 LEFT JOIN
             (SELECT
                  school_id, paper_number, paper_type
@@ -58,7 +61,6 @@
         WHERE
             epp.school_id = #{schoolId}
             and et.user_id = #{propositionTeacherId}
-            and epp.sync_status = #{syncStatus}
         <if test="semesterId != null and semesterId != ''">
             and bs.id = #{semesterId}
         </if>

+ 19 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -168,6 +168,25 @@ public class ExamPrintPlanController {
         return ResultUtil.ok(examTasks);
     }
 
+    @ApiOperation(value = "关联试卷管理-查询-汇总数据")
+    @RequestMapping(value = "/relate_total", method = RequestMethod.POST)
+    @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH)
+    public Result relateTotal(@ApiParam(value = "学期ID") @RequestParam(required = false) String semesterId,
+                             @ApiParam(value = "考试ID") @RequestParam(required = false) String examId,
+                             @RequestParam(value = "relateType", required = false) String relateType,
+                             @RequestParam(value = "printPlanIdList", required = false) List<String> printPlanIdList,
+                             @RequestParam(value = "courseCode", required = false) String courseCode,
+                             @RequestParam(value = "paperNumber", required = false) String paperNumber,
+                             @RequestParam(value = "userName", required = false) String userName,
+                             @RequestParam(value = "cardRuleId", required = false) Long cardRuleId) {
+        if (Objects.isNull(printPlanIdList)) {
+            printPlanIdList = new ArrayList<>();
+        }
+        List<Long> idList = printPlanIdList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList());
+        Map map = examTaskDetailService.listTotal(SystemConstant.convertIdToLong(semesterId),SystemConstant.convertIdToLong(examId),relateType, idList, courseCode, paperNumber, userName, cardRuleId);
+        return ResultUtil.ok(map);
+    }
+
     /**
      * 关联/更换试卷
      *

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

@@ -214,6 +214,8 @@ public class SystemConstant {
     public static final String FTL_PREFIX = ".ftl";
     public static final String ZIP_PREFIX = ".zip";
     public static final String TXT_PREFIX = ".txt";
+
+    public static final String EXCEL_PREFIX = ".xlsx";
     public static final String JPG_PREFIX = ".jpg";
     public static final String TEMP_PREFIX = ".temp";
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
@@ -247,6 +249,8 @@ public class SystemConstant {
     public static final String REGULAR_EXPRESSION_OF_CODE_PRIMARY_DIMENSION = "[A-Z]";
     public static final String REGULAR_EXPRESSION_OF_CODE_SECOND_DIMENSION = "[A-Z][1-9][0-9]*";
     public static final String SYS_USER = "sysUser";
+
+    public static final String ERROR_DATA_LIST = "errorDataList";
     public static final String DATA_COUNT = "dataCount";
     public static final List<Long> MENU_MANAGE = Arrays.asList(507L, 508L, 530L, 531L, 675L, 676L, 795L, 796L, 797L, 798L, 799L, 800L, 801L, 802L);
     public static final float PAPER_DEVIATION = 2;

+ 12 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TBTask.java

@@ -85,6 +85,10 @@ public class TBTask extends BaseEntity implements Serializable {
     @TableField(value = "result_file_path")
     private String resultFilePath;
 
+    @ApiModelProperty(value = "错误数据文件路径")
+    @TableField(value = "error_file_path")
+    private String errorFilePath;
+
     @ApiModelProperty(value = "报告路径")
     @TableField(value = "report_file_path")
     private String reportFilePath;
@@ -297,6 +301,14 @@ public class TBTask extends BaseEntity implements Serializable {
         this.resultFilePath = resultFilePath;
     }
 
+    public String getErrorFilePath() {
+        return errorFilePath;
+    }
+
+    public void setErrorFilePath(String errorFilePath) {
+        this.errorFilePath = errorFilePath;
+    }
+
     public String getReportFilePath() {
         return reportFilePath;
     }

+ 21 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/util/ExcelUtil.java

@@ -22,9 +22,7 @@ import org.springframework.util.LinkedMultiValueMap;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotNull;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.net.URLEncoder;
@@ -95,6 +93,26 @@ public class ExcelUtil {
         log.debug("导出Excel结束");
     }
 
+    /**
+     * 导出excel,本地保存
+     *
+     * @param file
+     * @param dataClass
+     * @param dataset
+     * @throws Exception
+     */
+    public static void excelExportLocal(File file, Class<?> dataClass,
+                                        Collection<?> dataset) throws Exception {
+        log.debug("导出Excel开始...");
+        FileOutputStream outputStream = new FileOutputStream(file);
+
+        ExcelWriter excelExporter = new ExcelWriter(dataClass, "sheet1");
+        excelExporter.write(dataset, outputStream);
+        outputStream.flush();
+        outputStream.close();
+        log.debug("导出Excel结束");
+    }
+
     /**
      * 生成excel
      *