caozixuan 2 лет назад
Родитель
Сommit
bb62452996

+ 9 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/dto/Temp.java

@@ -0,0 +1,9 @@
+package com.qmth.paper.library.business.bean.dto;
+
+/**
+ * @Description:
+ * @Author: CaoZixuan
+ * @Date:
+ */
+public class Temp {
+}

+ 107 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/bean/dto/excel/PaperScanTaskImportDto.java

@@ -0,0 +1,107 @@
+package com.qmth.paper.library.business.bean.dto.excel;
+
+import com.qmth.paper.library.common.annotation.ExcelImportTempleteVaild;
+import com.qmth.paper.library.common.annotation.ExcelNote;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @Description: 扫描任务导入excel
+ * @Author: CaoZixuan
+ * @Date: 2022-09-29
+ */
+@ExcelImportTempleteVaild(value = true)
+public class PaperScanTaskImportDto implements Serializable {
+    @ExcelNote(value = "任务名称")
+    @NotNull
+    private String scanTaskName;
+
+    @ExcelNote(value = "档案名称")
+    @NotNull
+    private String archivesName;
+
+    @ExcelNote(value = "档案编号")
+    @NotNull
+    private String archivesCode;
+
+    @ExcelNote(value = "课程")
+    private String courseName;
+
+    @ExcelNote(value = "任课老师")
+    private String teacherName;
+
+    @ExcelNote(value = "姓名")
+    private String studentName;
+
+    @ExcelNote(value = "学号")
+    @NotNull
+    private String studentCode;
+
+    @ExcelNote(value = "教学班")
+    private String teachClazzName;
+
+    public String getScanTaskName() {
+        return scanTaskName;
+    }
+
+    public void setScanTaskName(String scanTaskName) {
+        this.scanTaskName = scanTaskName;
+    }
+
+    public String getArchivesName() {
+        return archivesName;
+    }
+
+    public void setArchivesName(String archivesName) {
+        this.archivesName = archivesName;
+    }
+
+    public String getArchivesCode() {
+        return archivesCode;
+    }
+
+    public void setArchivesCode(String archivesCode) {
+        this.archivesCode = archivesCode;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public String getStudentCode() {
+        return studentCode;
+    }
+
+    public void setStudentCode(String studentCode) {
+        this.studentCode = studentCode;
+    }
+
+    public String getTeachClazzName() {
+        return teachClazzName;
+    }
+
+    public void setTeachClazzName(String teachClazzName) {
+        this.teachClazzName = teachClazzName;
+    }
+}

+ 1 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperScanTaskDetailService.java

@@ -9,5 +9,6 @@ import com.qmth.paper.library.business.entity.PaperScanTaskDetail;
  * </p>
  */
 public interface PaperScanTaskDetailService extends IService<PaperScanTaskDetail> {
+    void importPaperScanTaskDetail();
 
 }

+ 70 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/templete/execute/AsyncPaperScanTaskImportService.java

@@ -0,0 +1,70 @@
+package com.qmth.paper.library.business.templete.execute;
+
+import cn.hutool.core.date.DateUtil;
+import com.qmth.boot.api.exception.ApiException;
+import com.qmth.paper.library.business.templete.importData.AsyncImportTaskTemplete;
+import com.qmth.paper.library.business.templete.service.TaskLogicService;
+import com.qmth.paper.library.common.contant.SpringContextHolder;
+import com.qmth.paper.library.common.contant.SystemConstant;
+import com.qmth.paper.library.common.entity.TBTask;
+import com.qmth.paper.library.common.enums.TaskResultEnum;
+import com.qmth.paper.library.common.enums.TaskStatusEnum;
+import com.qmth.paper.library.common.service.TBTaskService;
+import com.qmth.paper.library.common.util.Result;
+import com.qmth.paper.library.common.util.ResultUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * @Description: 扫描任务批量导入
+ * @Author: CaoZixuan
+ * @Date: 2022-09-29
+ */
+public class AsyncPaperScanTaskImportService extends AsyncImportTaskTemplete {
+
+    private final static Logger log = LoggerFactory.getLogger(AsyncPaperScanTaskImportService.class);
+
+    public static final String SCAN_TASK_TITLE = "扫描任务";
+
+    @Override
+    public Result importTask(Map<String, Object> map) throws IOException, Exception {
+        TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
+        InputStream inputStream = super.getUploadFileInputStream(tbTask);
+        map.put("inputStream", inputStream);
+
+        StringJoiner stringJoinerSummary = new StringJoiner("\n")
+                .add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, SCAN_TASK_TITLE));
+        tbTask.setStatus(TaskStatusEnum.RUNNING);
+        TBTaskService tbTaskService = SpringContextHolder.getBean(TBTaskService.class);
+        tbTaskService.updateById(tbTask);
+
+        try {
+            TaskLogicService taskLogicService = SpringContextHolder.getBean(TaskLogicService.class);
+
+            // 执行导入扫描任务数据
+            Map<String, Object> result = taskLogicService.executeImportPaperScanTaskDetailLogic(map);
+            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) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {//生成txt文件
+            tbTask.setSummary(stringJoinerSummary.toString());
+            super.createTxt(tbTask);
+        }
+        return ResultUtil.ok(map);
+    }
+}

