Browse Source

组织机构和课程管理导入改成同步

caozixuan 2 năm trước cách đây
mục cha
commit
2a7beca3eb

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

@@ -1,72 +0,0 @@
-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(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);
-    }
-}

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

@@ -1,72 +0,0 @@
-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: 2022-08-16
- */
-@Service
-public class AsyncSysOrgImportService extends AsyncImportTaskTemplete {
-    private final static Logger log = LoggerFactory.getLogger(AsyncSysOrgImportService.class);
-
-    public static final String ORG_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, ORG_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.executeImportSysOrgLogic(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);
-    }
-}

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

@@ -72,24 +72,6 @@ public interface TaskLogicService {
      */
     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;
-
-    /**
-     * 处理导入机构数据
-     *
-     * @param map 数据源
-     * @return 结果
-     * @throws Exception 异常
-     */
-    Map<String, Object> executeImportSysOrgLogic(Map<String, Object> map) throws Exception;
-
     /**
      * 处理导入用户数据
      *

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

@@ -1424,102 +1424,6 @@ public class TaskLogicServiceImpl implements TaskLogicService {
         return basicStudentService.executeBasicStudentImportLogic(finalList, map);
     }
 
-    @Transactional
-    @Override
-    public Map<String, Object> executeImportBasicCourseLogic(Map<String, Object> map) throws Exception {
-
-        InputStream inputStream = (InputStream) map.get("inputStream");
-        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(BasicCourseImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
-            List<ExcelError> excelErrorTemp = new ArrayList<>();
-            Map<String, BasicCourseImportDto> courseDtoMap = new HashMap<>();
-            for (int i = 0; i < finalExcelList.size(); i++) {
-                LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
-                List<Object> basicCourseImportDtoList = excelMap.get(i);
-                assert basicCourseImportDtoList != null;
-                if (basicCourseImportDtoList.get(0) instanceof DescribeImportDto) {
-                    continue;
-                }
-                map.put("dataCount", basicCourseImportDtoList.size());
-                List<BasicCourseImportDto> duplicateData = new ArrayList<>();
-                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();
-
-                    if (courseDtoMap.containsKey(courseCode)) {
-                        BasicCourseImportDto primaryCell = courseDtoMap.get(courseCode);
-                        String primaryName = primaryCell.getCourseName();
-                        String primaryTeachingRoomName = primaryCell.getTeachingRoomName();
-                        if (!Objects.equals(primaryName, courseName)) {
-                            throw ExceptionResultEnum.ERROR.exception("【课程编号】 : " + courseCode + ",存在不同的【课程名称】");
-                        }
-                        if (!Objects.equals(primaryTeachingRoomName, teachingRoomName)) {
-                            throw ExceptionResultEnum.ERROR.exception("【课程编号】 : " + courseCode + ",存在不同的【所属教研室】");
-                        }
-                        String primaryClazz = primaryCell.getClazz();
-                        if (SystemConstant.strNotNull(clazz)) {
-                            primaryClazz = primaryClazz + SystemConstant.COMMA + clazz;
-                            primaryCell.setClazz(primaryClazz);
-                        }
-                        duplicateData.add(basicCourseImportDto);
-                    } else {
-                        courseDtoMap.put(courseCode, basicCourseImportDto);
-                    }
-
-                    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) + "行[课程名称]不符合输入规范"));
-                    }
-                }
-                // 删除重复的(需要累加的)excel数据
-                basicCourseImportDtoList.removeAll(duplicateData);
-            }
-            if (excelErrorTemp.size() > 0) {
-                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(excelErrorTemp));
-            }
-            return finalExcelList;
-        });
-        return basicCourseService.executeBasicCourseImportLogic(finalList, map);
-    }
-
-    @Transactional
-    @Override
-    public Map<String, Object> executeImportSysOrgLogic(Map<String, Object> map) throws IOException, NoSuchFieldException, NoSuchAlgorithmException {
-        InputStream inputStream = (InputStream) map.get("inputStream");
-        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(SysOrgImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> finalExcelList);
-        List<String> orgInfoList = new ArrayList<>();
-        for (int i = 0; i < finalList.size(); i++) {
-            LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
-            List<Object> sysOrgImportDtoList = excelMap.get(i);
-            assert sysOrgImportDtoList != null;
-            if (sysOrgImportDtoList.get(0) instanceof DescribeImportDto) {
-                continue;
-            }
-            map.put("dataCount", sysOrgImportDtoList.size());
-            //  处理机构
-            if (sysOrgImportDtoList.get(0) instanceof SysOrgImportDto) {
-                List<SysOrgImportDto> datasource = sysOrgImportDtoList.stream().map(e -> {
-                    SysOrgImportDto sysOrgImportDto = new SysOrgImportDto();
-                    BeanUtils.copyProperties(e, sysOrgImportDto);
-                    return sysOrgImportDto;
-                }).collect(Collectors.toList());
-                if (datasource.size() > 0) {
-                    datasource.forEach(e -> orgInfoList.add(e.getName()));
-                }
-            }
-        }
-        if (orgInfoList.size() > 0) {
-            SysUser requestUser = (SysUser) map.get(SystemConstant.SYS_USER);
-            sysOrgService.createOrGetOrgByOrgInfo(orgInfoList, requestUser);
-        }
-        return map;
-    }
-
     @Transactional
     @Override
     public Map<String, Object> executeImportSysUserLogic(Map<String, Object> map) throws Exception {

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

@@ -3,15 +3,12 @@ package com.qmth.distributed.print.api;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.PrintCommonService;
-import com.qmth.distributed.print.business.templete.execute.AsyncCourseDataImportService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.bean.params.BasicCourseParams;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 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.TaskTypeEnum;
 import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.enums.log.LevelEnum;
 import com.qmth.teachcloud.common.enums.log.OperationTypeEnum;
@@ -32,7 +29,6 @@ import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -55,8 +51,7 @@ public class BasicCourseController {
     private PrintCommonService printCommonService;
     @Resource
     private BasicCourseService basicCourseService;
-    @Resource
-    private AsyncCourseDataImportService asyncCourseDataImportService;
+
 
     @ApiOperation(value = "模糊查询")
     @RequestMapping(value = "/query", method = RequestMethod.POST)
@@ -131,18 +126,13 @@ public class BasicCourseController {
         return ResultUtil.ok(basicCourseService.removeBasicCourseBatchByQuery(SystemConstant.convertIdToLong(belongOrgId), courseName, SystemConstant.convertIdToLong(startCreateTime), SystemConstant.convertIdToLong(endCreateTime)));
     }
 
-    @ApiOperation(value = "课程基本信息管理-批量导入(异步)")
+    @ApiOperation(value = "课程基本信息管理-批量导入")
     @RequestMapping(value = "/data_import", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.IMPORT)
     public Result basicCourseImportAsync(@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("创建任务失败");
+        basicCourseService.executeImportBasicCourseLogic(file);
+        return ResultUtil.ok();
     }
 
     @ApiOperation(value = "课程管理-导出")

+ 3 - 18
distributed-print/src/main/java/com/qmth/distributed/print/api/SysOrgController.java

@@ -3,19 +3,14 @@ package com.qmth.distributed.print.api;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.distributed.print.business.bean.result.EditResult;
 import com.qmth.distributed.print.business.service.PrintCommonService;
-import com.qmth.distributed.print.business.templete.execute.AsyncSysOrgImportService;
 import com.qmth.teachcloud.common.annotation.OperationLogDetail;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysOrg;
-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.enums.log.CustomizedOperationTypeEnum;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
 import com.qmth.teachcloud.common.service.SysOrgService;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
@@ -24,8 +19,6 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
-import java.util.Map;
-import java.util.Objects;
 
 /**
  * <p>
@@ -46,9 +39,6 @@ public class SysOrgController {
     @Resource
     private PrintCommonService printCommonService;
 
-    @Resource
-    private AsyncSysOrgImportService asyncSysOrgImportService;
-
     /**
      * 查询机构树
      *
@@ -116,18 +106,13 @@ public class SysOrgController {
         return ResultUtil.ok(sysOrgService.findDeepByOrgIdAndType(orgType));
     }
 
-    @ApiOperation(value = "机构管理-批量导入(异步)")
+    @ApiOperation(value = "机构管理-批量导入")
     @RequestMapping(value = "/import", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
     @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.IMPORT)
     public Result sysOrgImportAsync(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.ORG_IMPORT);
-        map.put(SystemConstant.SYS_USER, sysUser);
-
-        asyncSysOrgImportService.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("创建任务失败");
+        sysOrgService.executeImportSysOrgLogic(file);
+        return ResultUtil.ok();
     }
 
     @ApiOperation(value = "机构管理-导出")

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

@@ -10,14 +10,10 @@ import java.util.Objects;
  * @Date: 2021/3/29
  */
 public enum TaskTypeEnum {
-    ORG_IMPORT("机构导入"),
-
     USER_IMPORT("用户导入"),
 
     STUDENT_IMPORT("学生导入"),
 
-    COURSE_IMPORT("课程导入"),
-
     CLAZZ_IMPORT("班级导入"),
 
     QUESTION_MISSION_BATCH_CREATE("批量新建命题任务"),

+ 11 - 5
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/BasicCourseService.java

@@ -7,10 +7,11 @@ import com.qmth.teachcloud.common.bean.result.BasicCourseResult;
 import com.qmth.teachcloud.common.entity.BasicCourse;
 import com.qmth.teachcloud.common.entity.SysUser;
 import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
-import java.util.Map;
 
 /**
  * <p>
@@ -36,7 +37,7 @@ public interface BasicCourseService extends IService<BasicCourse> {
 
     BasicCourse findByCourseCode(String courseCode);
 
-    BasicCourse findByCourseCode(String courseCode,Long schoolId);
+    BasicCourse findByCourseCode(String courseCode, Long schoolId);
 
     /**
      * 创建课程
@@ -88,14 +89,19 @@ public interface BasicCourseService extends IService<BasicCourse> {
      */
     Boolean removeBasicCourseBatchByQuery(Long belongOrgId, String courseName, Long startCreateTime, Long endCreateTime);
 
+    /**
+     * 处理导入课程数据
+     *
+     * @param file 文件
+     */
+    void executeImportBasicCourseLogic(MultipartFile file) throws IOException, NoSuchFieldException;
+
     /**
      * 执行批量导入课程逻辑
      *
      * @param finalList 基础课程数据集合
-     * @param map       参数
-     * @return 结果
      */
-    Map<String, Object> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map);
+    void executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList);
 
     /**
      * @param schoolId

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysOrgService.java

@@ -5,6 +5,7 @@ import com.qmth.teachcloud.common.bean.dto.OrgDto;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -159,4 +160,11 @@ public interface SysOrgService extends IService<SysOrg> {
      * @throws Exception e
      */
     void exportOrgData(HttpServletResponse response, boolean withoutPrintingRoom) throws Exception;
