Przeglądaj źródła

Merge remote-tracking branch 'origin/dev_v3.1.0' into dev_v3.1.0

wangliang 3 lat temu
rodzic
commit
312b26cff4

+ 6 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/GradeInitializeMapper.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.distributed.print.business.bean.result.analyze.GradeInitResult;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @Description: 教研分析-试卷初始化页面(老师)
  * @Author: CaoZixuan
@@ -29,4 +31,8 @@ public interface GradeInitializeMapper {
                                                  @Param("courseCode") String courseCode,
                                                  @Param("userId") Long userId,
                                                  @Param("schoolId") Long schoolId);
+
+    List<GradeInitResult> listNeedAnalyzedPaperToWork(@Param("schoolId") Long schoolId, @Param("userId") Long userId);
+
+    IPage<GradeInitResult> listNeedAnalyzedPaperToWork(@Param("iPage") Page<GradeInitResult> iPage, @Param("schoolId") Long schoolId, @Param("userId") Long userId);
 }

+ 8 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeBatchService.java

@@ -53,4 +53,12 @@ public interface GradeBatchService extends IService<GradeBatch> {
     void downloadFile(Long batchId, HttpServletResponse response) throws IOException;
 
     void uploadFile(Long batchId, MultipartFile file) throws IOException, NoSuchFieldException;
+
+    /**
+     * 创建Txt文件
+     *
+     * @param batchId   批次id
+     * @param exception 异常
+     */
+    void createTxt(Long batchId, String exception);
 }

+ 4 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/GradeInitializeService.java

@@ -21,4 +21,8 @@ public interface GradeInitializeService {
      * @return 试卷结果
      */
     IPage<GradeInitResult> findNeedAnalyzedPaper(Long semesterId, Long examId, String courseCode, SysUser requestUser,int pageNumber,int pageSize);
+
+    long countByPropositionTeacherId();
+
+    IPage<GradeInitResult> listNeedAnalyzedPaperToWork(SysUser requestUser, Integer pageNumber, Integer pageSize);
 }

+ 87 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeBatchServiceImpl.java

@@ -7,6 +7,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.common.collect.Lists;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.ExamStudentCourseDto;
 import com.qmth.distributed.print.business.bean.dto.GradeBatchStudentDto;
 import com.qmth.distributed.print.business.bean.params.analyze.GradeBatchParam;
@@ -19,12 +20,20 @@ import com.qmth.distributed.print.business.mapper.GradeBatchMapper;
 import com.qmth.distributed.print.business.service.GradeBatchPaperService;
 import com.qmth.distributed.print.business.service.GradeBatchService;
 import com.qmth.distributed.print.business.service.GradeBatchStudentService;
