Browse Source

字典管理除导入

caozixuan 3 years ago
parent
commit
48ef77eb65

+ 72 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/dto/excel/BasicStudentImportDto.java

@@ -0,0 +1,72 @@
+package com.qmth.distributed.print.business.bean.dto.excel;
+
+import com.qmth.teachcloud.common.annotation.ExcelNote;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 基础学生数据导入类
+ * @Author: CaoZixuan
+ * @Date: 2021-08-05
+ */
+public class BasicStudentImportDto {
+    @ExcelNote(value = "姓名")
+    @NotNull
+    private String studentName;
+
+    @ExcelNote(value = "学号")
+    @NotNull
+    private String studentCode;
+
+    @ExcelNote(value = "手机号")
+    @NotNull
+    private String phoneNumber;
+
+    @ExcelNote(value = "校区")
+    @NotNull
+    private String campusName;
+
+    @ExcelNote(value = "班级")
+    @NotNull
+    private String clazz;
+
+    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 getPhoneNumber() {
+        return phoneNumber;
+    }
+
+    public void setPhoneNumber(String phoneNumber) {
+        this.phoneNumber = phoneNumber;
+    }
+
+    public String getCampusName() {
+        return campusName;
+    }
+
+    public void setCampusName(String campusName) {
+        this.campusName = campusName;
+    }
+
+    public String getClazz() {
+        return clazz;
+    }
+
+    public void setClazz(String clazz) {
+        this.clazz = clazz;
+    }
+}

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

@@ -682,6 +682,7 @@ public class PrintCommonServiceServiceImpl implements PrintCommonService {
             } else {
                 map = new HashMap<>();
                 TBTask tbTask = tbTaskService.saveTaskCommon(basicAttachment, taskTypeEnum, map, null);
+                map.put(SystemConstant.FILE,file);
                 tbTaskService.save(tbTask);
             }
         } catch (Exception e) {

+ 60 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncStudentDataImportService.java

@@ -0,0 +1,60 @@
+package com.qmth.distributed.print.business.templete.execute;
+
+import cn.hutool.core.date.DateUtil;
+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;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.TaskResultEnum;
+import com.qmth.teachcloud.common.enums.TaskStatusEnum;
+import com.qmth.teachcloud.common.service.TBTaskService;
+import com.qmth.teachcloud.common.util.Result;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.MessageFormat;
+import java.util.*;
+
+/**
+ * @Description: 异步-学生基础信息导入
+ * @Author: CaoZixuan
+ * @Date: 2021-04-07
+ */
+@Service
+public class AsyncStudentDataImportService extends AsyncImportTaskTemplete {
+
+    private final static Logger log = LoggerFactory.getLogger(AsyncStudentDataImportService.class);
+
+    public static final String OBJ_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, OBJ_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.executeImportBasicStudentLogic(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){
+
+        }
+        return null;
+    }
+}

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

@@ -69,4 +69,12 @@ public interface TaskLogicService {
      * @return
      */
     Map<String, Object> executeGenerateExamLogic(Map<String, Object> map);
+
+    /**
+     * 处理导入考生数据
+     * @param map 数据源
+     * @return 结果
+     * @throws Exception 异常
+     */
+    Map<String,Object> executeImportBasicStudentLogic(Map<String,Object> map) throws Exception;
 }

+ 47 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -8,9 +8,11 @@ import com.alibaba.fastjson.JSONObject;
 import com.aliyun.oss.common.utils.BinaryUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.google.common.collect.Lists;
 import com.itextpdf.text.DocumentException;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.distributed.print.business.bean.dto.excel.BasicStudentImportDto;
 import com.qmth.distributed.print.business.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.cache.CreatePdfCacheUtil;
 import com.qmth.distributed.print.business.entity.*;
@@ -31,6 +33,7 @@ import com.qmth.teachcloud.common.enums.PageSizeEnum;
 import com.qmth.teachcloud.common.enums.UploadFileEnum;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.*;
+import com.qmth.teachcloud.common.util.excel.ExcelError;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -48,6 +51,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.FileCopyUtils;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.*;
@@ -1171,6 +1176,48 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         return map;
     }
 
+    @Transactional
+    @Override
+    public Map<String, Object> executeImportBasicStudentLogic(Map<String, Object> map) throws Exception {
+        MultipartFile file = (MultipartFile) map.get(SystemConstant.FILE);
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(BasicStudentImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+            List<ExcelError> excelErrorTemp = new ArrayList<>();
+            Map<String,String> checkMap = new HashMap<>();
+            for (int i = 0; i < finalExcelList.size(); i++) {
+                LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
+                List<Object> basicStudentImportDtoList = excelMap.get(i);
+                for (int y = 0; y < Objects.requireNonNull(basicStudentImportDtoList).size(); y++) {
+                    BasicStudentImportDto basicStudentImportDto = (BasicStudentImportDto) basicStudentImportDtoList.get(y);
+                    String studentName = basicStudentImportDto.getStudentName();
+                    String studentCode = basicStudentImportDto.getStudentCode();
+                    String phoneNumber = basicStudentImportDto.getPhoneNumber();
+                    String campusName = basicStudentImportDto.getCampusName();
+                    String clazz = basicStudentImportDto.getClazz();
+
+                    // 检验excel中
+                    if (checkMap.containsKey(studentCode)){
+                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【课程编号】:" + studentCode);
+                    }else {
+                        checkMap.put(studentCode,studentName);
+                    }
+
+                    excelErrorTemp.addAll(ExcelUtil.checkExcelField(basicStudentImportDto, y, i));
+                    if (Objects.isNull(studentCode) || studentCode.length() > 30 || !studentCode.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE)){
+                        excelErrorTemp.add(new ExcelError(y + 1,"excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[学号]不符合输入规范"));
+                    }
+                    if (Objects.isNull(studentName) || studentName.length() > 30){
+                        excelErrorTemp.add(new ExcelError(y + 1,"excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[学生名称]不符合输入规范"));
+                    }
+                }
+            }
+            if (excelErrorTemp.size() > 0) {
+                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(excelErrorTemp));
+            }
+            return finalExcelList;
+        });
+        return null;
+    }
+
     public String createTempNumber(SerialNumberParams serialNumberParams){
         return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
     }