+ 9 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/TaskLogicService.java

@@ -20,4 +20,13 @@ public interface TaskLogicService {
      */
     Map<String, Object> executeImportSysOrgLogic(Map<String, Object> map) throws Exception;
 
+    /**
+     * 处理导入扫描任务详情
+     *
+     * @param map 数据源
+     * @return 结果
+     * @throws Exception 异常
+     */
+    Map<String, Object> executeImportPaperScanTaskDetailLogic(Map<String, Object> map) throws Exception;
+
 }

+ 110 - 3
paper-library-business/src/main/java/com/qmth/paper/library/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -1,11 +1,17 @@
 package com.qmth.paper.library.business.templete.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.common.collect.Lists;
+import com.qmth.paper.library.business.bean.dto.excel.PaperScanTaskImportDto;
+import com.qmth.paper.library.business.entity.PaperArchives;
+import com.qmth.paper.library.business.entity.PaperScanTask;
+import com.qmth.paper.library.business.service.PaperArchivesService;
 import com.qmth.paper.library.business.templete.service.TaskLogicService;
 import com.qmth.paper.library.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.paper.library.common.bean.dto.excel.SysOrgImportDto;
 import com.qmth.paper.library.common.contant.SystemConstant;
 import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.service.SysOrgService;
 import com.qmth.paper.library.common.util.ExcelUtil;
 import org.slf4j.Logger;
@@ -19,10 +25,9 @@ import javax.annotation.Resource;
 import java.io.IOException;
 import java.io.InputStream;
 import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @Description: 任务处理逻辑impl
@@ -37,6 +42,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 
     @Resource
     private SysOrgService sysOrgService;
+    @Resource
+    private PaperArchivesService paperArchivesService;
 
 
     @Transactional
@@ -71,4 +78,104 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         }
         return map;
     }