+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.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.GradeAnalyzePaperStatusEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.util.ExcelUtil;
+import com.qmth.teachcloud.common.util.FileStoreUtil;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.excel.ExcelError;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
@@ -36,9 +45,10 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.*;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -217,7 +227,7 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
             for (int i = 0; i < finalExcelList.size(); i++) {
                 LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
                 List<Object> gradeBatchStudentTempList = excelMap.get(i);
-                for (int y = 0; y < gradeBatchStudentTempList.size(); y++) {
+                for (int y = 0; y < Objects.requireNonNull(gradeBatchStudentTempList).size(); y++) {
                     GradeBatchStudentDto examStudentCourseDto = (GradeBatchStudentDto) gradeBatchStudentTempList.get(y);
                     if (StringUtils.isBlank(examStudentCourseDto.getCourseCode())) {
                         excelErrorTemp.add(new ExcelError(y + 1, "excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程代码]必填"));
@@ -259,7 +269,7 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
             }
 
             if (excelErrorTemp.size() > 0) {
-                List<String> errors = excelErrorTemp.stream().map(m -> m.getExcelErrorType()).collect(Collectors.toList());
+                List<String> errors = excelErrorTemp.stream().map(ExcelError::getExcelErrorType).collect(Collectors.toList());
                 throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(errors));
             }
             return finalExcelList;
@@ -268,6 +278,79 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
         executeImportGradeBatchStudent(batchId, list);
     }
 
+    @Override
+    public void createTxt(Long batchId,String exception) {
+        final String TXT_PREFIX = ".txt";
+        GradeBatch gradeBatch = this.getById(batchId);
+        if (Objects.isNull(gradeBatch)){
+            throw ExceptionResultEnum.ERROR.exception("批次不存在");
+        }
+        FileStoreUtil fileStoreUtil = SpringContextHolder.getBean(FileStoreUtil.class);
+        DictionaryConfig dictionaryConfig = SpringContextHolder.getBean(DictionaryConfig.class);
+        ByteArrayOutputStream out = null;
+        InputStream inputStream = null;
+        try {
+            // 有异常才创建txt文件
+            if (SystemConstant.strNotNull(exception)){
+                boolean oss = dictionaryConfig.sysDomain().isOss();
+                LocalDateTime nowTime = LocalDateTime.now();
+                StringJoiner stringJoiner = new StringJoiner("");
+                if (!oss) {
+                    stringJoiner.add(SystemConstant.TEMP_FILES_DIR).add(File.separator);
+                }
+                stringJoiner.add(UploadFileEnum.FILE.getTitle()).add(File.separator);
+                stringJoiner.add(String.valueOf(nowTime.getYear())).add(File.separator)
+                        .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                        .add(String.format("%02d", nowTime.getDayOfMonth()));
+                stringJoiner.add(File.separator).add(SystemConstant.getUuid()).add(TXT_PREFIX);
+
+                JSONObject jsonObject = new JSONObject();
+                out = new ByteArrayOutputStream();
+                out.write(exception.getBytes(StandardCharsets.UTF_8));
+                byte[] bookByteAry = out.toByteArray();
+                inputStream = new ByteArrayInputStream(bookByteAry);
+
+                if (oss) {//上传至oss\
+                    String dirName = stringJoiner.toString().replaceAll("\\\\", "/");
+                    fileStoreUtil.ossUpload(dirName, inputStream, DigestUtils.md5Hex(inputStream), UploadFileEnum.FILE.getFssType());
+                    jsonObject.put(SystemConstant.TYPE, SystemConstant.OSS);
+                    jsonObject.put(SystemConstant.PATH, dirName);
+                } else {//上传至服务器
+                    File finalFile = new File(stringJoiner.toString());
+                    if (!finalFile.exists()) {
+                        finalFile.getParentFile().mkdirs();
+                        finalFile.createNewFile();
+                    }
+                    FileUtils.copyInputStreamToFile(inputStream, finalFile);
+                    jsonObject.put(SystemConstant.TYPE, SystemConstant.LOCAL);
+                    jsonObject.put(SystemConstant.PATH, stringJoiner.toString());
+                }
+                jsonObject.put(SystemConstant.UPLOAD_TYPE, UploadFileEnum.FILE);
+                gradeBatch.setReportFilePath(jsonObject.toJSONString());
+            }
+        } catch (Exception e) {
+            gradeBatch.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) {
+                log.error(SystemConstant.LOG_ERROR, e);
+            }
+            this.updateById(gradeBatch);
+        }
+    }
+
     @Transactional
     public void executeImportGradeBatchStudent(Long batchId, List<GradeBatchStudentDto> list) {
         UpdateWrapper<GradeBatchStudent> updateWrapper = new UpdateWrapper<>();
@@ -291,5 +374,4 @@ public class GradeBatchServiceImpl extends ServiceImpl<GradeBatchMapper, GradeBa
 
         gradeBatchStudentService.saveBatch(gradeBatchStudents);
     }
-
 }

+ 20 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/GradeInitializeServiceImpl.java

@@ -6,9 +6,11 @@ import com.qmth.distributed.print.business.bean.result.analyze.GradeInitResult;
 import com.qmth.distributed.print.business.mapper.GradeInitializeMapper;
 import com.qmth.distributed.print.business.service.GradeInitializeService;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * @Description: 教研分析对接-数据初始化服务实现类
