Browse Source

课程导入

caozixuan 3 years ago
parent
commit
2cebdfea5d

+ 4 - 5
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicStudentServiceImpl.java

@@ -5,9 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.distributed.print.business.bean.dto.excel.BasicStudentImportDto;
-import com.qmth.distributed.print.business.bean.params.BasicCampusParams;
 import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
 import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
+import com.qmth.distributed.print.business.bean.dto.excel.BasicStudentImportDto;
 import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
 import com.qmth.distributed.print.business.entity.BasicCampus;
 import com.qmth.distributed.print.business.entity.BasicCampus;
@@ -20,7 +19,6 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import org.checkerframework.checker.units.qual.A;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.LinkedMultiValueMap;
@@ -73,7 +71,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
         List<BasicStudentParams> basicStudentParamsList = new ArrayList<>();
         List<BasicStudentParams> basicStudentParamsList = new ArrayList<>();
         basicStudentParamsList.add(basicStudentParams);
         basicStudentParamsList.add(basicStudentParams);
         BasicStudent basicStudent = this.editEntityHelp(basicStudentParamsList,sysUser).get(0);
         BasicStudent basicStudent = this.editEntityHelp(basicStudentParamsList,sysUser).get(0);
-        this.updateById(basicStudent);
+        this.saveOrUpdate(basicStudent);
         return basicStudent.getId();
         return basicStudent.getId();
     }
     }
 
 
@@ -104,6 +102,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
             List<Object> basicStudentImportDtoList = excelMap.get(i);
             List<Object> basicStudentImportDtoList = excelMap.get(i);
             List<BasicStudentImportDto> datasource = Collections.singletonList((BasicStudentImportDto) excelMap.get(i));
             List<BasicStudentImportDto> datasource = Collections.singletonList((BasicStudentImportDto) excelMap.get(i));
+            map.put("dataCount",datasource.size());
             // TODO: 2021/7/16 校验datasource集合的正确性
             // TODO: 2021/7/16 校验datasource集合的正确性
             System.out.println("datasource:\n" + datasource);
             System.out.println("datasource:\n" + datasource);
 
 
@@ -163,7 +162,7 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
             }
             }
 
 
             List<BasicStudent> basicStudentList = this.editEntityHelp(addBasicStudentParamsList,sysUser);
             List<BasicStudent> basicStudentList = this.editEntityHelp(addBasicStudentParamsList,sysUser);
-            this.updateBatchById(basicStudentList);
+            this.saveOrUpdateBatch(basicStudentList);
         }
         }
 
 
         return map;
         return map;

+ 72 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCourseDataImportService.java