+
+    @Transactional
+    @Override
+    public Map<String, Object> executeImportPaperScanTaskDetailLogic(Map<String, Object> map) throws Exception {
+        InputStream inputStream = (InputStream) map.get("inputStream");
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(PaperScanTaskImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> finalExcelList);
+        List<PaperScanTaskImportDto> datasource = new ArrayList<>();
+        for (int i = 0; i < finalList.size(); i++) {
+            LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
+            List<Object> paperScanTaskImportDtoList = excelMap.get(i);
+            assert paperScanTaskImportDtoList != null;
+            if (paperScanTaskImportDtoList.get(0) instanceof DescribeImportDto) {
+                continue;
+            }
+            map.put("dataCount", paperScanTaskImportDtoList.size());
+            //  处理机构
+            if (paperScanTaskImportDtoList.get(0) instanceof PaperScanTaskImportDto) {
+                datasource = paperScanTaskImportDtoList.stream().map(e -> {
+                    PaperScanTaskImportDto paperScanTaskImportDto = new PaperScanTaskImportDto();
+                    BeanUtils.copyProperties(e, paperScanTaskImportDto);
+                    return paperScanTaskImportDto;
+                }).collect(Collectors.toList());
+            }
+        }
+        if (datasource.size() > 0) {
+            // 选择的扫描档案id
+            Long paperArchivesId = SystemConstant.convertIdToLong(String.valueOf(map.get("paperArchivesId")));
+            List<Map<String, String>> archivesCheckMapList = datasource.stream().flatMap(e -> {
+                Map<String, String> checkMap = new HashMap<>();
+                checkMap.put("archivesName", e.getArchivesName());
+                checkMap.put("archivesCode", e.getArchivesCode());
+                return Stream.of(checkMap);
+            }).distinct().collect(Collectors.toList());
+
+            if (archivesCheckMapList.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("excel中的档案信息异常(导入扫描任务数据必须是一个档案下的)");
+            }
+            Map<String, String> archivesCheckMap = archivesCheckMapList.get(0);
+            String archivesName = archivesCheckMap.get("archivesName");
+            String archivesCode = archivesCheckMap.get("archivesCode");
+
+            // 判断选择的档案和导入的是同一个
+            PaperArchives paperArchives = paperArchivesService.getOne(new QueryWrapper<PaperArchives>()
+                    .lambda()
+                    .eq(PaperArchives::getId, paperArchivesId)
+                    .eq(PaperArchives::getArchivesCode, archivesCode)
+                    .eq(PaperArchives::getArchivesName, archivesName));
+            if (Objects.nonNull(paperArchives)) {
+                throw ExceptionResultEnum.ERROR.exception("excel中的档案信息和选择的档案不符");
+            }
+
+            // 归纳 - 扫描任务集合
+            // 扫描任务唯一信息
+            Map<String, PaperScanTask> paperScanTaskMap = new HashMap<>();
+            for (PaperScanTaskImportDto paperScanTaskImportDto : datasource) {
+                String scanTaskName = paperScanTaskImportDto.getScanTaskName();
+                String courseName = paperScanTaskImportDto.getCourseName();
+                String teacherName = paperScanTaskImportDto.getTeacherName();
+                String teachClazzName = paperScanTaskImportDto.getTeachClazzName();
+
+                if (paperScanTaskMap.containsKey(scanTaskName)) {
+                    // 如果试卷任务map中包含该任务名称 - 检验其他信息是否一致(课程,任课教师,教学班 为空的不检验)
+                    PaperScanTask v = paperScanTaskMap.get(scanTaskName);
+                    String vCourseName = v.getCourseName();
+                    String vTeacherName = v.getTeacherName();
+                    String vTeachClazzName = v.getTeachClazzName();
+
+                    // 同一任务课程名称检验
+                    if (!SystemConstant.strNotNull(vCourseName)) {
+                        v.setCourseName(courseName);
+                    } else if (SystemConstant.strNotNull(courseName) && !vCourseName.equals(courseName)) {
+                        throw ExceptionResultEnum.ERROR.exception("excel数据异常:导入的任务【" + scanTaskName + "】存在不同的课程名称【" + vCourseName + "," + courseName + "】");
+                    }
+
+                    // 同一任务任课教师检验
+                    if (!SystemConstant.strNotNull(vTeacherName)) {
+                        v.setTeacherName(teacherName);
+                    } else if (SystemConstant.strNotNull(teacherName) && !vTeacherName.equals(teacherName)) {
+                        throw ExceptionResultEnum.ERROR.exception("excel数据异常:导入的任务【" + scanTaskName + "】存在不同的任课教师【" + vTeacherName + "," + teacherName + "】");
+                    }
+
+                    // 同一任务教学班检验
+                    if (!SystemConstant.strNotNull(vTeachClazzName)) {
+                        v.setTeachClazzName(teachClazzName);
+                    } else if (SystemConstant.strNotNull(teachClazzName) && !vTeachClazzName.equals(teachClazzName)) {
+                        throw ExceptionResultEnum.ERROR.exception("excel数据异常:导入的任务【" + scanTaskName + "】存在不同的教学班【" + vTeachClazzName + "," + teachClazzName + "】");
+                    }
+                } else {
+                    // 没包含直接put
+                    PaperScanTask v = new PaperScanTask();
+                    v.setScanTaskName(scanTaskName);
+                    v.setCourseName(courseName);
+                    v.setTeacherName(teacherName);
+                    v.setTeachClazzName(teachClazzName);
+                    paperScanTaskMap.put(scanTaskName, v);
+                }
+            }
+        }
+        return map;
+    }
 }

+ 3 - 1
paper-library-common/src/main/java/com/qmth/paper/library/common/enums/TaskTypeEnum.java