@@ -22,9 +24,25 @@ public class GradeInitializeServiceImpl implements GradeInitializeService {
 
 
     @Override
-    public IPage<GradeInitResult> findNeedAnalyzedPaper(Long semesterId, Long examId, String courseCode, SysUser requestUser,int pageNumber,int pageSize) {
+    public IPage<GradeInitResult> findNeedAnalyzedPaper(Long semesterId, Long examId, String courseCode, SysUser requestUser, int pageNumber, int pageSize) {
         Long schoolId = requestUser.getSchoolId();
         Long userId = requestUser.getId();
-        return gradeInitializeMapper.findNeedAnalyzedPaper(new Page<>(pageNumber, pageSize), semesterId,examId,courseCode,userId,schoolId);
+        return gradeInitializeMapper.findNeedAnalyzedPaper(new Page<>(pageNumber, pageSize), semesterId, examId, courseCode, userId, schoolId);
+    }
+
+    @Override
+    public long countByPropositionTeacherId() {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        Long schoolId = requestUser.getSchoolId();
+        Long userId = requestUser.getId();
+        List<GradeInitResult> findNeedAnalyzedPaper = gradeInitializeMapper.listNeedAnalyzedPaperToWork(schoolId, userId);
+        return findNeedAnalyzedPaper.isEmpty() ? 0 : findNeedAnalyzedPaper.size();
+    }
+
+    @Override
+    public IPage<GradeInitResult> listNeedAnalyzedPaperToWork(SysUser requestUser, Integer pageNumber, Integer pageSize) {
+        Long schoolId = requestUser.getSchoolId();
+        Long userId = requestUser.getId();
+        return gradeInitializeMapper.listNeedAnalyzedPaperToWork(new Page<>(pageNumber, pageSize),schoolId, userId);
     }
 }

+ 41 - 0
distributed-print-business/src/main/resources/mapper/GradeInitializeMapper.xml

@@ -50,4 +50,45 @@
         </where>
         ORDER BY bs.name , be.name , et.course_code , et.paper_number , pnpt.paper_type
     </select>
+
+    <select id="listNeedAnalyzedPaperToWork"
+            resultType="com.qmth.distributed.print.business.bean.result.analyze.GradeInitResult">
+        SELECT
+        bs.name AS semesterName,
+        be.name AS examName,
+        et.course_code AS courseCode,
+        et.course_name AS courseName,
+        et.paper_number AS paperNumber,
+        pnpt.paper_type AS paperType,
+        pnpt.paper_name AS paperName
+        FROM
+        exam_task et
+        INNER JOIN
+        exam_task_detail etd ON et.id = etd.exam_task_id
+        INNER JOIN
+        (SELECT
+        school_id,
+        paper_number,
+        paper_type,
+        MAX(paper_name) AS paper_name
+        FROM
+        grade_batch_paper
+        where status = "SETTING_GRADE_PAPER_PARAM"
+        GROUP BY school_id , paper_number , paper_type) pnpt ON et.school_id = pnpt.school_id
+        AND et.paper_number = pnpt.paper_number
+        AND LOCATE(pnpt.paper_type, etd.relate_paper_type)
+        LEFT JOIN
+        basic_exam be ON et.exam_id = be.id
+        LEFT JOIN
+        basic_semester bs ON bs.id = be.semester_id
+        <where>
+            <if test="schoolId != null and schoolId != ''">
+                AND et.school_id = #{schoolId}
+            </if>
+            <if test="userId != null and userId != ''">
+                AND et.user_id = #{userId}
+            </if>
+        </where>
+        ORDER BY bs.name , be.name , et.course_code , et.paper_number , pnpt.paper_type
+    </select>
 </mapper>

+ 28 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/WorkController.java

@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.WorkResult;
+import com.qmth.distributed.print.business.bean.result.analyze.GradeInitResult;
 import com.qmth.distributed.print.business.entity.ExamPaperStructure;
 import com.qmth.distributed.print.business.enums.ExamPaperStructureStatusEnum;
 import com.qmth.distributed.print.business.service.ExamPaperStructureService;
 import com.qmth.distributed.print.business.service.ExamTaskService;
+import com.qmth.distributed.print.business.service.GradeBatchPaperService;
+import com.qmth.distributed.print.business.service.GradeInitializeService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.util.Result;
@@ -45,6 +48,9 @@ public class WorkController {
     @Autowired
     ExamPaperStructureService examPaperStructureService;
 
+    @Resource
+    GradeInitializeService gradeInitializeService;
+
     @ApiOperation(value = "获取待办接口")
     @RequestMapping(value = "/exam/task/ready", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = WorkResult.class)})
@@ -87,5 +93,27 @@ public class WorkController {
         IPage<ExamPaperStructure> examPaperStructureIPage = examPaperStructureService.listByPropositionTeacherId(null, null, pageNumber, pageSize, structureStatusEnums);
         return ResultUtil.ok(examPaperStructureIPage);
     }
+
+    /**
+     * 阅卷待办任务-数量
+     */
+    @ApiOperation(value = "教研待办任务-数量")
+    @RequestMapping(value = "/grade/task/ready_count", method = RequestMethod.POST)
+    public Result countReport() {
+        long count = gradeInitializeService.countByPropositionTeacherId();
+        return ResultUtil.ok(count);
+    }
+
+    /**
+     * 阅卷待办任务
+     */
+    @ApiOperation(value = "阅卷待办任务-列表")
+    @RequestMapping(value = "/grade/task/ready", method = RequestMethod.POST)
+    public Result gradeList(@RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                            @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        IPage<GradeInitResult> needAnalyzedPaper = gradeInitializeService.listNeedAnalyzedPaperToWork(requestUser, pageNumber, pageSize);
+        return ResultUtil.ok(needAnalyzedPaper);
+    }
 }