+
+    /**
+     * 处理导入机构数据
+     * @param file 文件
+     * @throws Exception e
+     */
+    void executeImportSysOrgLogic(MultipartFile file) throws Exception;
 }

+ 68 - 3
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/BasicCourseServiceImpl.java

@@ -1,9 +1,11 @@
 package com.qmth.teachcloud.common.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.bean.dto.BasicCourseExportDto;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
@@ -19,13 +21,17 @@ import com.qmth.teachcloud.common.mapper.BasicCourseMapper;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.excel.ExcelError;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -211,10 +217,70 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
         return idList.size() > 0 ? this.removeBasicCourseBatch(idList) : true;
     }
 
+    @Override
+    public void executeImportBasicCourseLogic(MultipartFile file) throws IOException, NoSuchFieldException {
+        InputStream inputStream = file.getInputStream();
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(BasicCourseImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> {
+            List<ExcelError> excelErrorTemp = new ArrayList<>();
+            Map<String, BasicCourseImportDto> courseDtoMap = new HashMap<>();
+            for (int i = 0; i < finalExcelList.size(); i++) {
+                LinkedMultiValueMap<Integer, Object> excelMap = finalExcelList.get(i);
+                List<Object> basicCourseImportDtoList = excelMap.get(i);
+                assert basicCourseImportDtoList != null;
+                if (basicCourseImportDtoList.get(0) instanceof DescribeImportDto) {
+                    continue;
+                }
+                List<BasicCourseImportDto> duplicateData = new ArrayList<>();
+                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();
+
+                    if (courseDtoMap.containsKey(courseCode)) {
+                        BasicCourseImportDto primaryCell = courseDtoMap.get(courseCode);
+                        String primaryName = primaryCell.getCourseName();
+                        String primaryTeachingRoomName = primaryCell.getTeachingRoomName();
+                        if (!Objects.equals(primaryName, courseName)) {
+                            throw ExceptionResultEnum.ERROR.exception("【课程编号】 : " + courseCode + ",存在不同的【课程名称】");
+                        }
+                        if (!Objects.equals(primaryTeachingRoomName, teachingRoomName)) {
+                            throw ExceptionResultEnum.ERROR.exception("【课程编号】 : " + courseCode + ",存在不同的【所属教研室】");
+                        }
+                        String primaryClazz = primaryCell.getClazz();
+                        if (SystemConstant.strNotNull(clazz)) {
+                            primaryClazz = primaryClazz + SystemConstant.COMMA + clazz;
+                            primaryCell.setClazz(primaryClazz);
+                        }
+                        duplicateData.add(basicCourseImportDto);
+                    } else {
+                        courseDtoMap.put(courseCode, basicCourseImportDto);
+                    }
+
+                    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) + "行[课程名称]不符合输入规范"));
+                    }
+                }
+                // 删除重复的(需要累加的)excel数据
+                basicCourseImportDtoList.removeAll(duplicateData);
+            }
+            if (excelErrorTemp.size() > 0) {
+                throw ExceptionResultEnum.ERROR.exception(JSONObject.toJSONString(excelErrorTemp));
+            }
+            return finalExcelList;
+        });
+        this.executeBasicCourseImportLogic(finalList);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public Map<String, Object> executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
-        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
+    public void executeBasicCourseImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Long schoolId = sysUser.getSchoolId();
         List<BasicCourseParams> addBasicCourseParamsList = new ArrayList<>();
         for (int i = 0; i < finalList.size(); i++) {
@@ -271,7 +337,6 @@ public class BasicCourseServiceImpl extends ServiceImpl<BasicCourseMapper, Basic
             List<BasicCourse> editBasicCourse = this.editEntityHelp(addBasicCourseParamsList, sysUser);
             this.saveOrUpdateBatch(editBasicCourse);
         }