@@ -44,7 +44,9 @@ public enum TaskTypeEnum {
 
     SCORE_DOWNLOAD("成绩轨迹下载"),
 
-    DOWNLOAD_PAPER_FILE_BATCH("批量下载试卷文件");
+    DOWNLOAD_PAPER_FILE_BATCH("批量下载试卷文件"),
+
+    PAPER_SCAN_TASK_IMPORT("批量导入扫描任务");
 
     private String title;
 

+ 0 - 5
paper-library-common/src/main/java/com/qmth/paper/library/common/service/BasicStudentService.java

@@ -24,11 +24,6 @@ import java.util.Set;
  * @since 2021-08-02
  */
 public interface BasicStudentService extends IService<BasicStudent> {
-
-    IPage<BasicStudent> listPage(Page<BasicStudent> page, String classId);
-
-    List<TaskPrintClassDto> listByClass(Long schoolId, Set<String> stringList);
-
     /**
      * 学生基础信息分页查询
      *

+ 0 - 17
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/BasicStudentServiceImpl.java

@@ -65,23 +65,6 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         return this.baseMapper.findBasicStudentList(schoolId, collegeId, majorId, clazzId, studentCodeList);
     }
 
-    @Override
-    public IPage<BasicStudent> listPage(Page<BasicStudent> page, String classId) {
-        List<String> classIds = Arrays.asList(classId.split(","));
-        QueryWrapper<BasicStudent> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().in(BasicStudent::getClazzId, classIds)
-                .orderByAsc(BasicStudent::getClazzId)
-                .orderByAsc(BasicStudent::getStudentCode);
-        return this.baseMapper.selectPage(page, queryWrapper);
-    }
-
-    @Override
-    public List<TaskPrintClassDto> listByClass(Long schoolId, Set<String> stringList) {
-        return this.baseMapper.listByClass(schoolId, stringList).stream()
-                .peek(e -> e.setTeachBasicEnum(TeachBasicEnum.BASIC_CLAZZ))
-                .collect(Collectors.toList());
-    }
-
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Long saveBasicStudent(BasicStudentParams basicStudentParams, SysUser requestUser) {

+ 96 - 0
paper-library/src/main/java/com/qmth/paper/library/api/PaperScanTaskController.java

@@ -0,0 +1,96 @@
+package com.qmth.paper.library.api;
+
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.paper.library.business.bean.params.PaperScanTaskParam;
+import com.qmth.paper.library.business.bean.result.EditResult;
+import com.qmth.paper.library.business.service.PaperLibraryCommonService;
+import com.qmth.paper.library.business.service.PaperScanTaskService;
+import com.qmth.paper.library.business.templete.execute.AsyncPaperScanTaskImportService;
+import com.qmth.paper.library.common.contant.SystemConstant;
+import com.qmth.paper.library.common.entity.SysUser;
+import com.qmth.paper.library.common.entity.TBTask;
+import com.qmth.paper.library.common.enums.TaskTypeEnum;
+import com.qmth.paper.library.common.util.Result;
+import com.qmth.paper.library.common.util.ResultUtil;
+import com.qmth.paper.library.common.util.ServletUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 试卷扫描任务管理
+ * @Author: CaoZixuan
+ * @Date: 2022-09-29
+ */
+
+@Api(tags = "扫描任务管理controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.paper}/scan_task")
+@Validated
+@Aac(strict = BOOL.FALSE, auth = BOOL.FALSE)
+public class PaperScanTaskController {
+    @Resource
+    private PaperScanTaskService paperScanTaskService;
+    @Resource
+    private PaperLibraryCommonService paperLibraryCommonService;
+    @Resource
+    private AsyncPaperScanTaskImportService asyncPaperScanTaskImportService;
+
+    @ApiOperation(value = "扫描任务管理-查询")
+    @RequestMapping(value = "/query", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findPaperScanTaskPage(@ApiParam(value = "课程名称") @RequestParam(required = false) String courseName,
+                                        @ApiParam(value = "任课教师") @RequestParam(required = false) String teacherName,
+                                        @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                        @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(paperScanTaskService.paperScanTaskPage(courseName, teacherName, pageNumber, pageSize, requestUser));
+    }
+
+    @ApiOperation(value = "扫描任务管理-新增/编辑")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = EditResult.class)})
+    public Result savePaperScanTask(@Valid @RequestBody PaperScanTaskParam paperScanTaskParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(paperScanTaskService.editPaperScanTask(paperScanTaskParam, sysUser));
+    }
+
+    @ApiOperation(value = "扫描任务管理-批量删除(物理)")
+    @RequestMapping(value = "/delete_batch", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = EditResult.class)})
+    public Result deletePaperScanTask(@ApiParam(value = "选择的要删除的学生id集合", required = true) @RequestParam List<String> idList) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        paperScanTaskService.deletePaperScanTaskByIdList(idList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList()), sysUser);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "扫描任务管理-批量导入(异步)")
+    @RequestMapping(value = "/scan_task_import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result paperScanTaskImportAsync(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file,
+                                           @ApiParam(value = "档案id", required = true) @RequestParam Long paperArchivesId) throws Exception {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Map<String, Object> map = paperLibraryCommonService.saveTask(file, TaskTypeEnum.PAPER_SCAN_TASK_IMPORT);
+        map.put(SystemConstant.SYS_USER, sysUser);
+        map.put("paperArchivesId",paperArchivesId);
+        asyncPaperScanTaskImportService.importTask(map);
+        TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
+        return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");
+    }
+}