@@ -0,0 +1,72 @@
+package com.qmth.distributed.print.business.templete.execute;
+
+import cn.hutool.core.date.DateUtil;
+import com.qmth.boot.api.exception.ApiException;
+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.TBTask;
+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 com.qmth.teachcloud.common.util.ResultUtil;
+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.Date;
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * @Description: 异步-课程基础信息导入
+ * @Author: CaoZixuan
+ * @Date: 2021-08-06
+ */
+@Service
+public class AsyncCourseDataImportService extends AsyncImportTaskTemplete {
+    private final static Logger log = LoggerFactory.getLogger(AsyncCourseDataImportService.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.executeImportBasicCourseLogic(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("请求出错", 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);
+    }
+}

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

@@ -35,7 +35,7 @@ public class AsyncStudentDataImportService extends AsyncImportTaskTemplete {
 
 
     public static final String OBJ_TITLE = "学生基础数据";
     public static final String OBJ_TITLE = "学生基础数据";
     @Override
     @Override
-    public Result importTask(Map<String, Object> map) throws IOException, Exception {
+    public Result importTask(Map<String, Object> map) throws Exception {
         TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
         TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
         InputStream inputStream = super.getUploadFileInputStream(tbTask);
         InputStream inputStream = super.getUploadFileInputStream(tbTask);
         map.put("inputStream",inputStream);
         map.put("inputStream",inputStream);

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

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

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

@@ -12,6 +12,7 @@ import com.google.common.collect.Lists;
 import com.itextpdf.text.DocumentException;
 import com.itextpdf.text.DocumentException;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.bean.dto.*;
 import com.qmth.distributed.print.business.bean.dto.*;
+import com.qmth.teachcloud.common.bean.dto.excel.BasicCourseImportDto;
 import com.qmth.distributed.print.business.bean.dto.excel.BasicStudentImportDto;
 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.bean.params.SerialNumberParams;
 import com.qmth.distributed.print.business.cache.CreatePdfCacheUtil;
 import com.qmth.distributed.print.business.cache.CreatePdfCacheUtil;
@@ -1197,7 +1198,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 
 
                     // 检验excel中
                     // 检验excel中
                     if (checkMap.containsKey(studentCode)){
                     if (checkMap.containsKey(studentCode)){
-                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【课程编号】:" + studentCode);
+                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【学生编号】:" + studentCode);
                     }else {
                     }else {
                         checkMap.put(studentCode,studentName);
                         checkMap.put(studentCode,studentName);
                     }
                     }
@@ -1219,6 +1220,48 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         return basicStudentService.executeBasicStudentImportLogic(finalList,map);
         return basicStudentService.executeBasicStudentImportLogic(finalList,map);
     }
     }
 
 
+    @Transactional
+    @Override
+    public Map<String, Object> executeImportBasicCourseLogic(Map<String, Object> map) throws Exception {
+        MultipartFile file = (MultipartFile) map.get(SystemConstant.FILE);
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(file.getInputStream(), Lists.newArrayList(BasicCourseImportDto.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> basicCourseImportDtoList = excelMap.get(i);
+                for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
+                    BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
+                    String courseName = basicCourseImportDto.getCourseName();
+                    String courseCode = basicCourseImportDto.getCourseCode();
+                    String teachingRoomName = basicCourseImportDto.getTeachingRoomName();
+                    String clazz = basicCourseImportDto.getClazz();
+
+                    // 检验excel中
+                    if (checkMap.containsKey(courseCode)){
+                        throw ExceptionResultEnum.ERROR.exception("导入的excel中包含在重复的【课程编号】:" + courseCode);
+                    }else {
+                        checkMap.put(courseCode,courseName);
+                    }
+
+                    excelErrorTemp.addAll(ExcelUtil.checkExcelField(basicCourseImportDto, y, i));
+                    if (Objects.isNull(courseCode) || courseCode.length() > 30 || !courseCode.matches(SystemConstant.REGULAR_EXPRESSION_OF_CODE)){
+                        excelErrorTemp.add(new ExcelError(y + 1,"excel第" + (i + 1) + "个sheet第" + (y + 1) + "行[课程编号]不符合输入规范"));
+                    }
+                    if (Objects.isNull(courseName) || courseName.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 basicCourseService.executeBasicCourseImportLogic(finalList,map);
+    }
+
+
     public String createTempNumber(SerialNumberParams serialNumberParams){
     public String createTempNumber(SerialNumberParams serialNumberParams){
         return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
         return convertUtil.getIncre(serialNumberParams.getPrefix(), serialNumberParams.getModel(), serialNumberParams.getDigit());
     }
     }

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

@@ -2,26 +2,29 @@ package com.qmth.distributed.print.api;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
+import com.qmth.distributed.print.business.templete.execute.AsyncCourseDataImportService;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.entity.TBTask;
+import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
-import org.hibernate.validator.constraints.pl.REGON;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -40,6 +43,8 @@ public class BasicCourseController {
     private PrintCommonService printCommonService;
     private PrintCommonService printCommonService;
     @Resource
     @Resource
     private BasicCourseService basicCourseService;
     private BasicCourseService basicCourseService;
+    @Resource
+    private AsyncCourseDataImportService asyncCourseDataImportService;
 
 
     /**
     /**
      * 查询
      * 查询
@@ -122,7 +127,8 @@ public class BasicCourseController {
         if (bindingResult.hasErrors()) {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
         }
-        return ResultUtil.ok(basicCourseService.saveBasicCourse(basicCourseParams));
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(basicCourseService.saveBasicCourse(basicCourseParams,sysUser));
     }
     }
 
 
     @ApiOperation(value = "课程管理-批量删除(逻辑)")
     @ApiOperation(value = "课程管理-批量删除(逻辑)")
@@ -132,6 +138,17 @@ public class BasicCourseController {
         return ResultUtil.ok(basicCourseService.removeBasicCourseBatch(idList));
         return ResultUtil.ok(basicCourseService.removeBasicCourseBatch(idList));
     }
     }
 
 
+    @ApiOperation(value = "课程基本信息管理-批量导入(异步)")
+    @RequestMapping(value = "/data_import", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
+    public Result basicCourseImportAysnc(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.COURSE_IMPORT);
+        map.put(SystemConstant.SYS_USER,sysUser);
 
 
+        asyncCourseDataImportService.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 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicStudentController.java

@@ -77,7 +77,7 @@ public class BasicStudentController {
     @ApiOperation(value = "学生基本信息管理-批量导入(异步)")
     @ApiOperation(value = "学生基本信息管理-批量导入(异步)")
     @RequestMapping(value = "/data_import", method = RequestMethod.POST)
     @RequestMapping(value = "/data_import", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
-    public Result examinationImportAysnc(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
+    public Result basicStudentImportAysnc(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.STUDENT_IMPORT);
         Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.STUDENT_IMPORT);
         map.put(SystemConstant.SYS_USER,sysUser);
         map.put(SystemConstant.SYS_USER,sysUser);

+ 60 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/excel/BasicCourseImportDto.java

@@ -0,0 +1,60 @@
+package com.qmth.teachcloud.common.bean.dto.excel;
+
+import com.qmth.teachcloud.common.annotation.ExcelNote;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Description: 基础课程数据导入类
+ * @Author: CaoZixuan
+ * @Date: 2021-08-06
+ */
+public class BasicCourseImportDto {
+    @ExcelNote(value = "课程名称")
+    @NotNull
+    private String courseName;
+
+    @ExcelNote(value = "课程编码")
+    @NotNull
+    private String courseCode;
+
+    @ExcelNote(value = "所属教研室")
+    @NotNull
+    private String teachingRoomName;
+
+    @ExcelNote(value = "授课班级")
+    @NotNull
+    private String clazz;
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getCourseCode() {
+        return courseCode;
+    }
+
+    public void setCourseCode(String courseCode) {
+        this.courseCode = courseCode;
+    }
+
+    public String getTeachingRoomName() {
+        return teachingRoomName;
+    }
+
+    public void setTeachingRoomName(String teachingRoomName) {
+        this.teachingRoomName = teachingRoomName;
+    }
+
+    public String getClazz() {
+        return clazz;
+    }
+
+    public void setClazz(String clazz) {
+        this.clazz = clazz;
+    }
+}

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

@@ -6,8 +6,11 @@ import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
 import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.BasicCourse;
+import com.qmth.teachcloud.common.entity.SysUser;
+import org.springframework.util.LinkedMultiValueMap;
 
 
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -66,7 +69,7 @@ public interface BasicCourseService extends IService<BasicCourse> {
      * @param basicCourseParams 基础课程信息参数
      * @param basicCourseParams 基础课程信息参数
      * @return 新增或编辑的课程id
      * @return 新增或编辑的课程id
      */
      */
-    Long saveBasicCourse(BasicCourseParams basicCourseParams);
+    Long saveBasicCourse(BasicCourseParams basicCourseParams, SysUser sysUser);
 
 
     /**
     /**
      * 批量删除课程基本信息(逻辑)
      * 批量删除课程基本信息(逻辑)
@@ -74,4 +77,13 @@ public interface BasicCourseService extends IService<BasicCourse> {
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     Boolean removeBasicCourseBatch(List<Long> idList);
     Boolean removeBasicCourseBatch(List<Long> idList);
+
+    /**
+     * 执行批量导入课程逻辑
+     *
+     * @param finalList 基础课程数据集合
+     * @param map       参数
+     * @return 结果
+     */
+    Map<String, Object> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map);
 }
 }

+ 117 - 63
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
 import com.qmth.teachcloud.common.bean.dto.CourseInfoDto;
+import com.qmth.teachcloud.common.bean.dto.excel.BasicCourseImportDto;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
 import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
@@ -13,7 +14,6 @@ import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.OrgCenterTypeEnum;
 import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 import com.qmth.teachcloud.common.enums.OrgTypeEnum;
 import com.qmth.teachcloud.common.mapper.BasicCourseMapper;
 import com.qmth.teachcloud.common.mapper.BasicCourseMapper;
 import com.qmth.teachcloud.common.service.BasicCourseService;
 import com.qmth.teachcloud.common.service.BasicCourseService;
@@ -21,15 +21,12 @@ import com.qmth.teachcloud.common.service.BasicUserCourseService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -126,63 +123,12 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
 
 
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     @Override
     @Override
-    public Long saveBasicCourse(BasicCourseParams basicCourseParams) {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Long schoolId = sysUser.getSchoolId();
-        Long id = basicCourseParams.getId();
-        String courseName = basicCourseParams.getCourseName();
-        // 校验课程编号
-        String courseCode = basicCourseParams.getCourseCode();
-        BasicCourse checkCode = this.getOne(new QueryWrapper<BasicCourse>().lambda()
-                .eq(BasicCourse::getCode,courseCode)
-                .eq(BasicCourse::getSchoolId,schoolId)
-                .eq(BasicCourse::getEnable,true));
-        if (Objects.nonNull(checkCode)){
-            if (!checkCode.getId().equals(id)){
-                throw ExceptionResultEnum.ERROR.exception("课程编号【" + courseCode +"】重复");
-            }
-        }
-        // 校验教研室id
-        Long teachingRoomId = basicCourseParams.getTeachingRoomId();
-        if (Objects.isNull(sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda()
-                .eq(SysOrg::getId,teachingRoomId)
-                .eq(SysOrg::getEnable,true)
-                .eq(SysOrg::getType, OrgTypeEnum.TEACHING_ROOM)))){
-            throw ExceptionResultEnum.ERROR.exception("所选教研室不存在");
-        }
-        // 校验班级
-        List<String> clazzList = basicCourseParams.getClazzList();
-        if (clazzList.size() != clazzList.stream().distinct().count()){
-            throw ExceptionResultEnum.ERROR.exception("输入的班级重复");
-        }
-
-        //基础数据组装
-        BasicCourse basicCourse = new BasicCourse();
-        basicCourse.setName(courseName);
-        basicCourse.setCode(courseCode);
-        basicCourse.setTeachingRoomId(teachingRoomId);
-        basicCourse.setSchoolId(schoolId);
-
-        if (!SystemConstant.longNotNull(id)){
-            // 没有id -》新增
-            id = SystemConstant.getDbUuid();
-            basicCourse.setId(id);
-            basicCourse.setCreateId(sysUser.getId());
-            basicCourse.setEnable(true);
-        }else {
-            // 有id -》 更新
-            basicCourse.setId(id);
-            basicCourse.setUpdateId(sysUser.getId());
-            basicCourse.setOrgId(sysUser.getOrgId());
-        }
-
-        // 根据课程id和授课班级集合更新'basic_user_course'表
-        basicUserCourseService.updateByCourseIdAndClazzList(id,clazzList,sysUser);
-
-        // 新增或更新基础课程表
-        this.saveOrUpdate(basicCourse);
-
-        return id;
+    public Long saveBasicCourse(BasicCourseParams basicCourseParams,SysUser sysUser) {
+        List<BasicCourseParams> basicCourseParamsList = new ArrayList<>();
+        basicCourseParamsList.add(basicCourseParams);
+        BasicCourse editBasicCourse = this.editEntityHelp(basicCourseParamsList,sysUser).get(0);
+        this.saveOrUpdate(editBasicCourse);
+        return editBasicCourse.getId();
     }
     }
 
 
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
@@ -202,4 +148,112 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
 
 
         return this.update(updateWrapper);
         return this.update(updateWrapper);
     }
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Map<String, Object> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
+        // 班级分割标志
+        final String clazzSplit = ",";
+
+        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
+        Long schoolId = sysUser.getSchoolId();
+        List<BasicCourseParams> addBasicCourseParamsList = new ArrayList<>();
+
+        for (int i = 0; i < finalList.size(); i++) {
+            LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
+            List<Object> basicCourseImportDtoList = excelMap.get(i);
+            List<BasicCourseImportDto> datasource = Collections.singletonList((BasicCourseImportDto) excelMap.get(i));
+            // TODO: 2021/7/16 校验datasource集合的正确性
+            map.put("dataCount", datasource.size());
+            System.out.println("datasource:\n" + datasource);
+
+            for (int y = 0; y < Objects.requireNonNull(basicCourseImportDtoList).size(); y++) {
+                BasicCourseImportDto basicCourseImportDto = (BasicCourseImportDto) basicCourseImportDtoList.get(y);
+                String courseName = basicCourseImportDto.getCourseName();
+                String courseCode = basicCourseImportDto.getCourseCode();
+                String teachingRoomName = basicCourseImportDto.getTeachingRoomName();
+                String clazz = basicCourseImportDto.getClazz();
+
+                SysOrg sysOrg = sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda().eq(SysOrg::getSchoolId, schoolId).eq(SysOrg::getEnable, true).eq(SysOrg::getType, OrgTypeEnum.TEACHING_ROOM));
+                if (Objects.isNull(sysOrg)) {
+                    throw ExceptionResultEnum.ERROR.exception("输入的教研室【" + teachingRoomName + "】不存在");
+                }
+                Long teachingRoomId = sysOrg.getId();
+                List<String> clazzList = Arrays.asList(clazz.split(clazzSplit));
+                BasicCourseParams basicCourseParams = new BasicCourseParams();
+                basicCourseParams.setCourseCode(courseCode);
+                basicCourseParams.setCourseName(courseName);
+                basicCourseParams.setTeachingRoomId(teachingRoomId);
+                basicCourseParams.setClazzList(clazzList);
+                BasicCourse old = this.getOne(new QueryWrapper<BasicCourse>().lambda().eq(BasicCourse::getSchoolId,schoolId).eq(BasicCourse::getEnable,true).eq(BasicCourse::getCode,courseCode));
+                if (Objects.nonNull(old)){
+                    basicCourseParams.setId(old.getId());
+                }
+
+                addBasicCourseParamsList.add(basicCourseParams);
+            }
+            List<BasicCourse> editBasicCourse = this.editEntityHelp(addBasicCourseParamsList,sysUser);
+            this.saveOrUpdateBatch(editBasicCourse);
+        }
+        return map;
+    }
+
+    private List<BasicCourse> editEntityHelp(List<BasicCourseParams> basicCourseParamsList,SysUser sysUser){
+        Long schoolId = sysUser.getSchoolId();
+        List<BasicCourse> basicCourseList = new ArrayList<>();
+        for (BasicCourseParams basicCourseParams : basicCourseParamsList) {
+            Long id = basicCourseParams.getId();
+            String courseName = basicCourseParams.getCourseName();
+            // 校验课程编号
+            String courseCode = basicCourseParams.getCourseCode();
+            BasicCourse checkCode = this.getOne(new QueryWrapper<BasicCourse>().lambda()
+                    .eq(BasicCourse::getCode,courseCode)
+                    .eq(BasicCourse::getSchoolId,schoolId)
+                    .eq(BasicCourse::getEnable,true));
+            if (Objects.nonNull(checkCode)){
+                if (!checkCode.getId().equals(id)){
+                    throw ExceptionResultEnum.ERROR.exception("课程编号【" + courseCode +"】重复");
+                }
+            }
+            // 校验教研室id
+            Long teachingRoomId = basicCourseParams.getTeachingRoomId();
+            if (Objects.isNull(sysOrgService.getOne(new QueryWrapper<SysOrg>().lambda()
+                    .eq(SysOrg::getId,teachingRoomId)
+                    .eq(SysOrg::getEnable,true)
+                    .eq(SysOrg::getType, OrgTypeEnum.TEACHING_ROOM)))){
+                throw ExceptionResultEnum.ERROR.exception("所选教研室不存在");
+            }
+            // 校验班级
+            List<String> clazzList = basicCourseParams.getClazzList();
+            if (clazzList.size() != clazzList.stream().distinct().count()){
+                throw ExceptionResultEnum.ERROR.exception("输入的班级重复");
+            }
+
+            //基础数据组装
+            BasicCourse basicCourse = new BasicCourse();
+            basicCourse.setName(courseName);
+            basicCourse.setCode(courseCode);
+            basicCourse.setTeachingRoomId(teachingRoomId);
+            basicCourse.setSchoolId(schoolId);
+
+            if (!SystemConstant.longNotNull(id)){
+                // 没有id -》新增
+                id = SystemConstant.getDbUuid();
+                basicCourse.setId(id);
+                basicCourse.setCreateId(sysUser.getId());
+                basicCourse.setEnable(true);
+            }else {
+                // 有id -》 更新
+                basicCourse.setId(id);
+                basicCourse.setUpdateId(sysUser.getId());
+                basicCourse.setOrgId(sysUser.getOrgId());
+            }
+
+            // 根据课程id和授课班级集合更新'basic_user_course'表
+            basicUserCourseService.updateByCourseIdAndClazzList(id,clazzList,sysUser);
+
+            basicCourseList.add(basicCourse);
+        }
+        return basicCourseList;
+    }
 }
 }