-        return map;
     }
 
     @Override

+ 36 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysOrgServiceImpl.java

@@ -2,8 +2,10 @@ package com.qmth.teachcloud.common.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.teachcloud.common.bean.dto.OrgDto;
+import com.qmth.teachcloud.common.bean.dto.excel.DescribeImportDto;
 import com.qmth.teachcloud.common.bean.dto.excel.SysOrgImportDto;
 import com.qmth.teachcloud.common.bean.params.UserSaveParams;
 import com.qmth.teachcloud.common.bean.result.SysUserResult;
@@ -25,12 +27,16 @@ import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -474,6 +480,36 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         ExcelUtil.excelExport("机构数据", SysOrgImportDto.class, sysOrgImportDtoList, response);
     }
 
+    @Override
+    public void executeImportSysOrgLogic(MultipartFile file) throws Exception {
+        InputStream inputStream = file.getInputStream();
+        List<LinkedMultiValueMap<Integer, Object>> finalList = ExcelUtil.excelReader(inputStream, Lists.newArrayList(SysOrgImportDto.class, DescribeImportDto.class), (finalExcelList, finalColumnNameList, finalExcelErrorList) -> finalExcelList);
+        List<String> orgInfoList = new ArrayList<>();
+        for (int i = 0; i < finalList.size(); i++) {
+            LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
+            List<Object> sysOrgImportDtoList = excelMap.get(i);
+            assert sysOrgImportDtoList != null;
+            if (sysOrgImportDtoList.get(0) instanceof DescribeImportDto) {
+                continue;
+            }
+            //  处理机构
+            if (sysOrgImportDtoList.get(0) instanceof SysOrgImportDto) {
+                List<SysOrgImportDto> datasource = sysOrgImportDtoList.stream().map(e -> {
+                    SysOrgImportDto sysOrgImportDto = new SysOrgImportDto();
+                    BeanUtils.copyProperties(e, sysOrgImportDto);
+                    return sysOrgImportDto;
+                }).collect(Collectors.toList());
+                if (datasource.size() > 0) {
+                    datasource.forEach(e -> orgInfoList.add(e.getName()));
+                }
+            }
+        }
+        if (orgInfoList.size() > 0) {
+            SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+            this.createOrGetOrgByOrgInfo(orgInfoList, requestUser);
+        }
+    }
+
     /**
      * 根据子机构id深度优先搜索其父机构们
      *