+ 29 - 29
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -60,35 +60,35 @@ public class BasicCourseController {
         return ResultUtil.ok(userDtos);
     }
 
-    /**
-     * 模糊查询
-     *
-     * @param param
-     * @return
-     */
-    @ApiOperation(value = "模糊查询")
-    @RequestMapping(value = "/query", method = RequestMethod.POST)
-    public Result query(@RequestParam(value = "param", required = false) String param,
-                        @RequestParam(value = "printPlanId", required = false) Long printPlanId) {
-        List<BasicCourse> userDtos = printCommonService.list(param, printPlanId);
-        return ResultUtil.ok(userDtos);
-    }
-
-    /**
-     * 新增/修改
-     *
-     * @param course
-     * @return
-     */
-    @ApiOperation(value = "新增/修改")
-    @RequestMapping(value = "/save", method = RequestMethod.POST)
-    public Result save(@RequestBody BasicCourse course) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        course.setSchoolId(schoolId);
-        boolean isSuccess = printCommonService.saveCourse(course, sysUser.getId());
-        return ResultUtil.ok(isSuccess);
-    }
+//    /**
+//     * 模糊查询
+//     *
+//     * @param param
+//     * @return
+//     */
+//    @ApiOperation(value = "模糊查询")
+//    @RequestMapping(value = "/query", method = RequestMethod.POST)
+//    public Result query(@RequestParam(value = "param", required = false) String param,
+//                        @RequestParam(value = "printPlanId", required = false) Long printPlanId) {
+//        List<BasicCourse> userDtos = printCommonService.list(param, printPlanId);
+//        return ResultUtil.ok(userDtos);
+//    }
+//
+//    /**
+//     * 新增/修改
+//     *
+//     * @param course
+//     * @return
+//     */
+//    @ApiOperation(value = "新增/修改")
+//    @RequestMapping(value = "/save", method = RequestMethod.POST)
+//    public Result save(@RequestBody BasicCourse course) {
+//        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+//        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
+//        course.setSchoolId(schoolId);
+//        boolean isSuccess = printCommonService.saveCourse(course, sysUser.getId());
+//        return ResultUtil.ok(isSuccess);
+//    }
 
     /**
      * 删除

+ 21 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicStudentController.java

@@ -7,7 +7,11 @@ import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.entity.BasicStudent;
 import com.qmth.distributed.print.business.service.BasicStudentService;
+import com.qmth.distributed.print.business.service.PrintCommonService;
+import com.qmth.distributed.print.business.templete.execute.AsyncStudentDataImportService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -15,10 +19,13 @@ import io.swagger.annotations.*;
 import org.junit.Test;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -34,6 +41,10 @@ import java.util.List;
 public class BasicStudentController {
     @Resource
     private BasicStudentService basicStudentService;
+    @Resource
+    private PrintCommonService printCommonService;
+    @Resource
+    private AsyncStudentDataImportService asyncStudentDataImportService;
 
     @ApiOperation(value = "学生基本信息管理-查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
@@ -60,4 +71,14 @@ public class BasicStudentController {
     public Result deleteBasicCampus(@ApiParam(value = "选择的要删除的学生id集合",required = true) List<Long> idList) {
         return ResultUtil.ok(basicStudentService.removeBasicStudentBatch(idList));
     }
+
+    @ApiOperation(value = "学生基本信息管理-批量导入(异步)")
+    @RequestMapping(value = "/data_import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result examinationImportAysnc(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
+        Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.STUDENT_IMPORT);
+        asyncStudentDataImportService.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("创建任务失败");
+    }
 }

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

@@ -75,6 +75,7 @@ public class SystemConstant {
     public static final String ADMIN_CODE = "admin";
     public static final String AUTH = "auth";//命题老师id
 //    public static final int MAX_RETRY_CREATE_PDF_COUNT = 5;
+    public static final String REGULAR_EXPRESSION_OF_CODE = "[a-zA-Z0-9](\\w+)?-?(\\w+)?—?(\\w+)?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\w+)?";
 
     /**
      * oss url过期时间

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/TaskTypeEnum.java

@@ -13,6 +13,8 @@ public enum TaskTypeEnum {
 
     USER_IMPORT("用户导入"),
 
+    STUDENT_IMPORT("学生导入"),
+
     COURSE_IMPORT("课程导入"),
 
     QUESTION_MISSION_BATCH_CREATE("批量新建命题任务"),